Index: src/ia32/macro-assembler-ia32.cc |
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
index 12daec8285c79fea84149f25660fb1f593978118..cc2fd17efff7bf7a9395f1d13a596795766a3f4a 100644 |
--- a/src/ia32/macro-assembler-ia32.cc |
+++ b/src/ia32/macro-assembler-ia32.cc |
@@ -1031,9 +1031,10 @@ void MacroAssembler::EnterFrame(StackFrame::Type type, |
void MacroAssembler::EnterFrame(StackFrame::Type type) { |
push(ebp); |
mov(ebp, esp); |
- push(esi); |
push(Immediate(Smi::FromInt(type))); |
- push(Immediate(CodeObject())); |
+ if (type == StackFrame::INTERNAL) { |
+ push(Immediate(CodeObject())); |
+ } |
if (emit_debug_code()) { |
cmp(Operand(esp, 0), Immediate(isolate()->factory()->undefined_value())); |
Check(not_equal, kCodeObjectNotProperlyPatched); |
@@ -1043,7 +1044,7 @@ void MacroAssembler::EnterFrame(StackFrame::Type type) { |
void MacroAssembler::LeaveFrame(StackFrame::Type type) { |
if (emit_debug_code()) { |
- cmp(Operand(ebp, StandardFrameConstants::kMarkerOffset), |
+ cmp(Operand(ebp, CommonFrameConstants::kContextOrFrameTypeOffset), |
Immediate(Smi::FromInt(type))); |
Check(equal, kStackFrameTypesMustMatch); |
} |
@@ -1060,8 +1061,10 @@ void MacroAssembler::EnterExitFramePrologue() { |
mov(ebp, esp); |
// Reserve room for entry stack pointer and push the code object. |
- DCHECK(ExitFrameConstants::kSPOffset == -1 * kPointerSize); |
+ push(Immediate(Smi::FromInt(StackFrame::EXIT))); |
+ DCHECK_EQ(-2 * kPointerSize, ExitFrameConstants::kSPOffset); |
push(Immediate(0)); // Saved entry sp, patched before call. |
+ DCHECK(ExitFrameConstants::kCodeOffset == -3 * kPointerSize); |
Michael Starzinger
2016/02/23 10:57:33
nit: DCHECK_EQ
danno
2016/03/07 09:33:38
Done.
|
push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot. |
// Save the frame pointer and the context in top. |
@@ -1080,7 +1083,7 @@ void MacroAssembler::EnterExitFrameEpilogue(int argc, bool save_doubles) { |
int space = XMMRegister::kMaxNumRegisters * kDoubleSize + |
argc * kPointerSize; |
sub(esp, Immediate(space)); |
- const int offset = -2 * kPointerSize; |
+ const int offset = -ExitFrameConstants::kFixedFrameSizeFromFp; |
for (int i = 0; i < XMMRegister::kMaxNumRegisters; i++) { |
XMMRegister reg = XMMRegister::from_code(i); |
movsd(Operand(ebp, offset - ((i + 1) * kDoubleSize)), reg); |
@@ -1123,7 +1126,7 @@ void MacroAssembler::EnterApiExitFrame(int argc) { |
void MacroAssembler::LeaveExitFrame(bool save_doubles, bool pop_arguments) { |
// Optionally restore all XMM registers. |
if (save_doubles) { |
- const int offset = -2 * kPointerSize; |
+ const int offset = -ExitFrameConstants::kFixedFrameSizeFromFp; |
for (int i = 0; i < XMMRegister::kMaxNumRegisters; i++) { |
XMMRegister reg = XMMRegister::from_code(i); |
movsd(reg, Operand(ebp, offset - ((i + 1) * kDoubleSize))); |