| Index: test/cctest/compiler/codegen-tester.cc
|
| diff --git a/test/cctest/compiler/codegen-tester.cc b/test/cctest/compiler/codegen-tester.cc
|
| index 51f3f248c4d03b712094e44c033dacd207a023cd..ba73822d32a455de16162a1af7db404ad28dccd5 100644
|
| --- a/test/cctest/compiler/codegen-tester.cc
|
| +++ b/test/cctest/compiler/codegen-tester.cc
|
| @@ -570,6 +570,145 @@ TEST(RunBinopTester) {
|
| }
|
| }
|
|
|
| +
|
| +#if V8_TARGET_ARCH_64_BIT
|
| +// TODO(ahaas): run int64 tests on all platforms when supported.
|
| +TEST(RunBufferedRawMachineAssemblerTesterTester) {
|
| + {
|
| + BufferedRawMachineAssemblerTester<int64_t> m;
|
| + m.Return(m.Int64Constant(0x12500000000));
|
| + CHECK_EQ(0x12500000000, m.Call());
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<double> m(kMachFloat64);
|
| + m.Return(m.Parameter(0));
|
| + FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(*i, m.Call(*i)); }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64);
|
| + m.Return(m.Int64Add(m.Parameter(0), m.Parameter(1)));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + CHECK_EQ(*i + *j, m.Call(*i, *j));
|
| + CHECK_EQ(*j + *i, m.Call(*j, *i));
|
| + }
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64,
|
| + kMachInt64);
|
| + m.Return(
|
| + m.Int64Add(m.Int64Add(m.Parameter(0), m.Parameter(1)), m.Parameter(2)));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + CHECK_EQ(*i + *i + *j, m.Call(*i, *i, *j));
|
| + CHECK_EQ(*i + *j + *i, m.Call(*i, *j, *i));
|
| + CHECK_EQ(*j + *i + *i, m.Call(*j, *i, *i));
|
| + }
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64,
|
| + kMachInt64, kMachInt64);
|
| + m.Return(m.Int64Add(
|
| + m.Int64Add(m.Int64Add(m.Parameter(0), m.Parameter(1)), m.Parameter(2)),
|
| + m.Parameter(3)));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + CHECK_EQ(*i + *i + *i + *j, m.Call(*i, *i, *i, *j));
|
| + CHECK_EQ(*i + *i + *j + *i, m.Call(*i, *i, *j, *i));
|
| + CHECK_EQ(*i + *j + *i + *i, m.Call(*i, *j, *i, *i));
|
| + CHECK_EQ(*j + *i + *i + *i, m.Call(*j, *i, *i, *i));
|
| + }
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<void> m;
|
| + int64_t result;
|
| + m.Store(MachineTypeForC<int64_t>(), m.PointerConstant(&result),
|
| + m.Int64Constant(0x12500000000), kNoWriteBarrier);
|
| + m.Return(m.Int32Constant(0));
|
| + m.Call();
|
| + CHECK_EQ(0x12500000000, result);
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<void> m(kMachFloat64);
|
| + double result;
|
| + m.Store(MachineTypeForC<double>(), m.PointerConstant(&result),
|
| + m.Parameter(0), kNoWriteBarrier);
|
| + m.Return(m.Int32Constant(0));
|
| + FOR_FLOAT64_INPUTS(i) {
|
| + m.Call(*i);
|
| + CheckDoubleEq(*i, result);
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<void> m(kMachInt64, kMachInt64);
|
| + int64_t result;
|
| + m.Store(MachineTypeForC<int64_t>(), m.PointerConstant(&result),
|
| + m.Int64Add(m.Parameter(0), m.Parameter(1)), kNoWriteBarrier);
|
| + m.Return(m.Int32Constant(0));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + m.Call(*i, *j);
|
| + CHECK_EQ(*i + *j, result);
|
| +
|
| + m.Call(*j, *i);
|
| + CHECK_EQ(*j + *i, result);
|
| + }
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<void> m(kMachInt64, kMachInt64,
|
| + kMachInt64);
|
| + int64_t result;
|
| + m.Store(
|
| + MachineTypeForC<int64_t>(), m.PointerConstant(&result),
|
| + m.Int64Add(m.Int64Add(m.Parameter(0), m.Parameter(1)), m.Parameter(2)),
|
| + kNoWriteBarrier);
|
| + m.Return(m.Int32Constant(0));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + m.Call(*i, *i, *j);
|
| + CHECK_EQ(*i + *i + *j, result);
|
| +
|
| + m.Call(*i, *j, *i);
|
| + CHECK_EQ(*i + *j + *i, result);
|
| +
|
| + m.Call(*j, *i, *i);
|
| + CHECK_EQ(*j + *i + *i, result);
|
| + }
|
| + }
|
| + }
|
| + {
|
| + BufferedRawMachineAssemblerTester<void> m(kMachInt64, kMachInt64,
|
| + kMachInt64, kMachInt64);
|
| + int64_t result;
|
| + m.Store(MachineTypeForC<int64_t>(), m.PointerConstant(&result),
|
| + m.Int64Add(m.Int64Add(m.Int64Add(m.Parameter(0), m.Parameter(1)),
|
| + m.Parameter(2)),
|
| + m.Parameter(3)),
|
| + kNoWriteBarrier);
|
| + m.Return(m.Int32Constant(0));
|
| + FOR_INT64_INPUTS(i) {
|
| + FOR_INT64_INPUTS(j) {
|
| + m.Call(*i, *i, *i, *j);
|
| + CHECK_EQ(*i + *i + *i + *j, result);
|
| +
|
| + m.Call(*i, *i, *j, *i);
|
| + CHECK_EQ(*i + *i + *j + *i, result);
|
| +
|
| + m.Call(*i, *j, *i, *i);
|
| + CHECK_EQ(*i + *j + *i + *i, result);
|
| +
|
| + m.Call(*j, *i, *i, *i);
|
| + CHECK_EQ(*j + *i + *i + *i, result);
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +#endif
|
| } // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|