From 347b578c917f9964b4057355114082ccf61e0f9e Mon Sep 17 00:00:00 2001 From: "sgjesse@chromium.org" Date: Fri, 7 May 2010 11:24:04 +0000 Subject: [PATCH] Fix virtual frame height on ARM Bug introduced in r4608 where Dup2 increses the frame height with 4 instead of 2 when in a spilled scope. Also removed a bogus ASSERT and used Push from macro assemler for double pushes. TBR=erik.corry@gmail.com Review URL: http://codereview.chromium.org/2005005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4611 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/ic-arm.cc | 1 - src/arm/virtual-frame-arm.cc | 10 ++++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc index 3b3d1f8..34ba5e5 100644 --- a/src/arm/ic-arm.cc +++ b/src/arm/ic-arm.cc @@ -841,7 +841,6 @@ void KeyedLoadIC::GenerateString(MacroAssembler* masm) { // string and a number), and call runtime. __ bind(&slow_char_code); __ EnterInternalFrame(); - ASSERT(object.code() > index.code()); __ Push(object, index); __ CallRuntime(Runtime::kStringCharCodeAt, 2); ASSERT(!code.is(r0)); diff --git a/src/arm/virtual-frame-arm.cc b/src/arm/virtual-frame-arm.cc index e64eb90..0ec6e20 100644 --- a/src/arm/virtual-frame-arm.cc +++ b/src/arm/virtual-frame-arm.cc @@ -536,9 +536,9 @@ void VirtualFrame::Dup() { void VirtualFrame::Dup2() { if (SpilledScope::is_spilled()) { __ ldr(ip, MemOperand(sp, kPointerSize)); - EmitPush(ip); + __ push(ip); __ ldr(ip, MemOperand(sp, kPointerSize)); - EmitPush(ip); + __ push(ip); } else { switch (top_of_stack_state_) { case NO_TOS_REGISTERS: @@ -557,13 +557,11 @@ void VirtualFrame::Dup2() { top_of_stack_state_ = R1_R0_TOS; break; case R0_R1_TOS: - __ push(r1); - __ push(r0); + __ Push(r1, r0); top_of_stack_state_ = R0_R1_TOS; break; case R1_R0_TOS: - __ push(r0); - __ push(r1); + __ Push(r0, r1); top_of_stack_state_ = R1_R0_TOS; break; default: -- 2.7.4