1
2 /* A program to test that SSE/SSE2 insns do not read memory they
3 should not. Covers insns of the form OP %xmm, %xmm and OP memory,
4 %xmm only. */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <assert.h>
9 #include "tests/malloc.h"
10 #include <string.h>
11
12 typedef unsigned char V128[16];
13 typedef unsigned int UInt;
14 typedef signed int Int;
15 typedef unsigned char UChar;
16
17 typedef
18 struct {
19 V128 arg1;
20 V128 arg2;
21 V128 res;
22 }
23 RRArgs;
24
25 typedef
26 struct {
27 V128 arg1;
28 V128 res;
29 }
30 RMArgs;
31
randUChar(void)32 static UChar randUChar ( void )
33 {
34 static UInt seed = 80021;
35 seed = 1103515245 * seed + 12345;
36 return (seed >> 17) & 0xFF;
37 }
38
randomise(UChar * p,Int n)39 static void randomise ( UChar* p, Int n )
40 {
41 Int i;
42 for (i = 0; i < n; i++)
43 p[i] = randUChar();
44 }
45
randV128(V128 * v)46 static void randV128 ( V128* v )
47 {
48 Int i;
49 for (i = 0; i < 16; i++)
50 (*v)[i] = randUChar();
51 }
52
randRRArgs(RRArgs * rra)53 static void randRRArgs ( RRArgs* rra )
54 {
55 randV128(&rra->arg1);
56 randV128(&rra->arg2);
57 randV128(&rra->res);
58 }
59
randRMArgs(RMArgs * rra)60 static void randRMArgs ( RMArgs* rra )
61 {
62 randV128(&rra->arg1);
63 randV128(&rra->res);
64 }
65
showV128(V128 * v)66 static void showV128 ( V128* v )
67 {
68 Int i;
69 for (i = 0; i < 16; i++)
70 printf("%02x", (Int)(*v)[i]);
71 }
72
showMaskedV128(V128 * v,V128 * mask)73 static void showMaskedV128 ( V128* v, V128* mask )
74 {
75 Int i;
76 for (i = 0; i < 16; i++)
77 printf("%02x", (Int)( ((*v)[i]) & ((*mask)[i]) ));
78 }
79
showRR(char * op,RRArgs * rra,V128 * rmask)80 static void showRR ( char* op, RRArgs* rra, V128* rmask )
81 {
82 printf("r %10s ", op);
83 showV128(&rra->arg1);
84 printf(" ");
85 showV128(&rra->arg2);
86 printf(" ");
87 showMaskedV128(&rra->res, rmask);
88 printf("\n");
89 }
90
showRM(char * op,RMArgs * rra,UChar * mem,Int nMem,V128 * rmask)91 static void showRM ( char* op, RMArgs* rra, UChar* mem, Int nMem, V128* rmask )
92 {
93 Int i;
94 assert(nMem == 4 || nMem == 8 || nMem == 16 || nMem==0);
95 printf("m %10s ", op);
96 for (i = 0; i < nMem; i++)
97 printf("%02x", (Int)mem[i]);
98 printf(" ");
99 showV128(&rra->arg1);
100 printf(" ");
101 showMaskedV128(&rra->res, rmask );
102 printf("\n");
103 }
104
105 #define Wrapper_RegReg(OP) \
106 void r_r_##OP ( RRArgs* p ) \
107 { \
108 __asm__ __volatile__("\n" \
109 "\tmovups 0(%0), %%xmm6\n" \
110 "\tmovups 16(%0), %%xmm7\n" \
111 "\t" #OP " %%xmm6, %%xmm7\n" \
112 "\tmovups %%xmm7, 32(%0)\n" \
113 : \
114 : "r" (p) \
115 : "memory", "xmm6", "xmm7", "cc" \
116 ); \
117 }
118
119 #define Wrapper_RegMem(OP) \
120 void r_m_##OP ( RMArgs* p, void* mem ) \
121 { \
122 __asm__ __volatile__("\n" \
123 "\tmovups 0(%0), %%xmm7\n" \
124 "\t" #OP " 0(%1), %%xmm7\n" \
125 "\tmovups %%xmm7, 16(%0)\n" \
126 : \
127 : "r" (p), "r" (mem) \
128 : "memory", "xmm7", "cc" \
129 ); \
130 }
131
132
133 #define TEST_INSN(res_mask,mem_size,insn) \
134 \
135 Wrapper_RegReg(insn) \
136 Wrapper_RegMem(insn) \
137 \
138 void do_##insn ( void ) \
139 { \
140 Int i; \
141 UChar* buf; \
142 RRArgs rargs __attribute__((aligned(16))); \
143 RMArgs margs __attribute__((aligned(16))); \
144 for (i = 0; i < 5; i++) { \
145 randRRArgs(&rargs); \
146 r_r_##insn(&rargs); \
147 showRR(#insn, &rargs, res_mask); \
148 } \
149 for (i = 0; i < 5; i++) { \
150 randRMArgs(&margs); \
151 buf = memalign16(mem_size); \
152 randomise(buf,mem_size); \
153 r_m_##insn(&margs,buf); \
154 showRM(#insn, &margs, buf, mem_size, res_mask);\
155 free(buf); \
156 } \
157 }
158
159 /* Note: these are little endian. Hence first byte is the least
160 significant byte of lane zero. */
161
162 /* Mask for insns where all result bits are non-approximated. */
163 static V128 AllMask = { 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
164 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
165
166 /* Mark for insns which produce approximated vector short results. */
167 static V128 ApproxPS = { 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF,
168 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF };
169
170 /* Mark for insns which produce approximated scalar short results. */
171 static V128 ApproxSS = { 0x00,0x00,0x80,0xFF, 0xFF,0xFF,0xFF,0xFF,
172 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
173
174 #define PD 16
175 #define SD 8
176 #define PS 16
177 #define SS 4
178
179 /* ------------------------ SSE1 ------------------------ */
180 TEST_INSN( &AllMask, PS,addps)
181 TEST_INSN( &AllMask, SS,addss)
182 TEST_INSN( &AllMask, PS,andnps)
183 TEST_INSN( &AllMask, PS,andps)
184 TEST_INSN( &AllMask, PS,cmpeqps)
185 TEST_INSN( &AllMask, SS,cmpeqss)
186 TEST_INSN( &AllMask, PS,cmpleps)
187 TEST_INSN( &AllMask, SS,cmpless)
188 TEST_INSN( &AllMask, PS,cmpltps)
189 TEST_INSN( &AllMask, SS,cmpltss)
190 TEST_INSN( &AllMask, PS,cmpneqps)
191 TEST_INSN( &AllMask, SS,cmpneqss)
192 TEST_INSN( &AllMask, PS,cmpnleps)
193 TEST_INSN( &AllMask, SS,cmpnless)
194 TEST_INSN( &AllMask, PS,cmpnltps)
195 TEST_INSN( &AllMask, SS,cmpnltss)
196 TEST_INSN( &AllMask, PS,cmpordps)
197 TEST_INSN( &AllMask, SS,cmpordss)
198 TEST_INSN( &AllMask, PS,cmpunordps)
199 TEST_INSN( &AllMask, SS,cmpunordss)
200 TEST_INSN( &AllMask, SS,comiss)
201 //TEST_INSN( &AllMask, 0,cvtpi2ps)
202 //TEST_INSN( &AllMask, 0,cvtps2pi)
203 //TEST_INSN( &AllMask, 0,cvtsi2ss)
204 //TEST_INSN( &AllMask, 0,cvtss2si)
205 //TEST_INSN( &AllMask, 0,cvttps2pi)
206 //TEST_INSN( &AllMask, 0,cvttss2si)
207 TEST_INSN( &AllMask, PS,divps)
208 TEST_INSN( &AllMask, SS,divss)
209 TEST_INSN( &AllMask, PS,maxps)
210 TEST_INSN( &AllMask, SS,maxss)
211 TEST_INSN( &AllMask, PS,minps)
212 TEST_INSN( &AllMask, SS,minss)
213 TEST_INSN( &AllMask, 16,movaps)
214 //TEST_INSN( &AllMask, 0,movhlps)
215 //TEST_INSN( &AllMask, 0,movhps)
216 //TEST_INSN( &AllMask, 0,movlhps)
217 //TEST_INSN( &AllMask, 0,movlps)
218 //TEST_INSN( &AllMask, 0,movmskps)
219 //TEST_INSN( &AllMask, 0,movntps)
220 //TEST_INSN( &AllMask, 0,movntq)
221 TEST_INSN( &AllMask, 4,movss)
222 TEST_INSN( &AllMask, 16,movups)
223 TEST_INSN( &AllMask, PS,mulps)
224 TEST_INSN( &AllMask, SS,mulss)
225 TEST_INSN( &AllMask, PS,orps)
226 //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2?
227 //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2?
228 //TEST_INSN( &AllMask, 0,pextrw)
229 //TEST_INSN( &AllMask, 0,pinsrw)
230 //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2?
231 //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2?
232 //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2?
233 //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2?
234 //TEST_INSN( &AllMask, 0,pmovmskb)
235 //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2?
236 TEST_INSN( &AllMask, 16,psadbw) // -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented!
237 //TEST_INSN( &AllMask, 0,pshufw)
238 TEST_INSN(&ApproxPS, PS,rcpps)
239 TEST_INSN(&ApproxSS, SS,rcpss)
240 TEST_INSN(&ApproxPS, PS,rsqrtps)
241 TEST_INSN(&ApproxSS, SS,rsqrtss)
242 //TEST_INSN( &AllMask, PS,shufps)
243 TEST_INSN( &AllMask, PS,sqrtps)
244 TEST_INSN( &AllMask, SS,sqrtss)
245 TEST_INSN( &AllMask, PS,subps)
246 TEST_INSN( &AllMask, SS,subss)
247 TEST_INSN( &AllMask, SS,ucomiss)
248 TEST_INSN( &AllMask, PS,unpckhps)
249 TEST_INSN( &AllMask, PS,unpcklps)
250 TEST_INSN( &AllMask, PS,xorps)
251
252
253 /* ------------------------ SSE2 ------------------------ */
254 TEST_INSN( &AllMask, PD,addpd)
255 TEST_INSN( &AllMask, SD,addsd)
256 TEST_INSN( &AllMask, PD,andnpd)
257 TEST_INSN( &AllMask, PD,andpd)
258 TEST_INSN( &AllMask, PD,cmpeqpd)
259 TEST_INSN( &AllMask, SD,cmpeqsd)
260 TEST_INSN( &AllMask, PD,cmplepd)
261 TEST_INSN( &AllMask, SD,cmplesd)
262 TEST_INSN( &AllMask, PD,cmpltpd)
263 TEST_INSN( &AllMask, SD,cmpltsd)
264 TEST_INSN( &AllMask, PD,cmpneqpd)
265 TEST_INSN( &AllMask, SD,cmpneqsd)
266 TEST_INSN( &AllMask, PD,cmpnlepd)
267 TEST_INSN( &AllMask, SD,cmpnlesd)
268 TEST_INSN( &AllMask, PD,cmpnltpd)
269 TEST_INSN( &AllMask, SD,cmpnltsd)
270 TEST_INSN( &AllMask, PD,cmpordpd)
271 TEST_INSN( &AllMask, SD,cmpordsd)
272 TEST_INSN( &AllMask, PD,cmpunordpd)
273 TEST_INSN( &AllMask, SD,cmpunordsd)
274 TEST_INSN( &AllMask, SD,comisd)
275 TEST_INSN( &AllMask, 8,cvtdq2pd)
276 TEST_INSN( &AllMask, 16,cvtdq2ps)
277 TEST_INSN( &AllMask, 16,cvtpd2dq)
278 //TEST_INSN( &AllMask, 0,cvtpd2pi)
279 TEST_INSN( &AllMask, 16,cvtpd2ps) /* reads 16 */
280 //TEST_INSN( &AllMask, 0,cvtpi2pd)
281 TEST_INSN( &AllMask, 16,cvtps2dq) /* reads 16 */
282 TEST_INSN( &AllMask, 8,cvtps2pd) /* reads 8 */
283 //TEST_INSN( &AllMask, 0,cvtsd2si)
284 TEST_INSN( &AllMask, SD,cvtsd2ss) /* reads SD */
285 //TEST_INSN( &AllMask, 0,cvtsi2sd)
286 TEST_INSN( &AllMask, SS,cvtss2sd) /* reads SS */
287 TEST_INSN( &AllMask, 16,cvttpd2dq)
288 //TEST_INSN( &AllMask, 0,cvttpd2pi)
289 TEST_INSN( &AllMask, 16,cvttps2dq)
290 //TEST_INSN( &AllMask, 0,cvttsd2si)
291 TEST_INSN( &AllMask, PD,divpd)
292 TEST_INSN( &AllMask, SD,divsd)
293 TEST_INSN( &AllMask, PD,maxpd)
294 TEST_INSN( &AllMask, SD,maxsd)
295 TEST_INSN( &AllMask, PD,minpd)
296 TEST_INSN( &AllMask, SD,minsd)
297 TEST_INSN( &AllMask, PD,movapd)
298 //TEST_INSN( &AllMask, 8,movd)
299 //TEST_INSN( &AllMask, 0,movdq2q)
300 TEST_INSN( &AllMask, 16,movdqa)
301 TEST_INSN( &AllMask, 16,movdqu)
302 //TEST_INSN( &AllMask, 16,movhpd)
303 //TEST_INSN( &AllMask, 16,movlpd)
304 //TEST_INSN( &AllMask, 0,movmskpd)
305 //TEST_INSN( &AllMask, 0,movntdq)
306 //TEST_INSN( &AllMask, 0,movnti)
307 //TEST_INSN( &AllMask, 0,movntpd)
308 TEST_INSN( &AllMask, 8,movq)
309 //TEST_INSN( &AllMask, 0,movq2dq)
310 TEST_INSN( &AllMask, 8,movsd)
311 TEST_INSN( &AllMask, 16,movupd)
312 TEST_INSN( &AllMask, PD,mulpd)
313 TEST_INSN( &AllMask, SD,mulsd)
314 TEST_INSN( &AllMask, PD,orpd)
315 TEST_INSN( &AllMask, 16,packssdw)
316 TEST_INSN( &AllMask, 16,packsswb)
317 TEST_INSN( &AllMask, 16,packuswb)
318 TEST_INSN( &AllMask, 16,paddb)
319 TEST_INSN( &AllMask, 16,paddd)
320 TEST_INSN( &AllMask, 16,paddq)
321 TEST_INSN( &AllMask, 16,paddsb)
322 TEST_INSN( &AllMask, 16,paddsw)
323 TEST_INSN( &AllMask, 16,paddusb)
324 TEST_INSN( &AllMask, 16,paddusw)
325 TEST_INSN( &AllMask, 16,paddw)
326 TEST_INSN( &AllMask, 16,pand)
327 TEST_INSN( &AllMask, 16,pandn)
328 TEST_INSN( &AllMask, 16,pavgb)
329 TEST_INSN( &AllMask, 16,pavgw)
330 TEST_INSN( &AllMask, 16,pcmpeqb)
331 TEST_INSN( &AllMask, 16,pcmpeqd)
332 TEST_INSN( &AllMask, 16,pcmpeqw)
333 TEST_INSN( &AllMask, 16,pcmpgtb)
334 TEST_INSN( &AllMask, 16,pcmpgtd)
335 TEST_INSN( &AllMask, 16,pcmpgtw)
336 //TEST_INSN( &AllMask, 16,pextrw)
337 //TEST_INSN( &AllMask, 16,pinsrw)
338 TEST_INSN( &AllMask, 16,pmaxsw)
339 TEST_INSN( &AllMask, 16,pmaxub)
340 TEST_INSN( &AllMask, 16,pminsw)
341 TEST_INSN( &AllMask, 16,pminub)
342 //TEST_INSN( &AllMask, 0,pmovmskb)
343 TEST_INSN( &AllMask, 16,pmulhuw)
344 TEST_INSN( &AllMask, 16,pmulhw)
345 TEST_INSN( &AllMask, 16,pmullw)
346 TEST_INSN( &AllMask, 16,pmuludq)
347 TEST_INSN( &AllMask, 16,por)
348 //TEST_INSN( &AllMask, 16,pshufd)
349 //TEST_INSN( &AllMask, 16,pshufhw)
350 //TEST_INSN( &AllMask, 16,pshuflw)
351 TEST_INSN( &AllMask, 16,pslld)
352 //TEST_INSN( &AllMask, 16,pslldq)
353 TEST_INSN( &AllMask, 16,psllq)
354 TEST_INSN( &AllMask, 16,psllw)
355 TEST_INSN( &AllMask, 16,psrad)
356 TEST_INSN( &AllMask, 16,psraw)
357 TEST_INSN( &AllMask, 16,psrld)
358 //TEST_INSN( &AllMask, 16,psrldq)
359 TEST_INSN( &AllMask, 16,psrlq)
360 TEST_INSN( &AllMask, 16,psrlw)
361 TEST_INSN( &AllMask, 16,psubb)
362 TEST_INSN( &AllMask, 16,psubd)
363 TEST_INSN( &AllMask, 16,psubq)
364 TEST_INSN( &AllMask, 16,psubsb)
365 TEST_INSN( &AllMask, 16,psubsw)
366 TEST_INSN( &AllMask, 16,psubusb)
367 TEST_INSN( &AllMask, 16,psubusw)
368 TEST_INSN( &AllMask, 16,psubw)
369 TEST_INSN( &AllMask, 16,punpckhbw)
370 TEST_INSN( &AllMask, 16,punpckhdq)
371 TEST_INSN( &AllMask, 16,punpckhqdq)
372 TEST_INSN( &AllMask, 16,punpckhwd)
373 TEST_INSN( &AllMask, 16,punpcklbw)
374 TEST_INSN( &AllMask, 16,punpckldq)
375 TEST_INSN( &AllMask, 16,punpcklqdq)
376 TEST_INSN( &AllMask, 16,punpcklwd)
377 TEST_INSN( &AllMask, 16,pxor)
378 //TEST_INSN( &AllMask, PD,shufpd)
379 TEST_INSN( &AllMask, PD,sqrtpd)
380 TEST_INSN( &AllMask, SD,sqrtsd)
381 TEST_INSN( &AllMask, PD,subpd)
382 TEST_INSN( &AllMask, SD,subsd)
383 TEST_INSN( &AllMask, SD,ucomisd)
384 TEST_INSN( &AllMask, PD,unpckhpd)
385 TEST_INSN( &AllMask, PD,unpcklpd)
386 TEST_INSN( &AllMask, PD,xorpd)
387
388
main(int argc,char ** argv)389 int main ( int argc, char** argv )
390 {
391 Int sse1 = 0, sse2 = 0;
392
393 if (argc == 2 && 0==strcmp(argv[1], "sse1")) {
394 sse1 = 1;
395 }
396 else
397 if (argc == 2 && 0==strcmp(argv[1], "sse2")) {
398 sse2 = 1;
399 }
400 else
401 if (argc == 2 && 0==strcmp(argv[1], "all")) {
402 sse1 = sse2 = 1;
403 }
404 else {
405 fprintf(stderr, "usage: sse_memory [sse1|sse2|all]\n");
406 return 0;
407 }
408
409 /* ------------------------ SSE1 ------------------------ */
410 if (sse1) {
411 do_addps();
412 do_addss();
413 do_andnps();
414 do_andps();
415 do_cmpeqps();
416 do_cmpeqss();
417 do_cmpleps();
418 do_cmpless();
419 do_cmpltps();
420 do_cmpltss();
421 do_cmpneqps();
422 do_cmpneqss();
423 do_cmpnleps();
424 do_cmpnless();
425 do_cmpnltps();
426 do_cmpnltss();
427 do_cmpordps();
428 do_cmpordss();
429 do_cmpunordps();
430 do_cmpunordss();
431 do_comiss();
432 //TEST_INSN( &AllMask, 0,cvtpi2ps)
433 //TEST_INSN( &AllMask, 0,cvtps2pi)
434 //TEST_INSN( &AllMask, 0,cvtsi2ss)
435 //TEST_INSN( &AllMask, 0,cvtss2si)
436 //TEST_INSN( &AllMask, 0,cvttps2pi)
437 //TEST_INSN( &AllMask, 0,cvttss2si)
438 do_divps();
439 do_divss();
440 do_maxps();
441 do_maxss();
442 do_minps();
443 do_minss();
444 do_movaps();
445 //TEST_INSN( &AllMask, 0,movhlps)
446 //TEST_INSN( &AllMask, 0,movhps)
447 //TEST_INSN( &AllMask, 0,movlhps)
448 //TEST_INSN( &AllMask, 0,movlps)
449 //TEST_INSN( &AllMask, 0,movmskps)
450 //TEST_INSN( &AllMask, 0,movntps)
451 //TEST_INSN( &AllMask, 0,movntq)
452 do_movss();
453 do_movups();
454 do_mulps();
455 do_mulss();
456 do_orps();
457 //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2?
458 //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2?
459 //TEST_INSN( &AllMask, 0,pextrw)
460 //TEST_INSN( &AllMask, 0,pinsrw)
461 //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2?
462 //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2?
463 //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2?
464 //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2?
465 //TEST_INSN( &AllMask, 0,pmovmskb)
466 //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2?
467 //do_psadbw(); -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented!
468 //TEST_INSN( &AllMask, 0,pshufw)
469 do_rcpps();
470 do_rcpss();
471 do_rsqrtps();
472 do_rsqrtss();
473 //TEST_INSN( &AllMask, PS,shufps)
474 do_sqrtps();
475 do_sqrtss();
476 do_subps();
477 do_subss();
478 do_ucomiss();
479 do_unpckhps();
480 do_unpcklps();
481 do_xorps();
482 }
483
484 /* ------------------------ SSE2 ------------------------ */
485 if (sse2) {
486 do_addpd();
487 do_addsd();
488 do_andnpd();
489 do_andpd();
490 do_cmpeqpd();
491 do_cmpeqsd();
492 do_cmplepd();
493 do_cmplesd();
494 do_cmpltpd();
495 do_cmpltsd();
496 do_cmpneqpd();
497 do_cmpneqsd();
498 do_cmpnlepd();
499 do_cmpnlesd();
500 do_cmpnltpd();
501 do_cmpnltsd();
502 do_cmpordpd();
503 do_cmpordsd();
504 do_cmpunordpd();
505 do_cmpunordsd();
506 do_comisd();
507 do_cvtdq2pd();
508 do_cvtdq2ps();
509 do_cvtpd2dq();
510 //TEST_INSN( &AllMask, 0,cvtpd2pi)
511 do_cvtpd2ps();
512 //TEST_INSN( &AllMask, 0,cvtpi2pd)
513 do_cvtps2dq();
514 do_cvtps2pd();
515 //TEST_INSN( &AllMask, 0,cvtsd2si)
516 do_cvtsd2ss();
517 //TEST_INSN( &AllMask, 0,cvtsi2sd)
518 do_cvtss2sd();
519 do_cvttpd2dq();
520 //TEST_INSN( &AllMask, 0,cvttpd2pi)
521 do_cvttps2dq();
522 //TEST_INSN( &AllMask, 0,cvttsd2si)
523 do_divpd();
524 do_divsd();
525 do_maxpd();
526 do_maxsd();
527 do_minpd();
528 do_minsd();
529 do_movapd();
530 //TEST_INSN( &AllMask, 8,movd)
531 //TEST_INSN( &AllMask, 0,movdq2q)
532 do_movdqa();
533 do_movdqu();
534 //TEST_INSN( &AllMask, 16,movhpd)
535 //TEST_INSN( &AllMask, 16,movlpd)
536 //TEST_INSN( &AllMask, 0,movmskpd)
537 //TEST_INSN( &AllMask, 0,movntdq)
538 //TEST_INSN( &AllMask, 0,movnti)
539 //TEST_INSN( &AllMask, 0,movntpd)
540 do_movq();
541 //TEST_INSN( &AllMask, 0,movq2dq)
542 do_movsd();
543 do_movupd();
544 do_mulpd();
545 do_mulsd();
546 do_orpd();
547 do_packssdw();
548 do_packsswb();
549 do_packuswb();
550 do_paddb();
551 do_paddd();
552 do_paddq();
553 do_paddsb();
554 do_paddsw();
555 do_paddusb();
556 do_paddusw();
557 do_paddw();
558 do_pand();
559 do_pandn();
560 do_pavgb();
561 do_pavgw();
562 do_pcmpeqb();
563 do_pcmpeqd();
564 do_pcmpeqw();
565 do_pcmpgtb();
566 do_pcmpgtd();
567 do_pcmpgtw();
568 //TEST_INSN( &AllMask, 16,pextrw)
569 //TEST_INSN( &AllMask, 16,pinsrw)
570 do_pmaxsw();
571 do_pmaxub();
572 do_pminsw();
573 do_pminub();
574 //TEST_INSN( &AllMask, 0,pmovmskb)
575 do_pmulhuw();
576 do_pmulhw();
577 do_pmullw();
578 do_pmuludq();
579 do_por();
580 //TEST_INSN( &AllMask, 16,pshufd)
581 //TEST_INSN( &AllMask, 16,pshufhw)
582 //TEST_INSN( &AllMask, 16,pshuflw)
583 do_pslld();
584 //TEST_INSN( &AllMask, 16,pslldq)
585 do_psllq();
586 do_psllw();
587 do_psrad();
588 do_psraw();
589 do_psrld();
590 //TEST_INSN( &AllMask, 16,psrldq)
591 do_psrlq();
592 do_psrlw();
593 do_psubb();
594 do_psubd();
595 do_psubq();
596 do_psubsb();
597 do_psubsw();
598 do_psubusb();
599 do_psubusw();
600 do_psubw();
601 do_punpckhbw();
602 do_punpckhdq();
603 do_punpckhqdq();
604 do_punpckhwd();
605 do_punpcklbw();
606 do_punpckldq();
607 do_punpcklqdq();
608 do_punpcklwd();
609 do_pxor();
610 //TEST_INSN( &AllMask, PD,shufpd)
611 do_sqrtpd();
612 do_sqrtsd();
613 do_subpd();
614 do_subsd();
615 do_ucomisd();
616 do_unpckhpd();
617 do_unpcklpd();
618 do_xorpd();
619 }
620
621 return 0;
622 }
623
624