Index: src/compiler/ia32/code-generator-ia32.cc |
diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc |
index 4ba4cc590f12b42eab0a1806ab7c7bae8ac57b2a..107276c4cf694ce9fcc362d77b5beb51d010ba63 100644 |
--- a/src/compiler/ia32/code-generator-ia32.cc |
+++ b/src/compiler/ia32/code-generator-ia32.cc |
@@ -617,6 +617,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ lea(i.OutputRegister(), Operand(base, offset.offset())); |
break; |
} |
+ case kIeee754Float64Log: { |
+ // Pass one double as argument on the stack. |
+ __ PrepareCallCFunction(2, eax); |
+ __ movsd(Operand(esp, 0 * kDoubleSize), i.InputDoubleRegister(0)); |
+ __ CallCFunction(ExternalReference::ieee754_log_function(isolate()), 2); |
+ // Return value is in st(0) on ia32. |
+ // Store it into the result register. |
+ __ sub(esp, Immediate(kDoubleSize)); |
+ __ fstp_d(Operand(esp, 0)); |
+ __ movsd(i.OutputDoubleRegister(), Operand(esp, 0)); |
+ __ add(esp, Immediate(kDoubleSize)); |
+ break; |
+ } |
case kIA32Add: |
if (HasImmediateInput(instr, 1)) { |
__ add(i.InputOperand(0), i.InputImmediate(1)); |
@@ -820,16 +833,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kIA32Popcnt: |
__ Popcnt(i.OutputRegister(), i.InputOperand(0)); |
break; |
- case kX87Float64Log: |
- __ sub(esp, Immediate(kDoubleSize)); |
- __ movsd(Operand(esp, 0), i.InputDoubleRegister(0)); |
- __ fldln2(); |
- __ fld_d(Operand(esp, 0)); |
- __ fyl2x(); |
- __ fstp_d(Operand(esp, 0)); |
- __ movsd(i.OutputDoubleRegister(), Operand(esp, 0)); |
- __ add(esp, Immediate(kDoubleSize)); |
- break; |
case kSSEFloat32Cmp: |
__ ucomiss(i.InputDoubleRegister(0), i.InputOperand(1)); |
break; |