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/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" |
8 #include "src/codegen.h" | 8 #include "src/codegen.h" |
9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1427 __ CompareObjectType(type, x16, x17, FUNCTION_TEMPLATE_INFO_TYPE); | 1427 __ CompareObjectType(type, x16, x17, FUNCTION_TEMPLATE_INFO_TYPE); |
1428 __ B(ne, &next_prototype); | 1428 __ B(ne, &next_prototype); |
1429 | 1429 |
1430 // Otherwise load the parent function template and iterate. | 1430 // Otherwise load the parent function template and iterate. |
1431 __ Ldr(type, | 1431 __ Ldr(type, |
1432 FieldMemOperand(type, FunctionTemplateInfo::kParentTemplateOffset)); | 1432 FieldMemOperand(type, FunctionTemplateInfo::kParentTemplateOffset)); |
1433 __ B(&function_template_loop); | 1433 __ B(&function_template_loop); |
1434 | 1434 |
1435 // Load the next prototype. | 1435 // Load the next prototype. |
1436 __ Bind(&next_prototype); | 1436 __ Bind(&next_prototype); |
| 1437 __ Ldr(x16, FieldMemOperand(map, Map::kBitField3Offset)); |
| 1438 __ Tst(x16, Operand(Map::HasHiddenPrototype::kMask)); |
| 1439 __ B(eq, receiver_check_failed); |
1437 __ Ldr(receiver, FieldMemOperand(map, Map::kPrototypeOffset)); | 1440 __ Ldr(receiver, FieldMemOperand(map, Map::kPrototypeOffset)); |
1438 // End if the prototype is null or not hidden. | |
1439 __ CompareRoot(receiver, Heap::kNullValueRootIndex); | |
1440 __ B(eq, receiver_check_failed); | |
1441 __ Ldr(map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | 1441 __ Ldr(map, FieldMemOperand(receiver, HeapObject::kMapOffset)); |
1442 __ Ldr(x16, FieldMemOperand(map, Map::kBitField3Offset)); | |
1443 __ Tst(x16, Operand(Map::IsHiddenPrototype::kMask)); | |
1444 __ B(eq, receiver_check_failed); | |
1445 // Iterate. | 1442 // Iterate. |
1446 __ B(&prototype_loop_start); | 1443 __ B(&prototype_loop_start); |
1447 | 1444 |
1448 __ Bind(&receiver_check_passed); | 1445 __ Bind(&receiver_check_passed); |
1449 } | 1446 } |
1450 | 1447 |
1451 | 1448 |
1452 void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { | 1449 void Builtins::Generate_HandleFastApiCall(MacroAssembler* masm) { |
1453 // ----------- S t a t e ------------- | 1450 // ----------- S t a t e ------------- |
1454 // -- x0 : number of arguments excluding receiver | 1451 // -- x0 : number of arguments excluding receiver |
(...skipping 1368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2823 } | 2820 } |
2824 } | 2821 } |
2825 | 2822 |
2826 | 2823 |
2827 #undef __ | 2824 #undef __ |
2828 | 2825 |
2829 } // namespace internal | 2826 } // namespace internal |
2830 } // namespace v8 | 2827 } // namespace v8 |
2831 | 2828 |
2832 #endif // V8_TARGET_ARCH_ARM | 2829 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |