Index: src/arm/stub-cache-arm.cc |
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc |
index 08fd2c26f1c142342ba2241d26a4de4a6f552ebf..a62d85b5d51d3189b1cb5587d220d4e04c925f21 100644 |
--- a/src/arm/stub-cache-arm.cc |
+++ b/src/arm/stub-cache-arm.cc |
@@ -2340,11 +2340,12 @@ void StubCompiler::GenerateBooleanCheck(Register object, Label* miss) { |
} |
-void CallStubCompiler::PatchGlobalProxy(Handle<Object> object) { |
+void CallStubCompiler::PatchGlobalProxy(Handle<Object> object, |
+ Handle<JSFunction> function) { |
if (object->IsGlobalObject()) { |
const int argc = arguments().immediate(); |
const int receiver_offset = argc * kPointerSize; |
- __ ldr(r3, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset)); |
+ __ Move(r3, handle(function->context()->global_proxy())); |
__ str(r3, MemOperand(sp, receiver_offset)); |
} |
} |
@@ -2443,7 +2444,7 @@ void CallStubCompiler::GenerateJumpFunction(Handle<Object> object, |
ASSERT(function.is(r1)); |
// Check that the function really is a function. |
GenerateFunctionCheck(function, r3, miss); |
- PatchGlobalProxy(object); |
+ PatchGlobalProxy(object, function); |
// Invoke the function. |
__ InvokeFunction(r1, arguments(), JUMP_FUNCTION, |
@@ -2561,6 +2562,17 @@ Handle<Code> StoreStubCompiler::CompileStoreCallback( |
#define __ ACCESS_MASM(masm) |
+void CallStubCompiler::PatchGlobalProxy(MacroAssembler* masm, |
+ int argc, |
+ Register function) { |
+ const int receiver_offset = argc * kPointerSize; |
+ __ ldr(r3, FieldMemOperand(r0, JSFunction::kContextOffset)); |
+ __ ldr(r3, ContextOperand(r3, Context::GLOBAL_OBJECT_INDEX)); |
+ __ ldr(r3, FieldMemOperand(r3, GlobalObject::kGlobalReceiverOffset)); |
+ __ str(r3, MemOperand(sp, receiver_offset)); |
+} |
+ |
+ |
void StoreStubCompiler::GenerateStoreViaSetter( |
MacroAssembler* masm, |
Handle<JSFunction> setter) { |