| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 135727c5bad5dc77c31ef77a44b5569a594c4f5a..129a0b60deaedf9472c23a8fb1af446cdb17844c 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -1345,11 +1345,11 @@ void LCodeGen::DoArithmeticD(LArithmeticD* instr) {
|
| // Save r0-r3 on the stack.
|
| __ stm(db_w, sp, r0.bit() | r1.bit() | r2.bit() | r3.bit());
|
|
|
| - __ PrepareCallCFunction(4, scratch0());
|
| - __ vmov(r0, r1, left);
|
| - __ vmov(r2, r3, right);
|
| + __ PrepareCallCFunction(0, 2, scratch0());
|
| + __ SetCallCDoubleArguments(left, right);
|
| __ CallCFunction(
|
| - ExternalReference::double_fp_operation(Token::MOD, isolate()), 4);
|
| + ExternalReference::double_fp_operation(Token::MOD, isolate()),
|
| + 0, 2);
|
| // Move the result in the double result register.
|
| __ GetCFunctionDoubleResult(ToDoubleRegister(instr->result()));
|
|
|
| @@ -2966,19 +2966,18 @@ void LCodeGen::DoPower(LPower* instr) {
|
| Representation exponent_type = instr->hydrogen()->right()->representation();
|
| if (exponent_type.IsDouble()) {
|
| // Prepare arguments and call C function.
|
| - __ PrepareCallCFunction(4, scratch);
|
| - __ vmov(r0, r1, ToDoubleRegister(left));
|
| - __ vmov(r2, r3, ToDoubleRegister(right));
|
| + __ PrepareCallCFunction(0, 2, scratch);
|
| + __ SetCallCDoubleArguments(ToDoubleRegister(left),
|
| + ToDoubleRegister(right));
|
| __ CallCFunction(
|
| - ExternalReference::power_double_double_function(isolate()), 4);
|
| + ExternalReference::power_double_double_function(isolate()), 0, 2);
|
| } else if (exponent_type.IsInteger32()) {
|
| ASSERT(ToRegister(right).is(r0));
|
| // Prepare arguments and call C function.
|
| - __ PrepareCallCFunction(4, scratch);
|
| - __ mov(r2, ToRegister(right));
|
| - __ vmov(r0, r1, ToDoubleRegister(left));
|
| + __ PrepareCallCFunction(1, 1, scratch);
|
| + __ SetCallCDoubleArguments(ToDoubleRegister(left), ToRegister(right));
|
| __ CallCFunction(
|
| - ExternalReference::power_double_int_function(isolate()), 4);
|
| + ExternalReference::power_double_int_function(isolate()), 1, 1);
|
| } else {
|
| ASSERT(exponent_type.IsTagged());
|
| ASSERT(instr->hydrogen()->left()->representation().IsDouble());
|
| @@ -3008,11 +3007,10 @@ void LCodeGen::DoPower(LPower* instr) {
|
|
|
| // Prepare arguments and call C function.
|
| __ bind(&call);
|
| - __ PrepareCallCFunction(4, scratch);
|
| - __ vmov(r0, r1, ToDoubleRegister(left));
|
| - __ vmov(r2, r3, result_reg);
|
| + __ PrepareCallCFunction(0, 2, scratch);
|
| + __ SetCallCDoubleArguments(ToDoubleRegister(left), result_reg);
|
| __ CallCFunction(
|
| - ExternalReference::power_double_double_function(isolate()), 4);
|
| + ExternalReference::power_double_double_function(isolate()), 0, 2);
|
| }
|
| // Store the result in the result register.
|
| __ GetCFunctionDoubleResult(result_reg);
|
|
|