Index: src/compiler/mips64/code-generator-mips64.cc |
diff --git a/src/compiler/mips64/code-generator-mips64.cc b/src/compiler/mips64/code-generator-mips64.cc |
index 2736c0027e4062515a428e3059ba51f615ddecc4..afa221db59a6698ddb528c83474c61c3be049c71 100644 |
--- a/src/compiler/mips64/code-generator-mips64.cc |
+++ b/src/compiler/mips64/code-generator-mips64.cc |
@@ -496,6 +496,17 @@ FPUCondition FlagsConditionToConditionCmpFPU(bool& predicate, |
__ sync(); \ |
} while (0) |
+#define ASSEMBLE_IEEE754_UNOP(name) \ |
+ do { \ |
+ FrameScope scope(masm(), StackFrame::MANUAL); \ |
+ __ PrepareCallCFunction(0, 1, kScratchReg); \ |
+ __ MovToFloatParameter(i.InputDoubleRegister(0)); \ |
+ __ CallCFunction(ExternalReference::ieee754_##name##_function(isolate()), \ |
+ 0, 1); \ |
+ /* Move the result in the double result register. */ \ |
+ __ MovFromFloatResult(i.OutputDoubleRegister()); \ |
+ } while (0) |
+ |
void CodeGenerator::AssembleDeconstructFrame() { |
__ mov(sp, fp); |
__ Pop(ra, fp); |
@@ -727,18 +738,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
Operand(offset.offset())); |
break; |
} |
- case kIeee754Float64Log: { |
- // TODO(bmeurer): We should really get rid of this special instruction, |
- // and generate a CallAddress instruction instead. |
- FrameScope scope(masm(), StackFrame::MANUAL); |
- __ PrepareCallCFunction(0, 1, kScratchReg); |
- __ MovToFloatParameter(i.InputDoubleRegister(0)); |
- __ CallCFunction(ExternalReference::ieee754_log_function(isolate()), 0, |
- 1); |
- // Move the result in the double result register. |
- __ MovFromFloatResult(i.OutputDoubleRegister()); |
+ case kIeee754Float64Log: |
+ ASSEMBLE_IEEE754_UNOP(log); |
+ break; |
+ case kIeee754Float64Log1p: |
+ ASSEMBLE_IEEE754_UNOP(log1p); |
break; |
- } |
case kMips64Add: |
__ Addu(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
break; |