1 /*
2  * Copyright (c) 2008-2012 Travis Geiselbrecht
3  *
4  * Use of this source code is governed by a MIT-style
5  * license that can be found in the LICENSE file or at
6  * https://opensource.org/licenses/MIT
7  */
8 #ifndef __ARM_CORES_H
9 #define __ARM_CORES_H
10 
11 /*
12  * make the gcc built in define a little easier to deal with
13  * to decide what core it is generating code for
14  *
15  * ARM_ARCH_LEVEL gets assigned a numeric value of the general family
16  *
17  * ARM_ARCH_* gets defined for each feature recursively
18  */
19 
20 /* echo | gcc -E -dM - to dump builtin defines */
21 
22 #if defined(__ARM_ARCH_7EM__)
23 #define ARM_ARCH_7EM 1
24 #endif
25 #if defined(__ARM_ARCH_7M__) || defined(ARM_ARCH_7EM)
26 #define ARM_ARCH_7M 1
27 #endif
28 #if defined(__ARM_ARCH_7R__)
29 #define ARM_ARCH_7R 1
30 #endif
31 #if defined(__ARM_ARCH_7A__) || defined(ARM_ARCH_7R)
32 #define ARM_ARCH_7A 1
33 #endif
34 #if defined(__ARM_ARCH_7__) || defined(ARM_ARCH_7A) || defined(ARM_ARCH_7M)
35 #define ARM_ARCH_7 1
36 #ifndef ARM_ARCH_LEVEL
37 #define ARM_ARCH_LEVEL 7
38 #endif
39 #endif
40 
41 #if defined(__ARM_ARCH_6M__)
42 #define ARM_ARCH_6M 1
43 #endif
44 #if defined(__ARM_ARCH_6T2__) || defined(ARM_ARCH_7)
45 #define ARM_ARCH_6T2 1
46 #endif
47 #if defined(__ARM_ARCH_6ZK__)
48 #define ARM_ARCH_6ZK 1
49 #endif
50 #if defined(__ARM_ARCH_6Z__) || defined(ARM_ARCH_6ZK)
51 #define ARM_ARCH_6Z 1
52 #endif
53 #if defined(__ARM_ARCH_6K__) || defined(ARM_ARCH_6ZK) || defined(ARM_ARCH_7)
54 #define ARM_ARCH_6K 1
55 #endif
56 #if defined(__ARM_ARCH_6J__)
57 #define ARM_ARCH_6J 1
58 #endif
59 #if defined(__ARM_ARCH_6__) || defined(ARM_ARCH_6J) || defined(ARM_ARCH_6K) || defined(ARM_ARCH_6Z) || defined(ARM_ARCH_6T2) || defined(ARM_ARCH_6M)
60 #define ARM_ARCH_6 1
61 #ifndef ARM_ARCH_LEVEL
62 #define ARM_ARCH_LEVEL 6
63 #endif
64 #endif
65 
66 #if defined(__ARM_ARCH_5TEJ__)
67 #define ARM_ARCH_5TEJ 1
68 #endif
69 #if defined(__ARM_ARCH_5TE__) || defined(ARM_ARCH_5TEJ) || defined(ARM_ARCH_6)
70 #define ARM_ARCH_5TE 1
71 #endif
72 #if defined(__ARM_ARCH_5E__) || defined(ARM_ARCH_5TE)
73 #define ARM_ARCH_5E 1
74 #endif
75 #if defined(__ARM_ARCH_5T__) || defined(ARM_ARCH_5TE)
76 #define ARM_ARCH_5T 1
77 #endif
78 #if defined(__ARM_ARCH_5__) || defined(ARM_ARCH_5E) || defined(ARM_ARCH_5T)
79 #define ARM_ARCH_5 1
80 #ifndef ARM_ARCH_LEVEL
81 #define ARM_ARCH_LEVEL 5
82 #endif
83 #endif
84 
85 #if defined(__ARM_ARCH_4T__) || defined(ARM_ARCH_5T)
86 #define ARM_ARCH_4T 1
87 #endif
88 #if defined(__ARM_ARCH_4__) || defined(ARM_ARCH_4T) || defined(ARM_ARCH_5)
89 #define ARM_ARCH_4 1
90 #ifndef ARM_ARCH_LEVEL
91 #define ARM_ARCH_LEVEL 4
92 #endif
93 #endif
94 
95 #if 0
96 /* test */
97 #if ARM_ARCH_LEVEL >= 7
98 #warning ARM_ARCH_LEVEL >= 7
99 #endif
100 #if ARM_ARCH_LEVEL >= 6
101 #warning ARM_ARCH_LEVEL >= 6
102 #endif
103 #if ARM_ARCH_LEVEL >= 5
104 #warning ARM_ARCH_LEVEL >= 5
105 #endif
106 #if ARM_ARCH_LEVEL >= 4
107 #warning ARM_ARCH_LEVEL >= 4
108 #endif
109 #endif
110 
111 #endif
112 
113