1 // RUN: %clang_cc1 -DUSE_64 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +shstk -target-feature +wbnoinvd -target-feature +cldemote -emit-llvm -o %t %s
2 // RUN: %clang_cc1 -DUSE_ALL -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +shstk -target-feature +clzero -target-feature +wbnoinvd -target-feature +cldemote -fsyntax-only -o %t %s
3 // RUN: %clang_cc1 -DUSE_64 -DOPENCL -x cl -cl-std=CL2.0 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +shstk -target-feature +wbnoinvd -target-feature +cldemote -emit-llvm -o %t %s
4 
5 #ifdef USE_ALL
6 #define USE_3DNOW
7 #define USE_64
8 #define USE_SSE4
9 #endif
10 
11 // 64-bit
12 typedef char V8c __attribute__((vector_size(8 * sizeof(char))));
13 typedef signed short V4s __attribute__((vector_size(8)));
14 typedef signed int V2i __attribute__((vector_size(8)));
15 #ifndef OPENCL
16 typedef signed long long V1LLi __attribute__((vector_size(8)));
17 #else
18 typedef signed long V1LLi __attribute__((vector_size(8)));
19 #endif
20 
21 typedef float V2f __attribute__((vector_size(8)));
22 
23 // 128-bit
24 typedef char V16c __attribute__((vector_size(16)));
25 typedef signed short V8s __attribute__((vector_size(16)));
26 typedef signed int V4i __attribute__((vector_size(16)));
27 #ifndef OPENCL
28 typedef signed long long V2LLi __attribute__((vector_size(16)));
29 #else
30 typedef signed long V2LLi __attribute__((vector_size(16)));
31 #endif
32 
33 typedef float V4f __attribute__((vector_size(16)));
34 typedef double V2d __attribute__((vector_size(16)));
35 
36 // 256-bit
37 typedef char V32c __attribute__((vector_size(32)));
38 typedef signed int V8i __attribute__((vector_size(32)));
39 #ifndef OPENCL
40 typedef signed long long V4LLi __attribute__((vector_size(32)));
41 #else
42 typedef signed long V4LLi __attribute__((vector_size(32)));
43 #endif
44 
45 typedef double V4d __attribute__((vector_size(32)));
46 typedef float  V8f __attribute__((vector_size(32)));
47 
f0()48 void f0() {
49   signed char         tmp_c;
50 //  unsigned char       tmp_Uc;
51   signed short        tmp_s;
52 #ifdef USE_ALL
53   unsigned short      tmp_Us;
54 #endif
55   signed int          tmp_i;
56   unsigned int        tmp_Ui;
57 #ifndef OPENCL
58   signed long long    tmp_LLi;
59   unsigned long long  tmp_ULLi;
60 #else
61   signed long         tmp_LLi;
62   unsigned long       tmp_ULLi;
63 #endif
64   float               tmp_f;
65   double              tmp_d;
66 
67   void*          tmp_vp;
68   const void*    tmp_vCp;
69   char*          tmp_cp;
70   const char*    tmp_cCp;
71   int*           tmp_ip;
72   float*         tmp_fp;
73   const float*   tmp_fCp;
74   double*        tmp_dp;
75   const double*  tmp_dCp;
76 #ifndef OPENCL
77   long long*     tmp_LLip;
78 #else
79   long*          tmp_LLip;
80 #endif
81 
82 #define imm_i 32
83 #define imm_i_0_2 0
84 #define imm_i_0_4 3
85 #define imm_i_0_8 7
86 #define imm_i_0_16 15
87   // Check this.
88 #define imm_i_0_256 0
89 
90   V2i*   tmp_V2ip;
91   V1LLi* tmp_V1LLip;
92   V2LLi* tmp_V2LLip;
93 
94   // 64-bit
95   V8c    tmp_V8c;
96   V4s    tmp_V4s;
97   V2i    tmp_V2i;
98   V1LLi  tmp_V1LLi;
99 #ifdef USE_3DNOW
100   V2f    tmp_V2f;
101 #endif
102 
103   // 128-bit
104   V16c   tmp_V16c;
105   V8s    tmp_V8s;
106   V4i    tmp_V4i;
107   V2LLi  tmp_V2LLi;
108   V4f    tmp_V4f;
109   V2d    tmp_V2d;
110   V2d*   tmp_V2dp;
111   V4f*   tmp_V4fp;
112   const V2d* tmp_V2dCp;
113   const V4f* tmp_V4fCp;
114 
115   // 256-bit
116   V32c   tmp_V32c;
117   V4d    tmp_V4d;
118   V8f    tmp_V8f;
119   V4LLi  tmp_V4LLi;
120   V8i    tmp_V8i;
121   V4LLi* tmp_V4LLip;
122   V4d*   tmp_V4dp;
123   V8f*   tmp_V8fp;
124   const V4d* tmp_V4dCp;
125   const V8f* tmp_V8fCp;
126 
127   tmp_V2d = __builtin_ia32_undef128();
128   tmp_V4d = __builtin_ia32_undef256();
129 
130   tmp_i = __builtin_ia32_comieq(tmp_V4f, tmp_V4f);
131   tmp_i = __builtin_ia32_comilt(tmp_V4f, tmp_V4f);
132   tmp_i = __builtin_ia32_comile(tmp_V4f, tmp_V4f);
133   tmp_i = __builtin_ia32_comigt(tmp_V4f, tmp_V4f);
134   tmp_i = __builtin_ia32_comige(tmp_V4f, tmp_V4f);
135   tmp_i = __builtin_ia32_comineq(tmp_V4f, tmp_V4f);
136   tmp_i = __builtin_ia32_ucomieq(tmp_V4f, tmp_V4f);
137   tmp_i = __builtin_ia32_ucomilt(tmp_V4f, tmp_V4f);
138   tmp_i = __builtin_ia32_ucomile(tmp_V4f, tmp_V4f);
139   tmp_i = __builtin_ia32_ucomigt(tmp_V4f, tmp_V4f);
140   tmp_i = __builtin_ia32_ucomige(tmp_V4f, tmp_V4f);
141   tmp_i = __builtin_ia32_ucomineq(tmp_V4f, tmp_V4f);
142   tmp_i = __builtin_ia32_comisdeq(tmp_V2d, tmp_V2d);
143   tmp_i = __builtin_ia32_comisdlt(tmp_V2d, tmp_V2d);
144   tmp_i = __builtin_ia32_comisdle(tmp_V2d, tmp_V2d);
145   tmp_i = __builtin_ia32_comisdgt(tmp_V2d, tmp_V2d);
146   tmp_i = __builtin_ia32_comisdge(tmp_V2d, tmp_V2d);
147   tmp_i = __builtin_ia32_comisdneq(tmp_V2d, tmp_V2d);
148   tmp_i = __builtin_ia32_ucomisdeq(tmp_V2d, tmp_V2d);
149   tmp_i = __builtin_ia32_ucomisdlt(tmp_V2d, tmp_V2d);
150   tmp_i = __builtin_ia32_ucomisdle(tmp_V2d, tmp_V2d);
151   tmp_i = __builtin_ia32_ucomisdgt(tmp_V2d, tmp_V2d);
152   tmp_i = __builtin_ia32_ucomisdge(tmp_V2d, tmp_V2d);
153   tmp_i = __builtin_ia32_ucomisdneq(tmp_V2d, tmp_V2d);
154   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 0);
155   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 1);
156   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 2);
157   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 3);
158   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 4);
159   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 5);
160   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 6);
161   tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 7);
162   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 0);
163   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 1);
164   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 2);
165   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 3);
166   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 4);
167   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 5);
168   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 6);
169   tmp_V4f = __builtin_ia32_cmpss(tmp_V4f, tmp_V4f, 7);
170   tmp_V4f = __builtin_ia32_minps(tmp_V4f, tmp_V4f);
171   tmp_V4f = __builtin_ia32_maxps(tmp_V4f, tmp_V4f);
172   tmp_V4f = __builtin_ia32_minss(tmp_V4f, tmp_V4f);
173   tmp_V4f = __builtin_ia32_maxss(tmp_V4f, tmp_V4f);
174 
175   tmp_V8c = __builtin_ia32_paddsb(tmp_V8c, tmp_V8c);
176   tmp_V4s = __builtin_ia32_paddsw(tmp_V4s, tmp_V4s);
177   tmp_V8c = __builtin_ia32_psubsb(tmp_V8c, tmp_V8c);
178   tmp_V4s = __builtin_ia32_psubsw(tmp_V4s, tmp_V4s);
179   tmp_V8c = __builtin_ia32_paddusb(tmp_V8c, tmp_V8c);
180   tmp_V4s = __builtin_ia32_paddusw(tmp_V4s, tmp_V4s);
181   tmp_V8c = __builtin_ia32_psubusb(tmp_V8c, tmp_V8c);
182   tmp_V4s = __builtin_ia32_psubusw(tmp_V4s, tmp_V4s);
183   tmp_V4s = __builtin_ia32_pmulhw(tmp_V4s, tmp_V4s);
184   tmp_V4s = __builtin_ia32_pmulhuw(tmp_V4s, tmp_V4s);
185   tmp_V8c = __builtin_ia32_pcmpeqb(tmp_V8c, tmp_V8c);
186   tmp_V4s = __builtin_ia32_pcmpeqw(tmp_V4s, tmp_V4s);
187   tmp_V2i = __builtin_ia32_pcmpeqd(tmp_V2i, tmp_V2i);
188   tmp_V8c = __builtin_ia32_pcmpgtb(tmp_V8c, tmp_V8c);
189   tmp_V4s = __builtin_ia32_pcmpgtw(tmp_V4s, tmp_V4s);
190   tmp_V2i = __builtin_ia32_pcmpgtd(tmp_V2i, tmp_V2i);
191   tmp_V8c = __builtin_ia32_pmaxub(tmp_V8c, tmp_V8c);
192   tmp_V4s = __builtin_ia32_pmaxsw(tmp_V4s, tmp_V4s);
193   tmp_V8c = __builtin_ia32_pminub(tmp_V8c, tmp_V8c);
194   tmp_V4s = __builtin_ia32_pminsw(tmp_V4s, tmp_V4s);
195   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 0);
196   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 1);
197   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 2);
198   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 3);
199   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 4);
200   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 5);
201   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 6);
202   tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 7);
203   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 0);
204   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 1);
205   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 2);
206   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 3);
207   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 4);
208   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 5);
209   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 6);
210   tmp_V2d = __builtin_ia32_cmpsd(tmp_V2d, tmp_V2d, 7);
211   tmp_V2d = __builtin_ia32_minpd(tmp_V2d, tmp_V2d);
212   tmp_V2d = __builtin_ia32_maxpd(tmp_V2d, tmp_V2d);
213   tmp_V2d = __builtin_ia32_minsd(tmp_V2d, tmp_V2d);
214   tmp_V2d = __builtin_ia32_maxsd(tmp_V2d, tmp_V2d);
215   tmp_V16c = __builtin_ia32_paddsb128(tmp_V16c, tmp_V16c);
216   tmp_V8s = __builtin_ia32_paddsw128(tmp_V8s, tmp_V8s);
217   tmp_V16c = __builtin_ia32_psubsb128(tmp_V16c, tmp_V16c);
218   tmp_V8s = __builtin_ia32_psubsw128(tmp_V8s, tmp_V8s);
219   tmp_V16c = __builtin_ia32_paddusb128(tmp_V16c, tmp_V16c);
220   tmp_V8s = __builtin_ia32_paddusw128(tmp_V8s, tmp_V8s);
221   tmp_V16c = __builtin_ia32_psubusb128(tmp_V16c, tmp_V16c);
222   tmp_V8s = __builtin_ia32_psubusw128(tmp_V8s, tmp_V8s);
223   tmp_V8s = __builtin_ia32_pmulhw128(tmp_V8s, tmp_V8s);
224   tmp_V16c = __builtin_ia32_pmaxub128(tmp_V16c, tmp_V16c);
225   tmp_V8s = __builtin_ia32_pmaxsw128(tmp_V8s, tmp_V8s);
226   tmp_V16c = __builtin_ia32_pminub128(tmp_V16c, tmp_V16c);
227   tmp_V8s = __builtin_ia32_pminsw128(tmp_V8s, tmp_V8s);
228   tmp_V16c = __builtin_ia32_packsswb128(tmp_V8s, tmp_V8s);
229   tmp_V8s = __builtin_ia32_packssdw128(tmp_V4i, tmp_V4i);
230   tmp_V16c = __builtin_ia32_packuswb128(tmp_V8s, tmp_V8s);
231   tmp_V8s = __builtin_ia32_pmulhuw128(tmp_V8s, tmp_V8s);
232   tmp_V4f = __builtin_ia32_addsubps(tmp_V4f, tmp_V4f);
233   tmp_V2d = __builtin_ia32_addsubpd(tmp_V2d, tmp_V2d);
234   tmp_V4f = __builtin_ia32_haddps(tmp_V4f, tmp_V4f);
235   tmp_V2d = __builtin_ia32_haddpd(tmp_V2d, tmp_V2d);
236   tmp_V4f = __builtin_ia32_hsubps(tmp_V4f, tmp_V4f);
237   tmp_V2d = __builtin_ia32_hsubpd(tmp_V2d, tmp_V2d);
238   tmp_V8s = __builtin_ia32_phaddw128(tmp_V8s, tmp_V8s);
239   tmp_V4s = __builtin_ia32_phaddw(tmp_V4s, tmp_V4s);
240   tmp_V4i = __builtin_ia32_phaddd128(tmp_V4i, tmp_V4i);
241   tmp_V2i = __builtin_ia32_phaddd(tmp_V2i, tmp_V2i);
242   tmp_V8s = __builtin_ia32_phaddsw128(tmp_V8s, tmp_V8s);
243   tmp_V4s = __builtin_ia32_phaddsw(tmp_V4s, tmp_V4s);
244   tmp_V8s = __builtin_ia32_phsubw128(tmp_V8s, tmp_V8s);
245   tmp_V4s = __builtin_ia32_phsubw(tmp_V4s, tmp_V4s);
246   tmp_V4i = __builtin_ia32_phsubd128(tmp_V4i, tmp_V4i);
247   tmp_V2i = __builtin_ia32_phsubd(tmp_V2i, tmp_V2i);
248   tmp_V8s = __builtin_ia32_phsubsw128(tmp_V8s, tmp_V8s);
249   tmp_V4s = __builtin_ia32_phsubsw(tmp_V4s, tmp_V4s);
250   tmp_V8s = __builtin_ia32_pmaddubsw128(tmp_V16c, tmp_V16c);
251   tmp_V8c = __builtin_ia32_pmaddubsw(tmp_V8c, tmp_V8c);
252   tmp_V8s = __builtin_ia32_pmulhrsw128(tmp_V8s, tmp_V8s);
253   tmp_V4s = __builtin_ia32_pmulhrsw(tmp_V4s, tmp_V4s);
254   tmp_V16c = __builtin_ia32_pshufb128(tmp_V16c, tmp_V16c);
255   tmp_V8c = __builtin_ia32_pshufb(tmp_V8c, tmp_V8c);
256   tmp_V16c = __builtin_ia32_psignb128(tmp_V16c, tmp_V16c);
257   tmp_V8c = __builtin_ia32_psignb(tmp_V8c, tmp_V8c);
258   tmp_V8s = __builtin_ia32_psignw128(tmp_V8s, tmp_V8s);
259   tmp_V4s = __builtin_ia32_psignw(tmp_V4s, tmp_V4s);
260   tmp_V4i = __builtin_ia32_psignd128(tmp_V4i, tmp_V4i);
261   tmp_V2i = __builtin_ia32_psignd(tmp_V2i, tmp_V2i);
262   tmp_V16c = __builtin_ia32_pabsb128(tmp_V16c);
263   tmp_V8c = __builtin_ia32_pabsb(tmp_V8c);
264   tmp_V8s = __builtin_ia32_pabsw128(tmp_V8s);
265   tmp_V4s = __builtin_ia32_pabsw(tmp_V4s);
266   tmp_V4i = __builtin_ia32_pabsd128(tmp_V4i);
267   tmp_V2i = __builtin_ia32_pabsd(tmp_V2i);
268   tmp_V4s = __builtin_ia32_psllw(tmp_V4s, tmp_V1LLi);
269   tmp_V2i = __builtin_ia32_pslld(tmp_V2i, tmp_V1LLi);
270   tmp_V1LLi = __builtin_ia32_psllq(tmp_V1LLi, tmp_V1LLi);
271   tmp_V4s = __builtin_ia32_psrlw(tmp_V4s, tmp_V1LLi);
272   tmp_V2i = __builtin_ia32_psrld(tmp_V2i, tmp_V1LLi);
273   tmp_V1LLi = __builtin_ia32_psrlq(tmp_V1LLi, tmp_V1LLi);
274   tmp_V4s = __builtin_ia32_psraw(tmp_V4s, tmp_V1LLi);
275   tmp_V2i = __builtin_ia32_psrad(tmp_V2i, tmp_V1LLi);
276   tmp_V2i = __builtin_ia32_pmaddwd(tmp_V4s, tmp_V4s);
277   tmp_V8c = __builtin_ia32_packsswb(tmp_V4s, tmp_V4s);
278   tmp_V4s = __builtin_ia32_packssdw(tmp_V2i, tmp_V2i);
279   tmp_V8c = __builtin_ia32_packuswb(tmp_V4s, tmp_V4s);
280   tmp_i = __builtin_ia32_vec_ext_v2si(tmp_V2i, 0);
281 
282   __builtin_ia32_incsspd(tmp_Ui);
283   __builtin_ia32_incsspq(tmp_ULLi);
284   tmp_Ui = __builtin_ia32_rdsspd(tmp_Ui);
285   tmp_ULLi = __builtin_ia32_rdsspq(tmp_ULLi);
286   __builtin_ia32_saveprevssp();
287   __builtin_ia32_rstorssp(tmp_vp);
288   __builtin_ia32_wrssd(tmp_Ui, tmp_vp);
289   __builtin_ia32_wrssq(tmp_ULLi, tmp_vp);
290   __builtin_ia32_wrussd(tmp_Ui, tmp_vp);
291   __builtin_ia32_wrussq(tmp_ULLi, tmp_vp);
292   __builtin_ia32_setssbsy();
293   __builtin_ia32_clrssbsy(tmp_vp);
294 
295   (void) __builtin_ia32_ldmxcsr(tmp_Ui);
296 #ifndef OPENCL
297   (void) _mm_setcsr(tmp_Ui);
298 #endif
299   tmp_Ui = __builtin_ia32_stmxcsr();
300 #ifndef OPENCL
301   tmp_Ui = _mm_getcsr();
302 #endif
303   (void)__builtin_ia32_fxsave(tmp_vp);
304   (void)__builtin_ia32_fxsave64(tmp_vp);
305   (void)__builtin_ia32_fxrstor(tmp_vp);
306   (void)__builtin_ia32_fxrstor64(tmp_vp);
307 
308   (void)__builtin_ia32_xsave(tmp_vp, tmp_ULLi);
309   (void)__builtin_ia32_xsave64(tmp_vp, tmp_ULLi);
310   tmp_ULLi = __builtin_ia32_xgetbv(tmp_Ui);
311   (void)__builtin_ia32_xsetbv(tmp_Ui, tmp_ULLi);
312   (void)__builtin_ia32_xrstor(tmp_vp, tmp_ULLi);
313   (void)__builtin_ia32_xrstor64(tmp_vp, tmp_ULLi);
314   (void)__builtin_ia32_xsaveopt(tmp_vp, tmp_ULLi);
315   (void)__builtin_ia32_xsaveopt64(tmp_vp, tmp_ULLi);
316   (void)__builtin_ia32_xrstors(tmp_vp, tmp_ULLi);
317   (void)__builtin_ia32_xrstors64(tmp_vp, tmp_ULLi);
318   (void)__builtin_ia32_xsavec(tmp_vp, tmp_ULLi);
319   (void)__builtin_ia32_xsavec64(tmp_vp, tmp_ULLi);
320   (void)__builtin_ia32_xsaves(tmp_vp, tmp_ULLi);
321   (void)__builtin_ia32_xsaves64(tmp_vp, tmp_ULLi);
322 
323   (void) __builtin_ia32_monitorx(tmp_vp, tmp_Ui, tmp_Ui);
324   (void) __builtin_ia32_mwaitx(tmp_Ui, tmp_Ui, tmp_Ui);
325   (void) __builtin_ia32_clzero(tmp_vp);
326   (void) __builtin_ia32_cldemote(tmp_vp);
327 
328   tmp_V4f = __builtin_ia32_cvtpi2ps(tmp_V4f, tmp_V2i);
329   tmp_V2i = __builtin_ia32_cvtps2pi(tmp_V4f);
330   tmp_i = __builtin_ia32_cvtss2si(tmp_V4f);
331   tmp_i = __builtin_ia32_cvttss2si(tmp_V4f);
332 
333   tmp_i = __builtin_ia32_rdtsc();
334   tmp_i = __rdtsc();
335   tmp_i = __builtin_ia32_rdtscp(&tmp_Ui);
336   tmp_LLi = __builtin_ia32_rdpmc(tmp_i);
337   __builtin_ia32_wbnoinvd();
338 #ifdef USE_64
339   tmp_LLi = __builtin_ia32_cvtss2si64(tmp_V4f);
340   tmp_LLi = __builtin_ia32_cvttss2si64(tmp_V4f);
341 #endif
342   tmp_V2i = __builtin_ia32_cvttps2pi(tmp_V4f);
343   (void) __builtin_ia32_maskmovq(tmp_V8c, tmp_V8c, tmp_cp);
344   tmp_i = __builtin_ia32_movmskps(tmp_V4f);
345   tmp_i = __builtin_ia32_pmovmskb(tmp_V8c);
346   (void) __builtin_ia32_movntq(tmp_V1LLip, tmp_V1LLi);
347   (void) __builtin_ia32_sfence();
348 #ifndef OPENCL
349   (void) _mm_sfence();
350 #endif
351 
352   tmp_V4s = __builtin_ia32_psadbw(tmp_V8c, tmp_V8c);
353   tmp_V4f = __builtin_ia32_rcpps(tmp_V4f);
354   tmp_V4f = __builtin_ia32_rcpss(tmp_V4f);
355   tmp_V4f = __builtin_ia32_rsqrtps(tmp_V4f);
356   tmp_V4f = __builtin_ia32_rsqrtss(tmp_V4f);
357   tmp_V4f = __builtin_ia32_sqrtps(tmp_V4f);
358   tmp_V4f = __builtin_ia32_sqrtss(tmp_V4f);
359   (void) __builtin_ia32_maskmovdqu(tmp_V16c, tmp_V16c, tmp_cp);
360   tmp_i = __builtin_ia32_movmskpd(tmp_V2d);
361   tmp_i = __builtin_ia32_pmovmskb128(tmp_V16c);
362   (void) __builtin_ia32_movnti(tmp_ip, tmp_i);
363 #ifdef USE_64
364   (void) __builtin_ia32_movnti64(tmp_LLip, tmp_LLi);
365 #endif
366   tmp_V2LLi = __builtin_ia32_psadbw128(tmp_V16c, tmp_V16c);
367   tmp_V2d = __builtin_ia32_sqrtpd(tmp_V2d);
368   tmp_V2d = __builtin_ia32_sqrtsd(tmp_V2d);
369   tmp_V2LLi = __builtin_ia32_cvtpd2dq(tmp_V2d);
370   tmp_V2i = __builtin_ia32_cvtpd2pi(tmp_V2d);
371   tmp_V4f = __builtin_ia32_cvtpd2ps(tmp_V2d);
372   tmp_V4i = __builtin_ia32_cvttpd2dq(tmp_V2d);
373   tmp_V2i = __builtin_ia32_cvttpd2pi(tmp_V2d);
374   tmp_V2d = __builtin_ia32_cvtpi2pd(tmp_V2i);
375   tmp_i = __builtin_ia32_cvtsd2si(tmp_V2d);
376   tmp_i = __builtin_ia32_cvttsd2si(tmp_V2d);
377   tmp_V4f = __builtin_ia32_cvtsd2ss(tmp_V4f, tmp_V2d);
378 #ifdef USE_64
379   tmp_LLi = __builtin_ia32_cvtsd2si64(tmp_V2d);
380   tmp_LLi = __builtin_ia32_cvttsd2si64(tmp_V2d);
381 #endif
382   tmp_V4i = __builtin_ia32_cvtps2dq(tmp_V4f);
383   tmp_V4i = __builtin_ia32_cvttps2dq(tmp_V4f);
384   (void) __builtin_ia32_clflush(tmp_vCp);
385 #ifndef OPENCL
386   (void) _mm_clflush(tmp_vCp);
387 #endif
388   (void) __builtin_ia32_lfence();
389 #ifndef OPENCL
390   (void) _mm_lfence();
391 #endif
392   (void) __builtin_ia32_mfence();
393 #ifndef OPENCL
394   (void) _mm_mfence();
395 #endif
396   (void) __builtin_ia32_pause();
397 #ifndef OPENCL
398   (void) _mm_pause();
399 #endif
400 
401   tmp_V4s = __builtin_ia32_psllwi(tmp_V4s, imm_i_0_8);
402   tmp_V2i = __builtin_ia32_pslldi(tmp_V2i, imm_i_0_8);
403   tmp_V1LLi = __builtin_ia32_psllqi(tmp_V1LLi, imm_i_0_8);
404   tmp_V4s = __builtin_ia32_psrawi(tmp_V4s, imm_i_0_8);
405   tmp_V2i = __builtin_ia32_psradi(tmp_V2i, imm_i_0_8);
406   tmp_V4s = __builtin_ia32_psrlwi(tmp_V4s, imm_i_0_8);
407   tmp_V2i = __builtin_ia32_psrldi(tmp_V2i, imm_i_0_8);
408   tmp_V1LLi = __builtin_ia32_psrlqi(tmp_V1LLi, imm_i_0_8);
409 
410   // Using non-immediate argument supported for gcc compatibility
411   tmp_V4s = __builtin_ia32_psllwi(tmp_V4s, tmp_i);
412   tmp_V2i = __builtin_ia32_pslldi(tmp_V2i, tmp_i);
413   tmp_V1LLi = __builtin_ia32_psllqi(tmp_V1LLi, tmp_i);
414   tmp_V4s = __builtin_ia32_psrawi(tmp_V4s, tmp_i);
415   tmp_V2i = __builtin_ia32_psradi(tmp_V2i, tmp_i);
416   tmp_V4s = __builtin_ia32_psrlwi(tmp_V4s, tmp_i);
417   tmp_V2i = __builtin_ia32_psrldi(tmp_V2i, tmp_i);
418   tmp_V1LLi = __builtin_ia32_psrlqi(tmp_V1LLi, tmp_i);
419 
420   tmp_V1LLi = __builtin_ia32_pmuludq(tmp_V2i, tmp_V2i);
421   tmp_V2LLi = __builtin_ia32_pmuludq128(tmp_V4i, tmp_V4i);
422   tmp_V8s = __builtin_ia32_psraw128(tmp_V8s, tmp_V8s);
423   tmp_V4i = __builtin_ia32_psrad128(tmp_V4i, tmp_V4i);
424   tmp_V8s = __builtin_ia32_psrlw128(tmp_V8s, tmp_V8s);
425   tmp_V4i = __builtin_ia32_psrld128(tmp_V4i, tmp_V4i);
426   tmp_V2LLi = __builtin_ia32_psrlq128(tmp_V2LLi, tmp_V2LLi);
427   tmp_V8s = __builtin_ia32_psllw128(tmp_V8s, tmp_V8s);
428   tmp_V4i = __builtin_ia32_pslld128(tmp_V4i, tmp_V4i);
429   tmp_V2LLi = __builtin_ia32_psllq128(tmp_V2LLi, tmp_V2LLi);
430 
431   tmp_V8s = __builtin_ia32_psllwi128(tmp_V8s, imm_i_0_8);
432   tmp_V4i = __builtin_ia32_pslldi128(tmp_V4i, imm_i_0_8);
433   tmp_V2LLi = __builtin_ia32_psllqi128(tmp_V2LLi, imm_i_0_8);
434   tmp_V8s = __builtin_ia32_psrlwi128(tmp_V8s, imm_i_0_8);
435   tmp_V4i = __builtin_ia32_psrldi128(tmp_V4i, imm_i_0_8);
436   tmp_V2LLi = __builtin_ia32_psrlqi128(tmp_V2LLi, imm_i_0_8);
437   tmp_V8s = __builtin_ia32_psrawi128(tmp_V8s, imm_i_0_8);
438   tmp_V4i = __builtin_ia32_psradi128(tmp_V4i, imm_i_0_8);
439 
440   // Using non-immediate argument supported for gcc compatibility
441   tmp_V8s = __builtin_ia32_psllwi128(tmp_V8s, tmp_i);
442   tmp_V4i = __builtin_ia32_pslldi128(tmp_V4i, tmp_i);
443   tmp_V2LLi = __builtin_ia32_psllqi128(tmp_V2LLi, tmp_i);
444   tmp_V8s = __builtin_ia32_psrlwi128(tmp_V8s, tmp_i);
445   tmp_V4i = __builtin_ia32_psrldi128(tmp_V4i, tmp_i);
446   tmp_V2LLi = __builtin_ia32_psrlqi128(tmp_V2LLi, tmp_i);
447   tmp_V8s = __builtin_ia32_psrawi128(tmp_V8s, tmp_i);
448   tmp_V4i = __builtin_ia32_psradi128(tmp_V4i, tmp_i);
449 
450   tmp_V4i = __builtin_ia32_pmaddwd128(tmp_V8s, tmp_V8s);
451   (void) __builtin_ia32_monitor(tmp_vp, tmp_Ui, tmp_Ui);
452   (void) __builtin_ia32_mwait(tmp_Ui, tmp_Ui);
453   tmp_V16c = __builtin_ia32_lddqu(tmp_cCp);
454   tmp_V16c = __builtin_ia32_palignr128(tmp_V16c, tmp_V16c, imm_i);
455   tmp_V8c = __builtin_ia32_palignr(tmp_V8c, tmp_V8c, imm_i);
456 #ifdef USE_SSE4
457   tmp_V16c = __builtin_ia32_pblendvb128(tmp_V16c, tmp_V16c, tmp_V16c);
458   tmp_V2d = __builtin_ia32_blendvpd(tmp_V2d, tmp_V2d, tmp_V2d);
459   tmp_V4f = __builtin_ia32_blendvps(tmp_V4f, tmp_V4f, tmp_V4f);
460   tmp_V8s = __builtin_ia32_packusdw128(tmp_V4i, tmp_V4i);
461   tmp_V16c = __builtin_ia32_pmaxsb128(tmp_V16c, tmp_V16c);
462   tmp_V4i = __builtin_ia32_pmaxsd128(tmp_V4i, tmp_V4i);
463   tmp_V4i = __builtin_ia32_pmaxud128(tmp_V4i, tmp_V4i);
464   tmp_V8s = __builtin_ia32_pmaxuw128(tmp_V8s, tmp_V8s);
465   tmp_V16c = __builtin_ia32_pminsb128(tmp_V16c, tmp_V16c);
466   tmp_V4i = __builtin_ia32_pminsd128(tmp_V4i, tmp_V4i);
467   tmp_V4i = __builtin_ia32_pminud128(tmp_V4i, tmp_V4i);
468   tmp_V8s = __builtin_ia32_pminuw128(tmp_V8s, tmp_V8s);
469   tmp_V2LLi = __builtin_ia32_pmuldq128(tmp_V4i, tmp_V4i);
470   tmp_V4f = __builtin_ia32_roundps(tmp_V4f, imm_i_0_16);
471   tmp_V4f = __builtin_ia32_roundss(tmp_V4f, tmp_V4f, imm_i_0_16);
472   tmp_V2d = __builtin_ia32_roundsd(tmp_V2d, tmp_V2d, imm_i_0_16);
473   tmp_V2d = __builtin_ia32_roundpd(tmp_V2d, imm_i_0_16);
474   tmp_V4f = __builtin_ia32_insertps128(tmp_V4f, tmp_V4f, imm_i_0_256);
475 #endif
476 
477   tmp_V4d = __builtin_ia32_addsubpd256(tmp_V4d, tmp_V4d);
478   tmp_V8f = __builtin_ia32_addsubps256(tmp_V8f, tmp_V8f);
479   tmp_V4d = __builtin_ia32_haddpd256(tmp_V4d, tmp_V4d);
480   tmp_V8f = __builtin_ia32_hsubps256(tmp_V8f, tmp_V8f);
481   tmp_V4d = __builtin_ia32_hsubpd256(tmp_V4d, tmp_V4d);
482   tmp_V8f = __builtin_ia32_haddps256(tmp_V8f, tmp_V8f);
483   tmp_V4d = __builtin_ia32_maxpd256(tmp_V4d, tmp_V4d);
484   tmp_V8f = __builtin_ia32_maxps256(tmp_V8f, tmp_V8f);
485   tmp_V4d = __builtin_ia32_minpd256(tmp_V4d, tmp_V4d);
486   tmp_V8f = __builtin_ia32_minps256(tmp_V8f, tmp_V8f);
487   tmp_V2d = __builtin_ia32_vpermilvarpd(tmp_V2d, tmp_V2LLi);
488   tmp_V4f = __builtin_ia32_vpermilvarps(tmp_V4f, tmp_V4i);
489   tmp_V4d = __builtin_ia32_vpermilvarpd256(tmp_V4d, tmp_V4LLi);
490   tmp_V8f = __builtin_ia32_vpermilvarps256(tmp_V8f, tmp_V8i);
491   tmp_V4d = __builtin_ia32_blendvpd256(tmp_V4d, tmp_V4d, tmp_V4d);
492   tmp_V8f = __builtin_ia32_blendvps256(tmp_V8f, tmp_V8f, tmp_V8f);
493   tmp_V8f = __builtin_ia32_dpps256(tmp_V8f, tmp_V8f, 0x7);
494   tmp_V4d = __builtin_ia32_cmppd256(tmp_V4d, tmp_V4d, 0);
495   tmp_V8f = __builtin_ia32_cmpps256(tmp_V8f, tmp_V8f, 0);
496   tmp_V4f = __builtin_ia32_cvtpd2ps256(tmp_V4d);
497   tmp_V8i = __builtin_ia32_cvtps2dq256(tmp_V8f);
498   tmp_V4i = __builtin_ia32_cvttpd2dq256(tmp_V4d);
499   tmp_V4i = __builtin_ia32_cvtpd2dq256(tmp_V4d);
500   tmp_V8i = __builtin_ia32_cvttps2dq256(tmp_V8f);
501   tmp_V4d = __builtin_ia32_vperm2f128_pd256(tmp_V4d, tmp_V4d, 0x7);
502   tmp_V8f = __builtin_ia32_vperm2f128_ps256(tmp_V8f, tmp_V8f, 0x7);
503   tmp_V8i = __builtin_ia32_vperm2f128_si256(tmp_V8i, tmp_V8i, 0x7);
504   tmp_V4d = __builtin_ia32_sqrtpd256(tmp_V4d);
505   tmp_V8f = __builtin_ia32_sqrtps256(tmp_V8f);
506   tmp_V8f = __builtin_ia32_rsqrtps256(tmp_V8f);
507   tmp_V8f = __builtin_ia32_rcpps256(tmp_V8f);
508   tmp_V4d = __builtin_ia32_roundpd256(tmp_V4d, 0x1);
509   tmp_V8f = __builtin_ia32_roundps256(tmp_V8f, 0x1);
510   tmp_i = __builtin_ia32_vtestzpd(tmp_V2d, tmp_V2d);
511   tmp_i = __builtin_ia32_vtestcpd(tmp_V2d, tmp_V2d);
512   tmp_i = __builtin_ia32_vtestnzcpd(tmp_V2d, tmp_V2d);
513   tmp_i = __builtin_ia32_vtestzps(tmp_V4f, tmp_V4f);
514   tmp_i = __builtin_ia32_vtestcps(tmp_V4f, tmp_V4f);
515   tmp_i = __builtin_ia32_vtestnzcps(tmp_V4f, tmp_V4f);
516   tmp_i = __builtin_ia32_vtestzpd256(tmp_V4d, tmp_V4d);
517   tmp_i = __builtin_ia32_vtestcpd256(tmp_V4d, tmp_V4d);
518   tmp_i = __builtin_ia32_vtestnzcpd256(tmp_V4d, tmp_V4d);
519   tmp_i = __builtin_ia32_vtestzps256(tmp_V8f, tmp_V8f);
520   tmp_i = __builtin_ia32_vtestcps256(tmp_V8f, tmp_V8f);
521   tmp_i = __builtin_ia32_vtestnzcps256(tmp_V8f, tmp_V8f);
522   tmp_i = __builtin_ia32_ptestz256(tmp_V4LLi, tmp_V4LLi);
523   tmp_i = __builtin_ia32_ptestc256(tmp_V4LLi, tmp_V4LLi);
524   tmp_i = __builtin_ia32_ptestnzc256(tmp_V4LLi, tmp_V4LLi);
525   tmp_i = __builtin_ia32_movmskpd256(tmp_V4d);
526   tmp_i = __builtin_ia32_movmskps256(tmp_V8f);
527   __builtin_ia32_vzeroall();
528   __builtin_ia32_vzeroupper();
529   tmp_V32c = __builtin_ia32_lddqu256(tmp_cCp);
530   tmp_V2d = __builtin_ia32_maskloadpd(tmp_V2dCp, tmp_V2LLi);
531   tmp_V4f = __builtin_ia32_maskloadps(tmp_V4fCp, tmp_V4i);
532   tmp_V4d = __builtin_ia32_maskloadpd256(tmp_V4dCp, tmp_V4LLi);
533   tmp_V8f = __builtin_ia32_maskloadps256(tmp_V8fCp, tmp_V8i);
534   __builtin_ia32_maskstorepd(tmp_V2dp, tmp_V2LLi, tmp_V2d);
535   __builtin_ia32_maskstoreps(tmp_V4fp, tmp_V4i, tmp_V4f);
536   __builtin_ia32_maskstorepd256(tmp_V4dp, tmp_V4LLi, tmp_V4d);
537   __builtin_ia32_maskstoreps256(tmp_V8fp, tmp_V8i, tmp_V8f);
538 
539 #ifdef USE_3DNOW
540   tmp_V8c = __builtin_ia32_pavgusb(tmp_V8c, tmp_V8c);
541   tmp_V2i = __builtin_ia32_pf2id(tmp_V2f);
542   tmp_V2f = __builtin_ia32_pfacc(tmp_V2f, tmp_V2f);
543   tmp_V2f = __builtin_ia32_pfadd(tmp_V2f, tmp_V2f);
544   tmp_V2i = __builtin_ia32_pfcmpeq(tmp_V2f, tmp_V2f);
545   tmp_V2i = __builtin_ia32_pfcmpge(tmp_V2f, tmp_V2f);
546   tmp_V2i = __builtin_ia32_pfcmpgt(tmp_V2f, tmp_V2f);
547   tmp_V2f = __builtin_ia32_pfmax(tmp_V2f, tmp_V2f);
548   tmp_V2f = __builtin_ia32_pfmin(tmp_V2f, tmp_V2f);
549   tmp_V2f = __builtin_ia32_pfmul(tmp_V2f, tmp_V2f);
550   tmp_V2f = __builtin_ia32_pfrcp(tmp_V2f);
551   tmp_V2f = __builtin_ia32_pfrcpit1(tmp_V2f, tmp_V2f);
552   tmp_V2f = __builtin_ia32_pfrcpit2(tmp_V2f, tmp_V2f);
553   tmp_V2f = __builtin_ia32_pfrsqrt(tmp_V2f);
554   tmp_V2f = __builtin_ia32_pfrsqit1(tmp_V2f, tmp_V2f);
555   tmp_V2f = __builtin_ia32_pfsub(tmp_V2f, tmp_V2f);
556   tmp_V2f = __builtin_ia32_pfsubr(tmp_V2f, tmp_V2f);
557   tmp_V2f = __builtin_ia32_pi2fd(tmp_V2i);
558   tmp_V4s = __builtin_ia32_pmulhrw(tmp_V4s, tmp_V4s);
559   tmp_V2i = __builtin_ia32_pf2iw(tmp_V2f);
560   tmp_V2f = __builtin_ia32_pfnacc(tmp_V2f, tmp_V2f);
561   tmp_V2f = __builtin_ia32_pfpnacc(tmp_V2f, tmp_V2f);
562   tmp_V2f = __builtin_ia32_pi2fw(tmp_V2i);
563   tmp_V2f = __builtin_ia32_pswapdsf(tmp_V2f);
564   tmp_V2i = __builtin_ia32_pswapdsi(tmp_V2i);
565 
566   tmp_V4i = __builtin_ia32_sha1rnds4(tmp_V4i, tmp_V4i, imm_i_0_4);
567   tmp_V4i = __builtin_ia32_sha1nexte(tmp_V4i, tmp_V4i);
568   tmp_V4i = __builtin_ia32_sha1msg1(tmp_V4i, tmp_V4i);
569   tmp_V4i = __builtin_ia32_sha1msg2(tmp_V4i, tmp_V4i);
570   tmp_V4i = __builtin_ia32_sha256rnds2(tmp_V4i, tmp_V4i, tmp_V4i);
571   tmp_V4i = __builtin_ia32_sha256msg1(tmp_V4i, tmp_V4i);
572   tmp_V4i = __builtin_ia32_sha256msg2(tmp_V4i, tmp_V4i);
573 #endif
574 }
575