]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Preprocessor/arm-target-features.c
Vendor import of clang trunk r290819:
[FreeBSD/FreeBSD.git] / test / Preprocessor / arm-target-features.c
1 // RUN: %clang -target armv8a-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8A %s
2 // CHECK-V8A: #define __ARMEL__ 1
3 // CHECK-V8A: #define __ARM_ARCH 8
4 // CHECK-V8A: #define __ARM_ARCH_8A__ 1
5 // CHECK-V8A: #define __ARM_FEATURE_CRC32 1
6 // CHECK-V8A: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
7 // CHECK-V8A: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
8 // CHECK-V8A: #define __ARM_FP 0xE
9 // CHECK-V8A: #define __ARM_FP16_ARGS 1
10 // CHECK-V8A: #define __ARM_FP16_FORMAT_IEEE 1
11
12 // RUN: %clang -target armv8r-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8R %s
13 // CHECK-V8R: #define __ARMEL__ 1
14 // CHECK-V8R: #define __ARM_ARCH 8
15 // CHECK-V8R: #define __ARM_ARCH_8R__ 1
16 // CHECK-V8R: #define __ARM_FEATURE_CRC32 1
17 // CHECK-V8R: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
18 // CHECK-V8R: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
19 // CHECK-V8R: #define __ARM_FP 0xE
20
21 // RUN: %clang -target armv7a-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7 %s
22 // CHECK-V7: #define __ARMEL__ 1
23 // CHECK-V7: #define __ARM_ARCH 7
24 // CHECK-V7: #define __ARM_ARCH_7A__ 1
25 // CHECK-V7-NOT: __ARM_FEATURE_CRC32
26 // CHECK-V7-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
27 // CHECK-V7-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
28 // CHECK-V7: #define __ARM_FP 0xC
29
30 // RUN: %clang -target x86_64-apple-macosx10.10 -arch armv7s -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7S %s
31 // CHECK-V7S: #define __ARMEL__ 1
32 // CHECK-V7S: #define __ARM_ARCH 7
33 // CHECK-V7S: #define __ARM_ARCH_7S__ 1
34 // CHECK-V7S-NOT: __ARM_FEATURE_CRC32
35 // CHECK-V7S-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
36 // CHECK-V7S-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
37 // CHECK-V7S: #define __ARM_FP 0xE
38
39 // RUN: %clang -target armv8a -mfloat-abi=hard -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF %s
40 // CHECK-V8-BAREHF: #define __ARMEL__ 1
41 // CHECK-V8-BAREHF: #define __ARM_ARCH 8
42 // CHECK-V8-BAREHF: #define __ARM_ARCH_8A__ 1
43 // CHECK-V8-BAREHF: #define __ARM_FEATURE_CRC32 1
44 // CHECK-V8-BAREHF: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
45 // CHECK-V8-BAREHF: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
46 // CHECK-V8-BAREHP: #define __ARM_FP 0xE
47 // CHECK-V8-BAREHF: #define __ARM_NEON__ 1
48 // CHECK-V8-BAREHF: #define __ARM_PCS_VFP 1
49 // CHECK-V8-BAREHF: #define __VFP_FP__ 1
50
51 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-FP %s
52 // CHECK-V8-BAREHF-FP-NOT: __ARM_NEON__ 1
53 // CHECK-V8-BAREHP-FP: #define __ARM_FP 0xE
54 // CHECK-V8-BAREHF-FP: #define __VFP_FP__ 1
55
56 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=neon-fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-NEON-FP %s
57 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=crypto-neon-fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-NEON-FP %s
58 // CHECK-V8-BAREHP-NEON-FP: #define __ARM_FP 0xE
59 // CHECK-V8-BAREHF-NEON-FP: #define __ARM_NEON__ 1
60 // CHECK-V8-BAREHF-NEON-FP: #define __VFP_FP__ 1
61
62 // RUN: %clang -target armv8a -mnocrc -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-NOCRC %s
63 // CHECK-V8-NOCRC-NOT: __ARM_FEATURE_CRC32 1
64
65 // Check that -mhwdiv works properly for armv8/thumbv8 (enabled by default).
66
67 // RUN: %clang -target armv8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
68 // RUN: %clang -target armv8 -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
69 // RUN: %clang -target armv8-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
70 // RUN: %clang -target armv8-eabi -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
71 // V8:#define __ARM_ARCH_EXT_IDIV__ 1
72
73 // RUN: %clang -target armv8 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
74 // RUN: %clang -target armv8 -mthumb -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
75 // RUN: %clang -target armv8 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
76 // RUN: %clang -target armv8 -mthumb -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
77 // NOHWDIV-V8-NOT:#define __ARM_ARCH_EXT_IDIV__
78
79 // RUN: %clang -target armv8a -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
80 // RUN: %clang -target armv8a -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
81 // RUN: %clang -target armv8a-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
82 // RUN: %clang -target armv8a-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
83 // V8A:#define __ARM_ARCH_EXT_IDIV__ 1
84 // V8A:#define __ARM_FP 0xE
85
86 // RUN: %clang -target armv8m.base-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_BASELINE %s
87 // V8M_BASELINE: #define __ARM_ARCH 8
88 // V8M_BASELINE: #define __ARM_ARCH_8M_BASE__ 1
89 // V8M_BASELINE: #define __ARM_ARCH_EXT_IDIV__ 1
90 // V8M_BASELINE-NOT: __ARM_ARCH_ISA_ARM
91 // V8M_BASELINE: #define __ARM_ARCH_ISA_THUMB 1
92 // V8M_BASELINE: #define __ARM_ARCH_PROFILE 'M'
93 // V8M_BASELINE-NOT: __ARM_FEATURE_CRC32
94 // V8M_BASELINE-NOT: __ARM_FEATURE_DSP
95 // V8M_BASELINE-NOT: __ARM_FP 0x{{.*}}
96 // V8M_BASELINE-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
97
98 // RUN: %clang -target armv8m.main-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_MAINLINE %s
99 // V8M_MAINLINE: #define __ARM_ARCH 8
100 // V8M_MAINLINE: #define __ARM_ARCH_8M_MAIN__ 1
101 // V8M_MAINLINE: #define __ARM_ARCH_EXT_IDIV__ 1
102 // V8M_MAINLINE-NOT: __ARM_ARCH_ISA_ARM
103 // V8M_MAINLINE: #define __ARM_ARCH_ISA_THUMB 2
104 // V8M_MAINLINE: #define __ARM_ARCH_PROFILE 'M'
105 // V8M_MAINLINE-NOT: __ARM_FEATURE_CRC32
106 // V8M_MAINLINE-NOT: __ARM_FEATURE_DSP
107 // V8M_MAINLINE: #define __ARM_FP 0xE
108 // V8M_MAINLINE: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
109
110 // RUN: %clang -target arm-none-linux-gnu -march=armv8-m.main+dsp -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_MAINLINE_DSP %s
111 // V8M_MAINLINE_DSP: #define __ARM_ARCH 8
112 // V8M_MAINLINE_DSP: #define __ARM_ARCH_8M_MAIN__ 1
113 // V8M_MAINLINE_DSP: #define __ARM_ARCH_EXT_IDIV__ 1
114 // V8M_MAINLINE_DSP-NOT: __ARM_ARCH_ISA_ARM
115 // V8M_MAINLINE_DSP: #define __ARM_ARCH_ISA_THUMB 2
116 // V8M_MAINLINE_DSP: #define __ARM_ARCH_PROFILE 'M'
117 // V8M_MAINLINE_DSP-NOT: __ARM_FEATURE_CRC32
118 // V8M_MAINLINE_DSP: #define __ARM_FEATURE_DSP 1
119 // V8M_MAINLINE_DSP: #define __ARM_FP 0xE
120 // V8M_MAINLINE_DSP: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
121
122 // RUN: %clang -target arm-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-DEFS %s
123 // CHECK-DEFS:#define __ARM_PCS 1
124 // CHECK-DEFS:#define __ARM_SIZEOF_MINIMAL_ENUM 4
125 // CHECK-DEFS:#define __ARM_SIZEOF_WCHAR_T 4
126
127 // RUN: %clang -target arm-none-linux-gnu -fno-math-errno -fno-signed-zeros\
128 // RUN:        -fno-trapping-math -fassociative-math -freciprocal-math\
129 // RUN:        -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
130 // RUN: %clang -target arm-none-linux-gnu -ffast-math -x c -E -dM %s -o -\
131 // RUN:        | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
132 // CHECK-FASTMATH: #define __ARM_FP_FAST 1
133
134 // RUN: %clang -target arm-none-linux-gnu -fshort-wchar -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTWCHAR %s
135 // CHECK-SHORTWCHAR:#define __ARM_SIZEOF_WCHAR_T 2
136
137 // RUN: %clang -target arm-none-linux-gnu -fshort-enums -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTENUMS %s
138 // CHECK-SHORTENUMS:#define __ARM_SIZEOF_MINIMAL_ENUM 1
139
140 // Test that -mhwdiv has the right effect for a target CPU which has hwdiv enabled by default.
141 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
142 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
143 // RUN: %clang -target armv7 -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
144 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
145 // HWDIV:#define __ARM_ARCH_EXT_IDIV__ 1
146
147 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
148 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
149 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
150 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
151 // NOHWDIV-NOT:#define __ARM_ARCH_EXT_IDIV__
152
153
154 // Check that -mfpu works properly for Cortex-A7 (enabled by default).
155 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
156 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
157 // DEFAULTFPU-A7:#define __ARM_FP 0xE
158 // DEFAULTFPU-A7:#define __ARM_NEON__ 1
159 // DEFAULTFPU-A7:#define __ARM_VFPV4__ 1
160
161 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A7 %s
162 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A7 %s
163 // FPUNONE-A7-NOT:#define __ARM_FP 0x{{.*}}
164 // FPUNONE-A7-NOT:#define __ARM_NEON__ 1
165 // FPUNONE-A7-NOT:#define __ARM_VFPV4__ 1
166
167 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A7 %s
168 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A7 %s
169 // NONEON-A7:#define __ARM_FP 0xE
170 // NONEON-A7-NOT:#define __ARM_NEON__ 1
171 // NONEON-A7:#define __ARM_VFPV4__ 1
172
173 // Check that -mfpu works properly for Cortex-A5 (enabled by default).
174 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A5 %s
175 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A5 %s
176 // DEFAULTFPU-A5:#define __ARM_FP 0xE
177 // DEFAULTFPU-A5:#define __ARM_NEON__ 1
178 // DEFAULTFPU-A5:#define __ARM_VFPV4__ 1
179
180 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A5 %s
181 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A5 %s
182 // FPUNONE-A5-NOT:#define __ARM_FP 0x{{.*}}
183 // FPUNONE-A5-NOT:#define __ARM_NEON__ 1
184 // FPUNONE-A5-NOT:#define __ARM_VFPV4__ 1
185
186 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -mfpu=vfp4-d16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A5 %s
187 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -mfpu=vfp4-d16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A5 %s
188 // NONEON-A5:#define __ARM_FP 0xE
189 // NONEON-A5-NOT:#define __ARM_NEON__ 1
190 // NONEON-A5:#define __ARM_VFPV4__ 1
191
192 // FIXME: add check for further predefines
193 // Test whether predefines are as expected when targeting ep9312.
194 // RUN: %clang -target armv4t -mcpu=ep9312 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A4T %s
195 // A4T-NOT:#define __ARM_FEATURE_DSP
196 // A4T-NOT:#define __ARM_FP 0x{{.*}}
197
198 // Test whether predefines are as expected when targeting arm10tdmi.
199 // RUN: %clang -target armv5 -mcpu=arm10tdmi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5T %s
200 // A5T-NOT:#define __ARM_FEATURE_DSP
201 // A5T-NOT:#define __ARM_FP 0x{{.*}}
202
203 // Test whether predefines are as expected when targeting cortex-a5.
204 // RUN: %clang -target armv7 -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
205 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
206 // A5:#define __ARM_ARCH 7
207 // A5:#define __ARM_ARCH_7A__ 1
208 // A5-NOT:#define __ARM_ARCH_EXT_IDIV__
209 // A5:#define __ARM_ARCH_PROFILE 'A'
210 // A5-NOT: #define __ARM_FEATURE_DIRECTED_ROUNDING
211 // A5:#define __ARM_FEATURE_DSP 1
212 // A5-NOT: #define __ARM_FEATURE_NUMERIC_MAXMIN
213 // A5:#define __ARM_FP 0xE
214
215 // Test whether predefines are as expected when targeting cortex-a7.
216 // RUN: %clang -target armv7k -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
217 // RUN: %clang -target armv7k -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
218 // A7:#define __ARM_ARCH 7
219 // A7:#define __ARM_ARCH_EXT_IDIV__ 1
220 // A7:#define __ARM_ARCH_PROFILE 'A'
221 // A7:#define __ARM_FEATURE_DSP 1
222 // A7:#define __ARM_FP 0xE
223
224 // Test whether predefines are as expected when targeting cortex-a7.
225 // RUN: %clang -target x86_64-apple-darwin -arch armv7k -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV7K %s
226 // ARMV7K:#define __ARM_ARCH 7
227 // ARMV7K:#define __ARM_ARCH_EXT_IDIV__ 1
228 // ARMV7K:#define __ARM_ARCH_PROFILE 'A'
229 // ARMV7K:#define __ARM_DWARF_EH__ 1
230 // ARMV7K:#define __ARM_FEATURE_DSP 1
231 // ARMV7K:#define __ARM_FP 0xE
232 // ARMV7K:#define __ARM_PCS_VFP 1
233
234
235 // Test whether predefines are as expected when targeting cortex-a8.
236 // RUN: %clang -target armv7 -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
237 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
238 // A8-NOT:#define __ARM_ARCH_EXT_IDIV__
239 // A8:#define __ARM_FEATURE_DSP 1
240 // A8:#define __ARM_FP 0xC
241
242 // Test whether predefines are as expected when targeting cortex-a9.
243 // RUN: %clang -target armv7 -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
244 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
245 // A9-NOT:#define __ARM_ARCH_EXT_IDIV__
246 // A9:#define __ARM_FEATURE_DSP 1
247 // A9:#define __ARM_FP 0xE
248
249
250 // Check that -mfpu works properly for Cortex-A12 (enabled by default).
251 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A12 %s
252 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A12 %s
253 // DEFAULTFPU-A12:#define __ARM_FP 0xE
254 // DEFAULTFPU-A12:#define __ARM_NEON__ 1
255 // DEFAULTFPU-A12:#define __ARM_VFPV4__ 1
256
257 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a12 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A12 %s
258 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a12 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A12 %s
259 // FPUNONE-A12-NOT:#define __ARM_FP 0x{{.*}}
260 // FPUNONE-A12-NOT:#define __ARM_NEON__ 1
261 // FPUNONE-A12-NOT:#define __ARM_VFPV4__ 1
262
263 // Test whether predefines are as expected when targeting cortex-a12.
264 // RUN: %clang -target armv7 -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
265 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
266 // A12:#define __ARM_ARCH 7
267 // A12:#define __ARM_ARCH_7A__ 1
268 // A12:#define __ARM_ARCH_EXT_IDIV__ 1
269 // A12:#define __ARM_ARCH_PROFILE 'A'
270 // A12:#define __ARM_FEATURE_DSP 1
271 // A12:#define __ARM_FP 0xE
272
273 // Test whether predefines are as expected when targeting cortex-a15.
274 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
275 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
276 // A15:#define __ARM_ARCH_EXT_IDIV__ 1
277 // A15:#define __ARM_FEATURE_DSP 1
278 // A15:#define __ARM_FP 0xE
279
280 // Check that -mfpu works properly for Cortex-A17 (enabled by default).
281 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A17 %s
282 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A17 %s
283 // DEFAULTFPU-A17:#define __ARM_FP 0xE
284 // DEFAULTFPU-A17:#define __ARM_NEON__ 1
285 // DEFAULTFPU-A17:#define __ARM_VFPV4__ 1
286
287 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a17 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A17 %s
288 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a17 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A17 %s
289 // FPUNONE-A17-NOT:#define __ARM_FP 0x{{.*}}
290 // FPUNONE-A17-NOT:#define __ARM_NEON__ 1
291 // FPUNONE-A17-NOT:#define __ARM_VFPV4__ 1
292
293 // Test whether predefines are as expected when targeting cortex-a17.
294 // RUN: %clang -target armv7 -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
295 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
296 // A17:#define __ARM_ARCH 7
297 // A17:#define __ARM_ARCH_7A__ 1
298 // A17:#define __ARM_ARCH_EXT_IDIV__ 1
299 // A17:#define __ARM_ARCH_PROFILE 'A'
300 // A17:#define __ARM_FEATURE_DSP 1
301 // A17:#define __ARM_FP 0xE
302
303 // Test whether predefines are as expected when targeting swift.
304 // RUN: %clang -target armv7s -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
305 // RUN: %clang -target armv7s -mthumb -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
306 // SWIFT:#define __ARM_ARCH_EXT_IDIV__ 1
307 // SWIFT:#define __ARM_FEATURE_DSP 1
308 // SWIFT:#define __ARM_FP 0xE
309
310 // Test whether predefines are as expected when targeting ARMv8-A Cortex implementations
311 // RUN: %clang -target armv8 -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
312 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
313 // RUN: %clang -target armv8 -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
314 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
315 // RUN: %clang -target armv8 -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
316 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
317 // RUN: %clang -target armv8 -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
318 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
319 // RUN: %clang -target armv8 -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
320 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
321 // RUN: %clang -target armv8 -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
322 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
323 // ARMV8:#define __ARM_ARCH_EXT_IDIV__ 1
324 // ARMV8:#define __ARM_FEATURE_DSP 1
325 // ARMV8:#define __ARM_FP 0xE
326
327 // Test whether predefines are as expected when targeting cortex-r4.
328 // RUN: %clang -target armv7 -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-ARM %s
329 // R4-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
330 // R4-ARM:#define __ARM_FEATURE_DSP 1
331 // R4-ARM-NOT:#define __ARM_FP 0x{{.*}}
332
333 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-THUMB %s
334 // R4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
335 // R4-THUMB:#define __ARM_FEATURE_DSP 1
336 // R4-THUMB-NOT:#define __ARM_FP 0x{{.*}}
337
338 // Test whether predefines are as expected when targeting cortex-r4f.
339 // RUN: %clang -target armv7 -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-ARM %s
340 // R4F-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
341 // R4F-ARM:#define __ARM_FEATURE_DSP 1
342 // R4F-ARM:#define __ARM_FP 0xC
343
344 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-THUMB %s
345 // R4F-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
346 // R4F-THUMB:#define __ARM_FEATURE_DSP 1
347 // R4F-THUMB:#define __ARM_FP 0xC
348
349 // Test whether predefines are as expected when targeting cortex-r5.
350 // RUN: %clang -target armv7 -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
351 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
352 // R5:#define __ARM_ARCH_EXT_IDIV__ 1
353 // R5:#define __ARM_FEATURE_DSP 1
354 // R5:#define __ARM_FP 0xC
355
356 // Test whether predefines are as expected when targeting cortex-r7 and cortex-r8.
357 // RUN: %clang -target armv7 -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
358 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
359 // RUN: %clang -target armv7 -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
360 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
361 // R7-R8:#define __ARM_ARCH_EXT_IDIV__ 1
362 // R7-R8:#define __ARM_FEATURE_DSP 1
363 // R7-R8:#define __ARM_FP 0xE
364
365 // Test whether predefines are as expected when targeting cortex-m0.
366 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
367 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0plus -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
368 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
369 // RUN: %clang -target armv7 -mthumb -mcpu=sc000 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
370 // M0-THUMB-NOT:#define __ARM_ARCH_EXT_IDIV__
371 // M0-THUMB-NOT:#define __ARM_FEATURE_DSP
372 // M0-THUMB-NOT:#define __ARM_FP 0x{{.*}}
373
374 // Test whether predefines are as expected when targeting cortex-m3.
375 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
376 // RUN: %clang -target armv7 -mthumb -mcpu=sc300 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
377 // M3-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
378 // M3-THUMB-NOT:#define __ARM_FEATURE_DSP
379 // M3-THUMB-NOT:#define __ARM_FP 0x{{.*}}
380
381 // Test whether predefines are as expected when targeting cortex-m4.
382 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M4-THUMB %s
383 // M4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
384 // M4-THUMB:#define __ARM_FEATURE_DSP 1
385 // M4-THUMB:#define __ARM_FP 0x6
386
387 // Test whether predefines are as expected when targeting cortex-m7.
388 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M7-THUMB %s
389 // M7-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
390 // M7-THUMB:#define __ARM_FEATURE_DSP 1
391 // M7-THUMB:#define __ARM_FP 0xE
392 // M7-THUMB:#define __ARM_FPV5__ 1
393
394 // Test whether predefines are as expected when targeting krait.
395 // RUN: %clang -target armv7 -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
396 // RUN: %clang -target armv7 -mthumb -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
397 // KRAIT:#define __ARM_ARCH_EXT_IDIV__ 1
398 // KRAIT:#define __ARM_FEATURE_DSP 1
399 // KRAIT:#define  __ARM_VFPV4__ 1
400
401 // RUN: %clang -target armv8.1a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V81A %s
402 // CHECK-V81A: #define __ARM_ARCH 8
403 // CHECK-V81A: #define __ARM_ARCH_8_1A__ 1
404 // CHECK-V81A: #define __ARM_ARCH_PROFILE 'A'
405 // CHECK-V81A: #define __ARM_FEATURE_QRDMX 1
406 // CHECK-V81A: #define __ARM_FP 0xE
407
408 // RUN: %clang -target armv8.2a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V82A %s
409 // CHECK-V82A: #define __ARM_ARCH 8
410 // CHECK-V82A: #define __ARM_ARCH_8_2A__ 1
411 // CHECK-V82A: #define __ARM_ARCH_PROFILE 'A'
412 // CHECK-V82A: #define __ARM_FP 0xE