| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/heap.h" | 10 #include "vm/heap.h" |
| (...skipping 3005 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3016 | 3016 |
| 3017 Label dart_entry; | 3017 Label dart_entry; |
| 3018 call(&dart_entry); | 3018 call(&dart_entry); |
| 3019 Bind(&dart_entry); | 3019 Bind(&dart_entry); |
| 3020 // The runtime system assumes that the code marker address is | 3020 // The runtime system assumes that the code marker address is |
| 3021 // kEntryPointToPcMarkerOffset bytes from the entry. If there is any code | 3021 // kEntryPointToPcMarkerOffset bytes from the entry. If there is any code |
| 3022 // generated before entering the frame, the address needs to be adjusted. | 3022 // generated before entering the frame, the address needs to be adjusted. |
| 3023 const intptr_t object_pool_pc_dist = | 3023 const intptr_t object_pool_pc_dist = |
| 3024 Instructions::HeaderSize() - Instructions::object_pool_offset() + | 3024 Instructions::HeaderSize() - Instructions::object_pool_offset() + |
| 3025 CodeSize(); | 3025 CodeSize(); |
| 3026 const intptr_t offset = kEntryPointToPcMarkerOffset - CodeSize(); | 3026 const intptr_t offset = EntryPointToPcMarkerOffset() - CodeSize(); |
| 3027 if (offset != 0) { | 3027 if (offset != 0) { |
| 3028 addq(Address(RSP, 0), Immediate(offset)); | 3028 addq(Address(RSP, 0), Immediate(offset)); |
| 3029 } | 3029 } |
| 3030 // Save caller's pool pointer | 3030 // Save caller's pool pointer |
| 3031 pushq(PP); | 3031 pushq(PP); |
| 3032 | 3032 |
| 3033 // Load callee's pool pointer. | 3033 // Load callee's pool pointer. |
| 3034 movq(PP, Address(RSP, 1 * kWordSize)); | 3034 movq(PP, Address(RSP, 1 * kWordSize)); |
| 3035 movq(PP, Address(PP, -object_pool_pc_dist - offset)); | 3035 movq(PP, Address(PP, -object_pool_pc_dist - offset)); |
| 3036 | 3036 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3075 if (pc_marker_override == kNoRegister) { | 3075 if (pc_marker_override == kNoRegister) { |
| 3076 Label dart_entry; | 3076 Label dart_entry; |
| 3077 call(&dart_entry); | 3077 call(&dart_entry); |
| 3078 Bind(&dart_entry); | 3078 Bind(&dart_entry); |
| 3079 // The runtime system assumes that the code marker address is | 3079 // The runtime system assumes that the code marker address is |
| 3080 // kEntryPointToPcMarkerOffset bytes from the entry. Since there is no | 3080 // kEntryPointToPcMarkerOffset bytes from the entry. Since there is no |
| 3081 // code to set up the frame pointer, the address needs to be adjusted. | 3081 // code to set up the frame pointer, the address needs to be adjusted. |
| 3082 const intptr_t object_pool_pc_dist = | 3082 const intptr_t object_pool_pc_dist = |
| 3083 Instructions::HeaderSize() - Instructions::object_pool_offset() + | 3083 Instructions::HeaderSize() - Instructions::object_pool_offset() + |
| 3084 CodeSize(); | 3084 CodeSize(); |
| 3085 const intptr_t offset = kEntryPointToPcMarkerOffset - CodeSize(); | 3085 const intptr_t offset = EntryPointToPcMarkerOffset() - CodeSize(); |
| 3086 if (offset != 0) { | 3086 if (offset != 0) { |
| 3087 addq(Address(RSP, 0), Immediate(offset)); | 3087 addq(Address(RSP, 0), Immediate(offset)); |
| 3088 } | 3088 } |
| 3089 | 3089 |
| 3090 // Load callee's pool pointer. | 3090 // Load callee's pool pointer. |
| 3091 movq(PP, Address(RSP, 0)); | 3091 movq(PP, Address(RSP, 0)); |
| 3092 movq(PP, Address(PP, -object_pool_pc_dist - offset)); | 3092 movq(PP, Address(PP, -object_pool_pc_dist - offset)); |
| 3093 | 3093 |
| 3094 popq(Address(RBP, kPcMarkerSlotFromFp * kWordSize)); | 3094 popq(Address(RBP, kPcMarkerSlotFromFp * kWordSize)); |
| 3095 } else { | 3095 } else { |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3523 | 3523 |
| 3524 | 3524 |
| 3525 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3525 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 3526 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 3526 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
| 3527 return xmm_reg_names[reg]; | 3527 return xmm_reg_names[reg]; |
| 3528 } | 3528 } |
| 3529 | 3529 |
| 3530 } // namespace dart | 3530 } // namespace dart |
| 3531 | 3531 |
| 3532 #endif // defined TARGET_ARCH_X64 | 3532 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |