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 #ifndef RUNTIME_VM_CONSTANTS_ARM_H_ | 5 #ifndef RUNTIME_VM_CONSTANTS_ARM_H_ |
6 #define RUNTIME_VM_CONSTANTS_ARM_H_ | 6 #define RUNTIME_VM_CONSTANTS_ARM_H_ |
7 | 7 |
8 #include "platform/globals.h" | 8 #include "platform/globals.h" |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 | 10 |
11 namespace dart { | 11 namespace dart { |
12 | 12 |
13 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at | 13 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at |
14 // a time. | 14 // a time. |
15 #if defined(__ARM_ARCH_7A__) | 15 #if defined(__ARM_ARCH_7A__) |
16 #define VFPv3_D32 | 16 #define VFPv3_D32 |
17 #elif defined(TARGET_ARCH_ARM) && !defined(HOST_ARCH_ARM) | 17 #elif defined(TARGET_ARCH_ARM) && !defined(HOST_ARCH_ARM) |
18 // If we're running in the simulator, use all 32. | 18 // If we're running in the simulator, use all 32. |
19 #define VFPv3_D32 | 19 #define VFPv3_D32 |
20 #else | 20 #else |
21 #define VFPv3_D16 | 21 #define VFPv3_D16 |
22 #endif | 22 #endif |
23 #if defined(VFPv3_D16) == defined(VFPv3_D32) | 23 #if defined(VFPv3_D16) == defined(VFPv3_D32) |
24 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time." | 24 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time." |
25 #endif | 25 #endif |
26 | 26 |
27 | 27 |
28 // The Linux/Android ABI and the iOS ABI differ in their choice of frame | 28 // The Linux/Android ABI and the iOS ABI differ in their choice of frame |
29 // pointer, their treatment of R9, and the interproduceral stack alignment. | 29 // pointer, their treatment of R9, and the interprocedural stack alignment. |
30 | 30 |
31 // EABI (Linux, Android) | 31 // EABI (Linux, Android) |
32 // See "Procedure Call Standard for the ARM Architecture". | 32 // See "Procedure Call Standard for the ARM Architecture". |
33 // R0-R1: Argument / result / volatile | 33 // R0-R1: Argument / result / volatile |
34 // R2-R3: Argument / volatile | 34 // R2-R3: Argument / volatile |
35 // R4-R10: Preserved | 35 // R4-R10: Preserved |
36 // R11: Frame pointer | 36 // R11: Frame pointer |
37 // R12: Volatile | 37 // R12: Volatile |
38 // R13: Stack pointer | 38 // R13: Stack pointer |
39 // R14: Link register | 39 // R14: Link register |
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } | 758 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } |
759 | 759 |
760 private: | 760 private: |
761 DISALLOW_ALLOCATION(); | 761 DISALLOW_ALLOCATION(); |
762 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); | 762 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); |
763 }; | 763 }; |
764 | 764 |
765 } // namespace dart | 765 } // namespace dart |
766 | 766 |
767 #endif // RUNTIME_VM_CONSTANTS_ARM_H_ | 767 #endif // RUNTIME_VM_CONSTANTS_ARM_H_ |
OLD | NEW |