Chromium Code Reviews| Index: src/crankshaft/ia32/lithium-codegen-ia32.cc |
| diff --git a/src/crankshaft/ia32/lithium-codegen-ia32.cc b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
| index a535153e18df6dd988a1363dd3010882948c5ed1..61a1add089ae358ae5b18a9cf16b01506dc375bd 100644 |
| --- a/src/crankshaft/ia32/lithium-codegen-ia32.cc |
| +++ b/src/crankshaft/ia32/lithium-codegen-ia32.cc |
| @@ -162,7 +162,9 @@ bool LCodeGen::GeneratePrologue() { |
| DCHECK(!frame_is_built_); |
| frame_is_built_ = true; |
| if (info()->IsStub()) { |
| - __ StubPrologue(); |
| + __ push(ebp); // Caller's frame pointer. |
|
Benedikt Meurer
2016/02/22 18:16:39
Awesome!
danno
2016/03/07 09:33:38
Acknowledged.
|
| + __ mov(ebp, esp); |
| + __ push(Immediate(Smi::FromInt(StackFrame::STUB))); |
| } else { |
| __ Prologue(info()->GeneratePreagedPrologue()); |
| } |
| @@ -380,29 +382,24 @@ bool LCodeGen::GenerateJumpTable() { |
| if (needs_frame.is_linked()) { |
| __ bind(&needs_frame); |
| /* stack layout |
| - 4: entry address |
| - 3: return address <-- esp |
| - 2: garbage |
| + 3: entry address |
| + 2: return address <-- esp |
| 1: garbage |
| 0: garbage |
| */ |
| - __ sub(esp, Immediate(kPointerSize)); // Reserve space for stub marker. |
| - __ push(MemOperand(esp, kPointerSize)); // Copy return address. |
| - __ push(MemOperand(esp, 3 * kPointerSize)); // Copy entry address. |
| + __ push(MemOperand(esp, 0)); // Copy return address. |
| + __ push(MemOperand(esp, 2 * kPointerSize)); // Copy entry address. |
| /* stack layout |
| 4: entry address |
| 3: return address |
| - 2: garbage |
| 1: return address |
| 0: entry address <-- esp |
| */ |
| - __ mov(MemOperand(esp, 4 * kPointerSize), ebp); // Save ebp. |
| - // Copy context. |
| - __ mov(ebp, MemOperand(ebp, StandardFrameConstants::kContextOffset)); |
| - __ mov(MemOperand(esp, 3 * kPointerSize), ebp); |
| + __ mov(MemOperand(esp, 3 * kPointerSize), ebp); // Save ebp. |
| // Fill ebp with the right stack frame address. |
| - __ lea(ebp, MemOperand(esp, 4 * kPointerSize)); |
| + __ lea(ebp, MemOperand(esp, 3 * kPointerSize)); |
| + // Copy context. |
| // This variant of deopt can only be used with stubs. Since we don't |
| // have a function pointer to install in the stack frame that we're |
| // building, install a special marker there instead. |
| @@ -411,8 +408,7 @@ bool LCodeGen::GenerateJumpTable() { |
| Immediate(Smi::FromInt(StackFrame::STUB))); |
| /* stack layout |
| - 4: old ebp |
| - 3: context pointer |
| + 3: old ebp |
| 2: stub marker |
| 1: return address |
| 0: entry address <-- esp |
| @@ -447,9 +443,8 @@ bool LCodeGen::GenerateDeferredCode() { |
| frame_is_built_ = true; |
| // Build the frame in such a way that esi isn't trashed. |
| __ push(ebp); // Caller's frame pointer. |
| - __ push(Operand(ebp, StandardFrameConstants::kContextOffset)); |
| __ push(Immediate(Smi::FromInt(StackFrame::STUB))); |
| - __ lea(ebp, Operand(esp, 2 * kPointerSize)); |
| + __ lea(ebp, Operand(esp, 1 * kPointerSize)); |
| Comment(";;; Deferred code"); |
| } |
| code->Generate(); |
| @@ -2945,7 +2940,8 @@ void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { |
| // Check for arguments adapter frame. |
| Label done, adapted; |
| __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); |
| - __ mov(result, Operand(result, StandardFrameConstants::kContextOffset)); |
| + __ mov(result, |
| + Operand(result, CommonFrameConstants::kContextOrFrameTypeOffset)); |
| __ cmp(Operand(result), |
| Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
| __ j(equal, &adapted, Label::kNear); |