Index: src/x64/builtins-x64.cc |
diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc |
index 8099febb7f370865428d48e8c8f9be7aef859e8b..bd8739f1522547c354022c373263b236fe07fa18 100644 |
--- a/src/x64/builtins-x64.cc |
+++ b/src/x64/builtins-x64.cc |
@@ -308,7 +308,8 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { |
// (tail-call) to the code in register edx without checking arguments. |
__ movq(rdx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset)); |
__ movsxlq(rbx, |
- FieldOperand(rdx, SharedFunctionInfo::kFormalParameterCountOffset)); |
+ FieldOperand(rdx, |
+ SharedFunctionInfo::kFormalParameterCountOffset)); |
__ movq(rdx, FieldOperand(rdx, SharedFunctionInfo::kCodeOffset)); |
__ lea(rdx, FieldOperand(rdx, Code::kHeaderSize)); |
__ cmpq(rax, rbx); |
@@ -525,15 +526,15 @@ static void AllocateEmptyJSArray(MacroAssembler* masm, |
__ lea(scratch1, Operand(result, JSArray::kSize)); |
__ movq(FieldOperand(result, JSArray::kElementsOffset), scratch1); |
- // Initialize the FixedArray and fill it with holes. FixedArray length is not |
+ // Initialize the FixedArray and fill it with holes. FixedArray length is |
// stored as a smi. |
// result: JSObject |
// scratch1: elements array |
// scratch2: start of next object |
- __ Move(FieldOperand(scratch1, JSObject::kMapOffset), |
+ __ Move(FieldOperand(scratch1, HeapObject::kMapOffset), |
Factory::fixed_array_map()); |
- __ movq(FieldOperand(scratch1, Array::kLengthOffset), |
- Immediate(initial_capacity)); |
+ __ Move(FieldOperand(scratch1, FixedArray::kLengthOffset), |
+ Smi::FromInt(initial_capacity)); |
// Fill the FixedArray with the hole value. Inline the code if short. |
// Reconsider loop unfolding if kPreallocatedArrayElements gets changed. |
@@ -587,7 +588,6 @@ static void AllocateJSArray(MacroAssembler* masm, |
JSFunction::kPrototypeOrInitialMapOffset)); |
// Check whether an empty sized array is requested. |
- __ SmiToInteger64(array_size, array_size); |
__ testq(array_size, array_size); |
__ j(not_zero, ¬_empty); |
@@ -605,10 +605,11 @@ static void AllocateJSArray(MacroAssembler* masm, |
// Allocate the JSArray object together with space for a FixedArray with the |
// requested elements. |
__ bind(¬_empty); |
- ASSERT(kSmiTagSize == 1 && kSmiTag == 0); |
+ SmiIndex index = |
+ masm->SmiToIndex(kScratchRegister, array_size, kPointerSizeLog2); |
__ AllocateInNewSpace(JSArray::kSize + FixedArray::kHeaderSize, |
- times_pointer_size, |
- array_size, |
+ index.scale, |
+ index.reg, |
result, |
elements_array_end, |
scratch, |
@@ -620,43 +621,41 @@ static void AllocateJSArray(MacroAssembler* masm, |
// result: JSObject |
// elements_array: initial map |
// elements_array_end: start of next object |
- // array_size: size of array |
+ // array_size: size of array (smi) |
__ bind(&allocated); |
__ movq(FieldOperand(result, JSObject::kMapOffset), elements_array); |
__ Move(elements_array, Factory::empty_fixed_array()); |
__ movq(FieldOperand(result, JSArray::kPropertiesOffset), elements_array); |
// Field JSArray::kElementsOffset is initialized later. |
- __ Integer32ToSmi(scratch, array_size); |
- __ movq(FieldOperand(result, JSArray::kLengthOffset), scratch); |
+ __ movq(FieldOperand(result, JSArray::kLengthOffset), array_size); |
// Calculate the location of the elements array and set elements array member |
// of the JSArray. |
// result: JSObject |
// elements_array_end: start of next object |
- // array_size: size of array |
+ // array_size: size of array (smi) |
__ lea(elements_array, Operand(result, JSArray::kSize)); |
__ movq(FieldOperand(result, JSArray::kElementsOffset), elements_array); |
- // Initialize the fixed array. FixedArray length is not stored as a smi. |
+ // Initialize the fixed array. FixedArray length is stored as a smi. |
// result: JSObject |
// elements_array: elements array |
// elements_array_end: start of next object |
- // array_size: size of array |
- ASSERT(kSmiTag == 0); |
+ // array_size: size of array (smi) |
__ Move(FieldOperand(elements_array, JSObject::kMapOffset), |
Factory::fixed_array_map()); |
Label not_empty_2, fill_array; |
- __ testq(array_size, array_size); |
+ __ SmiTest(array_size); |
__ j(not_zero, ¬_empty_2); |
// Length of the FixedArray is the number of pre-allocated elements even |
// though the actual JSArray has length 0. |
- __ movq(FieldOperand(elements_array, Array::kLengthOffset), |
- Immediate(kPreallocatedArrayElements)); |
+ __ Move(FieldOperand(elements_array, FixedArray::kLengthOffset), |
+ Smi::FromInt(kPreallocatedArrayElements)); |
__ jmp(&fill_array); |
__ bind(¬_empty_2); |
// For non-empty JSArrays the length of the FixedArray and the JSArray is the |
// same. |
- __ movq(FieldOperand(elements_array, Array::kLengthOffset), array_size); |
+ __ movq(FieldOperand(elements_array, FixedArray::kLengthOffset), array_size); |
// Fill the allocated FixedArray with the hole value if requested. |
// result: JSObject |
@@ -1039,8 +1038,9 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm, |
// rdx: number of elements |
// rax: start of next object |
__ LoadRoot(rcx, Heap::kFixedArrayMapRootIndex); |
- __ movq(Operand(rdi, JSObject::kMapOffset), rcx); // setup the map |
- __ movl(Operand(rdi, FixedArray::kLengthOffset), rdx); // and length |
+ __ movq(Operand(rdi, HeapObject::kMapOffset), rcx); // setup the map |
+ __ Integer32ToSmi(rdx, rdx); |
+ __ movq(Operand(rdi, FixedArray::kLengthOffset), rdx); // and length |
// Initialize the fields to undefined. |
// rbx: JSObject |