17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file.
47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/v8.h"
67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/cctest.h"
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/compiler/codegen-tester.h"
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/compiler/value-helper.h"
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal;
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler;
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(CompareWrapper) {
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Who tests the testers?
167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // If CompareWrapper is broken, then test expectations will be broken.
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<int32_t> m;
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wWord32Equal(IrOpcode::kWord32Equal);
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wInt32LessThan(IrOpcode::kInt32LessThan);
207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wInt32LessThanOrEqual(IrOpcode::kInt32LessThanOrEqual);
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wUint32LessThan(IrOpcode::kUint32LessThan);
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wUint32LessThanOrEqual(IrOpcode::kUint32LessThanOrEqual);
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(pl) {
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      FOR_INT32_INPUTS(pr) {
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        int32_t a = *pl;
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        int32_t b = *pr;
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a == b, wWord32Equal.Int32Compare(a, b));
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a < b, wInt32LessThan.Int32Compare(a, b));
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a <= b, wInt32LessThanOrEqual.Int32Compare(a, b));
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      }
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    }
347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_UINT32_INPUTS(pl) {
387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      FOR_UINT32_INPUTS(pr) {
397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        uint32_t a = *pl;
407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        uint32_t b = *pr;
417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a == b, wWord32Equal.Int32Compare(a, b));
427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a < b, wUint32LessThan.Int32Compare(a, b));
437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        CHECK_EQ(a <= b, wUint32LessThanOrEqual.Int32Compare(a, b));
447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      }
457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    }
467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wWord32Equal.Int32Compare(0, 0));
497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wWord32Equal.Int32Compare(257, 257));
507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wWord32Equal.Int32Compare(65539, 65539));
517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wWord32Equal.Int32Compare(-1, -1));
527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wWord32Equal.Int32Compare(0xffffffff, 0xffffffff));
537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wWord32Equal.Int32Compare(0, 1));
557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wWord32Equal.Int32Compare(257, 256));
567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wWord32Equal.Int32Compare(65539, 65537));
577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wWord32Equal.Int32Compare(-1, -2));
587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wWord32Equal.Int32Compare(0xffffffff, 0xfffffffe));
597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(0, 0));
617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(357, 357));
627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(75539, 75539));
637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(-1, -1));
647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(0xffffffff, 0xffffffff));
657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThan.Int32Compare(0, 1));
677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThan.Int32Compare(456, 457));
687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThan.Int32Compare(85537, 85539));
697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThan.Int32Compare(-2, -1));
707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThan.Int32Compare(0xfffffffe, 0xffffffff));
717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(1, 0));
737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(457, 456));
747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(85539, 85537));
757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(-1, -2));
767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThan.Int32Compare(0xffffffff, 0xfffffffe));
777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(0, 0));
797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(357, 357));
807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(75539, 75539));
817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(-1, -1));
827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(0xffffffff, 0xffffffff));
837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(0, 1));
857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(456, 457));
867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(85537, 85539));
877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(-2, -1));
887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wInt32LessThanOrEqual.Int32Compare(0xfffffffe, 0xffffffff));
897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThanOrEqual.Int32Compare(1, 0));
917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThanOrEqual.Int32Compare(457, 456));
927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThanOrEqual.Int32Compare(85539, 85537));
937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThanOrEqual.Int32Compare(-1, -2));
947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wInt32LessThanOrEqual.Int32Compare(0xffffffff, 0xfffffffe));
957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Unsigned comparisons.
977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(0, 0));
987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(357, 357));
997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(75539, 75539));
1007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(-1, -1));
1017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(0xffffffff, 0xffffffff));
1027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(0xffffffff, 0));
1037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(-2999, 0));
1047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(0, 1));
1067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(456, 457));
1077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(85537, 85539));
1087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(-11, -10));
1097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(0xfffffffe, 0xffffffff));
1107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(0, 0xffffffff));
1117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThan.Int32Compare(0, -2996));
1127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(1, 0));
1147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(457, 456));
1157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(85539, 85537));
1167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(-10, -21));
1177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThan.Int32Compare(0xffffffff, 0xfffffffe));
1187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(0, 0));
1207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(357, 357));
1217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(75539, 75539));
1227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(-1, -1));
1237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(0xffffffff, 0xffffffff));
1247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(0, 1));
1267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(456, 457));
1277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(85537, 85539));
1287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(-300, -299));
1297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(-300, -300));
1307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(0xfffffffe, 0xffffffff));
1317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wUint32LessThanOrEqual.Int32Compare(0, -2995));
1327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(1, 0));
1347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(457, 456));
1357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(85539, 85537));
1367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(-130, -170));
1377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(0xffffffff, 0xfffffffe));
1387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wUint32LessThanOrEqual.Int32Compare(-2997, 0));
1397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wFloat64Equal(IrOpcode::kFloat64Equal);
1417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wFloat64LessThan(IrOpcode::kFloat64LessThan);
1427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompareWrapper wFloat64LessThanOrEqual(IrOpcode::kFloat64LessThanOrEqual);
1437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Check NaN handling.
1457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  double nan = v8::base::OS::nan_value();
1467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  double inf = V8_INFINITY;
1477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, 0.0));
1487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, 1.0));
1497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, inf));
1507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, -inf));
1517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, nan));
1527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(0.0, nan));
1547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(1.0, nan));
1557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(inf, nan));
1567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-inf, nan));
1577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(nan, nan));
1587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, 0.0));
1607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, 1.0));
1617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, inf));
1627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, -inf));
1637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, nan));
1647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(0.0, nan));
1667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(1.0, nan));
1677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, nan));
1687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(-inf, nan));
1697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(nan, nan));
1707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, 0.0));
1727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, 1.0));
1737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, inf));
1747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, -inf));
1757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, nan));
1767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(0.0, nan));
1787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(1.0, nan));
1797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(inf, nan));
1807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(-inf, nan));
1817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(nan, nan));
1827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Check inf handling.
1847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(inf, 0.0));
1857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(inf, 1.0));
1867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(inf, inf));
1877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(inf, -inf));
1887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(0.0, inf));
1907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(1.0, inf));
1917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(inf, inf));
1927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-inf, inf));
1937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, 0.0));
1957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, 1.0));
1967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, inf));
1977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, -inf));
1987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
1997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(0.0, inf));
2007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(1.0, inf));
2017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, inf));
2027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(-inf, inf));
2037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(inf, 0.0));
2057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(inf, 1.0));
2067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(inf, inf));
2077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(inf, -inf));
2087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(0.0, inf));
2107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(1.0, inf));
2117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(inf, inf));
2127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, inf));
2137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Check -inf handling.
2157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-inf, 0.0));
2167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-inf, 1.0));
2177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-inf, inf));
2187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(-inf, -inf));
2197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(0.0, -inf));
2217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(1.0, -inf));
2227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(inf, -inf));
2237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(-inf, -inf));
2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(-inf, 0.0));
2267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(-inf, 1.0));
2277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(-inf, inf));
2287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(-inf, -inf));
2297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(0.0, -inf));
2317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(1.0, -inf));
2327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(inf, -inf));
2337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(-inf, -inf));
2347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, 0.0));
2367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, 1.0));
2377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, inf));
2387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, -inf));
2397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(0.0, -inf));
2417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(1.0, -inf));
2427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(inf, -inf));
2437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-inf, -inf));
2447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // Check basic values.
2467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(0, 0));
2477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(257.1, 257.1));
2487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(65539.1, 65539.1));
2497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64Equal.Float64Compare(-1.1, -1.1));
2507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(0, 1));
2527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(257.2, 256.2));
2537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(65539.2, 65537.2));
2547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64Equal.Float64Compare(-1.2, -2.2));
2557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(0, 0));
2577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(357.3, 357.3));
2587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(75539.3, 75539.3));
2597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(-1.3, -1.3));
2607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(0, 1));
2627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(456.4, 457.4));
2637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(85537.4, 85539.4));
2647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThan.Float64Compare(-2.4, -1.4));
2657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(1, 0));
2677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(457.5, 456.5));
2687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(85539.5, 85537.5));
2697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThan.Float64Compare(-1.5, -2.5));
2707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(0, 0));
2727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(357.6, 357.6));
2737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(75539.6, 75539.6));
2747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-1.6, -1.6));
2757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(0, 1));
2777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(456.7, 457.7));
2787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(85537.7, 85539.7));
2797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(true, wFloat64LessThanOrEqual.Float64Compare(-2.7, -1.7));
2807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(1, 0));
2827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(457.8, 456.8));
2837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(85539.8, 85537.8));
2847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(false, wFloat64LessThanOrEqual.Float64Compare(-1.8, -2.8));
2857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
2867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid Int32BinopInputShapeTester::TestAllInputShapes() {
2897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  std::vector<int32_t> inputs = ValueHelper::int32_vector();
2907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  int num_int_inputs = static_cast<int>(inputs.size());
2917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  if (num_int_inputs > 16) num_int_inputs = 16;  // limit to 16 inputs
2927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  for (int i = -2; i < num_int_inputs; i++) {    // for all left shapes
2947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    for (int j = -2; j < num_int_inputs; j++) {  // for all right shapes
2957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (i >= 0 && j >= 0) break;               // No constant/constant combos
2965e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org      RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
2977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      Node* p0 = m.Parameter(0);
2987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      Node* p1 = m.Parameter(1);
2997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      Node* n0;
3007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      Node* n1;
3017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      // left = Parameter | Load | Constant
3037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (i == -2) {
3047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        n0 = p0;
3057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else if (i == -1) {
3065e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org        n0 = m.LoadFromPointer(&input_a, kMachInt32);
3077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else {
3087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        n0 = m.Int32Constant(inputs[i]);
3097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      }
3107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      // right = Parameter | Load | Constant
3127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (j == -2) {
3137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        n1 = p1;
3147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else if (j == -1) {
3155e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org        n1 = m.LoadFromPointer(&input_b, kMachInt32);
3167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else {
3177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        n1 = m.Int32Constant(inputs[j]);
3187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      }
3197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      gen->gen(&m, n0, n1);
3217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (false) printf("Int32BinopInputShapeTester i=%d, j=%d\n", i, j);
3237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (i >= 0) {
3247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        input_a = inputs[i];
3257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        RunRight(&m);
3267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else if (j >= 0) {
3277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        input_b = inputs[j];
3287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        RunLeft(&m);
3297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      } else {
3307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org        Run(&m);
3317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      }
3327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    }
3337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
3347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid Int32BinopInputShapeTester::Run(RawMachineAssemblerTester<int32_t>* m) {
3387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(pl) {
3397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(pr) {
3407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      input_a = *pl;
3417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      input_b = *pr;
3427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      int32_t expect = gen->expected(input_a, input_b);
3437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      if (false) printf("  cmp(a=%d, b=%d) ?== %d\n", input_a, input_b, expect);
3447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      CHECK_EQ(expect, m->Call(input_a, input_b));
3457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    }
3467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
3477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid Int32BinopInputShapeTester::RunLeft(
3517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t>* m) {
3527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_UINT32_INPUTS(i) {
3537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    input_a = *i;
3547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int32_t expect = gen->expected(input_a, input_b);
3557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    if (false) printf("  cmp(a=%d, b=%d) ?== %d\n", input_a, input_b, expect);
3567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(expect, m->Call(input_a, input_b));
3577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
3587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid Int32BinopInputShapeTester::RunRight(
3627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t>* m) {
3637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_UINT32_INPUTS(i) {
3647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    input_b = *i;
3657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int32_t expect = gen->expected(input_a, input_b);
3667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    if (false) printf("  cmp(a=%d, b=%d) ?== %d\n", input_a, input_b, expect);
3677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(expect, m->Call(input_a, input_b));
3687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
3697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
37242ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org#if V8_TURBOFAN_TARGET
37342ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org
3747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(ParametersEqual) {
3755e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org  RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
3767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p1 = m.Parameter(1);
3777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_NE(NULL, p1);
3787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p0 = m.Parameter(0);
3797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_NE(NULL, p0);
3807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(p0, m.Parameter(0));
3817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(p1, m.Parameter(1));
3827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid RunSmiConstant(int32_t v) {
3867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// TODO(dcarney): on x64 Smis are generated with the SmiConstantRegister
3877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#if !V8_TARGET_ARCH_X64
3887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  if (Smi::IsValid(v)) {
3897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<Object*> m;
3907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    m.Return(m.NumberConstant(v));
3917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(Smi::FromInt(v), m.Call());
3927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
3937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif
3947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
3957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
3977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid RunNumberConstant(double v) {
3987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<Object*> m;
3997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#if V8_TARGET_ARCH_X64
4007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  // TODO(dcarney): on x64 Smis are generated with the SmiConstantRegister
4017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Handle<Object> number = m.isolate()->factory()->NewNumber(v);
4027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  if (number->IsSmi()) return;
4037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif
4047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.NumberConstant(v));
4057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Object* result = m.Call();
4067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.CheckNumber(v, result);
4077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunEmpty) {
4117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<int32_t> m;
4127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.Int32Constant(0));
4137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(0, m.Call());
4147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunInt32Constants) {
4187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(i) {
4197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t> m;
4207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    m.Return(m.Int32Constant(*i));
4217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(*i, m.Call());
4227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunSmiConstants) {
4277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  for (int32_t i = 1; i < Smi::kMaxValue && i != 0; i = i << 1) {
4287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(i);
4297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(3 * i);
4307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(5 * i);
4317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(-i);
4327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(i | 1);
4337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunSmiConstant(i | 3);
4347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunSmiConstant(Smi::kMaxValue);
4367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunSmiConstant(Smi::kMaxValue - 1);
4377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunSmiConstant(Smi::kMinValue);
4387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunSmiConstant(Smi::kMinValue + 1);
4397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(i) { RunSmiConstant(*i); }
4417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunNumberConstants) {
4457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
4467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_FLOAT64_INPUTS(i) { RunNumberConstant(*i); }
4477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
4497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(i) { RunNumberConstant(*i); }
4507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  for (int32_t i = 1; i < Smi::kMaxValue && i != 0; i = i << 1) {
4537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunNumberConstant(i);
4547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunNumberConstant(-i);
4557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunNumberConstant(i | 1);
4567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RunNumberConstant(i | 3);
4577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunNumberConstant(Smi::kMaxValue);
4597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunNumberConstant(Smi::kMaxValue - 1);
4607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunNumberConstant(Smi::kMinValue);
4617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RunNumberConstant(Smi::kMinValue + 1);
4627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunEmptyString) {
4667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<Object*> m;
4677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.StringConstant("empty"));
4687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.CheckString("empty", m.Call());
4697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunHeapConstant) {
4737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<Object*> m;
4747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.StringConstant("empty"));
4757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.CheckString("empty", m.Call());
4767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunHeapNumberConstant) {
4807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  RawMachineAssemblerTester<Object*> m;
4817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Handle<Object> number = m.isolate()->factory()->NewHeapNumber(100.5);
4827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.HeapConstant(number));
4837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Object* result = m.Call();
4847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(result, *number);
4857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunParam1) {
4895e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org  RawMachineAssemblerTester<int32_t> m(kMachInt32);
4907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(m.Parameter(0));
4917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(i) {
4937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int32_t result = m.Call(*i);
4947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(*i, result);
4957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
4967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
4977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
4997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunParam2_1) {
5005e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org  RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
5017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p0 = m.Parameter(0);
5027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p1 = m.Parameter(1);
5037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(p0);
5047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  USE(p1);
5057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(i) {
5077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int32_t result = m.Call(*i, -9999);
5087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(*i, result);
5097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
5117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunParam2_2) {
5145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org  RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
5157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p0 = m.Parameter(0);
5167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node* p1 = m.Parameter(1);
5177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  m.Return(p1);
5187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  USE(p0);
5197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FOR_INT32_INPUTS(i) {
5217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int32_t result = m.Call(-7777, *i);
5227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    CHECK_EQ(*i, result);
5237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
5257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunParam3) {
5287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  for (int i = 0; i < 3; i++) {
5295e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org    RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32, kMachInt32);
5307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    Node* nodes[] = {m.Parameter(0), m.Parameter(1), m.Parameter(2)};
5317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    m.Return(nodes[i]);
5327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    int p[] = {-99, -77, -88};
5347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(j) {
5357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      p[i] = *j;
5367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      int32_t result = m.Call(p[0], p[1], p[2]);
5377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      CHECK_EQ(*j, result);
5387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    }
5397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
5417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RunBinopTester) {
5447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
5457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t> m;
5467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    Int32BinopTester bt(&m);
5477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    bt.AddReturn(bt.param0);
5487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(i) { CHECK_EQ(*i, bt.call(*i, 777)); }
5507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
5537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t> m;
5547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    Int32BinopTester bt(&m);
5557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    bt.AddReturn(bt.param1);
5567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_INT32_INPUTS(i) { CHECK_EQ(*i, bt.call(666, *i)); }
5587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
5617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t> m;
5627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    Float64BinopTester bt(&m);
5637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    bt.AddReturn(bt.param0);
5647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_FLOAT64_INPUTS(i) { CHECK_EQ(*i, bt.call(*i, 9.0)); }
5667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  {
5697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    RawMachineAssemblerTester<int32_t> m;
5707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    Float64BinopTester bt(&m);
5717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    bt.AddReturn(bt.param1);
5727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    FOR_FLOAT64_INPUTS(i) { CHECK_EQ(*i, bt.call(-11.25, *i)); }
5747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
5757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
5767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
5777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif  // V8_TURBOFAN_TARGET
578