665f33e1 |
1 | #ifndef __ARM_FEATURES_H__ |
2 | #define __ARM_FEATURES_H__ |
3 | |
871bf1c4 |
4 | #if defined(__ARM_ARCH_8A__) |
5 | |
6 | #define HAVE_ARMV8 |
7 | #define HAVE_ARMV7 |
8 | #define HAVE_ARMV6 |
9 | #define HAVE_ARMV5 |
10 | |
11 | #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ |
665f33e1 |
12 | || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ |
bd36656c |
13 | || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__) |
665f33e1 |
14 | |
15 | #define HAVE_ARMV7 |
16 | #define HAVE_ARMV6 |
17 | #define HAVE_ARMV5 |
18 | |
19 | #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ |
20 | || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ |
871bf1c4 |
21 | || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ |
22 | || defined(__ARM_ARCH_6M__) |
665f33e1 |
23 | |
24 | #define HAVE_ARMV6 |
25 | #define HAVE_ARMV5 |
26 | |
27 | #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5E__) \ |
28 | || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__) |
29 | |
30 | #define HAVE_ARMV5 |
31 | |
32 | #endif |
33 | |
34 | /* no need for HAVE_NEON - GCC defines __ARM_NEON__ consistently */ |
35 | |
4ae83961 |
36 | /* global function/external symbol */ |
5c6457c3 |
37 | #ifndef __MACH__ |
4ae83961 |
38 | #define ESYM(name) name |
39 | |
5c6457c3 |
40 | #define FUNCTION(name) \ |
4ae83961 |
41 | .globl name; \ |
5c6457c3 |
42 | .type name, %function; \ |
43 | name |
44 | |
5df0e313 |
45 | #define EXTRA_UNSAVED_REGS |
46 | |
5c6457c3 |
47 | #else |
4ae83961 |
48 | #define ESYM(name) _##name |
49 | |
5c6457c3 |
50 | #define FUNCTION(name) \ |
4ae83961 |
51 | .globl ESYM(name); \ |
52 | name: \ |
53 | ESYM(name) |
5c6457c3 |
54 | |
5df0e313 |
55 | // r7 is preserved, but add it for EABI alignment.. |
56 | #define EXTRA_UNSAVED_REGS r7, r9, |
57 | |
5c6457c3 |
58 | #endif |
59 | |
665f33e1 |
60 | #endif /* __ARM_FEATURES_H__ */ |