Chromium Code Reviews| Index: runtime/vm/assembler_x64_test.cc |
| =================================================================== |
| --- runtime/vm/assembler_x64_test.cc (revision 16928) |
| +++ runtime/vm/assembler_x64_test.cc (working copy) |
| @@ -1696,6 +1696,19 @@ |
| } |
| +ASSEMBLER_TEST_GENERATE(Pxor, assembler) { |
| + __ pxor(XMM0, XMM0); |
| + __ ret(); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(Pxor, entry) { |
| + typedef double (*PxorCode)(double d); |
| + double res = reinterpret_cast<PxorCode>(entry)(12.3456e3); |
| + EXPECT_FLOAT_EQ(0.0, res, 0.0); |
| +} |
| + |
| + |
| ASSEMBLER_TEST_GENERATE(SquareRootDouble, assembler) { |
| __ sqrtsd(XMM0, XMM0); |
| __ ret(); |
| @@ -1811,7 +1824,65 @@ |
| EXPECT_FLOAT_EQ(3.0, res, 0.001); |
| } |
| +ASSEMBLER_TEST_GENERATE(DoubleToDoubleTrunc, assembler) { |
| + __ roundsd(XMM0, XMM0, Assembler::kRoundToZero); |
| + __ ret(); |
| +} |
| + |
| +ASSEMBLER_TEST_RUN(DoubleToDoubleTrunc, entry) { |
| + typedef double (*DoubleToDoubleTruncCode)(double d); |
| + double res = reinterpret_cast<DoubleToDoubleTruncCode>(entry)(12.3); |
| + EXPECT_EQ(12.0, res); |
| + res = reinterpret_cast<DoubleToDoubleTruncCode>(entry)(12.8); |
| + EXPECT_EQ(12.0, res); |
| + res = reinterpret_cast<DoubleToDoubleTruncCode>(entry)(-12.3); |
| + EXPECT_EQ(-12.0, res); |
| + res = reinterpret_cast<DoubleToDoubleTruncCode>(entry)(-12.8); |
| + EXPECT_EQ(-12.0, res); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_GENERATE(DoubleAbs, assembler) { |
| + __ DoubleAbs(XMM0); |
| + __ ret(); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(DoubleAbs, entry) { |
| + typedef double (*DoubleAbsCode)(double d); |
| + double val = -12.45; |
| + double res = reinterpret_cast<DoubleAbsCode>(entry)(val); |
| + EXPECT_FLOAT_EQ(-val, res, 0.001); |
| + val = 12.45; |
| + res = reinterpret_cast<DoubleAbsCode>(entry)(val); |
| + EXPECT_FLOAT_EQ(val, res, 0.001); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_GENERATE(DoubleToDoubleRound, assembler) { |
| + __ DoubleRound(XMM0, XMM0, XMM1); |
| + __ ret(); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(DoubleToDoubleRound, entry) { |
| + typedef double (*DoubleToDoubleRoundCode)(double d); |
| + double res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(12.3); |
| + EXPECT_EQ(12.0, res); |
| + res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(12.8); |
| + EXPECT_EQ(13.0, res); |
| + res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(0.5); |
| + EXPECT_EQ(1.0, res); |
| + res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(-12.3); |
| + EXPECT_EQ(-12.0, res); |
| + res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(-12.8); |
| + EXPECT_EQ(-13.0, res); |
| + res = reinterpret_cast<DoubleToDoubleRoundCode>(entry)(-0.5); |
| + EXPECT_EQ(-1.0, res); |
|
Florian Schneider
2013/01/11 09:49:30
Add the same test cases as on ia32 here as well.
srdjan
2013/01/11 19:48:21
Done.
|
| +} |
| + |
| + |
| ASSEMBLER_TEST_GENERATE(ExtractSignBits, assembler) { |
| __ movmskpd(RAX, XMM0); |
| __ andq(RAX, Immediate(0x1)); |