Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 0e089070615cca9d41a2c253750a2fe7ccff6222..6dc564da4a9d434a7643b1a3102f5d1dd0cfb6cb 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -2103,42 +2103,41 @@ void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) { |
// Get the arguments boilerplate from the current (global) context. |
- // x0 alloc_obj pointer to allocated objects (param map, backing |
- // store, arguments) |
- // x1 mapped_params number of mapped parameters, min(params, args) |
- // x2 arg_count number of function arguments |
- // x3 arg_count_smi number of function arguments (smi) |
- // x4 function function pointer |
- // x7 param_count number of function parameters |
- // x11 sloppy_args_map offset to args (or aliased args) map (uninit) |
- // x14 recv_arg pointer to receiver arguments |
+ // x0 alloc_obj pointer to allocated objects (param map, backing |
+ // store, arguments) |
+ // x1 mapped_params number of mapped parameters, min(params, args) |
+ // x2 arg_count number of function arguments |
+ // x3 arg_count_smi number of function arguments (smi) |
+ // x4 function function pointer |
+ // x7 param_count number of function parameters |
+ // x11 args_offset offset to args (or aliased args) boilerplate (uninit) |
+ // x14 recv_arg pointer to receiver arguments |
Register global_object = x10; |
Register global_ctx = x10; |
- Register sloppy_args_map = x11; |
- Register aliased_args_map = x10; |
+ Register args_offset = x11; |
+ Register aliased_args_offset = x10; |
__ Ldr(global_object, GlobalObjectMemOperand()); |
__ Ldr(global_ctx, FieldMemOperand(global_object, |
GlobalObject::kNativeContextOffset)); |
- __ Ldr(sloppy_args_map, |
- ContextMemOperand(global_ctx, Context::SLOPPY_ARGUMENTS_MAP_INDEX)); |
- __ Ldr(aliased_args_map, |
- ContextMemOperand(global_ctx, Context::ALIASED_ARGUMENTS_MAP_INDEX)); |
+ __ Ldr(args_offset, |
+ ContextMemOperand(global_ctx, |
+ Context::SLOPPY_ARGUMENTS_BOILERPLATE_INDEX)); |
+ __ Ldr(aliased_args_offset, |
+ ContextMemOperand(global_ctx, |
+ Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX)); |
__ Cmp(mapped_params, 0); |
- __ CmovX(sloppy_args_map, aliased_args_map, ne); |
+ __ CmovX(args_offset, aliased_args_offset, ne); |
// Copy the JS object part. |
- __ Str(sloppy_args_map, FieldMemOperand(alloc_obj, JSObject::kMapOffset)); |
- __ LoadRoot(x10, Heap::kEmptyFixedArrayRootIndex); |
- __ Str(x10, FieldMemOperand(alloc_obj, JSObject::kPropertiesOffset)); |
- __ Str(x10, FieldMemOperand(alloc_obj, JSObject::kElementsOffset)); |
+ __ CopyFields(alloc_obj, args_offset, CPURegList(x10, x12, x13), |
+ JSObject::kHeaderSize / kPointerSize); |
// Set up the callee in-object property. |
STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1); |
const int kCalleeOffset = JSObject::kHeaderSize + |
Heap::kArgumentsCalleeIndex * kPointerSize; |
- __ AssertNotSmi(function); |
__ Str(function, FieldMemOperand(alloc_obj, kCalleeOffset)); |
// Use the length and set that as an in-object property. |
@@ -2339,24 +2338,25 @@ void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
// Get the arguments boilerplate from the current (native) context. |
Register global_object = x10; |
Register global_ctx = x10; |
- Register strict_args_map = x4; |
+ Register args_offset = x4; |
__ Ldr(global_object, GlobalObjectMemOperand()); |
__ Ldr(global_ctx, FieldMemOperand(global_object, |
GlobalObject::kNativeContextOffset)); |
- __ Ldr(strict_args_map, |
- ContextMemOperand(global_ctx, Context::STRICT_ARGUMENTS_MAP_INDEX)); |
+ __ Ldr(args_offset, |
+ ContextMemOperand(global_ctx, |
+ Context::STRICT_ARGUMENTS_BOILERPLATE_INDEX)); |
// x0 alloc_obj pointer to allocated objects: parameter array and |
// arguments object |
// x1 param_count_smi number of parameters passed to function (smi) |
// x2 params pointer to parameters |
// x3 function function pointer |
- // x4 strict_args_map offset to arguments map |
+ // x4 args_offset offset to arguments boilerplate |
// x13 param_count number of parameters passed to function |
- __ Str(strict_args_map, FieldMemOperand(alloc_obj, JSObject::kMapOffset)); |
- __ LoadRoot(x5, Heap::kEmptyFixedArrayRootIndex); |
- __ Str(x5, FieldMemOperand(alloc_obj, JSObject::kPropertiesOffset)); |
- __ Str(x5, FieldMemOperand(alloc_obj, JSObject::kElementsOffset)); |
+ |
+ // Copy the JS object part. |
+ __ CopyFields(alloc_obj, args_offset, CPURegList(x5, x6, x7), |
+ JSObject::kHeaderSize / kPointerSize); |
// Set the smi-tagged length as an in-object property. |
STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); |