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 32 static UChar randUChar ( void ) 33 { 34 static UInt seed = 80021; 35 seed = 1103515245 * seed + 12345; 36 return (seed >> 17) & 0xFF; 37 } 38 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 46 static void randV128 ( V128* v ) 47 { 48 Int i; 49 for (i = 0; i < 16; i++) 50 (*v)[i] = randUChar(); 51 } 52 53 static void randRRArgs ( RRArgs* rra ) 54 { 55 randV128(&rra->arg1); 56 randV128(&rra->arg2); 57 randV128(&rra->res); 58 } 59 60 static void randRMArgs ( RMArgs* rra ) 61 { 62 randV128(&rra->arg1); 63 randV128(&rra->res); 64 } 65 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 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 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 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 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