Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 76807f803f0f1c4d3f10b41e76781b7133fcb1e8..90aad4556c2422fa63a28753704d734c1802882e 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -1801,10 +1801,13 @@ |
// x11 sloppy_args_map offset to args (or aliased args) map (uninit) |
// x14 arg_count number of function arguments |
+ Register global_object = x10; |
Register global_ctx = x10; |
Register sloppy_args_map = x11; |
Register aliased_args_map = x10; |
- __ Ldr(global_ctx, NativeContextMemOperand()); |
+ __ Ldr(global_object, GlobalObjectMemOperand()); |
+ __ Ldr(global_ctx, |
+ FieldMemOperand(global_object, JSGlobalObject::kNativeContextOffset)); |
__ Ldr(sloppy_args_map, |
ContextMemOperand(global_ctx, Context::SLOPPY_ARGUMENTS_MAP_INDEX)); |
@@ -2044,9 +2047,14 @@ |
static_cast<AllocationFlags>(TAG_OBJECT | SIZE_IN_WORDS)); |
// Get the arguments boilerplate from the current (native) context. |
+ Register global_object = x10; |
+ Register global_ctx = x10; |
Register strict_args_map = x4; |
- __ LoadNativeContextSlot(Context::STRICT_ARGUMENTS_MAP_INDEX, |
- strict_args_map); |
+ __ Ldr(global_object, GlobalObjectMemOperand()); |
+ __ Ldr(global_ctx, |
+ FieldMemOperand(global_object, JSGlobalObject::kNativeContextOffset)); |
+ __ Ldr(strict_args_map, |
+ ContextMemOperand(global_ctx, Context::STRICT_ARGUMENTS_MAP_INDEX)); |
// x0 alloc_obj pointer to allocated objects: parameter array and |
// arguments object |
@@ -2685,7 +2693,7 @@ |
__ JumpIfNotRoot(feedback_map, Heap::kAllocationSiteMapRootIndex, &miss); |
// Make sure the function is the Array() function |
- __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, scratch1); |
+ __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, scratch1); |
__ Cmp(function, scratch1); |
__ B(ne, &megamorphic); |
__ B(&done); |
@@ -2709,7 +2717,7 @@ |
__ Bind(&initialize); |
// Make sure the function is the Array() function |
- __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, scratch1); |
+ __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, scratch1); |
__ Cmp(function, scratch1); |
__ B(ne, ¬_array_function); |
@@ -2785,7 +2793,7 @@ |
Register allocation_site = x4; |
Register scratch = x5; |
- __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, scratch); |
+ __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, scratch); |
__ Cmp(function, scratch); |
__ B(ne, miss); |
@@ -2920,14 +2928,15 @@ |
// Make sure the function is not the Array() function, which requires special |
// behavior on MISS. |
- __ LoadNativeContextSlot(Context::ARRAY_FUNCTION_INDEX, x5); |
+ __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, x5); |
__ Cmp(function, x5); |
__ B(eq, &miss); |
- // Make sure the function belongs to the same native context. |
+ // Make sure the function belongs to the same native context (which implies |
+ // the same global object). |
__ Ldr(x4, FieldMemOperand(function, JSFunction::kContextOffset)); |
- __ Ldr(x4, ContextMemOperand(x4, Context::NATIVE_CONTEXT_INDEX)); |
- __ Ldr(x5, NativeContextMemOperand()); |
+ __ Ldr(x4, ContextMemOperand(x4, Context::GLOBAL_OBJECT_INDEX)); |
+ __ Ldr(x4, GlobalObjectMemOperand()); |
__ Cmp(x4, x5); |
__ B(ne, &miss); |