| Index: src/arm/code-stubs-arm.cc
|
| ===================================================================
|
| --- src/arm/code-stubs-arm.cc (revision 6213)
|
| +++ src/arm/code-stubs-arm.cc (working copy)
|
| @@ -2704,9 +2704,24 @@
|
| // this by performing a garbage collection and retrying the
|
| // builtin once.
|
|
|
| + // r0 is argc.
|
| + // Compute callee's stack pointer before making changes and save it as
|
| + // ip register so that it is restored as sp register on exit, thereby
|
| + // popping the args.
|
| +
|
| + // ip = sp + kPointerSize * #args;
|
| + __ add(ip, sp, Operand(r0, LSL, kPointerSizeLog2));
|
| +
|
| + // Compute the argv pointer and keep it in a callee-saved register.
|
| + __ sub(r6, ip, Operand(kPointerSize));
|
| +
|
| // Enter the exit frame that transitions from JavaScript to C++.
|
| - __ EnterExitFrame(save_doubles_);
|
| + __ EnterExitFrame(save_doubles_, 5); // 5 pending pushes before call to C.
|
|
|
| + // Setup argc and the builtin function in callee-saved registers.
|
| + __ mov(r4, Operand(r0));
|
| + __ mov(r5, Operand(r1));
|
| +
|
| // r4: number of arguments (C callee-saved)
|
| // r5: pointer to builtin function (C callee-saved)
|
| // r6: pointer to first argument (C callee-saved)
|
| @@ -4981,6 +4996,9 @@
|
| __ Jump(r2);
|
| }
|
|
|
| +void DirectCEntryStub::Generate(MacroAssembler* masm) {
|
| + __ ldr(pc, MemOperand(fp, ExitFrameConstants::kPCOffset));
|
| +}
|
|
|
| #undef __
|
|
|
|
|