| Index: src/arm/builtins-arm.cc
|
| diff --git a/src/arm/builtins-arm.cc b/src/arm/builtins-arm.cc
|
| index a8e1df3b4d5dc46c21c850737bd2cfd825de330e..352844cceb55cfba89cb25ea90bf4b5b25b93d7a 100644
|
| --- a/src/arm/builtins-arm.cc
|
| +++ b/src/arm/builtins-arm.cc
|
| @@ -123,12 +123,12 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
|
| // static
|
| void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| // ----------- S t a t e -------------
|
| - // -- r0 : number of arguments
|
| - // -- r1 : function
|
| - // -- cp : context
|
| - // -- lr : return address
|
| - // -- sp[(argc - n) * 8] : arg[n] (zero-based)
|
| - // -- sp[(argc + 1) * 8] : receiver
|
| + // -- r0 : number of arguments
|
| + // -- r1 : function
|
| + // -- cp : context
|
| + // -- lr : return address
|
| + // -- sp[(argc - n - 1) * 4] : arg[n] (zero based)
|
| + // -- sp[argc * 4] : receiver
|
| // -----------------------------------
|
| Condition const cc_done = (kind == MathMaxMinKind::kMin) ? mi : gt;
|
| Condition const cc_swap = (kind == MathMaxMinKind::kMin) ? gt : mi;
|
| @@ -142,18 +142,16 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| __ LoadRoot(r5, root_index);
|
| __ vldr(d1, FieldMemOperand(r5, HeapNumber::kValueOffset));
|
|
|
| - // Remember how many slots to drop (including the receiver).
|
| - __ add(r4, r0, Operand(1));
|
| -
|
| Label done_loop, loop;
|
| + __ mov(r4, r0);
|
| __ bind(&loop);
|
| {
|
| // Check if all parameters done.
|
| - __ sub(r0, r0, Operand(1), SetCC);
|
| + __ sub(r4, r4, Operand(1), SetCC);
|
| __ b(lt, &done_loop);
|
|
|
| // Load the next parameter tagged value into r2.
|
| - __ ldr(r2, MemOperand(sp, r0, LSL, kPointerSizeLog2));
|
| + __ ldr(r2, MemOperand(sp, r4, LSL, kPointerSizeLog2));
|
|
|
| // Load the double value of the parameter into d2, maybe converting the
|
| // parameter to a number first using the ToNumber builtin if necessary.
|
| @@ -222,8 +220,10 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| }
|
|
|
| __ bind(&done_loop);
|
| + // Drop all slots, including the receiver.
|
| + __ add(r0, r0, Operand(1));
|
| + __ Drop(r0);
|
| __ mov(r0, r5);
|
| - __ Drop(r4);
|
| __ Ret();
|
| }
|
|
|
|
|