| 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 845d29731b3873bd0b871cc7ac24a5ec6cb91599..bd38ae2672609501150557674234b4860a7d8a35 100644
|
| --- a/src/crankshaft/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/crankshaft/ia32/lithium-codegen-ia32.cc
|
| @@ -130,7 +130,7 @@ bool LCodeGen::GeneratePrologue() {
|
| DCHECK(!frame_is_built_);
|
| frame_is_built_ = true;
|
| if (info()->IsStub()) {
|
| - __ StubPrologue();
|
| + __ StubPrologue(StackFrame::STUB);
|
| } else {
|
| __ Prologue(info()->GeneratePreagedPrologue());
|
| }
|
| @@ -280,29 +280,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));
|
| +
|
| // 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.
|
| @@ -311,8 +306,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
|
| @@ -347,9 +341,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, TypedFrameConstants::kFixedFrameSizeFromFp));
|
| Comment(";;; Deferred code");
|
| }
|
| code->Generate();
|
| @@ -2814,7 +2807,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);
|
|
|