Chromium Code Reviews| Index: runtime/vm/assembler_x64_test.cc |
| diff --git a/runtime/vm/assembler_x64_test.cc b/runtime/vm/assembler_x64_test.cc |
| index f2d6fcee526bf4b66991e17f4925ce481ef8034c..31dec028833a08aa53642af85d73be1006029be0 100644 |
| --- a/runtime/vm/assembler_x64_test.cc |
| +++ b/runtime/vm/assembler_x64_test.cc |
| @@ -1244,6 +1244,14 @@ ASSEMBLER_TEST_GENERATE(SingleFPMoves, assembler) { |
| __ movss(XMM5, XMM4); |
| __ movss(XMM6, XMM5); |
| __ movss(XMM7, XMM6); |
| + __ movss(XMM8, XMM7); |
| + __ movss(XMM9, XMM8); |
| + __ movss(XMM10, XMM9); |
| + __ movss(XMM11, XMM10); |
| + __ movss(XMM12, XMM11); |
| + __ movss(XMM13, XMM12); |
| + __ movss(XMM14, XMM13); |
| + __ movss(XMM15, XMM14); |
| __ pushq(R15); // Callee saved. |
| __ pushq(RAX); |
| __ movq(Address(RSP, 0), Immediate(0)); |
| @@ -1328,9 +1336,17 @@ ASSEMBLER_TEST_GENERATE(DoubleFPMoves, assembler) { |
| __ movsd(XMM5, XMM4); |
| __ movsd(XMM6, XMM5); |
| __ movsd(XMM7, XMM6); |
| + __ movsd(XMM8, XMM7); |
| + __ movsd(XMM9, XMM8); |
| + __ movsd(XMM10, XMM9); |
| + __ movsd(XMM11, XMM10); |
| + __ movsd(XMM12, XMM11); |
| + __ movsd(XMM13, XMM12); |
| + __ movsd(XMM14, XMM13); |
| + __ movsd(XMM15, XMM14); |
| __ movq(Address(RSP, 0), Immediate(0)); |
| __ movsd(XMM0, Address(RSP, 0)); |
| - __ movsd(Address(RSP, 0), XMM7); |
| + __ movsd(Address(RSP, 0), XMM15); |
| __ movsd(XMM1, Address(RSP, 0)); |
| __ movq(R10, RSP); |
| __ movsd(Address(R10, 0), XMM1); |
| @@ -1341,7 +1357,15 @@ ASSEMBLER_TEST_GENERATE(DoubleFPMoves, assembler) { |
| __ movq(RAX, RSP); |
| __ movsd(Address(RAX, 0), XMM3); |
| __ movsd(XMM4, Address(RAX, 0)); |
| - __ movsd(XMM7, Address(RSP, 0)); |
| + __ movsd(XMM15, Address(RSP, 0)); |
| + __ movaps(XMM14, XMM15); |
| + __ movaps(XMM13, XMM14); |
| + __ movaps(XMM12, XMM13); |
| + __ movaps(XMM11, XMM12); |
| + __ movaps(XMM10, XMM11); |
| + __ movaps(XMM9, XMM10); |
| + __ movaps(XMM8, XMM9); |
| + __ movaps(XMM7, XMM8); |
| __ movaps(XMM6, XMM7); |
| __ movaps(XMM5, XMM6); |
| __ movaps(XMM4, XMM5); |
| @@ -1367,11 +1391,18 @@ ASSEMBLER_TEST_GENERATE(DoubleFPOperations, assembler) { |
| __ movsd(XMM0, Address(RSP, 0)); |
| __ movq(RAX, Immediate(bit_cast<int64_t, double>(3.4))); |
| __ movq(Address(RSP, 0), RAX); |
| + __ movsd(XMM12, Address(RSP, 0)); |
| + __ addsd(XMM8, XMM12); // 15.7 |
| + __ mulsd(XMM8, XMM12); // 53.38 |
| + __ subsd(XMM8, XMM12); // 49.98 |
| + __ divsd(XMM8, XMM12); // 14.7 |
| + __ sqrtsd(XMM8, XMM12); // 1.843 |
|
Florian Schneider
2012/11/19 10:34:33
Maybe do sqrtsd(XMM8, XMM8) instead to include the
Cutch
2012/11/19 23:28:58
Done.
Cutch
2012/11/19 23:28:58
Done, I also add the XMM0 and XMM8 values together
|
| __ movsd(XMM1, Address(RSP, 0)); |
| __ addsd(XMM0, XMM1); // 15.7 |
| __ mulsd(XMM0, XMM1); // 53.38 |
| __ subsd(XMM0, XMM1); // 49.98 |
| __ divsd(XMM0, XMM1); // 14.7 |
| + __ sqrtsd(XMM0, XMM1); // 1.843 |
|
Florian Schneider
2012/11/19 10:34:33
Maybe do sqrtsd(XMM0, XMM0) instead to include the
Cutch
2012/11/19 23:28:58
I add them together. I use the subtraction op else
|
| __ popq(RAX); |
| __ ret(); |
| } |
| @@ -1380,7 +1411,7 @@ ASSEMBLER_TEST_GENERATE(DoubleFPOperations, assembler) { |
| ASSEMBLER_TEST_RUN(DoubleFPOperations, entry) { |
| typedef double (*SingleFPOperationsCode)(); |
| double res = reinterpret_cast<SingleFPOperationsCode>(entry)(); |
| - EXPECT_FLOAT_EQ(14.7, res, 0.001); |
| + EXPECT_FLOAT_EQ(1.843, res, 0.001); |
| } |
| @@ -1401,6 +1432,9 @@ ASSEMBLER_TEST_RUN(Int32ToDoubleConversion, entry) { |
| ASSEMBLER_TEST_GENERATE(Int64ToDoubleConversion, assembler) { |
| __ movq(RDX, Immediate(12LL << 32)); |
| __ cvtsi2sd(XMM0, RDX); |
| + __ movsd(XMM15, XMM0); // Move to high register |
| + __ addsd(XMM0, XMM0); // Stomp XMM0 |
| + __ movsd(XMM0, XMM15); // Move back to XMM0 |
| __ ret(); |
| } |
| @@ -1605,7 +1639,14 @@ ASSEMBLER_TEST_RUN(XorpdZeroing, entry) { |
| ASSEMBLER_TEST_GENERATE(XorpdZeroing2, assembler) { |
| + Label done; |
| + __ xorpd(XMM15, XMM15); |
| __ xorpd(XMM0, XMM0); |
| + __ xorpd(XMM0, XMM15); |
| + __ comisd(XMM0, XMM15); |
| + __ j(ZERO, &done); |
| + __ int3(); |
| + __ Bind(&done); |
| __ ret(); |
| } |