From 37d886bc099724d8514a31f7199cce3700f7eb2d Mon Sep 17 00:00:00 2001 From: "rmcilroy@chromium.org" Date: Thu, 21 Aug 2014 12:59:18 +0000 Subject: [PATCH] Add missing ConstantPoolUnavailableScopes on JS return. R=ulan@chromium.org Review URL: https://codereview.chromium.org/494733002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23276 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/full-codegen-arm.cc | 8 +++++--- src/arm/lithium-codegen-arm.cc | 30 ++++++++++++++++-------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index bc4b2e3..d084b68 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -448,9 +448,11 @@ void FullCodeGenerator::EmitReturnSequence() { PredictableCodeSizeScope predictable(masm_, -1); __ RecordJSReturn(); int no_frame_start = __ LeaveFrame(StackFrame::JAVA_SCRIPT); - __ add(sp, sp, Operand(sp_delta)); - __ Jump(lr); - info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); + { ConstantPoolUnavailableScope constant_pool_unavailable(masm_); + __ add(sp, sp, Operand(sp_delta)); + __ Jump(lr); + info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); + } } #ifdef DEBUG diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index d096087..627aad7 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -2956,23 +2956,25 @@ void LCodeGen::DoReturn(LReturn* instr) { if (NeedsEagerFrame()) { no_frame_start = masm_->LeaveFrame(StackFrame::JAVA_SCRIPT); } - if (instr->has_constant_parameter_count()) { - int parameter_count = ToInteger32(instr->constant_parameter_count()); - int32_t sp_delta = (parameter_count + 1) * kPointerSize; - if (sp_delta != 0) { - __ add(sp, sp, Operand(sp_delta)); + { ConstantPoolUnavailableScope constant_pool_unavailable(masm()); + if (instr->has_constant_parameter_count()) { + int parameter_count = ToInteger32(instr->constant_parameter_count()); + int32_t sp_delta = (parameter_count + 1) * kPointerSize; + if (sp_delta != 0) { + __ add(sp, sp, Operand(sp_delta)); + } + } else { + Register reg = ToRegister(instr->parameter_count()); + // The argument count parameter is a smi + __ SmiUntag(reg); + __ add(sp, sp, Operand(reg, LSL, kPointerSizeLog2)); } - } else { - Register reg = ToRegister(instr->parameter_count()); - // The argument count parameter is a smi - __ SmiUntag(reg); - __ add(sp, sp, Operand(reg, LSL, kPointerSizeLog2)); - } - __ Jump(lr); + __ Jump(lr); - if (no_frame_start != -1) { - info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); + if (no_frame_start != -1) { + info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); + } } } -- 2.7.4