1 /*
2  * Copyright (c) 2008-2012 Travis Geiselbrecht
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #ifndef __ARM_CORES_H
24 #define __ARM_CORES_H
25 
26 /*
27  * make the gcc built in define a little easier to deal with
28  * to decide what core it is generating code for
29  *
30  * ARM_ARCH_LEVEL gets assigned a numeric value of the general family
31  *
32  * ARM_ARCH_* gets defined for each feature recursively
33  */
34 
35 /* echo | gcc -E -dM - to dump builtin defines */
36 
37 #if defined(__ARM_ARCH_8A__)
38 #ifndef ARM_ARCH_LEVEL
39 #define ARM_ARCH_LEVEL 8
40 #endif
41 #endif
42 
43 #if defined(__ARM_ARCH_7EM__)
44 #define ARM_ARCH_7EM 1
45 #endif
46 #if defined(__ARM_ARCH_7M__) || defined(ARM_ARCH_7EM)
47 #define ARM_ARCH_7M 1
48 #endif
49 #if defined(__ARM_ARCH_7R__)
50 #define ARM_ARCH_7R 1
51 #endif
52 #if defined(__ARM_ARCH_7A__) || defined(ARM_ARCH_7R)
53 #define ARM_ARCH_7A 1
54 #endif
55 #if defined(__ARM_ARCH_7__) || defined(ARM_ARCH_7A) || defined(ARM_ARCH_7M)
56 #define ARM_ARCH_7 1
57 #ifndef ARM_ARCH_LEVEL
58 #define ARM_ARCH_LEVEL 7
59 #endif
60 #endif
61 
62 #if defined(__ARM_ARCH_6M__)
63 #define ARM_ARCH_6M 1
64 #endif
65 #if defined(__ARM_ARCH_6T2__) || defined(ARM_ARCH_7)
66 #define ARM_ARCH_6T2 1
67 #endif
68 #if defined(__ARM_ARCH_6ZK__)
69 #define ARM_ARCH_6ZK 1
70 #endif
71 #if defined(__ARM_ARCH_6Z__) || defined(ARM_ARCH_6ZK)
72 #define ARM_ARCH_6Z 1
73 #endif
74 #if defined(__ARM_ARCH_6K__) || defined(ARM_ARCH_6ZK) || defined(ARM_ARCH_7)
75 #define ARM_ARCH_6K 1
76 #endif
77 #if defined(__ARM_ARCH_6J__)
78 #define ARM_ARCH_6J 1
79 #endif
80 #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)
81 #define ARM_ARCH_6 1
82 #ifndef ARM_ARCH_LEVEL
83 #define ARM_ARCH_LEVEL 6
84 #endif
85 #endif
86 
87 #if defined(__ARM_ARCH_5TEJ__)
88 #define ARM_ARCH_5TEJ 1
89 #endif
90 #if defined(__ARM_ARCH_5TE__) || defined(ARM_ARCH_5TEJ) || defined(ARM_ARCH_6)
91 #define ARM_ARCH_5TE 1
92 #endif
93 #if defined(__ARM_ARCH_5E__) || defined(ARM_ARCH_5TE)
94 #define ARM_ARCH_5E 1
95 #endif
96 #if defined(__ARM_ARCH_5T__) || defined(ARM_ARCH_5TE)
97 #define ARM_ARCH_5T 1
98 #endif
99 #if defined(__ARM_ARCH_5__) || defined(ARM_ARCH_5E) || defined(ARM_ARCH_5T)
100 #define ARM_ARCH_5 1
101 #ifndef ARM_ARCH_LEVEL
102 #define ARM_ARCH_LEVEL 5
103 #endif
104 #endif
105 
106 #if defined(__ARM_ARCH_4T__) || defined(ARM_ARCH_5T)
107 #define ARM_ARCH_4T 1
108 #endif
109 #if defined(__ARM_ARCH_4__) || defined(ARM_ARCH_4T) || defined(ARM_ARCH_5)
110 #define ARM_ARCH_4 1
111 #ifndef ARM_ARCH_LEVEL
112 #define ARM_ARCH_LEVEL 4
113 #endif
114 #endif
115 
116 #if 0
117 /* test */
118 #if ARM_ARCH_LEVEL >= 7
119 #warning ARM_ARCH_LEVEL >= 7
120 #endif
121 #if ARM_ARCH_LEVEL >= 6
122 #warning ARM_ARCH_LEVEL >= 6
123 #endif
124 #if ARM_ARCH_LEVEL >= 5
125 #warning ARM_ARCH_LEVEL >= 5
126 #endif
127 #if ARM_ARCH_LEVEL >= 4
128 #warning ARM_ARCH_LEVEL >= 4
129 #endif
130 #endif
131 
132 #endif
133 
134