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/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/ic/handler-compiler.h" | 10 #include "src/ic/handler-compiler.h" |
(...skipping 4690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4701 STATIC_ASSERT(kSmiTag == 0); | 4701 STATIC_ASSERT(kSmiTag == 0); |
4702 Condition not_smi = NegateCondition(masm->CheckSmi(rcx)); | 4702 Condition not_smi = NegateCondition(masm->CheckSmi(rcx)); |
4703 __ Check(not_smi, kUnexpectedInitialMapForArrayFunction); | 4703 __ Check(not_smi, kUnexpectedInitialMapForArrayFunction); |
4704 __ CmpObjectType(rcx, MAP_TYPE, rcx); | 4704 __ CmpObjectType(rcx, MAP_TYPE, rcx); |
4705 __ Check(equal, kUnexpectedInitialMapForArrayFunction); | 4705 __ Check(equal, kUnexpectedInitialMapForArrayFunction); |
4706 | 4706 |
4707 // We should either have undefined in rbx or a valid AllocationSite | 4707 // We should either have undefined in rbx or a valid AllocationSite |
4708 __ AssertUndefinedOrAllocationSite(rbx); | 4708 __ AssertUndefinedOrAllocationSite(rbx); |
4709 } | 4709 } |
4710 | 4710 |
| 4711 // Enter the context of the Array function. |
| 4712 __ movp(rsi, FieldOperand(rdi, JSFunction::kContextOffset)); |
| 4713 |
4711 Label subclassing; | 4714 Label subclassing; |
4712 __ cmpp(rdi, rdx); | 4715 __ cmpp(rdi, rdx); |
4713 __ j(not_equal, &subclassing); | 4716 __ j(not_equal, &subclassing); |
4714 | 4717 |
4715 Label no_info; | 4718 Label no_info; |
4716 // If the feedback vector is the undefined value call an array constructor | 4719 // If the feedback vector is the undefined value call an array constructor |
4717 // that doesn't use AllocationSites. | 4720 // that doesn't use AllocationSites. |
4718 __ CompareRoot(rbx, Heap::kUndefinedValueRootIndex); | 4721 __ CompareRoot(rbx, Heap::kUndefinedValueRootIndex); |
4719 __ j(equal, &no_info); | 4722 __ j(equal, &no_info); |
4720 | 4723 |
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5398 kStackSpace, nullptr, return_value_operand, NULL); | 5401 kStackSpace, nullptr, return_value_operand, NULL); |
5399 } | 5402 } |
5400 | 5403 |
5401 | 5404 |
5402 #undef __ | 5405 #undef __ |
5403 | 5406 |
5404 } // namespace internal | 5407 } // namespace internal |
5405 } // namespace v8 | 5408 } // namespace v8 |
5406 | 5409 |
5407 #endif // V8_TARGET_ARCH_X64 | 5410 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |