| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 4554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4565 // Fall back to runtime if the target differs from the new target's | 4565 // Fall back to runtime if the target differs from the new target's |
| 4566 // initial map constructor. | 4566 // initial map constructor. |
| 4567 __ cmp(edi, FieldOperand(ecx, Map::kConstructorOrBackPointerOffset)); | 4567 __ cmp(edi, FieldOperand(ecx, Map::kConstructorOrBackPointerOffset)); |
| 4568 __ j(not_equal, &new_object); | 4568 __ j(not_equal, &new_object); |
| 4569 | 4569 |
| 4570 // Allocate the JSObject on the heap. | 4570 // Allocate the JSObject on the heap. |
| 4571 Label allocate, done_allocate; | 4571 Label allocate, done_allocate; |
| 4572 __ movzx_b(ebx, FieldOperand(ecx, Map::kInstanceSizeOffset)); | 4572 __ movzx_b(ebx, FieldOperand(ecx, Map::kInstanceSizeOffset)); |
| 4573 __ lea(ebx, Operand(ebx, times_pointer_size, 0)); | 4573 __ lea(ebx, Operand(ebx, times_pointer_size, 0)); |
| 4574 __ Allocate(ebx, eax, edi, no_reg, &allocate, NO_ALLOCATION_FLAGS); | 4574 __ Allocate(ebx, eax, edi, no_reg, &allocate, NO_ALLOCATION_FLAGS); |
| 4575 __ dec(edi); // Untag result end. | |
| 4576 __ bind(&done_allocate); | 4575 __ bind(&done_allocate); |
| 4577 | 4576 |
| 4578 // Initialize the JSObject fields. | 4577 // Initialize the JSObject fields. |
| 4579 __ mov(FieldOperand(eax, JSObject::kMapOffset), ecx); | 4578 __ mov(FieldOperand(eax, JSObject::kMapOffset), ecx); |
| 4580 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), | 4579 __ mov(FieldOperand(eax, JSObject::kPropertiesOffset), |
| 4581 masm->isolate()->factory()->empty_fixed_array()); | 4580 masm->isolate()->factory()->empty_fixed_array()); |
| 4582 __ mov(FieldOperand(eax, JSObject::kElementsOffset), | 4581 __ mov(FieldOperand(eax, JSObject::kElementsOffset), |
| 4583 masm->isolate()->factory()->empty_fixed_array()); | 4582 masm->isolate()->factory()->empty_fixed_array()); |
| 4584 STATIC_ASSERT(JSObject::kHeaderSize == 3 * kPointerSize); | 4583 STATIC_ASSERT(JSObject::kHeaderSize == 3 * kPointerSize); |
| 4585 __ lea(ebx, FieldOperand(eax, JSObject::kHeaderSize)); | 4584 __ lea(ebx, FieldOperand(eax, JSObject::kHeaderSize)); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4716 __ bind(&no_rest_parameters); | 4715 __ bind(&no_rest_parameters); |
| 4717 { | 4716 { |
| 4718 // ----------- S t a t e ------------- | 4717 // ----------- S t a t e ------------- |
| 4719 // -- esi : context | 4718 // -- esi : context |
| 4720 // -- esp[0] : return address | 4719 // -- esp[0] : return address |
| 4721 // ----------------------------------- | 4720 // ----------------------------------- |
| 4722 | 4721 |
| 4723 // Allocate an empty rest parameter array. | 4722 // Allocate an empty rest parameter array. |
| 4724 Label allocate, done_allocate; | 4723 Label allocate, done_allocate; |
| 4725 __ Allocate(JSArray::kSize, eax, edx, ecx, &allocate, NO_ALLOCATION_FLAGS); | 4724 __ Allocate(JSArray::kSize, eax, edx, ecx, &allocate, NO_ALLOCATION_FLAGS); |
| 4726 __ dec(edx); // Untag result end. | |
| 4727 __ bind(&done_allocate); | 4725 __ bind(&done_allocate); |
| 4728 | 4726 |
| 4729 // Setup the rest parameter array in rax. | 4727 // Setup the rest parameter array in rax. |
| 4730 __ LoadGlobalFunction(Context::JS_ARRAY_FAST_ELEMENTS_MAP_INDEX, ecx); | 4728 __ LoadGlobalFunction(Context::JS_ARRAY_FAST_ELEMENTS_MAP_INDEX, ecx); |
| 4731 __ mov(FieldOperand(eax, JSArray::kMapOffset), ecx); | 4729 __ mov(FieldOperand(eax, JSArray::kMapOffset), ecx); |
| 4732 __ mov(ecx, isolate()->factory()->empty_fixed_array()); | 4730 __ mov(ecx, isolate()->factory()->empty_fixed_array()); |
| 4733 __ mov(FieldOperand(eax, JSArray::kPropertiesOffset), ecx); | 4731 __ mov(FieldOperand(eax, JSArray::kPropertiesOffset), ecx); |
| 4734 __ mov(FieldOperand(eax, JSArray::kElementsOffset), ecx); | 4732 __ mov(FieldOperand(eax, JSArray::kElementsOffset), ecx); |
| 4735 __ mov(FieldOperand(eax, JSArray::kLengthOffset), | 4733 __ mov(FieldOperand(eax, JSArray::kLengthOffset), |
| 4736 Immediate(Smi::FromInt(0))); | 4734 Immediate(Smi::FromInt(0))); |
| (...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5719 kStackUnwindSpace, nullptr, return_value_operand, | 5717 kStackUnwindSpace, nullptr, return_value_operand, |
| 5720 NULL); | 5718 NULL); |
| 5721 } | 5719 } |
| 5722 | 5720 |
| 5723 #undef __ | 5721 #undef __ |
| 5724 | 5722 |
| 5725 } // namespace internal | 5723 } // namespace internal |
| 5726 } // namespace v8 | 5724 } // namespace v8 |
| 5727 | 5725 |
| 5728 #endif // V8_TARGET_ARCH_IA32 | 5726 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |