Chromium Code Reviews| Index: src/arm/macro-assembler-arm.cc |
| =================================================================== |
| --- src/arm/macro-assembler-arm.cc (revision 1918) |
| +++ src/arm/macro-assembler-arm.cc (working copy) |
| @@ -291,6 +291,12 @@ |
| void MacroAssembler::EnterExitFrame(StackFrame::Type type) { |
| ASSERT(type == StackFrame::EXIT || type == StackFrame::EXIT_DEBUG); |
| + |
| + // Compute the argv pointer and keep it in a callee-saved register. |
| + // r0 is argc. |
| + add(r6, sp, Operand(r0, LSL, kPointerSizeLog2)); |
| + sub(r6, r6, Operand(kPointerSize)); |
| + |
| // Compute parameter pointer before making changes and save it as ip |
| // register so that it is restored as sp register on exit, thereby |
| // popping the args. |
| @@ -298,6 +304,17 @@ |
| // ip = sp + kPointerSize * #args; |
| add(ip, sp, Operand(r0, LSL, kPointerSizeLog2)); |
|
Mark Lam
2009/05/21 22:55:36
This "add" instruction is functionally equivalent
|
| + // Align the stack at this point. After this point we have 5 pushes, |
| + // so in fact we have to unalign here! See also the assert on the |
| + // alignment immediately below. |
| + if (OS::ActivationFrameAlignment() != kPointerSize) { |
| + // This code needs to be made more general if this assert doesn't hold. |
| + ASSERT(OS::ActivationFrameAlignment() == 2 * kPointerSize); |
| + mov(r7, Operand(Smi::FromInt(0))); |
| + tst(sp, Operand(OS::ActivationFrameAlignment() - 1)); |
| + push(r7, eq); // Conditional push instruction. |
| + } |
| + |
| // Push in reverse order: caller_fp, sp_on_exit, and caller_pc. |
| stm(db_w, sp, fp.bit() | ip.bit() | lr.bit()); |
| mov(fp, Operand(sp)); // setup new frame pointer |
| @@ -316,9 +333,6 @@ |
| mov(r4, Operand(r0)); |
| mov(r5, Operand(r1)); |
| - // Compute the argv pointer and keep it in a callee-saved register. |
| - add(r6, fp, Operand(r4, LSL, kPointerSizeLog2)); |
| - add(r6, r6, Operand(ExitFrameConstants::kPPDisplacement - kPointerSize)); |
| #ifdef ENABLE_DEBUGGER_SUPPORT |
| // Save the state of all registers to the stack from the memory |