Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: src/arm/full-codegen-arm.cc

Issue 88043002: Out-of-line constant pool on Arm: Stage 3 - Set Constant Pool Pointer on Function Entry (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Re-upload to fix code-review error. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698