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_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.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/debug/debug.h" | 10 #include "src/debug/debug.h" |
(...skipping 2780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2791 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 2791 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
2792 context()->DropAndPlug(1, x0); | 2792 context()->DropAndPlug(1, x0); |
2793 | 2793 |
2794 } else if (call_type == Call::GLOBAL_CALL) { | 2794 } else if (call_type == Call::GLOBAL_CALL) { |
2795 EmitCallWithLoadIC(expr); | 2795 EmitCallWithLoadIC(expr); |
2796 | 2796 |
2797 } else if (call_type == Call::LOOKUP_SLOT_CALL) { | 2797 } else if (call_type == Call::LOOKUP_SLOT_CALL) { |
2798 // Call to a lookup slot (dynamically introduced variable). | 2798 // Call to a lookup slot (dynamically introduced variable). |
2799 PushCalleeAndWithBaseObject(expr); | 2799 PushCalleeAndWithBaseObject(expr); |
2800 EmitCall(expr); | 2800 EmitCall(expr); |
2801 } else if (call_type == Call::PROPERTY_CALL) { | 2801 } else if (call_type == Call::NAMED_PROPERTY_CALL) { |
2802 Property* property = callee->AsProperty(); | 2802 Property* property = callee->AsProperty(); |
2803 bool is_named_call = property->key()->IsPropertyName(); | 2803 VisitForStackValue(property->obj()); |
2804 if (property->IsSuperAccess()) { | 2804 EmitCallWithLoadIC(expr); |
2805 if (is_named_call) { | 2805 } else if (call_type == Call::KEYED_PROPERTY_CALL) { |
2806 EmitSuperCallWithLoadIC(expr); | 2806 Property* property = callee->AsProperty(); |
2807 } else { | 2807 VisitForStackValue(property->obj()); |
2808 EmitKeyedSuperCallWithLoadIC(expr); | 2808 EmitKeyedCallWithLoadIC(expr, property->key()); |
2809 } | 2809 } else if (call_type == Call::NAMED_SUPER_PROPERTY_CALL) { |
2810 } else { | 2810 EmitSuperCallWithLoadIC(expr); |
2811 VisitForStackValue(property->obj()); | 2811 } else if (call_type == Call::KEYED_SUPER_PROPERTY_CALL) { |
2812 if (is_named_call) { | 2812 EmitKeyedSuperCallWithLoadIC(expr); |
2813 EmitCallWithLoadIC(expr); | |
2814 } else { | |
2815 EmitKeyedCallWithLoadIC(expr, property->key()); | |
2816 } | |
2817 } | |
2818 } else if (call_type == Call::SUPER_CALL) { | 2813 } else if (call_type == Call::SUPER_CALL) { |
2819 EmitSuperConstructorCall(expr); | 2814 EmitSuperConstructorCall(expr); |
2820 } else { | 2815 } else { |
2821 DCHECK(call_type == Call::OTHER_CALL); | 2816 DCHECK(call_type == Call::OTHER_CALL); |
2822 // Call to an arbitrary expression not handled specially above. | 2817 // Call to an arbitrary expression not handled specially above. |
2823 VisitForStackValue(callee); | 2818 VisitForStackValue(callee); |
2824 __ LoadRoot(x1, Heap::kUndefinedValueRootIndex); | 2819 __ LoadRoot(x1, Heap::kUndefinedValueRootIndex); |
2825 __ Push(x1); | 2820 __ Push(x1); |
2826 // Emit function call. | 2821 // Emit function call. |
2827 EmitCall(expr); | 2822 EmitCall(expr); |
(...skipping 2352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5180 } | 5175 } |
5181 | 5176 |
5182 return INTERRUPT; | 5177 return INTERRUPT; |
5183 } | 5178 } |
5184 | 5179 |
5185 | 5180 |
5186 } // namespace internal | 5181 } // namespace internal |
5187 } // namespace v8 | 5182 } // namespace v8 |
5188 | 5183 |
5189 #endif // V8_TARGET_ARCH_ARM64 | 5184 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |