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