Chromium Code Reviews| Index: test/cctest/test-macro-assembler-mips64.cc |
| diff --git a/test/cctest/test-macro-assembler-mips64.cc b/test/cctest/test-macro-assembler-mips64.cc |
| index e74703b8f80c248aca3abf7a88e9bbe0972b9022..86560ed53ee0ac8c673ca4c96540940d41d48d71 100644 |
| --- a/test/cctest/test-macro-assembler-mips64.cc |
| +++ b/test/cctest/test-macro-assembler-mips64.cc |
| @@ -41,6 +41,9 @@ using namespace v8::internal; |
| typedef void* (*F)(int64_t x, int64_t y, int p2, int p3, int p4); |
| typedef Object* (*F1)(int x, int p1, int p2, int p3, int p4); |
| +typedef float (*F2)(uint32_t x0, int x1, int x2, int x3, int x4); |
| +typedef float (*F3)(uint64_t x0, int x1, int x2, int x3, int x4); |
| +typedef double (*F4)(uint64_t x0, int x1, int x2, int x3, int x4); |
| #define __ masm-> |
| @@ -522,4 +525,145 @@ TEST(Dlsa) { |
| } |
| } |
| +float run_Cvt_s_uw(uint32_t x) { |
| + Isolate* isolate = CcTest::i_isolate(); |
| + HandleScope scope(isolate); |
| + MacroAssembler assembler(isolate, nullptr, 0, |
| + v8::internal::CodeObjectRequired::kYes); |
| + MacroAssembler* masm = &assembler; |
| + |
| + __ Cvt_s_uw(f0, a0); |
| + __ jr(ra); |
| + __ nop(); |
| + |
| + CodeDesc desc; |
| + assembler.GetCode(&desc); |
| + Handle<Code> code = isolate->factory()->NewCode( |
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| + |
| + F2 f = FUNCTION_CAST<F2>(code->entry()); |
| + |
| + float res = CALL_GENERATED_CODE(isolate, f, x, 0, 0, 0, 0); |
| + |
| + return res; |
| +} |
| + |
| +TEST(Cvt_s_uw) { |
| + CcTest::InitializeVM(); |
| + |
| + struct TestCase { |
| + uint32_t value; |
| + float expected_res; |
| + }; |
| + |
| + struct TestCase tc[] = { |
|
akos.palfi.imgtec
2016/02/29 12:28:22
Rename this const array to uint32_test_values and
Ilija.Pavlovic1
2016/02/29 15:00:27
In all our test suites (test-assembler-mips*, test
Ilija.Pavlovic1
2016/03/04 08:02:52
Done.
|
| + // value, expected_res |
| + {0x00000000, static_cast<float>(0x00000000)}, |
| + {0x00000001, static_cast<float>(0x00000001)}, |
| + {0x7fffffff, static_cast<float>(0x7fffffff)}, |
| + {0x80000000, static_cast<float>(0x80000000)}, |
| + {0x8fffffff, static_cast<float>(0x8fffffff)}, |
| + {0xffffffff, static_cast<float>(0xffffffff)}, |
| + }; |
| + |
| + size_t nr_test_cases = sizeof(tc) / sizeof(TestCase); |
| + for (size_t i = 0; i < nr_test_cases; ++i) { |
| + CHECK_EQ(tc[i].expected_res, run_Cvt_s_uw(tc[i].value)); |
| + } |
| +} |
| + |
| +float run_Cvt_s_ul(uint64_t x) { |
| + Isolate* isolate = CcTest::i_isolate(); |
| + HandleScope scope(isolate); |
| + MacroAssembler assembler(isolate, nullptr, 0, |
| + v8::internal::CodeObjectRequired::kYes); |
| + MacroAssembler* masm = &assembler; |
| + |
| + __ Cvt_s_ul(f0, a0); |
| + __ jr(ra); |
| + __ nop(); |
| + |
| + CodeDesc desc; |
| + assembler.GetCode(&desc); |
| + Handle<Code> code = isolate->factory()->NewCode( |
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| + |
| + F3 f = FUNCTION_CAST<F3>(code->entry()); |
| + |
| + float res = CALL_GENERATED_CODE(isolate, f, x, 0, 0, 0, 0); |
| + |
| + return res; |
| +} |
| + |
| +TEST(Cvt_s_ul) { |
| + CcTest::InitializeVM(); |
| + |
| + struct TestCase { |
| + uint64_t value; |
| + float expected_res; |
| + }; |
| + |
| + struct TestCase tc[] = { |
|
akos.palfi.imgtec
2016/02/29 12:28:22
Same here, call it uint64_test_values.
Ilija.Pavlovic1
2016/03/04 08:02:52
Done.
|
| + // value, expected_res |
| + {0x0000000000000000, static_cast<float>(0x0000000000000000)}, |
| + {0x0000000000000001, static_cast<float>(0x0000000000000001)}, |
| + {0x7fffffffffffffff, static_cast<float>(0x7fffffffffffffff)}, |
| + {0x8000000000000000, static_cast<float>(0x8000000000000000)}, |
| + {0x8fffffffffffffff, static_cast<float>(0x8fffffffffffffff)}, |
| + {0xffffffffffffffff, static_cast<float>(0xffffffffffffffff)}, |
| + }; |
| + |
| + size_t nr_test_cases = sizeof(tc) / sizeof(TestCase); |
| + for (size_t i = 0; i < nr_test_cases; ++i) { |
| + CHECK_EQ(tc[i].expected_res, run_Cvt_s_ul(tc[i].value)); |
| + } |
| +} |
| + |
| +double run_Cvt_d_ul(uint64_t x) { |
| + Isolate* isolate = CcTest::i_isolate(); |
| + HandleScope scope(isolate); |
| + MacroAssembler assembler(isolate, nullptr, 0, |
| + v8::internal::CodeObjectRequired::kYes); |
| + MacroAssembler* masm = &assembler; |
| + |
| + __ Cvt_d_ul(f0, a0); |
| + __ jr(ra); |
| + __ nop(); |
| + |
| + CodeDesc desc; |
| + assembler.GetCode(&desc); |
| + Handle<Code> code = isolate->factory()->NewCode( |
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| + |
| + F4 f = FUNCTION_CAST<F4>(code->entry()); |
| + |
| + float res = CALL_GENERATED_CODE(isolate, f, x, 0, 0, 0, 0); |
| + |
| + return res; |
| +} |
| + |
| +TEST(Cvt_d_ul) { |
| + CcTest::InitializeVM(); |
| + |
| + struct TestCase { |
| + uint64_t value; |
| + double expected_res; |
| + }; |
| + |
| + struct TestCase tc[] = { |
|
akos.palfi.imgtec
2016/02/29 12:28:22
Same here.
Ilija.Pavlovic1
2016/03/04 08:02:52
Done.
|
| + // value, expected_res |
| + {0x0000000000000000, static_cast<double>(0x0000000000000000)}, |
| + {0x0000000000000001, static_cast<double>(0x0000000000000001)}, |
| + {0x7fffffffffffffff, static_cast<double>(0x7fffffffffffffff)}, |
| + {0x8000000000000000, static_cast<double>(0x8000000000000000)}, |
| + {0x8fffffffffffffff, static_cast<double>(0x8fffffffffffffff)}, |
| + {0xffffffffffffffff, static_cast<double>(0xffffffffffffffff)}, |
| + }; |
| + |
| + size_t nr_test_cases = sizeof(tc) / sizeof(TestCase); |
| + for (size_t i = 0; i < nr_test_cases; ++i) { |
| + CHECK_EQ(tc[i].expected_res, run_Cvt_d_ul(tc[i].value)); |
| + } |
| +} |
| + |
| #undef __ |