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