Chromium Code Reviews| Index: src/x64/code-stubs-x64.cc |
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
| index c08e38b50992bbc1a2fbae027654f08cda603c2c..47e55dffdc88a07b097be661dc9ab4fd4f6b2794 100644 |
| --- a/src/x64/code-stubs-x64.cc |
| +++ b/src/x64/code-stubs-x64.cc |
| @@ -923,34 +923,34 @@ void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) { |
| // rax = address of new object(s) (tagged) |
| // rcx = argument count (untagged) |
| // Get the arguments boilerplate from the current native context into rdi. |
|
Igor Sheludko
2014/07/02 14:17:15
Outdated comment.
|
| - Label has_mapped_parameters, copy; |
| + Label has_mapped_parameters, instantiate; |
| __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
| __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset)); |
| __ testp(rbx, rbx); |
| __ j(not_zero, &has_mapped_parameters, Label::kNear); |
| - const int kIndex = Context::SLOPPY_ARGUMENTS_BOILERPLATE_INDEX; |
| + const int kIndex = Context::SLOPPY_ARGUMENTS_MAP_INDEX; |
| __ movp(rdi, Operand(rdi, Context::SlotOffset(kIndex))); |
| - __ jmp(©, Label::kNear); |
| + __ jmp(&instantiate, Label::kNear); |
| - const int kAliasedIndex = Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX; |
| + const int kAliasedIndex = Context::ALIASED_ARGUMENTS_MAP_INDEX; |
| __ bind(&has_mapped_parameters); |
| __ movp(rdi, Operand(rdi, Context::SlotOffset(kAliasedIndex))); |
| - __ bind(©); |
| + __ bind(&instantiate); |
| // rax = address of new object (tagged) |
| // rbx = mapped parameter count (untagged) |
| // rcx = argument count (untagged) |
| // rdi = address of boilerplate object (tagged) |
|
Igor Sheludko
2014/07/02 14:17:14
Same here.
|
| - // Copy the JS object part. |
| - for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) { |
| - __ movp(rdx, FieldOperand(rdi, i)); |
| - __ movp(FieldOperand(rax, i), rdx); |
| - } |
| + __ movp(FieldOperand(rax, JSObject::kMapOffset), rdi); |
| + __ LoadRoot(kScratchRegister, Heap::kEmptyFixedArrayRootIndex); |
| + __ movp(FieldOperand(rax, JSObject::kPropertiesOffset), kScratchRegister); |
| + __ movp(FieldOperand(rax, JSObject::kElementsOffset), kScratchRegister); |
| // Set up the callee in-object property. |
| STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1); |
| __ movp(rdx, args.GetArgumentOperand(0)); |
| + __ AssertNotSmi(rdx); |
| __ movp(FieldOperand(rax, JSObject::kHeaderSize + |
| Heap::kArgumentsCalleeIndex * kPointerSize), |
| rdx); |
| @@ -1144,14 +1144,13 @@ void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
| __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
| __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset)); |
| const int offset = |
| - Context::SlotOffset(Context::STRICT_ARGUMENTS_BOILERPLATE_INDEX); |
| + Context::SlotOffset(Context::STRICT_ARGUMENTS_MAP_INDEX); |
| __ movp(rdi, Operand(rdi, offset)); |
| - // Copy the JS object part. |
| - for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) { |
| - __ movp(rbx, FieldOperand(rdi, i)); |
| - __ movp(FieldOperand(rax, i), rbx); |
| - } |
| + __ movp(FieldOperand(rax, JSObject::kMapOffset), rdi); |
| + __ LoadRoot(kScratchRegister, Heap::kEmptyFixedArrayRootIndex); |
| + __ movp(FieldOperand(rax, JSObject::kPropertiesOffset), kScratchRegister); |
| + __ movp(FieldOperand(rax, JSObject::kElementsOffset), kScratchRegister); |
| // Get the length (smi tagged) and set that as an in-object property too. |
| STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); |