1// RUN: %clang -target i386-unknown-unknown -march=core2 -msse4 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE4 %s
2
3// SSE4: #define __SSE2_MATH__ 1
4// SSE4: #define __SSE2__ 1
5// SSE4: #define __SSE3__ 1
6// SSE4: #define __SSE4_1__ 1
7// SSE4: #define __SSE4_2__ 1
8// SSE4: #define __SSE_MATH__ 1
9// SSE4: #define __SSE__ 1
10// SSE4: #define __SSSE3__ 1
11
12// RUN: %clang -target i386-unknown-unknown -march=core2 -msse4 -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE %s
13
14// SSE-NOT: #define __SSE2_MATH__ 1
15// SSE-NOT: #define __SSE2__ 1
16// SSE-NOT: #define __SSE3__ 1
17// SSE-NOT: #define __SSE4_1__ 1
18// SSE-NOT: #define __SSE4_2__ 1
19// SSE: #define __SSE_MATH__ 1
20// SSE: #define __SSE__ 1
21// SSE-NOT: #define __SSSE3__ 1
22
23// RUN: %clang -target i386-unknown-unknown -march=pentium-m -x c -E -dM -o - %s | FileCheck --check-prefix=SSE2 %s
24
25// SSE2: #define __SSE2_MATH__ 1
26// SSE2: #define __SSE2__ 1
27// SSE2-NOT: #define __SSE3__ 1
28// SSE2-NOT: #define __SSE4_1__ 1
29// SSE2-NOT: #define __SSE4_2__ 1
30// SSE2: #define __SSE_MATH__ 1
31// SSE2: #define __SSE__ 1
32// SSE2-NOT: #define __SSSE3__ 1
33
34// RUN: %clang -target i386-unknown-unknown -march=pentium-m -mno-sse -mavx -x c -E -dM -o - %s | FileCheck --check-prefix=AVX %s
35
36// AVX: #define __AVX__ 1
37// AVX: #define __SSE2_MATH__ 1
38// AVX: #define __SSE2__ 1
39// AVX: #define __SSE3__ 1
40// AVX: #define __SSE4_1__ 1
41// AVX: #define __SSE4_2__ 1
42// AVX: #define __SSE_MATH__ 1
43// AVX: #define __SSE__ 1
44// AVX: #define __SSSE3__ 1
45
46// RUN: %clang -target i386-unknown-unknown -march=pentium-m -mxop -mno-avx -x c -E -dM -o - %s | FileCheck --check-prefix=SSE4A %s
47
48// SSE4A: #define __SSE2_MATH__ 1
49// SSE4A: #define __SSE2__ 1
50// SSE4A: #define __SSE3__ 1
51// SSE4A: #define __SSE4A__ 1
52// SSE4A: #define __SSE4_1__ 1
53// SSE4A: #define __SSE4_2__ 1
54// SSE4A: #define __SSE_MATH__ 1
55// SSE4A: #define __SSE__ 1
56// SSE4A: #define __SSSE3__ 1
57
58// RUN: %clang -target i386-unknown-unknown -march=atom -mavx512f -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512F %s
59
60// AVX512F: #define __AVX2__ 1
61// AVX512F: #define __AVX512F__ 1
62// AVX512F: #define __AVX__ 1
63// AVX512F: #define __SSE2_MATH__ 1
64// AVX512F: #define __SSE2__ 1
65// AVX512F: #define __SSE3__ 1
66// AVX512F: #define __SSE4_1__ 1
67// AVX512F: #define __SSE4_2__ 1
68// AVX512F: #define __SSE_MATH__ 1
69// AVX512F: #define __SSE__ 1
70// AVX512F: #define __SSSE3__ 1
71
72// RUN: %clang -target i386-unknown-unknown -march=atom -mavx512cd -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512CD %s
73
74// AVX512CD: #define __AVX2__ 1
75// AVX512CD: #define __AVX512CD__ 1
76// AVX512CD: #define __AVX512F__ 1
77// AVX512CD: #define __AVX__ 1
78// AVX512CD: #define __SSE2_MATH__ 1
79// AVX512CD: #define __SSE2__ 1
80// AVX512CD: #define __SSE3__ 1
81// AVX512CD: #define __SSE4_1__ 1
82// AVX512CD: #define __SSE4_2__ 1
83// AVX512CD: #define __SSE_MATH__ 1
84// AVX512CD: #define __SSE__ 1
85// AVX512CD: #define __SSSE3__ 1
86
87// RUN: %clang -target i386-unknown-unknown -march=atom -mavx512er -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512ER %s
88
89// AVX512ER: #define __AVX2__ 1
90// AVX512ER: #define __AVX512ER__ 1
91// AVX512ER: #define __AVX512F__ 1
92// AVX512ER: #define __AVX__ 1
93// AVX512ER: #define __SSE2_MATH__ 1
94// AVX512ER: #define __SSE2__ 1
95// AVX512ER: #define __SSE3__ 1
96// AVX512ER: #define __SSE4_1__ 1
97// AVX512ER: #define __SSE4_2__ 1
98// AVX512ER: #define __SSE_MATH__ 1
99// AVX512ER: #define __SSE__ 1
100// AVX512ER: #define __SSSE3__ 1
101
102// RUN: %clang -target i386-unknown-unknown -march=atom -mavx512pf -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512PF %s
103
104// AVX512PF: #define __AVX2__ 1
105// AVX512PF: #define __AVX512F__ 1
106// AVX512PF: #define __AVX512PF__ 1
107// AVX512PF: #define __AVX__ 1
108// AVX512PF: #define __SSE2_MATH__ 1
109// AVX512PF: #define __SSE2__ 1
110// AVX512PF: #define __SSE3__ 1
111// AVX512PF: #define __SSE4_1__ 1
112// AVX512PF: #define __SSE4_2__ 1
113// AVX512PF: #define __SSE_MATH__ 1
114// AVX512PF: #define __SSE__ 1
115// AVX512PF: #define __SSSE3__ 1
116
117// RUN: %clang -target i386-unknown-unknown -march=atom -mavx512pf -mno-avx512f -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512F2 %s
118
119// AVX512F2: #define __AVX2__ 1
120// AVX512F2-NOT: #define __AVX512F__ 1
121// AVX512F2-NOT: #define __AVX512PF__ 1
122// AVX512F2: #define __AVX__ 1
123// AVX512F2: #define __SSE2_MATH__ 1
124// AVX512F2: #define __SSE2__ 1
125// AVX512F2: #define __SSE3__ 1
126// AVX512F2: #define __SSE4_1__ 1
127// AVX512F2: #define __SSE4_2__ 1
128// AVX512F2: #define __SSE_MATH__ 1
129// AVX512F2: #define __SSE__ 1
130// AVX512F2: #define __SSSE3__ 1
131
132// RUN: %clang -target i386-unknown-unknown -march=atom -msse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE42POPCNT %s
133
134// SSE42POPCNT: #define __POPCNT__ 1
135
136// RUN: %clang -target i386-unknown-unknown -march=atom -mno-popcnt -msse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE42NOPOPCNT %s
137
138// SSE42NOPOPCNT-NOT: #define __POPCNT__ 1
139
140// RUN: %clang -target i386-unknown-unknown -march=atom -mpopcnt -mno-sse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=NOSSE42POPCNT %s
141
142// NOSSE42POPCNT: #define __POPCNT__ 1
143
144// RUN: %clang -target i386-unknown-unknown -march=atom -msse -x c -E -dM -o - %s | FileCheck --check-prefix=SSEMMX %s
145
146// SSEMMX: #define __MMX__ 1
147
148// RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-sse -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOSSEMMX %s
149
150// SSENOSSEMMX-NOT: #define __MMX__ 1
151
152// RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-mmx -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOMMX %s
153
154// SSENOMMX-NOT: #define __MMX__ 1
155
156// RUN: %clang -target i386-unknown-unknown -march=atom -mf16c -x c -E -dM -o - %s | FileCheck --check-prefix=F16C %s
157
158// F16C: #define __AVX__ 1
159// F16C: #define __F16C__ 1
160
161// RUN: %clang -target i386-unknown-unknown -march=atom -mf16c -mno-avx -x c -E -dM -o - %s | FileCheck --check-prefix=F16CNOAVX %s
162
163// F16CNOAVX-NOT: #define __AVX__ 1
164// F16CNOAVX-NOT: #define __F16C__ 1
165
166// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mpclmul -x c -E -dM -o - %s | FileCheck --check-prefix=PCLMUL %s
167
168// PCLMUL: #define __PCLMUL__ 1
169// PCLMUL: #define __SSE2__ 1
170// PCLMUL-NOT: #define __SSE3__ 1
171
172// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mpclmul -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=PCLMULNOSSE2 %s
173
174// PCLMULNOSSE2-NOT: #define __PCLMUL__ 1
175// PCLMULNOSSE2-NOT: #define __SSE2__ 1
176// PCLMULNOSSE2-NOT: #define __SSE3__ 1
177
178// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -maes -x c -E -dM -o - %s | FileCheck --check-prefix=AES %s
179
180// AES: #define __AES__ 1
181// AES: #define __SSE2__ 1
182// AES-NOT: #define __SSE3__ 1
183
184// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -maes -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=AESNOSSE2 %s
185
186// AESNOSSE2-NOT: #define __AES__ 1
187// AESNOSSE2-NOT: #define __SSE2__ 1
188// AESNOSSE2-NOT: #define __SSE3__ 1
189
190// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -x c -E -dM -o - %s | FileCheck --check-prefix=SHA %s
191
192// SHA: #define __SHA__ 1
193// SHA: #define __SSE2__ 1
194// SHA-NOT: #define __SSE3__ 1
195
196// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -mno-sha -x c -E -dM -o - %s | FileCheck --check-prefix=SHANOSHA %s
197
198// SHANOSHA-NOT: #define __SHA__ 1
199// SHANOSHA-NOT: #define __SSE2__ 1
200
201// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=SHANOSSE2 %s
202
203// SHANOSSE2-NOT: #define __SHA__ 1
204// SHANOSSE2-NOT: #define __SSE2__ 1
205// SHANOSSE2-NOT: #define __SSE3__ 1
206
207// RUN: %clang -target i386-unknown-unknown -march=atom -mtbm -x c -E -dM -o - %s | FileCheck --check-prefix=TBM %s
208
209// TBM: #define __TBM__ 1
210
211// RUN: %clang -target i386-unknown-unknown -march=bdver2 -mno-tbm -x c -E -dM -o - %s | FileCheck --check-prefix=NOTBM %s
212
213// NOTBM-NOT: #define __TBM__ 1
214
215// RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mcx16 -x c -E -dM -o - %s | FileCheck --check-prefix=MCX16 %s
216
217// MCX16: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1
218
219// RUN: %clang -target i386-unknown-unknown -march=atom -mprfchw -x c -E -dM -o - %s | FileCheck --check-prefix=PRFCHW %s
220
221// PRFCHW: #define __PRFCHW__ 1
222
223// RUN: %clang -target i386-unknown-unknown -march=btver2 -mno-prfchw -x c -E -dM -o - %s | FileCheck --check-prefix=NOPRFCHW %s
224
225// NOPRFCHW-NOT: #define __PRFCHW__ 1
226
227// RUN: %clang -target i386-unknown-unknown -march=atom -m3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=3DNOWPRFCHW %s
228
229// 3DNOWPRFCHW: #define __PRFCHW__ 1
230
231// RUN: %clang -target i386-unknown-unknown -march=atom -mno-prfchw -m3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=3DNOWNOPRFCHW %s
232
233// 3DNOWNOPRFCHW-NOT: #define __PRFCHW__ 1
234
235// RUN: %clang -target i386-unknown-unknown -march=atom -mprfchw -mno-3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=NO3DNOWPRFCHW %s
236
237// NO3DNOWPRFCHW: #define __PRFCHW__ 1
238
239