Index: src/x87/lithium-codegen-x87.cc |
diff --git a/src/x87/lithium-codegen-x87.cc b/src/x87/lithium-codegen-x87.cc |
index 2766b658fd1a0c28498173e12b527582092ece76..35d95532c1278b8d11771261b32e11906784efa5 100644 |
--- a/src/x87/lithium-codegen-x87.cc |
+++ b/src/x87/lithium-codegen-x87.cc |
@@ -2272,6 +2272,8 @@ void LCodeGen::DoArithmeticD(LArithmeticD* instr) { |
if (instr->op() != Token::MOD) { |
X87PrepareBinaryOp(left, right, result); |
} |
+ // Set the precision control to double-precision. |
+ __ X87SetFPUCW(0x027F); |
switch (instr->op()) { |
case Token::ADD: |
__ fadd_i(1); |
@@ -2306,12 +2308,7 @@ void LCodeGen::DoArithmeticD(LArithmeticD* instr) { |
break; |
} |
- // Only always explicitly storing to memory to force the round-down for double |
- // arithmetic. |
- __ lea(esp, Operand(esp, -kDoubleSize)); |
- __ fstp_d(Operand(esp, 0)); |
- __ fld_d(Operand(esp, 0)); |
- __ lea(esp, Operand(esp, kDoubleSize)); |
+ __ X87SetFPUCW(0x037F); |
} |