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(); |
} |