Index: src/x64/codegen-x64.cc |
diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc |
index d30ca498f04c249fef010713138fdfd5ac98b67a..939051b0f0c9d45fff4d20ad067215d28237489c 100644 |
--- a/src/x64/codegen-x64.cc |
+++ b/src/x64/codegen-x64.cc |
@@ -184,26 +184,29 @@ ModuloFunction CreateModuloFunction() { |
#define __ ACCESS_MASM(masm) |
void ElementsTransitionGenerator::GenerateMapChangeElementsTransition( |
- MacroAssembler* masm, AllocationSiteMode mode, |
+ MacroAssembler* masm, |
+ Register receiver, |
+ Register key, |
+ Register value, |
+ Register target_map, |
+ AllocationSiteMode mode, |
Label* allocation_memento_found) { |
- // ----------- S t a t e ------------- |
- // -- rax : value |
- // -- rbx : target map |
- // -- rcx : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
+ // Return address is on the stack. |
+ Register scratch = rdi; |
+ ASSERT(!AreAliased(receiver, key, value, target_map, scratch)); |
+ |
if (mode == TRACK_ALLOCATION_SITE) { |
ASSERT(allocation_memento_found != NULL); |
- __ JumpIfJSArrayHasAllocationMemento(rdx, rdi, allocation_memento_found); |
+ __ JumpIfJSArrayHasAllocationMemento( |
+ receiver, scratch, allocation_memento_found); |
} |
// Set transitioned map. |
- __ movp(FieldOperand(rdx, HeapObject::kMapOffset), rbx); |
- __ RecordWriteField(rdx, |
+ __ movp(FieldOperand(receiver, HeapObject::kMapOffset), target_map); |
+ __ RecordWriteField(receiver, |
HeapObject::kMapOffset, |
- rbx, |
- rdi, |
+ target_map, |
+ scratch, |
kDontSaveFPRegs, |
EMIT_REMEMBERED_SET, |
OMIT_SMI_CHECK); |
@@ -211,14 +214,19 @@ void ElementsTransitionGenerator::GenerateMapChangeElementsTransition( |
void ElementsTransitionGenerator::GenerateSmiToDouble( |
- MacroAssembler* masm, AllocationSiteMode mode, Label* fail) { |
- // ----------- S t a t e ------------- |
- // -- rax : value |
- // -- rbx : target map |
- // -- rcx : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
+ MacroAssembler* masm, |
+ Register receiver, |
+ Register key, |
+ Register value, |
+ Register target_map, |
+ AllocationSiteMode mode, |
+ Label* fail) { |
+ // Return address is on the stack. |
+ ASSERT(receiver.is(rdx)); |
+ ASSERT(key.is(rcx)); |
+ ASSERT(value.is(rax)); |
+ ASSERT(target_map.is(rbx)); |
+ |
// The fail label is not actually used since we do not allocate. |
Label allocated, new_backing_store, only_change_map, done; |
@@ -345,14 +353,19 @@ void ElementsTransitionGenerator::GenerateSmiToDouble( |
void ElementsTransitionGenerator::GenerateDoubleToObject( |
- MacroAssembler* masm, AllocationSiteMode mode, Label* fail) { |
- // ----------- S t a t e ------------- |
- // -- rax : value |
- // -- rbx : target map |
- // -- rcx : key |
- // -- rdx : receiver |
- // -- rsp[0] : return address |
- // ----------------------------------- |
+ MacroAssembler* masm, |
+ Register receiver, |
+ Register key, |
+ Register value, |
+ Register target_map, |
+ AllocationSiteMode mode, |
+ Label* fail) { |
+ // Return address is on the stack. |
+ ASSERT(receiver.is(rdx)); |
+ ASSERT(key.is(rcx)); |
+ ASSERT(value.is(rax)); |
+ ASSERT(target_map.is(rbx)); |
+ |
Label loop, entry, convert_hole, gc_required, only_change_map; |
if (mode == TRACK_ALLOCATION_SITE) { |