1a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
2a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* A program to test that SSE/SSE2 insns do not read memory they
3a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   should not.  Covers insns of the form OP %xmm, %xmm and OP memory,
4a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   %xmm only. */
5a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
6a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <stdio.h>
7a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <stdlib.h>
8a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <assert.h>
983b62cbbab29bde83eba40231f307c2a311e73c8njn#include "tests/malloc.h"
10a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#include <string.h>
11a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
12a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef  unsigned char  V128[16];
13a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef  unsigned int   UInt;
14a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef  signed int     Int;
15a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef  unsigned char  UChar;
16a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
17a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef
18a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   struct {
19a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      V128 arg1;
20a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      V128 arg2;
21a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      V128 res;
22a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
23a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   RRArgs;
24a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
25a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjtypedef
26a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   struct {
27a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      V128 arg1;
28a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      V128 res;
29a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
30a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   RMArgs;
31a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
32a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic UChar randUChar ( void )
33a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
34a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   static UInt seed = 80021;
35a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   seed = 1103515245 * seed + 12345;
36a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   return (seed >> 17) & 0xFF;
37a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
38a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
39a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randomise ( UChar* p, Int n )
40a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
41a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int i;
42a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < n; i++)
43a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      p[i] = randUChar();
44a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
45a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
46a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randV128 ( V128* v )
47a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
48a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int i;
49a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < 16; i++)
50a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      (*v)[i] = randUChar();
51a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
52a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
53a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randRRArgs ( RRArgs* rra )
54a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
55a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   randV128(&rra->arg1);
56a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   randV128(&rra->arg2);
57a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   randV128(&rra->res);
58a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
59a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
60a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void randRMArgs ( RMArgs* rra )
61a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
62a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   randV128(&rra->arg1);
63a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   randV128(&rra->res);
64a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
65a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
66a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjstatic void showV128 ( V128* v )
67a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
68a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int i;
69a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < 16; i++)
70a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      printf("%02x", (Int)(*v)[i]);
71a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
72a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
732de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showMaskedV128 ( V128* v, V128* mask )
742de044165d2bff58aca58fec3c3c9e34d949730esewardj{
752de044165d2bff58aca58fec3c3c9e34d949730esewardj   Int i;
762de044165d2bff58aca58fec3c3c9e34d949730esewardj   for (i = 0; i < 16; i++)
772de044165d2bff58aca58fec3c3c9e34d949730esewardj      printf("%02x", (Int)( ((*v)[i]) & ((*mask)[i]) ));
782de044165d2bff58aca58fec3c3c9e34d949730esewardj}
792de044165d2bff58aca58fec3c3c9e34d949730esewardj
802de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showRR ( char* op, RRArgs* rra, V128* rmask )
81a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
82a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf("r %10s ", op);
83a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   showV128(&rra->arg1);
84a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf(" ");
85a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   showV128(&rra->arg2);
86a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf(" ");
872de044165d2bff58aca58fec3c3c9e34d949730esewardj   showMaskedV128(&rra->res, rmask);
88a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf("\n");
89a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
90a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
912de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic void showRM ( char* op, RMArgs* rra, UChar* mem, Int nMem, V128* rmask )
92a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
93a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int i;
94a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   assert(nMem == 4 || nMem == 8 || nMem == 16 || nMem==0);
95a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf("m %10s ", op);
96a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < nMem; i++)
97a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      printf("%02x", (Int)mem[i]);
98a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf(" ");
99a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   showV128(&rra->arg1);
100a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf(" ");
1012de044165d2bff58aca58fec3c3c9e34d949730esewardj   showMaskedV128(&rra->res, rmask );
102a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   printf("\n");
103a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
104a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
105a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define Wrapper_RegReg(OP)                 \
106a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   void r_r_##OP ( RRArgs* p )             \
107a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   {                                       \
108a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      __asm__ __volatile__("\n"            \
109a974276895a76b6e391154c70c80056816996063sewardj         "\tmovups 0(%0), %%xmm6\n"        \
110a974276895a76b6e391154c70c80056816996063sewardj         "\tmovups 16(%0), %%xmm7\n"       \
111a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         "\t" #OP " %%xmm6, %%xmm7\n"      \
112a974276895a76b6e391154c70c80056816996063sewardj         "\tmovups %%xmm7, 32(%0)\n"       \
113a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         :                                 \
114a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         : "r" (p)                         \
115a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         : "memory", "xmm6", "xmm7", "cc"  \
116a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      );                                   \
117a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
118a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
119a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define Wrapper_RegMem(OP)                 \
120a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   void r_m_##OP ( RMArgs* p, void* mem )  \
121a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   {                                       \
122a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      __asm__ __volatile__("\n"            \
123a974276895a76b6e391154c70c80056816996063sewardj         "\tmovups 0(%0), %%xmm7\n"        \
124a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         "\t" #OP " 0(%1), %%xmm7\n"       \
125a974276895a76b6e391154c70c80056816996063sewardj         "\tmovups %%xmm7, 16(%0)\n"       \
126a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         :                                 \
127a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         : "r" (p), "r" (mem)              \
128a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj         : "memory", "xmm7", "cc"          \
129a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      );                                   \
130a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
131a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
132a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
1332de044165d2bff58aca58fec3c3c9e34d949730esewardj#define TEST_INSN(res_mask,mem_size,insn)  \
134a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj                                           \
135a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjWrapper_RegReg(insn)                       \
136a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjWrapper_RegMem(insn)                       \
137a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj                                           \
138a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjvoid do_##insn ( void )                    \
139a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{                                          \
140a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int    i;                               \
141a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   UChar* buf;                             \
142a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   RRArgs rargs __attribute__((aligned(16))); \
143a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   RMArgs margs __attribute__((aligned(16))); \
144a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < 5; i++) {               \
145a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      randRRArgs(&rargs);                  \
146a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      r_r_##insn(&rargs);                  \
1472de044165d2bff58aca58fec3c3c9e34d949730esewardj      showRR(#insn, &rargs, res_mask);     \
148a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }                                       \
149a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   for (i = 0; i < 5; i++) {               \
150a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      randRMArgs(&margs);                  \
15183b62cbbab29bde83eba40231f307c2a311e73c8njn      buf = memalign16(mem_size);          \
152a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      randomise(buf,mem_size);             \
153a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      r_m_##insn(&margs,buf);              \
1542de044165d2bff58aca58fec3c3c9e34d949730esewardj      showRM(#insn, &margs, buf, mem_size, res_mask);\
155a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      free(buf);                           \
156a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }                                       \
157a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
158a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
1592de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Note: these are little endian.  Hence first byte is the least
1602de044165d2bff58aca58fec3c3c9e34d949730esewardj   significant byte of lane zero. */
1612de044165d2bff58aca58fec3c3c9e34d949730esewardj
1622de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mask for insns where all result bits are non-approximated. */
1632de044165d2bff58aca58fec3c3c9e34d949730esewardjstatic V128 AllMask  = { 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
1642de044165d2bff58aca58fec3c3c9e34d949730esewardj                         0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
1652de044165d2bff58aca58fec3c3c9e34d949730esewardj
1662de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mark for insns which produce approximated vector short results. */
16749ceddc083470c6c8261d6029ebedcee228323c5sewardjstatic V128 ApproxPS = { 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF,
16849ceddc083470c6c8261d6029ebedcee228323c5sewardj                         0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF };
1692de044165d2bff58aca58fec3c3c9e34d949730esewardj
1702de044165d2bff58aca58fec3c3c9e34d949730esewardj/* Mark for insns which produce approximated scalar short results. */
17149ceddc083470c6c8261d6029ebedcee228323c5sewardjstatic V128 ApproxSS = { 0x00,0x00,0x80,0xFF, 0xFF,0xFF,0xFF,0xFF,
1722de044165d2bff58aca58fec3c3c9e34d949730esewardj                         0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
1732de044165d2bff58aca58fec3c3c9e34d949730esewardj
174a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define PD 16
175a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define SD 8
176a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define PS 16
177a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj#define SS 4
178a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
179a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* ------------------------ SSE1 ------------------------ */
1802de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,addps)
1812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,addss)
1822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,andnps)
1832de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,andps)
1842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpeqps)
1852de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpeqss)
1862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpleps)
1872de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpless)
1882de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpltps)
1892de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpltss)
1902de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpneqps)
1912de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpneqss)
1922de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpnleps)
1932de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpnless)
1942de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpnltps)
1952de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpnltss)
1962de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpordps)
1972de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpordss)
1982de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,cmpunordps)
1992de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cmpunordss)
2002de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,comiss)
2012de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpi2ps)
2022de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtps2pi)
2032de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsi2ss)
2042de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtss2si)
2052de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttps2pi)
2062de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttss2si)
2072de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,divps)
2082de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,divss)
2092de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,maxps)
2102de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,maxss)
2112de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,minps)
2122de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,minss)
2132de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movaps)
2142de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movhlps)
2152de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movhps)
2162de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movlhps)
2172de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movlps)
2182de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movmskps)
2192de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntps)
2202de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntq)
2212de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 4,movss)
2222de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movups)
2232de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,mulps)
2242de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,mulss)
2252de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,orps)
2262de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2?
2272de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2?
2282de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pextrw)
2292de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pinsrw)
2302de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2?
2312de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2?
2322de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2?
2332de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pminub) -- dup with sse2?
2342de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmovmskb)
2352de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2?
2362de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psadbw) // -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented!
2372de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pshufw)
2382de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxPS, PS,rcpps)
2392de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxSS, SS,rcpss)
2402de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxPS, PS,rsqrtps)
2412de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN(&ApproxSS, SS,rsqrtss)
2422de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, PS,shufps)
2432de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,sqrtps)
2442de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,sqrtss)
2452de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,subps)
2462de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,subss)
2472de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,ucomiss)
2482de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,unpckhps)
2492de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,unpcklps)
2502de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PS,xorps)
251a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
252a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
253a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj/* ------------------------ SSE2 ------------------------ */
2542de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,addpd)
2552de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,addsd)
2562de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,andnpd)
2572de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,andpd)
2582de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpeqpd)
2592de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpeqsd)
2602de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmplepd)
2612de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmplesd)
2622de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpltpd)
2632de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpltsd)
2642de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpneqpd)
2652de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpneqsd)
2662de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpnlepd)
2672de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpnlesd)
2682de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpnltpd)
2692de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpnltsd)
2702de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpordpd)
2712de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpordsd)
2722de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,cmpunordpd)
2732de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cmpunordsd)
2742de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,comisd)
2752de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,cvtdq2pd)
2762de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtdq2ps)
2772de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtpd2dq)
2782de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpd2pi)
2792de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtpd2ps)   /* reads 16 */
2802de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtpi2pd)
2812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvtps2dq)  /* reads 16 */
2822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,cvtps2pd)   /* reads 8 */
2832de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsd2si)
2842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,cvtsd2ss)   /* reads SD */
2852de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvtsi2sd)
2862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SS,cvtss2sd)   /* reads SS */
2872de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvttpd2dq)
2882de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttpd2pi)
2892de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,cvttps2dq)
2902de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,cvttsd2si)
2912de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,divpd)
2922de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,divsd)
2932de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,maxpd)
2942de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,maxsd)
2952de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,minpd)
2962de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,minsd)
2972de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,movapd)
2982de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 8,movd)
2992de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movdq2q)
3002de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movdqa)
3012de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movdqu)
3022de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,movhpd)
3032de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,movlpd)
3042de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movmskpd)
3052de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntdq)
3062de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movnti)
3072de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movntpd)
3082de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,movq)
3092de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,movq2dq)
3102de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 8,movsd)
3112de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,movupd)
3122de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,mulpd)
3132de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,mulsd)
3142de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,orpd)
3152de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packssdw)
3162de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packsswb)
3172de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,packuswb)
3182de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddb)
3192de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddd)
3202de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddq)
3212de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddsb)
3222de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddsw)
3232de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddusb)
3242de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddusw)
3252de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,paddw)
3262de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pand)
3272de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pandn)
3282de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pavgb)
3292de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pavgw)
3302de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqb)
3312de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqd)
3322de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpeqw)
3332de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtb)
3342de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtd)
3352de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pcmpgtw)
3362de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pextrw)
3372de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pinsrw)
3382de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmaxsw)
3392de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmaxub)
3402de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pminsw)
3412de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pminub)
3422de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 0,pmovmskb)
3432de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmulhuw)
3442de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmulhw)
3452de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmullw)
3462de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pmuludq)
3472de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,por)
3482de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshufd)
3492de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshufhw)
3502de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pshuflw)
3512de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pslld)
3522de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,pslldq)
3532de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psllq)
3542de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psllw)
3552de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrad)
3562de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psraw)
3572de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrld)
3582de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, 16,psrldq)
3592de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrlq)
3602de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psrlw)
3612de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubb)
3622de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubd)
3632de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubq)
3642de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubsb)
3652de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubsw)
3662de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubusb)
3672de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubusw)
3682de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,psubw)
3692de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhbw)
3702de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhdq)
3712de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhqdq)
3722de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckhwd)
3732de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklbw)
3742de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpckldq)
3752de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklqdq)
3762de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,punpcklwd)
3772de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, 16,pxor)
3782de044165d2bff58aca58fec3c3c9e34d949730esewardj//TEST_INSN( &AllMask, PD,shufpd)
3792de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,sqrtpd)
3802de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,sqrtsd)
3812de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,subpd)
3822de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,subsd)
3832de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, SD,ucomisd)
3842de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,unpckhpd)
3852de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,unpcklpd)
3862de044165d2bff58aca58fec3c3c9e34d949730esewardjTEST_INSN( &AllMask, PD,xorpd)
387a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
388a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
389a5b1b256fd974717dd8845eae2384eac17b68ea3sewardjint main ( int argc, char** argv )
390a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj{
391a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   Int sse1 = 0, sse2 = 0;
392a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
393a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   if (argc == 2 && 0==strcmp(argv[1], "sse1")) {
394a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      sse1 = 1;
395a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
396a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   else
397a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   if (argc == 2 && 0==strcmp(argv[1], "sse2")) {
398a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      sse2 = 1;
399a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
400a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   else
401a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   if (argc == 2 && 0==strcmp(argv[1], "all")) {
402a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      sse1 = sse2 = 1;
403a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
404a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   else {
405a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      fprintf(stderr, "usage: sse_memory [sse1|sse2|all]\n");
406a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      return 0;
407a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
408a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
409a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   /* ------------------------ SSE1 ------------------------ */
410a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   if (sse1) {
411a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_addps();
412a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_addss();
413a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_andnps();
414a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_andps();
415a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpeqps();
416a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpeqss();
417a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpleps();
418a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpless();
419a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpltps();
420a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpltss();
421a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpneqps();
422a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpneqss();
423a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnleps();
424a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnless();
425a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnltps();
426a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnltss();
427a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpordps();
428a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpordss();
429a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpunordps();
430a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpunordss();
431a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_comiss();
4322de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtpi2ps)
4332de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtps2pi)
4342de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtsi2ss)
4352de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtss2si)
4362de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvttps2pi)
4372de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvttss2si)
438a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_divps();
439a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_divss();
440a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_maxps();
441a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_maxss();
442a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_minps();
443a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_minss();
444a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movaps();
4452de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movhlps)
4462de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movhps)
4472de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movlhps)
4482de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movlps)
4492de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movmskps)
4502de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movntps)
4512de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movntq)
452a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movss();
453a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movups();
454a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_mulps();
455a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_mulss();
456a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_orps();
4572de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pavgb) -- dup with sse2?
4582de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pavgw) -- dup with sse2?
4592de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pextrw)
4602de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pinsrw)
4612de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pmaxsw) -- dup with sse2?
4622de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pmaxub) -- dup with sse2?
4632de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pminsw) -- dup with sse2?
4642de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pminub) -- dup with sse2?
4652de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pmovmskb)
4662de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pmulhuw) -- dup with sse2?
467a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      //do_psadbw();  -- XXXXXXXXXXXXXXXX sse2 (xmm variant) not implemented!
4682de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pshufw)
469a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_rcpps();
470a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_rcpss();
471a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_rsqrtps();
472a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_rsqrtss();
4732de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, PS,shufps)
474a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_sqrtps();
475a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_sqrtss();
476a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_subps();
477a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_subss();
478a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_ucomiss();
479a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_unpckhps();
480a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_unpcklps();
481a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_xorps();
482a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
483a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
484a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   /* ------------------------ SSE2 ------------------------ */
485a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   if (sse2) {
486a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_addpd();
487a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_addsd();
488a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_andnpd();
489a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_andpd();
490a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpeqpd();
491a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpeqsd();
492a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmplepd();
493a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmplesd();
494a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpltpd();
495a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpltsd();
496a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpneqpd();
497a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpneqsd();
498a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnlepd();
499a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnlesd();
500a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnltpd();
501a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpnltsd();
502a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpordpd();
503a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpordsd();
504a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpunordpd();
505a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cmpunordsd();
506a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_comisd();
507a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtdq2pd();
508a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtdq2ps();
509a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtpd2dq();
5102de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtpd2pi)
511a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtpd2ps();
5122de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtpi2pd)
513a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtps2dq();
514a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtps2pd();
5152de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtsd2si)
516a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtsd2ss();
5172de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvtsi2sd)
518a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvtss2sd();
519a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvttpd2dq();
5202de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvttpd2pi)
521a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_cvttps2dq();
5222de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,cvttsd2si)
523a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_divpd();
524a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_divsd();
525a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_maxpd();
526a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_maxsd();
527a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_minpd();
528a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_minsd();
529a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movapd();
5302de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 8,movd)
5312de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movdq2q)
532a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movdqa();
533a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movdqu();
5342de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,movhpd)
5352de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,movlpd)
5362de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movmskpd)
5372de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movntdq)
5382de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movnti)
5392de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movntpd)
540a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movq();
5412de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,movq2dq)
542a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movsd();
543a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_movupd();
544a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_mulpd();
545a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_mulsd();
546a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_orpd();
547a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_packssdw();
548a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_packsswb();
549a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_packuswb();
550a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddb();
551a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddd();
552a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddq();
553a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddsb();
554a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddsw();
555a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddusb();
556a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddusw();
557a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_paddw();
558a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pand();
559a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pandn();
560a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pavgb();
561a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pavgw();
562a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpeqb();
563a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpeqd();
564a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpeqw();
565a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpgtb();
566a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpgtd();
567a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pcmpgtw();
5682de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pextrw)
5692de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pinsrw)
570a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmaxsw();
571a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmaxub();
572a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pminsw();
573a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pminub();
5742de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 0,pmovmskb)
575a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmulhuw();
576a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmulhw();
577a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmullw();
578a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pmuludq();
579a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_por();
5802de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pshufd)
5812de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pshufhw)
5822de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pshuflw)
583a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pslld();
5842de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,pslldq)
585a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psllq();
586a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psllw();
587a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psrad();
588a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psraw();
589a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psrld();
5902de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, 16,psrldq)
591a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psrlq();
592a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psrlw();
593a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubb();
594a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubd();
595a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubq();
596a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubsb();
597a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubsw();
598a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubusb();
599a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubusw();
600a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_psubw();
601a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpckhbw();
602a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpckhdq();
603a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpckhqdq();
604a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpckhwd();
605a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpcklbw();
606a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpckldq();
607a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpcklqdq();
608a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_punpcklwd();
609a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_pxor();
6102de044165d2bff58aca58fec3c3c9e34d949730esewardj      //TEST_INSN( &AllMask, PD,shufpd)
611a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_sqrtpd();
612a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_sqrtsd();
613a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_subpd();
614a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_subsd();
615a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_ucomisd();
616a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_unpckhpd();
617a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_unpcklpd();
618a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj      do_xorpd();
619a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   }
620a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
621a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj   return 0;
622a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj}
623a5b1b256fd974717dd8845eae2384eac17b68ea3sewardj
624