Index: src/compiler/x87/code-generator-x87.cc |
diff --git a/src/compiler/x87/code-generator-x87.cc b/src/compiler/x87/code-generator-x87.cc |
index dd8be23772591c9e34a71618df4210ce555795d6..2d770845a619db898fc9db67344eb7ac2295df8b 100644 |
--- a/src/compiler/x87/code-generator-x87.cc |
+++ b/src/compiler/x87/code-generator-x87.cc |
@@ -703,6 +703,24 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ lea(i.OutputRegister(), Operand(base, offset.offset())); |
break; |
} |
+ case kIeee754Float64Log: { |
+ // Saves the esp into ebx |
+ __ push(ebx); |
+ __ mov(ebx, esp); |
+ // Pass one double as argument on the stack. |
+ __ PrepareCallCFunction(2, eax); |
+ __ fstp(0); |
+ // Load operand from original stack |
+ __ fld_d(MemOperand(ebx, 4)); |
+ // Put operand into stack for function call |
+ __ fstp_d(Operand(esp, 0)); |
+ __ CallCFunction(ExternalReference::ieee754_log_function(isolate()), 2); |
+ // Restore the ebx |
+ __ pop(ebx); |
+ // Return value is in st(0) on x87. |
+ __ lea(esp, Operand(esp, kDoubleSize)); |
+ break; |
+ } |
case kX87Add: |
if (HasImmediateInput(instr, 1)) { |
__ add(i.InputOperand(0), i.InputImmediate(1)); |
@@ -903,18 +921,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kX87Popcnt: |
__ Popcnt(i.OutputRegister(), i.InputOperand(0)); |
break; |
- case kX87Float64Log: |
- if (FLAG_debug_code && FLAG_enable_slow_asserts) { |
- __ VerifyX87StackDepth(1); |
- } |
- __ X87SetFPUCW(0x027F); |
- __ fstp(0); |
- __ fldln2(); |
- __ fld_d(MemOperand(esp, 0)); |
- __ fyl2x(); |
- __ lea(esp, Operand(esp, kDoubleSize)); |
- __ X87SetFPUCW(0x037F); |
- break; |
case kX87LoadFloat64Constant: { |
InstructionOperand* source = instr->InputAt(0); |
InstructionOperand* destination = instr->Output(); |