| Index: src/arm/full-codegen-arm.cc
|
| diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
|
| index 15bfba3ce61c4454586e6d776833eb975b93109c..009e3bb997979362e6581b71ed8d1e445d019adb 100644
|
| --- a/src/arm/full-codegen-arm.cc
|
| +++ b/src/arm/full-codegen-arm.cc
|
| @@ -119,6 +119,7 @@ class JumpPatchSite BASE_EMBEDDED {
|
| // The live registers are:
|
| // o r1: the JS function object being called (i.e., ourselves)
|
| // o cp: our context
|
| +// o pp: our constant pool pointer (if FLAG_enable_ool_constant_pool)
|
| // o fp: our caller's frame pointer
|
| // o sp: stack pointer
|
| // o lr: return address
|
| @@ -2011,6 +2012,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
|
| __ push(r0); // generator object
|
| __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| __ bind(&post_runtime);
|
| __ pop(result_register());
|
| EmitReturnSequence();
|
| @@ -2077,6 +2079,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
|
| kLRHasBeenSaved, kDontSaveFPRegs);
|
| __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| __ pop(r0); // result
|
| EmitReturnSequence();
|
| __ bind(&l_resume); // received in r0
|
| @@ -2093,6 +2096,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
|
| Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize(1);
|
| CallIC(ic);
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
|
|
| // if (!result.done) goto l_try;
|
| __ bind(&l_loop);
|
| @@ -2165,10 +2169,11 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
|
| // lr = return address.
|
| // fp = caller's frame pointer.
|
| // cp = callee's context,
|
| + // pp = callee's constant pool (if FLAG_enable_ool_constant_pool),
|
| // r4 = callee's JS function.
|
| - __ Push(lr, fp, cp, r4);
|
| + __ PushFixedFrame(r4);
|
| // Adjust FP to point to saved FP.
|
| - __ add(fp, sp, Operand(2 * kPointerSize));
|
| + __ add(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp));
|
|
|
| // Load the operand stack size.
|
| __ ldr(r3, FieldMemOperand(r1, JSGeneratorObject::kOperandStackOffset));
|
| @@ -2231,6 +2236,7 @@ void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
|
| __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
|
| __ ldr(context_register(),
|
| MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
|
|
| __ bind(&allocated);
|
| __ mov(r1, Operand(map));
|
| @@ -2616,8 +2622,9 @@ void FullCodeGenerator::EmitCallWithIC(Call* expr,
|
| isolate()->stub_cache()->ComputeCallInitialize(arg_count, mode);
|
| CallIC(ic, mode, expr->CallFeedbackId());
|
| RecordJSReturnSite(expr);
|
| - // Restore context register.
|
| + // Restore context and pointer pool registers.
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| context()->Plug(r0);
|
| }
|
|
|
| @@ -2649,8 +2656,9 @@ void FullCodeGenerator::EmitKeyedCallWithIC(Call* expr,
|
| __ ldr(r2, MemOperand(sp, (arg_count + 1) * kPointerSize)); // Key.
|
| CallIC(ic, RelocInfo::CODE_TARGET, expr->CallFeedbackId());
|
| RecordJSReturnSite(expr);
|
| - // Restore context register.
|
| + // Restore context and pointer pool registers.
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| context()->DropAndPlug(1, r0); // Drop the key still on the stack.
|
| }
|
|
|
| @@ -2679,8 +2687,9 @@ void FullCodeGenerator::EmitCallWithStub(Call* expr, CallFunctionFlags flags) {
|
| __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
|
| __ CallStub(&stub, expr->CallFeedbackId());
|
| RecordJSReturnSite(expr);
|
| - // Restore context register.
|
| + // Restore context and pointer pool registers.
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| context()->DropAndPlug(1, r0);
|
| }
|
|
|
| @@ -2757,8 +2766,9 @@ void FullCodeGenerator::VisitCall(Call* expr) {
|
| __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
|
| __ CallStub(&stub);
|
| RecordJSReturnSite(expr);
|
| - // Restore context register.
|
| + // Restore context and pointer pool registers.
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| context()->DropAndPlug(1, r0);
|
| } else if (proxy != NULL && proxy->var()->IsUnallocated()) {
|
| // Push global object as receiver for the call IC.
|
| @@ -3752,6 +3762,7 @@ void FullCodeGenerator::EmitCallFunction(CallRuntime* expr) {
|
| __ InvokeFunction(r1, count, CALL_FUNCTION,
|
| NullCallWrapper(), CALL_AS_METHOD);
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| __ jmp(&done);
|
|
|
| __ bind(&runtime);
|
| @@ -4166,8 +4177,9 @@ void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
|
| Handle<Code> ic =
|
| isolate()->stub_cache()->ComputeCallInitialize(arg_count, mode);
|
| CallIC(ic, mode, expr->CallRuntimeFeedbackId());
|
| - // Restore context register.
|
| + // Restore context and pointer pool registers.
|
| __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
|
| + __ RestoreConstantPoolPointer();
|
| } else {
|
| // Call the C runtime function.
|
| __ CallRuntime(expr->function(), arg_count);
|
|
|