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