| |
| /* A program to test that SSE/SSE2 insns do not read memory they |
| should not. Covers insns of the form OP %xmm, %xmm and OP memory, |
| %xmm only. */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <assert.h> |
| #include "tests/malloc.h" |
| #include <string.h> |
| |
| typedef unsigned char V128[16]; |
| typedef unsigned int UInt; |
| typedef signed int Int; |
| typedef unsigned char UChar; |
| |
| typedef |
| struct { |
| V128 arg1; |
| V128 arg2; |
| V128 res; |
| } |
| RRArgs; |
| |
| typedef |
| struct { |
| V128 arg1; |
| V128 res; |
| } |
| RMArgs; |
| |
| static UChar randUChar ( void ) |
| { |
| static UInt seed = 80021; |
| seed = 1103515245 * seed + 12345; |
| return (seed >> 17) & 0xFF; |
| } |
| |
| static void randomise ( UChar* p, Int n ) |
| { |
| Int i; |
| for (i = 0; i < n; i++) |
| p[i] = randUChar(); |
| } |
| |
| static void randV128 ( V128* v ) |
| { |
| Int i; |
| for (i = 0; i < 16; i++) |
| (*v)[i] = randUChar(); |
| } |
| |
| static void randRRArgs ( RRArgs* rra ) |
| { |
| randV128(&rra->arg1); |
| randV128(&rra->arg2); |
| randV128(&rra->res); |
| } |
| |
| static void randRMArgs ( RMArgs* rra ) |
| { |
| randV128(&rra->arg1); |
| randV128(&rra->res); |
| } |
| |
| static void showV128 ( V128* v ) |
| { |
| Int i; |
| for (i = 0; i < 16; i++) |
| printf("%02x", (Int)(*v)[i]); |
| } |
| |
| static void showMaskedV128 ( V128* v, V128* mask ) |
| { |
| Int i; |
| for (i = 0; i < 16; i++) |
| printf("%02x", (Int)( ((*v)[i]) & ((*mask)[i]) )); |
| } |
| |
| static void showRR ( char* op, RRArgs* rra, V128* rmask ) |
| { |
| printf("r %10s ", op); |
| showV128(&rra->arg1); |
| printf(" "); |
| showV128(&rra->arg2); |
| printf(" "); |
| showMaskedV128(&rra->res, rmask); |
| printf("\n"); |
| } |
| |
| static void showRM ( char* op, RMArgs* rra, UChar* mem, Int nMem, V128* rmask ) |
| { |
| Int i; |
| assert(nMem == 4 || nMem == 8 || nMem == 16 || nMem==0); |
| printf("m %10s ", op); |
| for (i = 0; i < nMem; i++) |
| printf("%02x", (Int)mem[i]); |
| printf(" "); |
| showV128(&rra->arg1); |
| printf(" "); |
| showMaskedV128(&rra->res, rmask ); |
| printf("\n"); |
| } |
| |
| #define Wrapper_RegReg(OP) \ |
| void r_r_##OP ( RRArgs* p ) \ |
| { \ |
| __asm__ __volatile__("\n" \ |
| "\tmovups 0(%0), %%xmm6\n" \ |
| "\tmovups 16(%0), %%xmm7\n" \ |
| "\t" #OP " %%xmm6, %%xmm7\n" \ |
| "\tmovups %%xmm7, 32(%0)\n" \ |
| : \ |
| : "r" (p) \ |
| : "memory", "xmm6", "xmm7", "cc" \ |
| ); \ |
| } |
| |
| #define Wrapper_RegMem(OP) \ |
| void r_m_##OP ( RMArgs* p, void* mem ) \ |
| { \ |
| __asm__ __volatile__("\n" \ |
| "\tmovups 0(%0), %%xmm7\n" \ |
| "\t" #OP " 0(%1), %%xmm7\n" \ |
| "\tmovups %%xmm7, 16(%0)\n" \ |
| : \ |
| : "r" (p), "r" (mem) \ |
| : "memory", "xmm7", "cc" \ |
| ); \ |
| } |
| |
| |
| #define TEST_INSN(res_mask,mem_size,insn) \ |
| \ |
| Wrapper_RegReg(insn) \ |
| Wrapper_RegMem(insn) \ |
| \ |
| void do_##insn ( void ) \ |
| { \ |
| Int i; \ |
| UChar* buf; \ |
| RRArgs rargs __attribute__((aligned(16))); \ |
| RMArgs margs __attribute__((aligned(16))); \ |
| for (i = 0; i < 5; i++) { \ |
| randRRArgs(&rargs); \ |
| r_r_##insn(&rargs); \ |
| showRR(#insn, &rargs, res_mask); \ |
| } \ |
| for (i = 0; i < 5; i++) { \ |
| randRMArgs(&margs); \ |
| buf = memalign16(mem_size); \ |
| randomise(buf,mem_size); \ |
| r_m_##insn(&margs,buf); \ |
| showRM(#insn, &margs, buf, mem_size, res_mask);\ |
| free(buf); \ |
| } \ |
| } |
| |
| /* Note: these are little endian. Hence first byte is the least |
| significant byte of lane zero. */ |
| |
| /* Mask for insns where all result bits are non-approximated. */ |
| static V128 AllMask = { 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, |
| 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF }; |
| |
| /* Mark for insns which produce approximated vector short results. */ |
| static V128 ApproxPS = { 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF, |
| 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF }; |
| |
| /* Mark for insns which produce approximated scalar short results. */ |
| static V128 ApproxSS = { 0x00,0x00,0x80,0xFF, 0xFF,0xFF,0xFF,0xFF, |
| 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF }; |
| |
| #define PD 16 |
| #define SD 8 |
| #define PS 16 |
| #define SS 4 |
| |
| /* ------------------------ SSE1 ------------------------ */ |
| TEST_INSN( &AllMask, PS,addps) |
| TEST_INSN( &AllMask, SS,addss) |
| TEST_INSN( &AllMask, PS,andnps) |
| TEST_INSN( &AllMask, PS,andps) |
| TEST_INSN( &AllMask, PS,cmpeqps) |
| TEST_INSN( &AllMask, SS,cmpeqss) |
| TEST_INSN( &AllMask, PS,cmpleps) |
| TEST_INSN( &AllMask, SS,cmpless) |
| TEST_INSN( &AllMask, PS,cmpltps) |
| TEST_INSN( &AllMask, SS,cmpltss) |
| TEST_INSN( &AllMask, PS,cmpneqps) |
| TEST_INSN( &AllMask, SS,cmpneqss) |
| TEST_INSN( &AllMask, PS,cmpnleps) |
| TEST_INSN( &AllMask, SS,cmpnless) |
| TEST_INSN( &AllMask, PS,cmpnltps) |
| TEST_INSN( &AllMask, SS,cmpnltss) |
| TEST_INSN( &AllMask, PS,cmpordps) |
| TEST_INSN( &AllMask, SS,cmpordss) |
| TEST_INSN( &AllMask, PS,cmpunordps) |
| TEST_INSN( &AllMask, SS,cmpunordss) |
| TEST_INSN( &AllMask, SS,comiss) |
| //TEST_INSN( &AllMask, 0,cvtpi2ps) |
| //TEST_INSN( &AllMask, 0,cvtps2pi) |
| //TEST_INSN( &AllMask, 0,cvtsi2ss) |
| //TEST_INSN( &AllMask, 0,cvtss2si) |
| //TEST_INSN( &AllMask, 0,cvttps2pi) |
| //TEST_INSN( &AllMask, 0,cvttss2si) |
| TEST_INSN( &AllMask, PS,divps) |
| TEST_INSN( &AllMask, SS,divss) |
| TEST_INSN( &AllMask, PS,maxps) |
| TEST_INSN( &AllMask, SS,maxss) |
| TEST_INSN( &AllMask, PS,minps) |
| TEST_INSN( &AllMask, SS,minss) |
| TEST_INSN( &AllMask, 16,movaps) |
| //TEST_INSN( &AllMask, 0,movhlps) |
| //TEST_INSN( &AllMask, 0,movhps) |
| //TEST_INSN( &AllMask, 0,movlhps) |
| //TEST_INSN( &AllMask, 0,movlps) |
| //TEST_INSN( &AllMask, 0,movmskps) |
| //TEST_INSN( &AllMask, 0,movntps) |
| //TEST_INSN( &AllMask, 0,movntq) |
| TEST_INSN( &AllMask, 4,movss) |
| TEST_INSN( &AllMask, 16,movups) |
| TEST_INSN( &AllMask, PS,mulps) |
| TEST_INSN( &AllMask, SS,mulss) |
| TEST_INSN( &AllMask, PS,orps) |
| //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pextrw) |
| //TEST_INSN( &AllMask, 0,pinsrw) |
| //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pmovmskb) |
| //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2? |
| TEST_INSN( &AllMask, 16,psadbw) // -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented! |
| //TEST_INSN( &AllMask, 0,pshufw) |
| TEST_INSN(&ApproxPS, PS,rcpps) |
| TEST_INSN(&ApproxSS, SS,rcpss) |
| TEST_INSN(&ApproxPS, PS,rsqrtps) |
| TEST_INSN(&ApproxSS, SS,rsqrtss) |
| //TEST_INSN( &AllMask, PS,shufps) |
| TEST_INSN( &AllMask, PS,sqrtps) |
| TEST_INSN( &AllMask, SS,sqrtss) |
| TEST_INSN( &AllMask, PS,subps) |
| TEST_INSN( &AllMask, SS,subss) |
| TEST_INSN( &AllMask, SS,ucomiss) |
| TEST_INSN( &AllMask, PS,unpckhps) |
| TEST_INSN( &AllMask, PS,unpcklps) |
| TEST_INSN( &AllMask, PS,xorps) |
| |
| |
| /* ------------------------ SSE2 ------------------------ */ |
| TEST_INSN( &AllMask, PD,addpd) |
| TEST_INSN( &AllMask, SD,addsd) |
| TEST_INSN( &AllMask, PD,andnpd) |
| TEST_INSN( &AllMask, PD,andpd) |
| TEST_INSN( &AllMask, PD,cmpeqpd) |
| TEST_INSN( &AllMask, SD,cmpeqsd) |
| TEST_INSN( &AllMask, PD,cmplepd) |
| TEST_INSN( &AllMask, SD,cmplesd) |
| TEST_INSN( &AllMask, PD,cmpltpd) |
| TEST_INSN( &AllMask, SD,cmpltsd) |
| TEST_INSN( &AllMask, PD,cmpneqpd) |
| TEST_INSN( &AllMask, SD,cmpneqsd) |
| TEST_INSN( &AllMask, PD,cmpnlepd) |
| TEST_INSN( &AllMask, SD,cmpnlesd) |
| TEST_INSN( &AllMask, PD,cmpnltpd) |
| TEST_INSN( &AllMask, SD,cmpnltsd) |
| TEST_INSN( &AllMask, PD,cmpordpd) |
| TEST_INSN( &AllMask, SD,cmpordsd) |
| TEST_INSN( &AllMask, PD,cmpunordpd) |
| TEST_INSN( &AllMask, SD,cmpunordsd) |
| TEST_INSN( &AllMask, SD,comisd) |
| TEST_INSN( &AllMask, 8,cvtdq2pd) |
| TEST_INSN( &AllMask, 16,cvtdq2ps) |
| TEST_INSN( &AllMask, 16,cvtpd2dq) |
| //TEST_INSN( &AllMask, 0,cvtpd2pi) |
| TEST_INSN( &AllMask, 16,cvtpd2ps) /* reads 16 */ |
| //TEST_INSN( &AllMask, 0,cvtpi2pd) |
| TEST_INSN( &AllMask, 16,cvtps2dq) /* reads 16 */ |
| TEST_INSN( &AllMask, 8,cvtps2pd) /* reads 8 */ |
| //TEST_INSN( &AllMask, 0,cvtsd2si) |
| TEST_INSN( &AllMask, SD,cvtsd2ss) /* reads SD */ |
| //TEST_INSN( &AllMask, 0,cvtsi2sd) |
| TEST_INSN( &AllMask, SS,cvtss2sd) /* reads SS */ |
| TEST_INSN( &AllMask, 16,cvttpd2dq) |
| //TEST_INSN( &AllMask, 0,cvttpd2pi) |
| TEST_INSN( &AllMask, 16,cvttps2dq) |
| //TEST_INSN( &AllMask, 0,cvttsd2si) |
| TEST_INSN( &AllMask, PD,divpd) |
| TEST_INSN( &AllMask, SD,divsd) |
| TEST_INSN( &AllMask, PD,maxpd) |
| TEST_INSN( &AllMask, SD,maxsd) |
| TEST_INSN( &AllMask, PD,minpd) |
| TEST_INSN( &AllMask, SD,minsd) |
| TEST_INSN( &AllMask, PD,movapd) |
| //TEST_INSN( &AllMask, 8,movd) |
| //TEST_INSN( &AllMask, 0,movdq2q) |
| TEST_INSN( &AllMask, 16,movdqa) |
| TEST_INSN( &AllMask, 16,movdqu) |
| //TEST_INSN( &AllMask, 16,movhpd) |
| //TEST_INSN( &AllMask, 16,movlpd) |
| //TEST_INSN( &AllMask, 0,movmskpd) |
| //TEST_INSN( &AllMask, 0,movntdq) |
| //TEST_INSN( &AllMask, 0,movnti) |
| //TEST_INSN( &AllMask, 0,movntpd) |
| TEST_INSN( &AllMask, 8,movq) |
| //TEST_INSN( &AllMask, 0,movq2dq) |
| TEST_INSN( &AllMask, 8,movsd) |
| TEST_INSN( &AllMask, 16,movupd) |
| TEST_INSN( &AllMask, PD,mulpd) |
| TEST_INSN( &AllMask, SD,mulsd) |
| TEST_INSN( &AllMask, PD,orpd) |
| TEST_INSN( &AllMask, 16,packssdw) |
| TEST_INSN( &AllMask, 16,packsswb) |
| TEST_INSN( &AllMask, 16,packuswb) |
| TEST_INSN( &AllMask, 16,paddb) |
| TEST_INSN( &AllMask, 16,paddd) |
| TEST_INSN( &AllMask, 16,paddq) |
| TEST_INSN( &AllMask, 16,paddsb) |
| TEST_INSN( &AllMask, 16,paddsw) |
| TEST_INSN( &AllMask, 16,paddusb) |
| TEST_INSN( &AllMask, 16,paddusw) |
| TEST_INSN( &AllMask, 16,paddw) |
| TEST_INSN( &AllMask, 16,pand) |
| TEST_INSN( &AllMask, 16,pandn) |
| TEST_INSN( &AllMask, 16,pavgb) |
| TEST_INSN( &AllMask, 16,pavgw) |
| TEST_INSN( &AllMask, 16,pcmpeqb) |
| TEST_INSN( &AllMask, 16,pcmpeqd) |
| TEST_INSN( &AllMask, 16,pcmpeqw) |
| TEST_INSN( &AllMask, 16,pcmpgtb) |
| TEST_INSN( &AllMask, 16,pcmpgtd) |
| TEST_INSN( &AllMask, 16,pcmpgtw) |
| //TEST_INSN( &AllMask, 16,pextrw) |
| //TEST_INSN( &AllMask, 16,pinsrw) |
| TEST_INSN( &AllMask, 16,pmaxsw) |
| TEST_INSN( &AllMask, 16,pmaxub) |
| TEST_INSN( &AllMask, 16,pminsw) |
| TEST_INSN( &AllMask, 16,pminub) |
| //TEST_INSN( &AllMask, 0,pmovmskb) |
| TEST_INSN( &AllMask, 16,pmulhuw) |
| TEST_INSN( &AllMask, 16,pmulhw) |
| TEST_INSN( &AllMask, 16,pmullw) |
| TEST_INSN( &AllMask, 16,pmuludq) |
| TEST_INSN( &AllMask, 16,por) |
| //TEST_INSN( &AllMask, 16,pshufd) |
| //TEST_INSN( &AllMask, 16,pshufhw) |
| //TEST_INSN( &AllMask, 16,pshuflw) |
| TEST_INSN( &AllMask, 16,pslld) |
| //TEST_INSN( &AllMask, 16,pslldq) |
| TEST_INSN( &AllMask, 16,psllq) |
| TEST_INSN( &AllMask, 16,psllw) |
| TEST_INSN( &AllMask, 16,psrad) |
| TEST_INSN( &AllMask, 16,psraw) |
| TEST_INSN( &AllMask, 16,psrld) |
| //TEST_INSN( &AllMask, 16,psrldq) |
| TEST_INSN( &AllMask, 16,psrlq) |
| TEST_INSN( &AllMask, 16,psrlw) |
| TEST_INSN( &AllMask, 16,psubb) |
| TEST_INSN( &AllMask, 16,psubd) |
| TEST_INSN( &AllMask, 16,psubq) |
| TEST_INSN( &AllMask, 16,psubsb) |
| TEST_INSN( &AllMask, 16,psubsw) |
| TEST_INSN( &AllMask, 16,psubusb) |
| TEST_INSN( &AllMask, 16,psubusw) |
| TEST_INSN( &AllMask, 16,psubw) |
| TEST_INSN( &AllMask, 16,punpckhbw) |
| TEST_INSN( &AllMask, 16,punpckhdq) |
| TEST_INSN( &AllMask, 16,punpckhqdq) |
| TEST_INSN( &AllMask, 16,punpckhwd) |
| TEST_INSN( &AllMask, 16,punpcklbw) |
| TEST_INSN( &AllMask, 16,punpckldq) |
| TEST_INSN( &AllMask, 16,punpcklqdq) |
| TEST_INSN( &AllMask, 16,punpcklwd) |
| TEST_INSN( &AllMask, 16,pxor) |
| //TEST_INSN( &AllMask, PD,shufpd) |
| TEST_INSN( &AllMask, PD,sqrtpd) |
| TEST_INSN( &AllMask, SD,sqrtsd) |
| TEST_INSN( &AllMask, PD,subpd) |
| TEST_INSN( &AllMask, SD,subsd) |
| TEST_INSN( &AllMask, SD,ucomisd) |
| TEST_INSN( &AllMask, PD,unpckhpd) |
| TEST_INSN( &AllMask, PD,unpcklpd) |
| TEST_INSN( &AllMask, PD,xorpd) |
| |
| |
| int main ( int argc, char** argv ) |
| { |
| Int sse1 = 0, sse2 = 0; |
| |
| if (argc == 2 && 0==strcmp(argv[1], "sse1")) { |
| sse1 = 1; |
| } |
| else |
| if (argc == 2 && 0==strcmp(argv[1], "sse2")) { |
| sse2 = 1; |
| } |
| else |
| if (argc == 2 && 0==strcmp(argv[1], "all")) { |
| sse1 = sse2 = 1; |
| } |
| else { |
| fprintf(stderr, "usage: sse_memory [sse1|sse2|all]\n"); |
| return 0; |
| } |
| |
| /* ------------------------ SSE1 ------------------------ */ |
| if (sse1) { |
| do_addps(); |
| do_addss(); |
| do_andnps(); |
| do_andps(); |
| do_cmpeqps(); |
| do_cmpeqss(); |
| do_cmpleps(); |
| do_cmpless(); |
| do_cmpltps(); |
| do_cmpltss(); |
| do_cmpneqps(); |
| do_cmpneqss(); |
| do_cmpnleps(); |
| do_cmpnless(); |
| do_cmpnltps(); |
| do_cmpnltss(); |
| do_cmpordps(); |
| do_cmpordss(); |
| do_cmpunordps(); |
| do_cmpunordss(); |
| do_comiss(); |
| //TEST_INSN( &AllMask, 0,cvtpi2ps) |
| //TEST_INSN( &AllMask, 0,cvtps2pi) |
| //TEST_INSN( &AllMask, 0,cvtsi2ss) |
| //TEST_INSN( &AllMask, 0,cvtss2si) |
| //TEST_INSN( &AllMask, 0,cvttps2pi) |
| //TEST_INSN( &AllMask, 0,cvttss2si) |
| do_divps(); |
| do_divss(); |
| do_maxps(); |
| do_maxss(); |
| do_minps(); |
| do_minss(); |
| do_movaps(); |
| //TEST_INSN( &AllMask, 0,movhlps) |
| //TEST_INSN( &AllMask, 0,movhps) |
| //TEST_INSN( &AllMask, 0,movlhps) |
| //TEST_INSN( &AllMask, 0,movlps) |
| //TEST_INSN( &AllMask, 0,movmskps) |
| //TEST_INSN( &AllMask, 0,movntps) |
| //TEST_INSN( &AllMask, 0,movntq) |
| do_movss(); |
| do_movups(); |
| do_mulps(); |
| do_mulss(); |
| do_orps(); |
| //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pextrw) |
| //TEST_INSN( &AllMask, 0,pinsrw) |
| //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2? |
| //TEST_INSN( &AllMask, 0,pmovmskb) |
| //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2? |
| //do_psadbw(); -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented! |
| //TEST_INSN( &AllMask, 0,pshufw) |
| do_rcpps(); |
| do_rcpss(); |
| do_rsqrtps(); |
| do_rsqrtss(); |
| //TEST_INSN( &AllMask, PS,shufps) |
| do_sqrtps(); |
| do_sqrtss(); |
| do_subps(); |
| do_subss(); |
| do_ucomiss(); |
| do_unpckhps(); |
| do_unpcklps(); |
| do_xorps(); |
| } |
| |
| /* ------------------------ SSE2 ------------------------ */ |
| if (sse2) { |
| do_addpd(); |
| do_addsd(); |
| do_andnpd(); |
| do_andpd(); |
| do_cmpeqpd(); |
| do_cmpeqsd(); |
| do_cmplepd(); |
| do_cmplesd(); |
| do_cmpltpd(); |
| do_cmpltsd(); |
| do_cmpneqpd(); |
| do_cmpneqsd(); |
| do_cmpnlepd(); |
| do_cmpnlesd(); |
| do_cmpnltpd(); |
| do_cmpnltsd(); |
| do_cmpordpd(); |
| do_cmpordsd(); |
| do_cmpunordpd(); |
| do_cmpunordsd(); |
| do_comisd(); |
| do_cvtdq2pd(); |
| do_cvtdq2ps(); |
| do_cvtpd2dq(); |
| //TEST_INSN( &AllMask, 0,cvtpd2pi) |
| do_cvtpd2ps(); |
| //TEST_INSN( &AllMask, 0,cvtpi2pd) |
| do_cvtps2dq(); |
| do_cvtps2pd(); |
| //TEST_INSN( &AllMask, 0,cvtsd2si) |
| do_cvtsd2ss(); |
| //TEST_INSN( &AllMask, 0,cvtsi2sd) |
| do_cvtss2sd(); |
| do_cvttpd2dq(); |
| //TEST_INSN( &AllMask, 0,cvttpd2pi) |
| do_cvttps2dq(); |
| //TEST_INSN( &AllMask, 0,cvttsd2si) |
| do_divpd(); |
| do_divsd(); |
| do_maxpd(); |
| do_maxsd(); |
| do_minpd(); |
| do_minsd(); |
| do_movapd(); |
| //TEST_INSN( &AllMask, 8,movd) |
| //TEST_INSN( &AllMask, 0,movdq2q) |
| do_movdqa(); |
| do_movdqu(); |
| //TEST_INSN( &AllMask, 16,movhpd) |
| //TEST_INSN( &AllMask, 16,movlpd) |
| //TEST_INSN( &AllMask, 0,movmskpd) |
| //TEST_INSN( &AllMask, 0,movntdq) |
| //TEST_INSN( &AllMask, 0,movnti) |
| //TEST_INSN( &AllMask, 0,movntpd) |
| do_movq(); |
| //TEST_INSN( &AllMask, 0,movq2dq) |
| do_movsd(); |
| do_movupd(); |
| do_mulpd(); |
| do_mulsd(); |
| do_orpd(); |
| do_packssdw(); |
| do_packsswb(); |
| do_packuswb(); |
| do_paddb(); |
| do_paddd(); |
| do_paddq(); |
| do_paddsb(); |
| do_paddsw(); |
| do_paddusb(); |
| do_paddusw(); |
| do_paddw(); |
| do_pand(); |
| do_pandn(); |
| do_pavgb(); |
| do_pavgw(); |
| do_pcmpeqb(); |
| do_pcmpeqd(); |
| do_pcmpeqw(); |
| do_pcmpgtb(); |
| do_pcmpgtd(); |
| do_pcmpgtw(); |
| //TEST_INSN( &AllMask, 16,pextrw) |
| //TEST_INSN( &AllMask, 16,pinsrw) |
| do_pmaxsw(); |
| do_pmaxub(); |
| do_pminsw(); |
| do_pminub(); |
| //TEST_INSN( &AllMask, 0,pmovmskb) |
| do_pmulhuw(); |
| do_pmulhw(); |
| do_pmullw(); |
| do_pmuludq(); |
| do_por(); |
| //TEST_INSN( &AllMask, 16,pshufd) |
| //TEST_INSN( &AllMask, 16,pshufhw) |
| //TEST_INSN( &AllMask, 16,pshuflw) |
| do_pslld(); |
| //TEST_INSN( &AllMask, 16,pslldq) |
| do_psllq(); |
| do_psllw(); |
| do_psrad(); |
| do_psraw(); |
| do_psrld(); |
| //TEST_INSN( &AllMask, 16,psrldq) |
| do_psrlq(); |
| do_psrlw(); |
| do_psubb(); |
| do_psubd(); |
| do_psubq(); |
| do_psubsb(); |
| do_psubsw(); |
| do_psubusb(); |
| do_psubusw(); |
| do_psubw(); |
| do_punpckhbw(); |
| do_punpckhdq(); |
| do_punpckhqdq(); |
| do_punpckhwd(); |
| do_punpcklbw(); |
| do_punpckldq(); |
| do_punpcklqdq(); |
| do_punpcklwd(); |
| do_pxor(); |
| //TEST_INSN( &AllMask, PD,shufpd) |
| do_sqrtpd(); |
| do_sqrtsd(); |
| do_subpd(); |
| do_subsd(); |
| do_ucomisd(); |
| do_unpckhpd(); |
| do_unpcklpd(); |
| do_xorpd(); |
| } |
| |
| return 0; |
| } |
| |