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-NOT: #define __ARM_FP 0x
9 // CHECK-V8A-NOT: #define __ARM_FEATURE_DOTPROD
10 
11 // RUN: %clang -target armv8a-none-linux-gnueabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8A-ALLOW-FP-INSTR %s
12 // RUN: %clang -target armv8a-none-linux-gnueabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8A-ALLOW-FP-INSTR %s
13 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARMEL__ 1
14 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_ARCH 8
15 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_ARCH_8A__ 1
16 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FEATURE_CRC32 1
17 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
18 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
19 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FP 0xe
20 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FP16_ARGS 1
21 // CHECK-V8A-ALLOW-FP-INSTR: #define __ARM_FP16_FORMAT_IEEE 1
22 // CHECK-V8A-ALLOW-FP-INSTR-V8A-NOT: #define __ARM_FEATURE_DOTPROD
23 
24 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+nofp16fml+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
25 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+nofp16+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
26 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+fp16+nofp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
27 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8-a+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
28 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8-a+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
29 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+nofp16fml+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
30 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+nofp16+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
31 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16+nofp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
32 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
33 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-VECTOR-SCALAR %s
34 // CHECK-FULLFP16-VECTOR-SCALAR: #define __ARM_FEATURE_FP16_SCALAR_ARITHMETIC 1
35 // CHECK-FULLFP16-VECTOR-SCALAR: #define __ARM_FEATURE_FP16_VECTOR_ARITHMETIC 1
36 // CHECK-FULLFP16-VECTOR-SCALAR: #define __ARM_FP 0xe
37 // CHECK-FULLFP16-VECTOR-SCALAR: #define __ARM_FP16_FORMAT_IEEE 1
38 
39 // +fp16fml without neon doesn't make sense as the fp16fml instructions all require SIMD.
40 // However, as +fp16fml implies +fp16 there is a set of defines that we would expect.
41 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8-a+fp16fml -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SCALAR %s
42 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8-a+fp16 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SCALAR %s
43 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16fml -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SCALAR %s
44 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SCALAR %s
45 // CHECK-FULLFP16-SCALAR:       #define __ARM_FEATURE_FP16_SCALAR_ARITHMETIC 1
46 // CHECK-FULLFP16-SCALAR-NOT:   #define __ARM_FEATURE_FP16_VECTOR_ARITHMETIC 1
47 // CHECK-FULLFP16-SCALAR:       #define __ARM_FP 0xe
48 // CHECK-FULLFP16-SCALAR:       #define __ARM_FP16_FORMAT_IEEE 1
49 
50 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
51 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+nofp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
52 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+nofp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
53 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2-a+fp16fml+nofp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
54 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
55 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+nofp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
56 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+nofp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
57 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.4-a+fp16fml+nofp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-NOFML-VECTOR-SCALAR %s
58 // CHECK-FULLFP16-NOFML-VECTOR-SCALAR-NOT: #define __ARM_FEATURE_FP16_SCALAR_ARITHMETIC 1
59 // CHECK-FULLFP16-NOFML-VECTOR-SCALAR-NOT: #define __ARM_FEATURE_FP16_VECTOR_ARITHMETIC 1
60 // CHECK-FULLFP16-NOFML-VECTOR-SCALAR: #define __ARM_FP 0xe
61 // CHECK-FULLFP16-NOFML-VECTOR-SCALAR: #define __ARM_FP16_FORMAT_IEEE 1
62 
63 // RUN: %clang -target arm -march=armv8-a+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
64 // RUN: %clang -target arm -march=armv8-a+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
65 // RUN: %clang -target arm -march=armv8-a+fp16+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
66 // RUN: %clang -target arm -march=armv8-a+fp16fml+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
67 // RUN: %clang -target arm -march=armv8.4-a+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
68 // RUN: %clang -target arm -march=armv8.4-a+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
69 // RUN: %clang -target arm -march=armv8.4-a+fp16+fp16fml -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
70 // RUN: %clang -target arm -march=armv8.4-a+fp16fml+fp16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FULLFP16-SOFT %s
71 // CHECK-FULLFP16-SOFT-NOT: #define __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
72 // CHECK-FULLFP16-SOFT-NOT: #define __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
73 // CHECK-FULLFP16-SOFT-NOT: #define __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
74 // CHECK-FULLFP16-SOFT-NOT: #define __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
75 
76 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8.2a+dotprod -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-DOTPROD %s
77 // CHECK-DOTPROD: #define __ARM_FEATURE_DOTPROD 1
78 
79 // RUN: %clang -target armv8r-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8R %s
80 // CHECK-V8R: #define __ARMEL__ 1
81 // CHECK-V8R: #define __ARM_ARCH 8
82 // CHECK-V8R: #define __ARM_ARCH_8R__ 1
83 // CHECK-V8R: #define __ARM_FEATURE_CRC32 1
84 // CHECK-V8R: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
85 // CHECK-V8R: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
86 // CHECK-V8R-NOT: #define __ARM_FP 0x
87 
88 // RUN: %clang -target armv8r-none-linux-gnueabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8R-ALLOW-FP-INSTR %s
89 // RUN: %clang -target armv8r-none-linux-gnueabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8R-ALLOW-FP-INSTR %s
90 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARMEL__ 1
91 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_ARCH 8
92 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_ARCH_8R__ 1
93 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_FEATURE_CRC32 1
94 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
95 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
96 // CHECK-V8R-ALLOW-FP-INSTR: #define __ARM_FP 0xe
97 
98 // RUN: %clang -target armv7a-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7 %s
99 // CHECK-V7: #define __ARMEL__ 1
100 // CHECK-V7: #define __ARM_ARCH 7
101 // CHECK-V7: #define __ARM_ARCH_7A__ 1
102 // CHECK-V7-NOT: __ARM_FEATURE_CRC32
103 // CHECK-V7-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
104 // CHECK-V7-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
105 // CHECK-V7-NOT: #define __ARM_FP 0x
106 
107 // RUN: %clang -target armv7a-none-linux-gnueabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7-ALLOW-FP-INSTR %s
108 // RUN: %clang -target armv7a-none-linux-gnueabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7-ALLOW-FP-INSTR %s
109 // CHECK-V7-ALLOW-FP-INSTR: #define __ARMEL__ 1
110 // CHECK-V7-ALLOW-FP-INSTR: #define __ARM_ARCH 7
111 // CHECK-V7-ALLOW-FP-INSTR: #define __ARM_ARCH_7A__ 1
112 // CHECK-V7-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_CRC32
113 // CHECK-V7-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
114 // CHECK-V7-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
115 // CHECK-V7-ALLOW-FP-INSTR: #define __ARM_FP 0xc
116 
117 // RUN: %clang -target armv7ve-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7VE %s
118 // CHECK-V7VE: #define __ARMEL__ 1
119 // CHECK-V7VE: #define __ARM_ARCH 7
120 // CHECK-V7VE: #define __ARM_ARCH_7VE__ 1
121 // CHECK-V7VE: #define __ARM_ARCH_EXT_IDIV__ 1
122 // CHECK-V7VE-NOT: #define __ARM_FP 0x
123 
124 // RUN: %clang -target armv7ve-none-linux-gnueabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7VE-DEFAULT-ABI-SOFT %s
125 // RUN: %clang -target armv7ve-none-linux-gnueabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7VE-DEFAULT-ABI-SOFT %s
126 // CHECK-V7VE-DEFAULT-ABI-SOFT: #define __ARMEL__ 1
127 // CHECK-V7VE-DEFAULT-ABI-SOFT: #define __ARM_ARCH 7
128 // CHECK-V7VE-DEFAULT-ABI-SOFT: #define __ARM_ARCH_7VE__ 1
129 // CHECK-V7VE-DEFAULT-ABI-SOFT: #define __ARM_ARCH_EXT_IDIV__ 1
130 // CHECK-V7VE-DEFAULT-ABI-SOFT: #define __ARM_FP 0xc
131 
132 // 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
133 // CHECK-V7S: #define __ARMEL__ 1
134 // CHECK-V7S: #define __ARM_ARCH 7
135 // CHECK-V7S: #define __ARM_ARCH_7S__ 1
136 // CHECK-V7S-NOT: __ARM_FEATURE_CRC32
137 // CHECK-V7S-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
138 // CHECK-V7S-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
139 // CHECK-V7S: #define __ARM_FP 0xe
140 
141 // RUN: %clang -target armv8a -mfloat-abi=hard -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF %s
142 // CHECK-V8-BAREHF: #define __ARMEL__ 1
143 // CHECK-V8-BAREHF: #define __ARM_ARCH 8
144 // CHECK-V8-BAREHF: #define __ARM_ARCH_8A__ 1
145 // CHECK-V8-BAREHF: #define __ARM_FEATURE_CRC32 1
146 // CHECK-V8-BAREHF: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
147 // CHECK-V8-BAREHF: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
148 // CHECK-V8-BAREHP: #define __ARM_FP 0xe
149 // CHECK-V8-BAREHF: #define __ARM_NEON__ 1
150 // CHECK-V8-BAREHF: #define __ARM_PCS_VFP 1
151 // CHECK-V8-BAREHF: #define __VFP_FP__ 1
152 
153 // 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
154 // CHECK-V8-BAREHF-FP-NOT: __ARM_NEON__ 1
155 // CHECK-V8-BAREHP-FP: #define __ARM_FP 0xe
156 // CHECK-V8-BAREHF-FP: #define __VFP_FP__ 1
157 
158 // 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
159 // 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
160 // CHECK-V8-BAREHP-NEON-FP: #define __ARM_FP 0xe
161 // CHECK-V8-BAREHF-NEON-FP: #define __ARM_NEON__ 1
162 // CHECK-V8-BAREHF-NEON-FP: #define __VFP_FP__ 1
163 
164 // RUN: %clang -target armv8a -mnocrc -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-NOCRC %s
165 // CHECK-V8-NOCRC-NOT: __ARM_FEATURE_CRC32 1
166 
167 // Check that -mhwdiv works properly for armv8/thumbv8 (enabled by default).
168 
169 // RUN: %clang -target armv8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
170 // RUN: %clang -target armv8 -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
171 // RUN: %clang -target armv8-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
172 // RUN: %clang -target armv8-eabi -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
173 // V8:#define __ARM_ARCH_EXT_IDIV__ 1
174 
175 // RUN: %clang -target armv8 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
176 // RUN: %clang -target armv8 -mthumb -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
177 // RUN: %clang -target armv8 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
178 // RUN: %clang -target armv8 -mthumb -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
179 // NOHWDIV-V8-NOT:#define __ARM_ARCH_EXT_IDIV__
180 
181 // RUN: %clang -target armv8a -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
182 // RUN: %clang -target armv8a -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
183 // V8A:#define __ARM_ARCH_EXT_IDIV__ 1
184 // V8A-NOT:#define __ARM_FP 0x
185 
186 // RUN: %clang -target armv8a-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A-ALLOW-FP-INSTR %s
187 // RUN: %clang -target armv8a-eabi -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A-ALLOW-FP-INSTR %s
188 // RUN: %clang -target armv8a-eabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A-ALLOW-FP-INSTR %s
189 // RUN: %clang -target armv8a-eabihf -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A-ALLOW-FP-INSTR %s
190 // V8A-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
191 // V8A-ALLOW-FP-INSTR:#define __ARM_FP 0xe
192 
193 // RUN: %clang -target armv8m.base-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_BASELINE %s
194 // V8M_BASELINE: #define __ARM_ARCH 8
195 // V8M_BASELINE: #define __ARM_ARCH_8M_BASE__ 1
196 // V8M_BASELINE: #define __ARM_ARCH_EXT_IDIV__ 1
197 // V8M_BASELINE-NOT: __ARM_ARCH_ISA_ARM
198 // V8M_BASELINE: #define __ARM_ARCH_ISA_THUMB 1
199 // V8M_BASELINE: #define __ARM_ARCH_PROFILE 'M'
200 // V8M_BASELINE-NOT: __ARM_FEATURE_CRC32
201 // V8M_BASELINE-NOT: __ARM_FEATURE_DSP
202 // V8M_BASELINE-NOT: __ARM_FP 0x{{.*}}
203 // V8M_BASELINE-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
204 
205 // RUN: %clang -target armv8m.main-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_MAINLINE %s
206 // V8M_MAINLINE: #define __ARM_ARCH 8
207 // V8M_MAINLINE: #define __ARM_ARCH_8M_MAIN__ 1
208 // V8M_MAINLINE: #define __ARM_ARCH_EXT_IDIV__ 1
209 // V8M_MAINLINE-NOT: __ARM_ARCH_ISA_ARM
210 // V8M_MAINLINE: #define __ARM_ARCH_ISA_THUMB 2
211 // V8M_MAINLINE: #define __ARM_ARCH_PROFILE 'M'
212 // V8M_MAINLINE-NOT: __ARM_FEATURE_CRC32
213 // V8M_MAINLINE-NOT: __ARM_FEATURE_DSP
214 // V8M_MAINLINE-NOT: #define __ARM_FP 0x
215 // V8M_MAINLINE: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
216 
217 // RUN: %clang -target armv8m.main-none-linux-gnueabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M-MAINLINE-ALLOW-FP-INSTR %s
218 // RUN: %clang -target armv8m.main-none-linux-gnueabihf -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M-MAINLINE-ALLOW-FP-INSTR %s
219 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_ARCH 8
220 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_ARCH_8M_MAIN__ 1
221 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_ARCH_EXT_IDIV__ 1
222 // V8M-MAINLINE-ALLOW-FP-INSTR-NOT: __ARM_ARCH_ISA_ARM
223 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_ARCH_ISA_THUMB 2
224 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_ARCH_PROFILE 'M'
225 // V8M-MAINLINE-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_CRC32
226 // V8M-MAINLINE-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_DSP
227 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __ARM_FP 0xe
228 // V8M-MAINLINE-ALLOW-FP-INSTR: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
229 
230 // 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
231 // V8M_MAINLINE_DSP: #define __ARM_ARCH 8
232 // V8M_MAINLINE_DSP: #define __ARM_ARCH_8M_MAIN__ 1
233 // V8M_MAINLINE_DSP: #define __ARM_ARCH_EXT_IDIV__ 1
234 // V8M_MAINLINE_DSP-NOT: __ARM_ARCH_ISA_ARM
235 // V8M_MAINLINE_DSP: #define __ARM_ARCH_ISA_THUMB 2
236 // V8M_MAINLINE_DSP: #define __ARM_ARCH_PROFILE 'M'
237 // V8M_MAINLINE_DSP-NOT: __ARM_FEATURE_CRC32
238 // V8M_MAINLINE_DSP: #define __ARM_FEATURE_DSP 1
239 // V8M_MAINLINE_DSP-NOT: #define __ARM_FP 0x
240 // V8M_MAINLINE_DSP: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
241 
242 // RUN: %clang -target arm-none-linux-gnueabi -march=armv8-m.main+dsp -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M-MAINLINE-DSP-ALLOW-FP-INSTR %s
243 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_ARCH 8
244 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_ARCH_8M_MAIN__ 1
245 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_ARCH_EXT_IDIV__ 1
246 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR-NOT: __ARM_ARCH_ISA_ARM
247 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_ARCH_ISA_THUMB 2
248 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_ARCH_PROFILE 'M'
249 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_CRC32
250 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_FEATURE_DSP 1
251 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __ARM_FP 0xe
252 // V8M-MAINLINE-DSP-ALLOW-FP-INSTR: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
253 
254 // RUN: %clang -target arm-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-DEFS %s
255 // CHECK-DEFS:#define __ARM_PCS 1
256 // CHECK-DEFS:#define __ARM_SIZEOF_MINIMAL_ENUM 4
257 // CHECK-DEFS:#define __ARM_SIZEOF_WCHAR_T 4
258 
259 // RUN: %clang -target arm-none-linux-gnu -fno-math-errno -fno-signed-zeros\
260 // RUN:        -fno-trapping-math -fassociative-math -freciprocal-math\
261 // RUN:        -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
262 // RUN: %clang -target arm-none-linux-gnu -ffast-math -x c -E -dM %s -o -\
263 // RUN:        | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
264 // CHECK-FASTMATH: #define __ARM_FP_FAST 1
265 
266 // RUN: %clang -target arm-none-linux-gnu -fshort-wchar -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTWCHAR %s
267 // CHECK-SHORTWCHAR:#define __ARM_SIZEOF_WCHAR_T 2
268 
269 // RUN: %clang -target arm-none-linux-gnu -fshort-enums -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTENUMS %s
270 // CHECK-SHORTENUMS:#define __ARM_SIZEOF_MINIMAL_ENUM 1
271 
272 // Test that -mhwdiv has the right effect for a target CPU which has hwdiv enabled by default.
273 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
274 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
275 // RUN: %clang -target armv7 -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
276 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
277 // HWDIV:#define __ARM_ARCH_EXT_IDIV__ 1
278 
279 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
280 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
281 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
282 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
283 // NOHWDIV-NOT:#define __ARM_ARCH_EXT_IDIV__
284 
285 
286 // Check that -mfpu works properly for Cortex-A7 (enabled by default).
287 // 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
288 // 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
289 // RUN: %clang -target armv7-none-linux-gnueabihf -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
290 // RUN: %clang -target armv7-none-linux-gnueabihf -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
291 // DEFAULTFPU-A7:#define __ARM_FP 0xe
292 // DEFAULTFPU-A7:#define __ARM_NEON__ 1
293 // DEFAULTFPU-A7:#define __ARM_VFPV4__ 1
294 
295 // 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
296 // 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
297 // FPUNONE-A7-NOT:#define __ARM_FP 0x{{.*}}
298 // FPUNONE-A7-NOT:#define __ARM_NEON__ 1
299 // FPUNONE-A7-NOT:#define __ARM_VFPV4__ 1
300 
301 // 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
302 // 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
303 // NONEON-A7:#define __ARM_FP 0xe
304 // NONEON-A7-NOT:#define __ARM_NEON__ 1
305 // NONEON-A7:#define __ARM_VFPV4__ 1
306 
307 // Check that -mfpu works properly for Cortex-A5 (enabled by default).
308 // 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
309 // 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
310 // DEFAULTFPU-A5:#define __ARM_FP 0xe
311 // DEFAULTFPU-A5:#define __ARM_NEON__ 1
312 // DEFAULTFPU-A5:#define __ARM_VFPV4__ 1
313 
314 // 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
315 // 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
316 // FPUNONE-A5-NOT:#define __ARM_FP 0x{{.*}}
317 // FPUNONE-A5-NOT:#define __ARM_NEON__ 1
318 // FPUNONE-A5-NOT:#define __ARM_VFPV4__ 1
319 
320 // 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
321 // 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
322 // NONEON-A5:#define __ARM_FP 0xe
323 // NONEON-A5-NOT:#define __ARM_NEON__ 1
324 // NONEON-A5:#define __ARM_VFPV4__ 1
325 
326 // FIXME: add check for further predefines
327 // Test whether predefines are as expected when targeting ep9312.
328 // RUN: %clang -target armv4t -mcpu=ep9312 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A4T %s
329 // A4T-NOT:#define __ARM_FEATURE_DSP
330 // A4T-NOT:#define __ARM_FP 0x{{.*}}
331 
332 // Test whether predefines are as expected when targeting arm10tdmi.
333 // RUN: %clang -target armv5 -mcpu=arm10tdmi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5T %s
334 // A5T-NOT:#define __ARM_FEATURE_DSP
335 // A5T-NOT:#define __ARM_FP 0x{{.*}}
336 
337 // Test whether predefines are as expected when targeting cortex-a5i (soft FP ABI as default).
338 // RUN: %clang -target armv7 -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
339 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
340 // A5:#define __ARM_ARCH 7
341 // A5:#define __ARM_ARCH_7A__ 1
342 // A5-NOT:#define __ARM_ARCH_EXT_IDIV__
343 // A5:#define __ARM_ARCH_PROFILE 'A'
344 // A5-NOT:#define __ARM_DWARF_EH__ 1
345 // A5-NOT: #define __ARM_FEATURE_DIRECTED_ROUNDING
346 // A5:#define __ARM_FEATURE_DSP 1
347 // A5-NOT: #define __ARM_FEATURE_NUMERIC_MAXMIN
348 // A5-NOT:#define __ARM_FP 0x
349 
350 // Test whether predefines are as expected when targeting cortex-a5 (softfp FP ABI as default).
351 // RUN: %clang -target armv7-eabi -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5-ALLOW-FP-INSTR %s
352 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5-ALLOW-FP-INSTR %s
353 // A5-ALLOW-FP-INSTR:#define __ARM_ARCH 7
354 // A5-ALLOW-FP-INSTR:#define __ARM_ARCH_7A__ 1
355 // A5-ALLOW-FP-INSTR-NOT:#define __ARM_ARCH_EXT_IDIV__
356 // A5-ALLOW-FP-INSTR:#define __ARM_ARCH_PROFILE 'A'
357 // A5-ALLOW-FP-INSTR-NOT: #define __ARM_FEATURE_DIRECTED_ROUNDING
358 // A5-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
359 // A5-ALLOW-FP-INSTR-NOT: #define __ARM_FEATURE_NUMERIC_MAXMIN
360 // A5-ALLOW-FP-INSTR:#define __ARM_FP 0xe
361 
362 // Test whether predefines are as expected when targeting cortex-a7 (soft FP ABI as default).
363 // RUN: %clang -target armv7k -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
364 // RUN: %clang -target armv7k -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
365 // A7:#define __ARM_ARCH 7
366 // A7:#define __ARM_ARCH_EXT_IDIV__ 1
367 // A7:#define __ARM_ARCH_PROFILE 'A'
368 // A7-NOT:#define __ARM_DWARF_EH__ 1
369 // A7:#define __ARM_FEATURE_DSP 1
370 // A7-NOT:#define __ARM_FP 0x
371 
372 // Test whether predefines are as expected when targeting cortex-a7 (softfp FP ABI as default).
373 // RUN: %clang -target armv7k-eabi -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7-ALLOW-FP-INSTR %s
374 // RUN: %clang -target armv7k-eabi -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7-ALLOW-FP-INSTR %s
375 // A7-ALLOW-FP-INSTR:#define __ARM_ARCH 7
376 // A7-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
377 // A7-ALLOW-FP-INSTR:#define __ARM_ARCH_PROFILE 'A'
378 // A7-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
379 // A7-ALLOW-FP-INSTR:#define __ARM_FP 0xe
380 
381 // Test whether predefines are as expected when targeting cortex-a7.
382 // RUN: %clang -target x86_64-apple-darwin -arch armv7k -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV7K %s
383 // ARMV7K:#define __ARM_ARCH 7
384 // ARMV7K:#define __ARM_ARCH_EXT_IDIV__ 1
385 // ARMV7K:#define __ARM_ARCH_PROFILE 'A'
386 // ARMV7K:#define __ARM_DWARF_EH__ 1
387 // ARMV7K:#define __ARM_FEATURE_DSP 1
388 // ARMV7K:#define __ARM_FP 0xe
389 // ARMV7K:#define __ARM_PCS_VFP 1
390 
391 
392 // Test whether predefines are as expected when targeting cortex-a8 (soft FP ABI as default).
393 // RUN: %clang -target armv7 -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
394 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
395 // A8-NOT:#define __ARM_ARCH_EXT_IDIV__
396 // A8:#define __ARM_FEATURE_DSP 1
397 // A8-NOT:#define __ARM_FP 0x
398 
399 // Test whether predefines are as expected when targeting cortex-a8 (softfp FP ABI as default).
400 // RUN: %clang -target armv7-eabi -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8-ALLOW-FP-INSTR %s
401 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8-ALLOW-FP-INSTR %s
402 // A8-ALLOW-FP-INSTR-NOT:#define __ARM_ARCH_EXT_IDIV__
403 // A8-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
404 // A8-ALLOW-FP-INSTR:#define __ARM_FP 0xc
405 
406 // Test whether predefines are as expected when targeting cortex-a9 (soft FP as default).
407 // RUN: %clang -target armv7 -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
408 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
409 // A9-NOT:#define __ARM_ARCH_EXT_IDIV__
410 // A9:#define __ARM_FEATURE_DSP 1
411 // A9-NOT:#define __ARM_FP 0x
412 
413 // Test whether predefines are as expected when targeting cortex-a9 (softfp FP as default).
414 // RUN: %clang -target armv7-eabi -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9-ALLOW-FP-INSTR %s
415 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9-ALLOW-FP-INSTR %s
416 // A9-ALLOW-FP-INSTR-NOT:#define __ARM_ARCH_EXT_IDIV__
417 // A9-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
418 // A9-ALLOW-FP-INSTR:#define __ARM_FP 0xe
419 
420 
421 // Check that -mfpu works properly for Cortex-A12 (enabled by default).
422 // 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
423 // 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
424 // DEFAULTFPU-A12:#define __ARM_FP 0xe
425 // DEFAULTFPU-A12:#define __ARM_NEON__ 1
426 // DEFAULTFPU-A12:#define __ARM_VFPV4__ 1
427 
428 // 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
429 // 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
430 // FPUNONE-A12-NOT:#define __ARM_FP 0x{{.*}}
431 // FPUNONE-A12-NOT:#define __ARM_NEON__ 1
432 // FPUNONE-A12-NOT:#define __ARM_VFPV4__ 1
433 
434 // Test whether predefines are as expected when targeting cortex-a12 (soft FP ABI as default).
435 // RUN: %clang -target armv7 -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
436 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
437 // A12:#define __ARM_ARCH 7
438 // A12:#define __ARM_ARCH_7A__ 1
439 // A12:#define __ARM_ARCH_EXT_IDIV__ 1
440 // A12:#define __ARM_ARCH_PROFILE 'A'
441 // A12:#define __ARM_FEATURE_DSP 1
442 // A12-NOT:#define __ARM_FP 0x
443 
444 // Test whether predefines are as expected when targeting cortex-a12 (soft FP ABI as default).
445 // RUN: %clang -target armv7-eabi -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12-ALLOW-FP-INSTR %s
446 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12-ALLOW-FP-INSTR %s
447 // A12-ALLOW-FP-INSTR:#define __ARM_ARCH 7
448 // A12-ALLOW-FP-INSTR:#define __ARM_ARCH_7A__ 1
449 // A12-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
450 // A12-ALLOW-FP-INSTR:#define __ARM_ARCH_PROFILE 'A'
451 // A12-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
452 // A12-ALLOW-FP-INSTR:#define __ARM_FP 0xe
453 
454 // Test whether predefines are as expected when targeting cortex-a15 (soft FP ABI as default).
455 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
456 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
457 // A15:#define __ARM_ARCH_EXT_IDIV__ 1
458 // A15:#define __ARM_FEATURE_DSP 1
459 // A15-NOT:#define __ARM_FP 0x
460 
461 // Test whether predefines are as expected when targeting cortex-a15 (softfp ABI as default).
462 // RUN: %clang -target armv7-eabi -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15-ALLOW-FP-INSTR %s
463 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15-ALLOW-FP-INSTR %s
464 // A15-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
465 // A15-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
466 // A15-ALLOW-FP-INSTR:#define __ARM_FP 0xe
467 
468 // Check that -mfpu works properly for Cortex-A17 (enabled by default).
469 // 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
470 // 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
471 // DEFAULTFPU-A17:#define __ARM_FP 0xe
472 // DEFAULTFPU-A17:#define __ARM_NEON__ 1
473 // DEFAULTFPU-A17:#define __ARM_VFPV4__ 1
474 
475 // 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
476 // 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
477 // FPUNONE-A17-NOT:#define __ARM_FP 0x{{.*}}
478 // FPUNONE-A17-NOT:#define __ARM_NEON__ 1
479 // FPUNONE-A17-NOT:#define __ARM_VFPV4__ 1
480 
481 // Test whether predefines are as expected when targeting cortex-a17 (soft FP ABI as default).
482 // RUN: %clang -target armv7 -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
483 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
484 // A17:#define __ARM_ARCH 7
485 // A17:#define __ARM_ARCH_7A__ 1
486 // A17:#define __ARM_ARCH_EXT_IDIV__ 1
487 // A17:#define __ARM_ARCH_PROFILE 'A'
488 // A17:#define __ARM_FEATURE_DSP 1
489 // A17-NOT:#define __ARM_FP 0x
490 
491 // Test whether predefines are as expected when targeting cortex-a17 (softfp FP ABI as default).
492 // RUN: %clang -target armv7-eabi -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17-ALLOW-FP-INSTR %s
493 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17-ALLOW-FP-INSTR %s
494 // A17-ALLOW-FP-INSTR:#define __ARM_ARCH 7
495 // A17-ALLOW-FP-INSTR:#define __ARM_ARCH_7A__ 1
496 // A17-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
497 // A17-ALLOW-FP-INSTR:#define __ARM_ARCH_PROFILE 'A'
498 // A17-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
499 // A17-ALLOW-FP-INSTR:#define __ARM_FP 0xe
500 
501 // Test whether predefines are as expected when targeting swift (soft FP ABI as default).
502 // RUN: %clang -target armv7s -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
503 // RUN: %clang -target armv7s -mthumb -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
504 // SWIFT:#define __ARM_ARCH_EXT_IDIV__ 1
505 // SWIFT:#define __ARM_FEATURE_DSP 1
506 // SWIFT-NOT:#define __ARM_FP 0xxE
507 
508 // Test whether predefines are as expected when targeting swift (softfp FP ABI as default).
509 // RUN: %clang -target armv7s-eabi -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT-ALLOW-FP-INSTR %s
510 // RUN: %clang -target armv7s-eabi -mthumb -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT-ALLOW-FP-INSTR %s
511 // SWIFT-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
512 // SWIFT-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
513 // SWIFT-ALLOW-FP-INSTR:#define __ARM_FP 0xe
514 
515 // Test whether predefines are as expected when targeting ARMv8-A Cortex implementations (soft FP ABI as default)
516 // RUN: %clang -target armv8 -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
517 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
518 // RUN: %clang -target armv8 -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
519 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
520 // RUN: %clang -target armv8 -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
521 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
522 // RUN: %clang -target armv8 -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
523 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
524 // RUN: %clang -target armv8 -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
525 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
526 // RUN: %clang -target armv8 -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
527 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
528 //
529 // RUN: %clang -target armv8 -mcpu=exynos-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
530 // RUN: %clang -target armv8 -mthumb -mcpu=exynos-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
531 // RUN: %clang -target armv8 -mcpu=exynos-m2 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
532 // RUN: %clang -target armv8 -mthumb -mcpu=exynos-m2 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
533 // RUN: %clang -target armv8 -mcpu=exynos-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
534 // RUN: %clang -target armv8 -mthumb -mcpu=exynos-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
535 // RUN: %clang -target armv8 -mcpu=exynos-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
536 // RUN: %clang -target armv8 -mthumb -mcpu=exynos-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
537 // RUN: %clang -target armv8 -mcpu=exynos-m5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
538 // RUN: %clang -target armv8 -mthumb -mcpu=exynos-m5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
539 // ARMV8:#define __ARM_ARCH_EXT_IDIV__ 1
540 // ARMV8:#define __ARM_FEATURE_DSP 1
541 // ARMV8-NOT:#define __ARM_FP 0x
542 
543 // Test whether predefines are as expected when targeting ARMv8-A Cortex implementations (softfp FP ABI as default)
544 // RUN: %clang -target armv8-eabi -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
545 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
546 // RUN: %clang -target armv8-eabi -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
547 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
548 // RUN: %clang -target armv8-eabi -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
549 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
550 // RUN: %clang -target armv8-eabi -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
551 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
552 // RUN: %clang -target armv8-eabi -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
553 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
554 // RUN: %clang -target armv8-eabi -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
555 // RUN: %clang -target armv8-eabi -mthumb -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
556 //
557 // RUN: %clang -target armv8-eabi -mcpu=exynos-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
558 // RUN: %clang -target armv8-eabi -mthumb -mcpu=exynos-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
559 // RUN: %clang -target armv8-eabi -mcpu=exynos-m2 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
560 // RUN: %clang -target armv8-eabi -mthumb -mcpu=exynos-m2 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
561 // RUN: %clang -target armv8-eabi -mcpu=exynos-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
562 // RUN: %clang -target armv8-eabi -mthumb -mcpu=exynos-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
563 // RUN: %clang -target armv8-eabi -mcpu=exynos-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
564 // RUN: %clang -target armv8-eabi -mthumb -mcpu=exynos-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
565 // RUN: %clang -target armv8-eabi -mcpu=exynos-m5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
566 // RUN: %clang -target armv8-eabi -mthumb -mcpu=exynos-m5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8-ALLOW-FP-INSTR %s
567 // ARMV8-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
568 // ARMV8-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
569 // ARMV8-ALLOW-FP-INSTR:#define __ARM_FP 0xe
570 
571 // Test whether predefines are as expected when targeting cortex-r4.
572 // RUN: %clang -target armv7 -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-ARM %s
573 // R4-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
574 // R4-ARM:#define __ARM_FEATURE_DSP 1
575 // R4-ARM-NOT:#define __ARM_FP 0x{{.*}}
576 
577 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-THUMB %s
578 // R4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
579 // R4-THUMB:#define __ARM_FEATURE_DSP 1
580 // R4-THUMB-NOT:#define __ARM_FP 0x{{.*}}
581 
582 // Test whether predefines are as expected when targeting cortex-r4f (soft FP ABI as default).
583 // RUN: %clang -target armv7 -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-ARM %s
584 // R4F-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
585 // R4F-ARM:#define __ARM_FEATURE_DSP 1
586 // R4F-ARM-NOT:#define __ARM_FP 0x
587 
588 // Test whether predefines are as expected when targeting cortex-r4f (softfp FP ABI as default).
589 // RUN: %clang -target armv7-eabi -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-ARM-ALLOW-FP-INSTR %s
590 // R4F-ARM-ALLOW-FP-INSTR-NOT:#define __ARM_ARCH_EXT_IDIV__
591 // R4F-ARM-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
592 // R4F-ARM-ALLOW-FP-INSTR:#define __ARM_FP 0xc
593 
594 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-THUMB %s
595 // R4F-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
596 // R4F-THUMB:#define __ARM_FEATURE_DSP 1
597 // R4F-THUMB-NOT:#define __ARM_FP 0x
598 
599 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-THUMB-ALLOW-FP-INSTR %s
600 // R4F-THUMB-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
601 // R4F-THUMB-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
602 // R4F-THUMB-ALLOW-FP-INSTR:#define __ARM_FP 0xc
603 
604 // Test whether predefines are as expected when targeting cortex-r5 (soft FP ABI as default).
605 // RUN: %clang -target armv7 -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
606 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
607 // R5:#define __ARM_ARCH_EXT_IDIV__ 1
608 // R5:#define __ARM_FEATURE_DSP 1
609 // R5-NOT:#define __ARM_FP 0x
610 
611 // Test whether predefines are as expected when targeting cortex-r5 (softfp FP ABI as default).
612 // RUN: %clang -target armv7-eabi -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5-ALLOW-FP-INSTR %s
613 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5-ALLOW-FP-INSTR %s
614 // R5-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
615 // R5-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
616 // R5-ALLOW-FP-INSTR:#define __ARM_FP 0xc
617 
618 // Test whether predefines are as expected when targeting cortex-r7 and cortex-r8 (soft FP ABI as default).
619 // RUN: %clang -target armv7 -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
620 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
621 // RUN: %clang -target armv7 -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
622 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
623 // R7-R8:#define __ARM_ARCH_EXT_IDIV__ 1
624 // R7-R8:#define __ARM_FEATURE_DSP 1
625 // R7-R8-NOT:#define __ARM_FP 0x
626 
627 // Test whether predefines are as expected when targeting cortex-r7 and cortex-r8 (softfp FP ABI as default).
628 // RUN: %clang -target armv7-eabi -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8-ALLOW-FP-INSTR %s
629 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8-ALLOW-FP-INSTR %s
630 // RUN: %clang -target armv7-eabi -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8-ALLOW-FP-INSTR %s
631 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8-ALLOW-FP-INSTR %s
632 // R7-R8-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
633 // R7-R8-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
634 // R7-R8-ALLOW-FP-INSTR:#define __ARM_FP 0xe
635 
636 // Test whether predefines are as expected when targeting cortex-m0.
637 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
638 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0plus -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
639 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
640 // RUN: %clang -target armv7 -mthumb -mcpu=sc000 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
641 // M0-THUMB-NOT:#define __ARM_ARCH_EXT_IDIV__
642 // M0-THUMB-NOT:#define __ARM_FEATURE_DSP
643 // M0-THUMB-NOT:#define __ARM_FP 0x{{.*}}
644 
645 // Test whether predefines are as expected when targeting cortex-m3.
646 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
647 // RUN: %clang -target armv7 -mthumb -mcpu=sc300 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
648 // M3-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
649 // M3-THUMB-NOT:#define __ARM_FEATURE_DSP
650 // M3-THUMB-NOT:#define __ARM_FP 0x{{.*}}
651 
652 // Test whether predefines are as expected when targeting cortex-m4 (soft FP ABI as default).
653 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M4-THUMB %s
654 // M4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
655 // M4-THUMB:#define __ARM_FEATURE_DSP 1
656 // M4-THUMB-NOT:#define __ARM_FP 0x
657 
658 // Test whether predefines are as expected when targeting cortex-m4 (softfp ABI as default).
659 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M4-THUMB-ALLOW-FP-INSTR %s
660 // M4-THUMB-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
661 // M4-THUMB-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
662 // M4-THUMB-ALLOW-FP-INSTR:#define __ARM_FP 0x6
663 
664 // Test whether predefines are as expected when targeting cortex-m7 (soft FP ABI as default).
665 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M7-THUMB %s
666 // M7-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
667 // M7-THUMB:#define __ARM_FEATURE_DSP 1
668 // M7-THUMB-NOT:#define __ARM_FP 0x
669 // M7-THUMB-NOT:#define __ARM_FPV5__
670 
671 // Test whether predefines are as expected when targeting cortex-m7 (softfp FP ABI as default).
672 // RUN: %clang -target armv7-eabi -mthumb -mcpu=cortex-m7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M7-THUMB-ALLOW-FP-INSTR %s
673 // M7-THUMB-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
674 // M7-THUMB-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
675 // M7-THUMB-ALLOW-FP-INSTR:#define __ARM_FP 0xe
676 // M7-THUMB-ALLOW-FP-INSTR:#define __ARM_FPV5__ 1
677 
678 // Test whether predefines are as expected when targeting v8m cores
679 // RUN: %clang -target arm -mcpu=cortex-m23 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M23 %s
680 // M23: #define __ARM_ARCH 8
681 // M23: #define __ARM_ARCH_8M_BASE__ 1
682 // M23: #define __ARM_ARCH_EXT_IDIV__ 1
683 // M23-NOT: __ARM_ARCH_ISA_ARM
684 // M23: #define __ARM_ARCH_ISA_THUMB 1
685 // M23: #define __ARM_ARCH_PROFILE 'M'
686 // M23-NOT: __ARM_FEATURE_CRC32
687 // M23-NOT: __ARM_FEATURE_DSP
688 // M23-NOT: __ARM_FP 0x{{.*}}
689 // M23-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
690 
691 // Test whether predefines are as expected when targeting m33 (soft FP ABI as default).
692 // RUN: %clang -target arm -mcpu=cortex-m33 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M33 %s
693 // M33: #define __ARM_ARCH 8
694 // M33: #define __ARM_ARCH_8M_MAIN__ 1
695 // M33: #define __ARM_ARCH_EXT_IDIV__ 1
696 // M33-NOT: __ARM_ARCH_ISA_ARM
697 // M33: #define __ARM_ARCH_ISA_THUMB 2
698 // M33: #define __ARM_ARCH_PROFILE 'M'
699 // M33-NOT: __ARM_FEATURE_CRC32
700 // M33: #define __ARM_FEATURE_DSP 1
701 // M33-NOT: #define __ARM_FP 0x
702 // M33: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
703 
704 // Test whether predefines are as expected when targeting m33 (softfp FP ABI as default).
705 // RUN: %clang -target arm-eabi -mcpu=cortex-m33 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M33-ALLOW-FP-INSTR %s
706 // M33-ALLOW-FP-INSTR: #define __ARM_ARCH 8
707 // M33-ALLOW-FP-INSTR: #define __ARM_ARCH_8M_MAIN__ 1
708 // M33-ALLOW-FP-INSTR: #define __ARM_ARCH_EXT_IDIV__ 1
709 // M33-ALLOW-FP-INSTR-NOT: __ARM_ARCH_ISA_ARM
710 // M33-ALLOW-FP-INSTR: #define __ARM_ARCH_ISA_THUMB 2
711 // M33-ALLOW-FP-INSTR: #define __ARM_ARCH_PROFILE 'M'
712 // M33-ALLOW-FP-INSTR-NOT: __ARM_FEATURE_CRC32
713 // M33-ALLOW-FP-INSTR: #define __ARM_FEATURE_DSP 1
714 // M33-ALLOW-FP-INSTR: #define __ARM_FP 0x6
715 // M33-ALLOW-FP-INSTR: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
716 
717 // Test whether predefines are as expected when targeting krait (soft FP as default).
718 // RUN: %clang -target armv7 -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
719 // RUN: %clang -target armv7 -mthumb -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
720 // KRAIT:#define __ARM_ARCH_EXT_IDIV__ 1
721 // KRAIT:#define __ARM_FEATURE_DSP 1
722 // KRAIT-NOT:#define  __ARM_VFPV4__
723 
724 // Test whether predefines are as expected when targeting krait (softfp FP as default).
725 // RUN: %clang -target armv7-eabi -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT-ALLOW-FP-INSTR %s
726 // RUN: %clang -target armv7-eabi -mthumb -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT-ALLOW-FP-INSTR %s
727 // KRAIT-ALLOW-FP-INSTR:#define __ARM_ARCH_EXT_IDIV__ 1
728 // KRAIT-ALLOW-FP-INSTR:#define __ARM_FEATURE_DSP 1
729 // KRAIT-ALLOW-FP-INSTR:#define  __ARM_VFPV4__ 1
730 
731 // RUN: %clang -target armv8.1a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V81A %s
732 // CHECK-V81A: #define __ARM_ARCH 8
733 // CHECK-V81A: #define __ARM_ARCH_8_1A__ 1
734 // CHECK-V81A: #define __ARM_ARCH_PROFILE 'A'
735 // CHECK-V81A: #define __ARM_FEATURE_QRDMX 1
736 // CHECK-V81A: #define __ARM_FP 0xe
737 
738 // RUN: %clang -target armv8.2a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V82A %s
739 // CHECK-V82A: #define __ARM_ARCH 8
740 // CHECK-V82A: #define __ARM_ARCH_8_2A__ 1
741 // CHECK-V82A: #define __ARM_ARCH_PROFILE 'A'
742 // CHECK-V82A: #define __ARM_FEATURE_QRDMX 1
743 // CHECK-V82A: #define __ARM_FP 0xe
744 
745 // RUN: %clang -target armv8.3a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V83A %s
746 // CHECK-V83A: #define __ARM_ARCH 8
747 // CHECK-V83A: #define __ARM_ARCH_8_3A__ 1
748 // CHECK-V83A: #define __ARM_ARCH_PROFILE 'A'
749 
750 // RUN: %clang -target armv8.4a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V84A %s
751 // CHECK-V84A: #define __ARM_ARCH 8
752 // CHECK-V84A: #define __ARM_ARCH_8_4A__ 1
753 // CHECK-V84A: #define __ARM_ARCH_PROFILE 'A'
754 
755 // RUN: %clang -target armv8.5a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V85A %s
756 // CHECK-V85A: #define __ARM_ARCH 8
757 // CHECK-V85A: #define __ARM_ARCH_8_5A__ 1
758 // CHECK-V85A: #define __ARM_ARCH_PROFILE 'A'
759