OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_X64 | 5 #if V8_TARGET_ARCH_X64 |
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/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 4290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4301 __ LoadRoot(rcx, Heap::kEmptyFixedArrayRootIndex); | 4301 __ LoadRoot(rcx, Heap::kEmptyFixedArrayRootIndex); |
4302 __ movp(FieldOperand(rax, JSArray::kPropertiesOffset), rcx); | 4302 __ movp(FieldOperand(rax, JSArray::kPropertiesOffset), rcx); |
4303 __ movp(FieldOperand(rax, JSArray::kElementsOffset), rdx); | 4303 __ movp(FieldOperand(rax, JSArray::kElementsOffset), rdx); |
4304 __ movp(FieldOperand(rax, JSArray::kLengthOffset), rdi); | 4304 __ movp(FieldOperand(rax, JSArray::kLengthOffset), rdi); |
4305 STATIC_ASSERT(JSArray::kSize == 4 * kPointerSize); | 4305 STATIC_ASSERT(JSArray::kSize == 4 * kPointerSize); |
4306 __ Ret(); | 4306 __ Ret(); |
4307 | 4307 |
4308 // Fall back to %AllocateInNewSpace (if not too big). | 4308 // Fall back to %AllocateInNewSpace (if not too big). |
4309 Label too_big_for_new_space; | 4309 Label too_big_for_new_space; |
4310 __ bind(&allocate); | 4310 __ bind(&allocate); |
4311 __ cmpl(rcx, Immediate(Page::kMaxRegularHeapObjectSize)); | 4311 __ cmpl(rcx, Immediate(kMaxRegularHeapObjectSize)); |
4312 __ j(greater, &too_big_for_new_space); | 4312 __ j(greater, &too_big_for_new_space); |
4313 { | 4313 { |
4314 FrameScope scope(masm, StackFrame::INTERNAL); | 4314 FrameScope scope(masm, StackFrame::INTERNAL); |
4315 __ Integer32ToSmi(rax, rax); | 4315 __ Integer32ToSmi(rax, rax); |
4316 __ Integer32ToSmi(rcx, rcx); | 4316 __ Integer32ToSmi(rcx, rcx); |
4317 __ Push(rax); | 4317 __ Push(rax); |
4318 __ Push(rbx); | 4318 __ Push(rbx); |
4319 __ Push(rcx); | 4319 __ Push(rcx); |
4320 __ CallRuntime(Runtime::kAllocateInNewSpace); | 4320 __ CallRuntime(Runtime::kAllocateInNewSpace); |
4321 __ movp(rdx, rax); | 4321 __ movp(rdx, rax); |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4664 __ LoadRoot(rcx, Heap::kEmptyFixedArrayRootIndex); | 4664 __ LoadRoot(rcx, Heap::kEmptyFixedArrayRootIndex); |
4665 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kPropertiesOffset), rcx); | 4665 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kPropertiesOffset), rcx); |
4666 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kElementsOffset), rdx); | 4666 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kElementsOffset), rdx); |
4667 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kLengthOffset), rdi); | 4667 __ movp(FieldOperand(rax, JSStrictArgumentsObject::kLengthOffset), rdi); |
4668 STATIC_ASSERT(JSStrictArgumentsObject::kSize == 4 * kPointerSize); | 4668 STATIC_ASSERT(JSStrictArgumentsObject::kSize == 4 * kPointerSize); |
4669 __ Ret(); | 4669 __ Ret(); |
4670 | 4670 |
4671 // Fall back to %AllocateInNewSpace (if not too big). | 4671 // Fall back to %AllocateInNewSpace (if not too big). |
4672 Label too_big_for_new_space; | 4672 Label too_big_for_new_space; |
4673 __ bind(&allocate); | 4673 __ bind(&allocate); |
4674 __ cmpl(rcx, Immediate(Page::kMaxRegularHeapObjectSize)); | 4674 __ cmpl(rcx, Immediate(kMaxRegularHeapObjectSize)); |
4675 __ j(greater, &too_big_for_new_space); | 4675 __ j(greater, &too_big_for_new_space); |
4676 { | 4676 { |
4677 FrameScope scope(masm, StackFrame::INTERNAL); | 4677 FrameScope scope(masm, StackFrame::INTERNAL); |
4678 __ Integer32ToSmi(rax, rax); | 4678 __ Integer32ToSmi(rax, rax); |
4679 __ Integer32ToSmi(rcx, rcx); | 4679 __ Integer32ToSmi(rcx, rcx); |
4680 __ Push(rax); | 4680 __ Push(rax); |
4681 __ Push(rbx); | 4681 __ Push(rbx); |
4682 __ Push(rcx); | 4682 __ Push(rcx); |
4683 __ CallRuntime(Runtime::kAllocateInNewSpace); | 4683 __ CallRuntime(Runtime::kAllocateInNewSpace); |
4684 __ movp(rdx, rax); | 4684 __ movp(rdx, rax); |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5204 kStackUnwindSpace, nullptr, return_value_operand, | 5204 kStackUnwindSpace, nullptr, return_value_operand, |
5205 NULL); | 5205 NULL); |
5206 } | 5206 } |
5207 | 5207 |
5208 #undef __ | 5208 #undef __ |
5209 | 5209 |
5210 } // namespace internal | 5210 } // namespace internal |
5211 } // namespace v8 | 5211 } // namespace v8 |
5212 | 5212 |
5213 #endif // V8_TARGET_ARCH_X64 | 5213 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |