mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-10 13:40:25 +00:00
624 lines
17 KiB
C
624 lines
17 KiB
C
|
|
/* 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;
|
|
}
|
|
|