1e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* A program to test SSE4.1/SSE4.2 instructions.
3e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Revisions:  Nov.208     - wrote this file
4e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj               Apr.10.2010 - added PEXTR* tests
5e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj               Apr.16.2010 - added PINS*  tests
6e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj*/
7e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
8e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* HOW TO COMPILE:
9c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   gcc -m64 -g -O -Wall -o sse4-64 sse4-64.c
10e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj*/
11e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
12e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#include <stdio.h>
13e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#include <stdlib.h>
14e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#include <assert.h>
157c23ae4b19d203292a2d2509aefa192c7d91ff28rhyskidd#include "tests/malloc.h"
16e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#include <string.h>
17e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
18e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
19e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef  unsigned char           V128[16];
20e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef  unsigned int            UInt;
21e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef  signed int              Int;
22e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef  unsigned char           UChar;
23e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef  unsigned long long int  ULong;
24e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
25c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjtypedef  unsigned char           Bool;
26c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj#define False ((Bool)0)
27c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj#define True  ((Bool)1)
28c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
29c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
30e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef
31e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   struct {
32e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 arg1;
33e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 arg2;
34e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 res;
35e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
36e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   RRArgs;
37e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
38e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjtypedef
39e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   struct {
40e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 arg1;
41e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 res;
42e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
43e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   RMArgs;
44e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
45b823b8531aedef4c8abff2544ea12aa0795e914dsewardjstatic void do64HLtoV128 ( /*OUT*/V128* res, ULong wHi, ULong wLo )
46b823b8531aedef4c8abff2544ea12aa0795e914dsewardj{
47b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   // try to sidestep strict-aliasing snafus by memcpying explicitly
48b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   UChar* p = (UChar*)res;
49b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   memcpy(&p[8], (UChar*)&wHi, 8);
50b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   memcpy(&p[0], (UChar*)&wLo, 8);
51b823b8531aedef4c8abff2544ea12aa0795e914dsewardj}
52b823b8531aedef4c8abff2544ea12aa0795e914dsewardj
53e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic UChar randUChar ( void )
54e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
55e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   static UInt seed = 80021;
56e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   seed = 1103515245 * seed + 12345;
57e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   return (seed >> 17) & 0xFF;
58e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
59e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
60e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic ULong randULong ( void )
61e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
62e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
63e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong r = 0;
64e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 8; i++) {
65e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      r = (r << 8) | (ULong)(0xFF & randUChar());
66e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
67e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   return r;
68e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
69e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
70e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void randV128 ( V128* v )
71e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
72e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
73e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 16; i++)
74e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      (*v)[i] = randUChar();
75e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
76e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
77e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showV128 ( V128* v )
78e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
79e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
80e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 15; i >= 0; i--)
81e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("%02x", (Int)(*v)[i]);
82e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
83e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
84e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showMaskedV128 ( V128* v, V128* mask )
85e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
86e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
87e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 15; i >= 0; i--)
88e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("%02x", (Int)( ((*v)[i]) & ((*mask)[i]) ));
89e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
90e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
91e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showIGVV( char* rOrM, char* op, Int imm,
92e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                      ULong src64, V128* dst, V128* res )
93e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
94e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%s %10s $%d ", rOrM, op, imm);
95e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%016llx", src64);
96e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
97e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(dst);
98e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
99e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(res);
100e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("\n");
101e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
102e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
103e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showIAG ( char* rOrM, char* op, Int imm,
104e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                      V128* argL, ULong argR, ULong res )
105e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
106e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%s %10s $%d ", rOrM, op, imm);
107e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(argL);
108e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
109e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%016llx", argR);
110e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
111e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%016llx", res);
112e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("\n");
113e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
114e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
115e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showIAA ( char* rOrM, char* op, Int imm, RRArgs* rra, V128* rmask )
116e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
117e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%s %10s $%d ", rOrM, op, imm);
118e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(&rra->arg1);
119e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
120e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(&rra->arg2);
121e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
122e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showMaskedV128(&rra->res, rmask);
123e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("\n");
124e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
125e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
126e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic void showAA ( char* rOrM, char* op, RRArgs* rra, V128* rmask )
127e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
128e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("%s %10s ", rOrM, op);
129e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(&rra->arg1);
130e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
131e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showV128(&rra->arg2);
132e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf(" ");
133e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   showMaskedV128(&rra->res, rmask);
134e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   printf("\n");
135e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
136e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
137e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* Note: these are little endian.  Hence first byte is the least
138e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   significant byte of lane zero. */
139e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
140e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* Mask for insns where all result bits are non-approximated. */
141e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic V128 AllMask  = { 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
142e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                         0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
143e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
144e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* Mark for insns which produce approximated vector short results. */
1454fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj__attribute__((unused))
146e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic V128 ApproxPS = { 0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF,
147e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                         0x00,0x00,0x80,0xFF, 0x00,0x00,0x80,0xFF };
148e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
149e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj/* Mark for insns which produce approximated scalar short results. */
1504fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj__attribute__((unused))
151e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic V128 ApproxSS = { 0x00,0x00,0x80,0xFF, 0xFF,0xFF,0xFF,0xFF,
152e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                         0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF };
153e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
154e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic V128 fives    = { 0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,
155e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                         0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55 };
156e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
157e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjstatic V128 zeroes   = { 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
158e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                         0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 };
159e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
160c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjdouble mkPosInf ( void ) { return 1.0 / 0.0; }
161c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjdouble mkNegInf ( void ) { return -mkPosInf(); }
162c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjdouble mkPosNan ( void ) { return 0.0 / 0.0; }
163c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjdouble mkNegNan ( void ) { return -mkPosNan(); }
164c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
1654fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj__attribute__((noinline))
1664fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjUInt get_mxcsr ( void )
1674fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
1684fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   ULong w64;
1694fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   __asm__ __volatile__(
1704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "subq    $8, %%rsp"    "\n\t"
1714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "stmxcsr (%%rsp)"      "\n\t"
1724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "movq    (%%rsp), %0"  "\n"
1734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "addq    $8, %%rsp"
1744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      : /*OUT*/"=r"(w64) : /*IN*/ : "memory","cc"
1754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   );
1764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (0) printf("get %08x\n", (UInt)w64);
1774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   return (UInt)w64;
1784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
1794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
1804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj__attribute__((noinline))
1814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid set_mxcsr ( UInt w32 )
1824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
1834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (0) printf("set %08x\n", w32);
1844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   ULong w64 = (ULong)w32;
1854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   __asm__ __volatile__(
1864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "subq    $8, %%rsp"    "\n\t"
1874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "movq    %0, (%%rsp)"  "\n\t"
1884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "ldmxcsr (%%rsp)"      "\n\t"
1894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      "addq    $8, %%rsp"
1904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      : /*OUT*/ : /*IN*/"r"(w64) : "memory",/*"mxcsr",*/"cc"
1914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   );
1924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
1934fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
1944fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjUInt get_sse_roundingmode ( void )
1954fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
1964fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt w = get_mxcsr();
1974fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   return (w >> 13) & 3;
1984fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
1994fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
2004fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid set_sse_roundingmode ( UInt m )
2014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
2024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt w;
2034fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(0 == (m & ~3));
2044fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   w = get_mxcsr();
2054fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   w &= ~(3 << 13);
2064fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   w |= (m << 13);
2074fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   set_mxcsr(w);
2084fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
2094fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
210c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
211e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_r_r(_opname, _imm, _src, _dst)  \
212e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
213e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 _tmp;  \
214e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
215e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"  \
216e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%1), %%xmm11"   "\n\t"  \
217e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", %%xmm2, %%xmm11"  "\n\t"  \
218e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd %%xmm11, (%2)" "\n"  \
219e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ : /*in*/ "r"(&(_src)), "r"(&(_dst)), "r"(&(_tmp))  \
220e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2", "xmm11"                            \
221e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
222e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      RRArgs rra;  \
223e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg1, &(_src), sizeof(V128));  \
224e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg2, &(_dst), sizeof(V128));  \
225e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.res,  &(_tmp), sizeof(V128));  \
226e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIAA("r", (_opname), (_imm), &rra, &AllMask);  \
227e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
228e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
229e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_m_r(_opname, _imm, _src, _dst)  \
230e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
231e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 _tmp;  \
232e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128* _srcM = memalign16(sizeof(V128));  \
233e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(_srcM, &(_src), sizeof(V128));  \
234e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
235e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%1), %%xmm11"   "\n\t"  \
236e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", (%0), %%xmm11"  "\n\t"  \
237e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd %%xmm11, (%2)" "\n"  \
238e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ : /*in*/ "r"(_srcM), "r"(&(_dst)), "r"(&(_tmp))  \
239e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm11"  \
240e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
241e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      RRArgs rra;  \
242e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg1, &(_src), sizeof(V128));  \
243e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg2, &(_dst), sizeof(V128));  \
244e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.res,  &(_tmp), sizeof(V128));  \
245e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIAA("m", (_opname), (_imm), &rra, &AllMask);  \
246e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      free(_srcM);  \
247e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
248e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
249e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_mandr_r(_opname, _imm, _src, _dst)  \
250e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_r_r( _opname, _imm, _src, _dst ) \
251e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_m_r( _opname, _imm, _src, _dst )
252e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
253e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
254e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
255e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
256e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
257e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_r_r(_opname, _src, _dst)  \
258e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
259e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 _tmp;  \
260e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
261e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"  \
262e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%1), %%xmm11"   "\n\t"  \
263e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " %%xmm2, %%xmm11"  "\n\t"  \
264e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd %%xmm11, (%2)" "\n"  \
265e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ : /*in*/ "r"(&(_src)), "r"(&(_dst)), "r"(&(_tmp))  \
266e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2", "xmm11"  \
267e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
268e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      RRArgs rra;  \
269e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg1, &(_src), sizeof(V128));  \
270e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg2, &(_dst), sizeof(V128));  \
271e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.res,  &(_tmp), sizeof(V128));  \
272e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showAA("r", (_opname), &rra, &AllMask);  \
273e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
274e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
275e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_m_r(_opname, _src, _dst)  \
276e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
277e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128 _tmp;  \
278e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128* _srcM = memalign16(sizeof(V128));  \
279e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(_srcM, &(_src), sizeof(V128));  \
280e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
281e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%1), %%xmm11"   "\n\t"  \
282e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " (%0), %%xmm11"  "\n\t"  \
283e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd %%xmm11, (%2)" "\n"  \
284e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ : /*in*/ "r"(_srcM), "r"(&(_dst)), "r"(&(_tmp))  \
285e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm11"  \
286e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
287e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      RRArgs rra;  \
288e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg1, &(_src), sizeof(V128));  \
289e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.arg2, &(_dst), sizeof(V128));  \
290e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(&rra.res,  &(_tmp), sizeof(V128));  \
291e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showAA("m", (_opname), &rra, &AllMask);  \
292e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      free(_srcM);  \
293e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
294e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
295e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_mandr_r(_opname, _src, _dst)  \
296e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_r_r(_opname, _src, _dst) \
297e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_m_r(_opname, _src, _dst)
298e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
299e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
300e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
301e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
302e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_r_to_rscalar(_opname, _imm, _src, _dstsuffix)       \
303e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
304e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong _scbefore = 0x5555555555555555ULL;  \
305e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong _scafter  = 0xAAAAAAAAAAAAAAAAULL; \
306e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* This assumes that gcc won't make any of %0, %1, %2 */ \
307e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* be r11.  That should be ensured (cough, cough) */ \
308e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* by declaring r11 to be clobbered. */ \
309e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
310e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"  \
311e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq   (%1), %%r11"   "\n\t"  \
312e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", %%xmm2, %%r11" _dstsuffix  "\n\t"  \
313e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq   %%r11, (%2)" "\n"  \
314e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ \
315e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/ "r"(&(_src)), "r"(&(_scbefore)), "r"(&(_scafter))  \
316e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2", "r11"  \
317e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
318e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIAG("r", (_opname), (_imm), &(_src), (_scbefore), (_scafter));  \
319e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
320e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
321e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_r_to_mscalar(_opname, _imm, _src)   \
322e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
323e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong _scbefore = 0x5555555555555555ULL;  \
324e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong _scafter = _scbefore; \
325e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
326e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"  \
327e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", %%xmm2, (%1)"  "\n\t"  \
328e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ \
329e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/ "r"(&(_src)), "r"(&(_scafter))  \
330e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2"  \
331e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
332e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIAG("m", (_opname), (_imm), &(_src), (_scbefore), (_scafter));  \
333e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
334e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
335e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_r_to_mandrscalar(_opname, _imm, _src, _dstsuffix)   \
336e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_r_to_rscalar( _opname, _imm, _src, _dstsuffix )       \
337e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_r_to_mscalar( _opname, _imm, _src )
338e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
339e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
340e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
341e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
342e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
343e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
344e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
345e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
346e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_rscalar_to_r(_opname, _imm, _src, _srcsuffix)       \
347e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
348e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128  dstv;         \
349e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128  res;          \
350e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong src64 = (ULong)(_src); \
351e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(dstv, fives, sizeof(dstv)); \
352e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(res,  zeroes, sizeof(res)); \
353e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* This assumes that gcc won't make any of %0, %1, %2 */ \
354e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* be r11.  That should be ensured (cough, cough) */ \
355e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      /* by declaring r11 to be clobbered. */ \
356e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
357e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"   /*dstv*/   \
358e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq   (%1), %%r11"     "\n\t"   /*src64*/  \
359e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", %%r11" _srcsuffix ", %%xmm2"   "\n\t"  \
360e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd  %%xmm2, (%2)" "\n" /*res*/                          \
361e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ \
362e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/ "r"(&dstv), "r"(&src64), "r"(&res)  \
363e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2", "r11"  \
364e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
365e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIGVV("r", (_opname), (_imm), src64, &dstv, &res); \
366e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
367e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_mscalar_to_r(_opname, _imm, _src)       \
368e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {  \
369e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128  dstv;         \
370e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      V128  res;          \
371e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      ULong src64 = (ULong)(_src); \
372e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(dstv, fives, sizeof(dstv)); \
373e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      memcpy(res,  zeroes, sizeof(res)); \
374e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(  \
375e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd (%0), %%xmm2"    "\n\t"   /*dstv*/   \
376e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         _opname " $" #_imm ", (%1), %%xmm2"   "\n\t"  \
377e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movupd  %%xmm2, (%2)" "\n" /*res*/                          \
378e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/ \
379e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/ "r"(&dstv), "r"(&src64), "r"(&res)  \
380e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : "cc", "memory", "xmm2"  \
381e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );  \
382e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      showIGVV("m", (_opname), (_imm), src64, &dstv, &res); \
383e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
384e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
385e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#define DO_imm_mandrscalar_to_r(_opname, _imm, _src, _dstsuffix)   \
386e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_rscalar_to_r( _opname, _imm, _src, _dstsuffix )       \
387e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mscalar_to_r( _opname, _imm, _src )
388e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
389e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
390e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
391e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
392e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
393e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_BLENDPD ( void )
394e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
395e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
396e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
397e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
398e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
399e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
400e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendpd", 0, src, dst);
401e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendpd", 1, src, dst);
402e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendpd", 2, src, dst);
403e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendpd", 3, src, dst);
404e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
405e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
406e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
407e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_BLENDPS ( void )
408e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
409e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
410e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
411e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
412e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
413e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
414e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 0, src, dst);
415e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 1, src, dst);
416e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 2, src, dst);
417e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 3, src, dst);
418e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 4, src, dst);
419e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 5, src, dst);
420e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 6, src, dst);
421e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 7, src, dst);
422e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 8, src, dst);
423e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 9, src, dst);
424e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 10, src, dst);
425e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 11, src, dst);
426e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 12, src, dst);
427e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 13, src, dst);
428e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 14, src, dst);
429e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("blendps", 15, src, dst);
430e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
431e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
432e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
433e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_DPPD ( void )
434e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
435e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
436e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {
437e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(double*)(&src[0]) =  1.2345;
438e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(double*)(&src[8]) = -6.78910;
439e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(double*)(&dst[0]) = -11.121314;
440e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(double*)(&dst[8]) =  15.161718;
441e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 0, src, dst);
442e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 1, src, dst);
443e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 2, src, dst);
444e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 3, src, dst);
445e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 4, src, dst);
446e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 5, src, dst);
447e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 6, src, dst);
448e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 7, src, dst);
449e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 8, src, dst);
450e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 9, src, dst);
451e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 10, src, dst);
452e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 11, src, dst);
453e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 12, src, dst);
454e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 13, src, dst);
455e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 14, src, dst);
456e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 15, src, dst);
457e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 16, src, dst);
458e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 17, src, dst);
459e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 18, src, dst);
460e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 19, src, dst);
461e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 20, src, dst);
462e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 21, src, dst);
463e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 22, src, dst);
464e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 23, src, dst);
465e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 24, src, dst);
466e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 25, src, dst);
467e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 26, src, dst);
468e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 27, src, dst);
469e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 28, src, dst);
470e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 29, src, dst);
471e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 30, src, dst);
472e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 31, src, dst);
473e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 32, src, dst);
474e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 33, src, dst);
475e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 34, src, dst);
476e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 35, src, dst);
477e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 36, src, dst);
478e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 37, src, dst);
479e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 38, src, dst);
480e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 39, src, dst);
481e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 40, src, dst);
482e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 41, src, dst);
483e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 42, src, dst);
484e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 43, src, dst);
485e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 44, src, dst);
486e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 45, src, dst);
487e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 46, src, dst);
488e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 47, src, dst);
489e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 48, src, dst);
490e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 49, src, dst);
491e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 50, src, dst);
492e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 51, src, dst);
493e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 52, src, dst);
494e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 53, src, dst);
495e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 54, src, dst);
496e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 55, src, dst);
497e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 56, src, dst);
498e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 57, src, dst);
499e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 58, src, dst);
500e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 59, src, dst);
501e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 60, src, dst);
502e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 61, src, dst);
503e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 62, src, dst);
504e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 63, src, dst);
505e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 64, src, dst);
506e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 65, src, dst);
507e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 66, src, dst);
508e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 67, src, dst);
509e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 68, src, dst);
510e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 69, src, dst);
511e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 70, src, dst);
512e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 71, src, dst);
513e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 72, src, dst);
514e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 73, src, dst);
515e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 74, src, dst);
516e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 75, src, dst);
517e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 76, src, dst);
518e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 77, src, dst);
519e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 78, src, dst);
520e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 79, src, dst);
521e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 80, src, dst);
522e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 81, src, dst);
523e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 82, src, dst);
524e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 83, src, dst);
525e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 84, src, dst);
526e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 85, src, dst);
527e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 86, src, dst);
528e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 87, src, dst);
529e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 88, src, dst);
530e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 89, src, dst);
531e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 90, src, dst);
532e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 91, src, dst);
533e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 92, src, dst);
534e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 93, src, dst);
535e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 94, src, dst);
536e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 95, src, dst);
537e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 96, src, dst);
538e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 97, src, dst);
539e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 98, src, dst);
540e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 99, src, dst);
541e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 100, src, dst);
542e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 101, src, dst);
543e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 102, src, dst);
544e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 103, src, dst);
545e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 104, src, dst);
546e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 105, src, dst);
547e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 106, src, dst);
548e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 107, src, dst);
549e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 108, src, dst);
550e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 109, src, dst);
551e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 110, src, dst);
552e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 111, src, dst);
553e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 112, src, dst);
554e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 113, src, dst);
555e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 114, src, dst);
556e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 115, src, dst);
557e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 116, src, dst);
558e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 117, src, dst);
559e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 118, src, dst);
560e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 119, src, dst);
561e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 120, src, dst);
562e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 121, src, dst);
563e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 122, src, dst);
564e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 123, src, dst);
565e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 124, src, dst);
566e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 125, src, dst);
567e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 126, src, dst);
568e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 127, src, dst);
569e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 128, src, dst);
570e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 129, src, dst);
571e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 130, src, dst);
572e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 131, src, dst);
573e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 132, src, dst);
574e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 133, src, dst);
575e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 134, src, dst);
576e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 135, src, dst);
577e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 136, src, dst);
578e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 137, src, dst);
579e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 138, src, dst);
580e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 139, src, dst);
581e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 140, src, dst);
582e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 141, src, dst);
583e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 142, src, dst);
584e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 143, src, dst);
585e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 144, src, dst);
586e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 145, src, dst);
587e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 146, src, dst);
588e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 147, src, dst);
589e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 148, src, dst);
590e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 149, src, dst);
591e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 150, src, dst);
592e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 151, src, dst);
593e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 152, src, dst);
594e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 153, src, dst);
595e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 154, src, dst);
596e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 155, src, dst);
597e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 156, src, dst);
598e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 157, src, dst);
599e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 158, src, dst);
600e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 159, src, dst);
601e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 160, src, dst);
602e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 161, src, dst);
603e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 162, src, dst);
604e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 163, src, dst);
605e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 164, src, dst);
606e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 165, src, dst);
607e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 166, src, dst);
608e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 167, src, dst);
609e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 168, src, dst);
610e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 169, src, dst);
611e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 170, src, dst);
612e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 171, src, dst);
613e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 172, src, dst);
614e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 173, src, dst);
615e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 174, src, dst);
616e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 175, src, dst);
617e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 176, src, dst);
618e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 177, src, dst);
619e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 178, src, dst);
620e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 179, src, dst);
621e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 180, src, dst);
622e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 181, src, dst);
623e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 182, src, dst);
624e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 183, src, dst);
625e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 184, src, dst);
626e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 185, src, dst);
627e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 186, src, dst);
628e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 187, src, dst);
629e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 188, src, dst);
630e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 189, src, dst);
631e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 190, src, dst);
632e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 191, src, dst);
633e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 192, src, dst);
634e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 193, src, dst);
635e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 194, src, dst);
636e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 195, src, dst);
637e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 196, src, dst);
638e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 197, src, dst);
639e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 198, src, dst);
640e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 199, src, dst);
641e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 200, src, dst);
642e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 201, src, dst);
643e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 202, src, dst);
644e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 203, src, dst);
645e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 204, src, dst);
646e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 205, src, dst);
647e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 206, src, dst);
648e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 207, src, dst);
649e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 208, src, dst);
650e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 209, src, dst);
651e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 210, src, dst);
652e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 211, src, dst);
653e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 212, src, dst);
654e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 213, src, dst);
655e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 214, src, dst);
656e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 215, src, dst);
657e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 216, src, dst);
658e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 217, src, dst);
659e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 218, src, dst);
660e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 219, src, dst);
661e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 220, src, dst);
662e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 221, src, dst);
663e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 222, src, dst);
664e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 223, src, dst);
665e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 224, src, dst);
666e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 225, src, dst);
667e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 226, src, dst);
668e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 227, src, dst);
669e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 228, src, dst);
670e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 229, src, dst);
671e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 230, src, dst);
672e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 231, src, dst);
673e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 232, src, dst);
674e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 233, src, dst);
675e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 234, src, dst);
676e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 235, src, dst);
677e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 236, src, dst);
678e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 237, src, dst);
679e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 238, src, dst);
680e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 239, src, dst);
681e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 240, src, dst);
682e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 241, src, dst);
683e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 242, src, dst);
684e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 243, src, dst);
685e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 244, src, dst);
686e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 245, src, dst);
687e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 246, src, dst);
688e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 247, src, dst);
689e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 248, src, dst);
690e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 249, src, dst);
691e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 250, src, dst);
692e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 251, src, dst);
693e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 252, src, dst);
694e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 253, src, dst);
695e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 254, src, dst);
696e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dppd", 255, src, dst);
697e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
698e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
699e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
700e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_DPPS ( void )
701e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
702e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
703e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {
704e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[0])  =   1.2;
705e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[4])  =  -3.4;
706e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[8])  =  -6.7;
707e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[12]) =   8.9;
708e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[0])  = -10.11;
709e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[4])  =  12.13;
710e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[8])  =  14.15;
711e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[12]) = -16.17;
712e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 0, src, dst);
713e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 1, src, dst);
714e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 2, src, dst);
715e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 3, src, dst);
716e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 4, src, dst);
717e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 5, src, dst);
718e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 6, src, dst);
719e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 7, src, dst);
720e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 8, src, dst);
721e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 9, src, dst);
722e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 10, src, dst);
723e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 11, src, dst);
724e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 12, src, dst);
725e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 13, src, dst);
726e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 14, src, dst);
727e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 15, src, dst);
728e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 16, src, dst);
729e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 17, src, dst);
730e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 18, src, dst);
731e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 19, src, dst);
732e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 20, src, dst);
733e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 21, src, dst);
734e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 22, src, dst);
735e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 23, src, dst);
736e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 24, src, dst);
737e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 25, src, dst);
738e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 26, src, dst);
739e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 27, src, dst);
740e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 28, src, dst);
741e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 29, src, dst);
742e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 30, src, dst);
743e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 31, src, dst);
744e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 32, src, dst);
745e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 33, src, dst);
746e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 34, src, dst);
747e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 35, src, dst);
748e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 36, src, dst);
749e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 37, src, dst);
750e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 38, src, dst);
751e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 39, src, dst);
752e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 40, src, dst);
753e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 41, src, dst);
754e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 42, src, dst);
755e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 43, src, dst);
756e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 44, src, dst);
757e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 45, src, dst);
758e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 46, src, dst);
759e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 47, src, dst);
760e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 48, src, dst);
761e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 49, src, dst);
762e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 50, src, dst);
763e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 51, src, dst);
764e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 52, src, dst);
765e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 53, src, dst);
766e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 54, src, dst);
767e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 55, src, dst);
768e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 56, src, dst);
769e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 57, src, dst);
770e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 58, src, dst);
771e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 59, src, dst);
772e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 60, src, dst);
773e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 61, src, dst);
774e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 62, src, dst);
775e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 63, src, dst);
776e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 64, src, dst);
777e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 65, src, dst);
778e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 66, src, dst);
779e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 67, src, dst);
780e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 68, src, dst);
781e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 69, src, dst);
782e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 70, src, dst);
783e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 71, src, dst);
784e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 72, src, dst);
785e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 73, src, dst);
786e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 74, src, dst);
787e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 75, src, dst);
788e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 76, src, dst);
789e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 77, src, dst);
790e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 78, src, dst);
791e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 79, src, dst);
792e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 80, src, dst);
793e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 81, src, dst);
794e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 82, src, dst);
795e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 83, src, dst);
796e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 84, src, dst);
797e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 85, src, dst);
798e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 86, src, dst);
799e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 87, src, dst);
800e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 88, src, dst);
801e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 89, src, dst);
802e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 90, src, dst);
803e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 91, src, dst);
804e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 92, src, dst);
805e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 93, src, dst);
806e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 94, src, dst);
807e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 95, src, dst);
808e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 96, src, dst);
809e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 97, src, dst);
810e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 98, src, dst);
811e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 99, src, dst);
812e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 100, src, dst);
813e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 101, src, dst);
814e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 102, src, dst);
815e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 103, src, dst);
816e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 104, src, dst);
817e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 105, src, dst);
818e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 106, src, dst);
819e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 107, src, dst);
820e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 108, src, dst);
821e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 109, src, dst);
822e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 110, src, dst);
823e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 111, src, dst);
824e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 112, src, dst);
825e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 113, src, dst);
826e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 114, src, dst);
827e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 115, src, dst);
828e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 116, src, dst);
829e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 117, src, dst);
830e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 118, src, dst);
831e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 119, src, dst);
832e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 120, src, dst);
833e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 121, src, dst);
834e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 122, src, dst);
835e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 123, src, dst);
836e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 124, src, dst);
837e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 125, src, dst);
838e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 126, src, dst);
839e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 127, src, dst);
840e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 128, src, dst);
841e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 129, src, dst);
842e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 130, src, dst);
843e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 131, src, dst);
844e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 132, src, dst);
845e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 133, src, dst);
846e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 134, src, dst);
847e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 135, src, dst);
848e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 136, src, dst);
849e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 137, src, dst);
850e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 138, src, dst);
851e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 139, src, dst);
852e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 140, src, dst);
853e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 141, src, dst);
854e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 142, src, dst);
855e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 143, src, dst);
856e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 144, src, dst);
857e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 145, src, dst);
858e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 146, src, dst);
859e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 147, src, dst);
860e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 148, src, dst);
861e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 149, src, dst);
862e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 150, src, dst);
863e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 151, src, dst);
864e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 152, src, dst);
865e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 153, src, dst);
866e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 154, src, dst);
867e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 155, src, dst);
868e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 156, src, dst);
869e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 157, src, dst);
870e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 158, src, dst);
871e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 159, src, dst);
872e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 160, src, dst);
873e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 161, src, dst);
874e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 162, src, dst);
875e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 163, src, dst);
876e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 164, src, dst);
877e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 165, src, dst);
878e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 166, src, dst);
879e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 167, src, dst);
880e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 168, src, dst);
881e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 169, src, dst);
882e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 170, src, dst);
883e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 171, src, dst);
884e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 172, src, dst);
885e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 173, src, dst);
886e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 174, src, dst);
887e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 175, src, dst);
888e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 176, src, dst);
889e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 177, src, dst);
890e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 178, src, dst);
891e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 179, src, dst);
892e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 180, src, dst);
893e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 181, src, dst);
894e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 182, src, dst);
895e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 183, src, dst);
896e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 184, src, dst);
897e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 185, src, dst);
898e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 186, src, dst);
899e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 187, src, dst);
900e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 188, src, dst);
901e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 189, src, dst);
902e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 190, src, dst);
903e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 191, src, dst);
904e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 192, src, dst);
905e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 193, src, dst);
906e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 194, src, dst);
907e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 195, src, dst);
908e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 196, src, dst);
909e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 197, src, dst);
910e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 198, src, dst);
911e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 199, src, dst);
912e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 200, src, dst);
913e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 201, src, dst);
914e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 202, src, dst);
915e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 203, src, dst);
916e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 204, src, dst);
917e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 205, src, dst);
918e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 206, src, dst);
919e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 207, src, dst);
920e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 208, src, dst);
921e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 209, src, dst);
922e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 210, src, dst);
923e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 211, src, dst);
924e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 212, src, dst);
925e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 213, src, dst);
926e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 214, src, dst);
927e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 215, src, dst);
928e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 216, src, dst);
929e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 217, src, dst);
930e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 218, src, dst);
931e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 219, src, dst);
932e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 220, src, dst);
933e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 221, src, dst);
934e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 222, src, dst);
935e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 223, src, dst);
936e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 224, src, dst);
937e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 225, src, dst);
938e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 226, src, dst);
939e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 227, src, dst);
940e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 228, src, dst);
941e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 229, src, dst);
942e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 230, src, dst);
943e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 231, src, dst);
944e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 232, src, dst);
945e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 233, src, dst);
946e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 234, src, dst);
947e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 235, src, dst);
948e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 236, src, dst);
949e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 237, src, dst);
950e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 238, src, dst);
951e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 239, src, dst);
952e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 240, src, dst);
953e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 241, src, dst);
954e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 242, src, dst);
955e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 243, src, dst);
956e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 244, src, dst);
957e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 245, src, dst);
958e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 246, src, dst);
959e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 247, src, dst);
960e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 248, src, dst);
961e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 249, src, dst);
962e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 250, src, dst);
963e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 251, src, dst);
964e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 252, src, dst);
965e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 253, src, dst);
966e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 254, src, dst);
967e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("dpps", 255, src, dst);
968e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
969e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
970e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
971e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_INSERTPS ( void )
972e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
973e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
974e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {
975e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[0])  =   1.2;
976e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[4])  =  -3.4;
977e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[8])  =  -6.7;
978e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&src[12]) =   8.9;
979e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[0])  = -10.11;
980e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[4])  =  12.13;
981e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[8])  =  14.15;
982e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      *(float*)(&dst[12]) = -16.17;
983e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 0, src, dst);
984e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 1, src, dst);
985e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 2, src, dst);
986e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 3, src, dst);
987e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 4, src, dst);
988e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 5, src, dst);
989e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 6, src, dst);
990e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 7, src, dst);
991e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 8, src, dst);
992e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 9, src, dst);
993e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 10, src, dst);
994e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 11, src, dst);
995e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 12, src, dst);
996e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 13, src, dst);
997e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 14, src, dst);
998e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 15, src, dst);
999e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 16, src, dst);
1000e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 17, src, dst);
1001e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 18, src, dst);
1002e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 19, src, dst);
1003e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 20, src, dst);
1004e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 21, src, dst);
1005e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 22, src, dst);
1006e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 23, src, dst);
1007e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 24, src, dst);
1008e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 25, src, dst);
1009e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 26, src, dst);
1010e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 27, src, dst);
1011e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 28, src, dst);
1012e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 29, src, dst);
1013e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 30, src, dst);
1014e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 31, src, dst);
1015e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 32, src, dst);
1016e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 33, src, dst);
1017e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 34, src, dst);
1018e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 35, src, dst);
1019e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 36, src, dst);
1020e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 37, src, dst);
1021e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 38, src, dst);
1022e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 39, src, dst);
1023e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 40, src, dst);
1024e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 41, src, dst);
1025e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 42, src, dst);
1026e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 43, src, dst);
1027e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 44, src, dst);
1028e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 45, src, dst);
1029e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 46, src, dst);
1030e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 47, src, dst);
1031e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 48, src, dst);
1032e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 49, src, dst);
1033e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 50, src, dst);
1034e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 51, src, dst);
1035e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 52, src, dst);
1036e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 53, src, dst);
1037e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 54, src, dst);
1038e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 55, src, dst);
1039e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 56, src, dst);
1040e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 57, src, dst);
1041e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 58, src, dst);
1042e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 59, src, dst);
1043e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 60, src, dst);
1044e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 61, src, dst);
1045e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 62, src, dst);
1046e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 63, src, dst);
1047e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 64, src, dst);
1048e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 65, src, dst);
1049e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 66, src, dst);
1050e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 67, src, dst);
1051e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 68, src, dst);
1052e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 69, src, dst);
1053e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 70, src, dst);
1054e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 71, src, dst);
1055e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 72, src, dst);
1056e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 73, src, dst);
1057e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 74, src, dst);
1058e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 75, src, dst);
1059e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 76, src, dst);
1060e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 77, src, dst);
1061e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 78, src, dst);
1062e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 79, src, dst);
1063e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 80, src, dst);
1064e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 81, src, dst);
1065e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 82, src, dst);
1066e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 83, src, dst);
1067e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 84, src, dst);
1068e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 85, src, dst);
1069e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 86, src, dst);
1070e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 87, src, dst);
1071e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 88, src, dst);
1072e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 89, src, dst);
1073e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 90, src, dst);
1074e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 91, src, dst);
1075e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 92, src, dst);
1076e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 93, src, dst);
1077e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 94, src, dst);
1078e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 95, src, dst);
1079e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 96, src, dst);
1080e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 97, src, dst);
1081e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 98, src, dst);
1082e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 99, src, dst);
1083e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 100, src, dst);
1084e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 101, src, dst);
1085e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 102, src, dst);
1086e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 103, src, dst);
1087e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 104, src, dst);
1088e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 105, src, dst);
1089e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 106, src, dst);
1090e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 107, src, dst);
1091e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 108, src, dst);
1092e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 109, src, dst);
1093e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 110, src, dst);
1094e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 111, src, dst);
1095e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 112, src, dst);
1096e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 113, src, dst);
1097e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 114, src, dst);
1098e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 115, src, dst);
1099e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 116, src, dst);
1100e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 117, src, dst);
1101e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 118, src, dst);
1102e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 119, src, dst);
1103e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 120, src, dst);
1104e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 121, src, dst);
1105e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 122, src, dst);
1106e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 123, src, dst);
1107e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 124, src, dst);
1108e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 125, src, dst);
1109e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 126, src, dst);
1110e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 127, src, dst);
1111e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 128, src, dst);
1112e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 129, src, dst);
1113e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 130, src, dst);
1114e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 131, src, dst);
1115e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 132, src, dst);
1116e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 133, src, dst);
1117e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 134, src, dst);
1118e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 135, src, dst);
1119e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 136, src, dst);
1120e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 137, src, dst);
1121e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 138, src, dst);
1122e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 139, src, dst);
1123e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 140, src, dst);
1124e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 141, src, dst);
1125e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 142, src, dst);
1126e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 143, src, dst);
1127e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 144, src, dst);
1128e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 145, src, dst);
1129e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 146, src, dst);
1130e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 147, src, dst);
1131e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 148, src, dst);
1132e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 149, src, dst);
1133e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 150, src, dst);
1134e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 151, src, dst);
1135e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 152, src, dst);
1136e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 153, src, dst);
1137e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 154, src, dst);
1138e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 155, src, dst);
1139e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 156, src, dst);
1140e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 157, src, dst);
1141e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 158, src, dst);
1142e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 159, src, dst);
1143e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 160, src, dst);
1144e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 161, src, dst);
1145e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 162, src, dst);
1146e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 163, src, dst);
1147e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 164, src, dst);
1148e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 165, src, dst);
1149e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 166, src, dst);
1150e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 167, src, dst);
1151e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 168, src, dst);
1152e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 169, src, dst);
1153e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 170, src, dst);
1154e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 171, src, dst);
1155e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 172, src, dst);
1156e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 173, src, dst);
1157e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 174, src, dst);
1158e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 175, src, dst);
1159e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 176, src, dst);
1160e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 177, src, dst);
1161e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 178, src, dst);
1162e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 179, src, dst);
1163e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 180, src, dst);
1164e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 181, src, dst);
1165e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 182, src, dst);
1166e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 183, src, dst);
1167e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 184, src, dst);
1168e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 185, src, dst);
1169e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 186, src, dst);
1170e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 187, src, dst);
1171e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 188, src, dst);
1172e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 189, src, dst);
1173e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 190, src, dst);
1174e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 191, src, dst);
1175e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 192, src, dst);
1176e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 193, src, dst);
1177e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 194, src, dst);
1178e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 195, src, dst);
1179e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 196, src, dst);
1180e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 197, src, dst);
1181e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 198, src, dst);
1182e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 199, src, dst);
1183e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 200, src, dst);
1184e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 201, src, dst);
1185e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 202, src, dst);
1186e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 203, src, dst);
1187e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 204, src, dst);
1188e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 205, src, dst);
1189e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 206, src, dst);
1190e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 207, src, dst);
1191e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 208, src, dst);
1192e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 209, src, dst);
1193e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 210, src, dst);
1194e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 211, src, dst);
1195e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 212, src, dst);
1196e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 213, src, dst);
1197e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 214, src, dst);
1198e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 215, src, dst);
1199e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 216, src, dst);
1200e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 217, src, dst);
1201e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 218, src, dst);
1202e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 219, src, dst);
1203e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 220, src, dst);
1204e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 221, src, dst);
1205e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 222, src, dst);
1206e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 223, src, dst);
1207e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 224, src, dst);
1208e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 225, src, dst);
1209e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 226, src, dst);
1210e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 227, src, dst);
1211e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 228, src, dst);
1212e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 229, src, dst);
1213e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 230, src, dst);
1214e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 231, src, dst);
1215e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 232, src, dst);
1216e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 233, src, dst);
1217e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 234, src, dst);
1218e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 235, src, dst);
1219e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 236, src, dst);
1220e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 237, src, dst);
1221e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 238, src, dst);
1222e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 239, src, dst);
1223e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 240, src, dst);
1224e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 241, src, dst);
1225e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 242, src, dst);
1226e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 243, src, dst);
1227e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 244, src, dst);
1228e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 245, src, dst);
1229e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 246, src, dst);
1230e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 247, src, dst);
1231e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 248, src, dst);
1232e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 249, src, dst);
1233e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 250, src, dst);
1234e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 251, src, dst);
1235e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 252, src, dst);
1236e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 253, src, dst);
1237e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 254, src, dst);
1238e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("insertps", 255, src, dst);
1239e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1240e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1241e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1242e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_MPSADBW ( void )
1243e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1244e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1245e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1246b34cb7f0fdefec97f5d3618841b140e7bd681820sewardj   for (i = 0; i < 50; i++) {
1247e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1248e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1249e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 0, src, dst);
1250e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 1, src, dst);
1251e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 2, src, dst);
1252e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 3, src, dst);
1253e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 4, src, dst);
1254e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 5, src, dst);
1255e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 6, src, dst);
1256e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("mpsadbw", 7, src, dst);
1257e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1258e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1259e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1260e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PACKUSDW ( void )
1261e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1262e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1263e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1264e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1265e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      if (i < 9) {
1266e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         randV128(&src);
1267e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         randV128(&dst);
1268e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      } else {
1269e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         memset(&src, 0, sizeof(src));
1270e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         memset(&dst, 0, sizeof(src));
1271e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         src[0] = 0x11; src[1] = 0x22;
1272e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         src[4] = 0x33; src[5] = 0x44;
1273e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         src[8] = 0x55; src[9] = 0x66;
1274e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         src[12] = 0x77; src[13] = 0x88;
1275e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         dst[0] = 0xaa; dst[1] = 0xbb;
1276e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         dst[4] = 0xcc; dst[5] = 0xdd;
1277e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         dst[8] = 0xee; dst[9] = 0xff;
1278e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         dst[12] = 0xa1; dst[13] = 0xb2;
1279e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      }
1280e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("packusdw", src, dst);
1281e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1282e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1283e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1284e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PBLENDW ( void )
1285e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1286e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1287e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&src);
1288e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&dst);
1289e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   {
1290e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 0, src, dst);
1291e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 1, src, dst);
1292e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 2, src, dst);
1293e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 3, src, dst);
1294e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 4, src, dst);
1295e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 5, src, dst);
1296e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 6, src, dst);
1297e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 7, src, dst);
1298e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 8, src, dst);
1299e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 9, src, dst);
1300e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 10, src, dst);
1301e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 11, src, dst);
1302e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 12, src, dst);
1303e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 13, src, dst);
1304e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 14, src, dst);
1305e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 15, src, dst);
1306e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 16, src, dst);
1307e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 17, src, dst);
1308e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 18, src, dst);
1309e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 19, src, dst);
1310e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 20, src, dst);
1311e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 21, src, dst);
1312e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 22, src, dst);
1313e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 23, src, dst);
1314e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 24, src, dst);
1315e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 25, src, dst);
1316e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 26, src, dst);
1317e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 27, src, dst);
1318e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 28, src, dst);
1319e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 29, src, dst);
1320e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 30, src, dst);
1321e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 31, src, dst);
1322e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 32, src, dst);
1323e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 33, src, dst);
1324e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 34, src, dst);
1325e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 35, src, dst);
1326e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 36, src, dst);
1327e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 37, src, dst);
1328e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 38, src, dst);
1329e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 39, src, dst);
1330e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 40, src, dst);
1331e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 41, src, dst);
1332e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 42, src, dst);
1333e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 43, src, dst);
1334e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 44, src, dst);
1335e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 45, src, dst);
1336e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 46, src, dst);
1337e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 47, src, dst);
1338e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 48, src, dst);
1339e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 49, src, dst);
1340e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 50, src, dst);
1341e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 51, src, dst);
1342e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 52, src, dst);
1343e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 53, src, dst);
1344e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 54, src, dst);
1345e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 55, src, dst);
1346e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 56, src, dst);
1347e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 57, src, dst);
1348e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 58, src, dst);
1349e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 59, src, dst);
1350e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 60, src, dst);
1351e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 61, src, dst);
1352e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 62, src, dst);
1353e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 63, src, dst);
1354e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 64, src, dst);
1355e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 65, src, dst);
1356e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 66, src, dst);
1357e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 67, src, dst);
1358e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 68, src, dst);
1359e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 69, src, dst);
1360e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 70, src, dst);
1361e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 71, src, dst);
1362e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 72, src, dst);
1363e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 73, src, dst);
1364e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 74, src, dst);
1365e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 75, src, dst);
1366e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 76, src, dst);
1367e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 77, src, dst);
1368e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 78, src, dst);
1369e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 79, src, dst);
1370e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 80, src, dst);
1371e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 81, src, dst);
1372e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 82, src, dst);
1373e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 83, src, dst);
1374e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 84, src, dst);
1375e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 85, src, dst);
1376e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 86, src, dst);
1377e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 87, src, dst);
1378e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 88, src, dst);
1379e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 89, src, dst);
1380e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 90, src, dst);
1381e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 91, src, dst);
1382e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 92, src, dst);
1383e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 93, src, dst);
1384e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 94, src, dst);
1385e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 95, src, dst);
1386e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 96, src, dst);
1387e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 97, src, dst);
1388e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 98, src, dst);
1389e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 99, src, dst);
1390e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 100, src, dst);
1391e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 101, src, dst);
1392e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 102, src, dst);
1393e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 103, src, dst);
1394e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 104, src, dst);
1395e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 105, src, dst);
1396e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 106, src, dst);
1397e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 107, src, dst);
1398e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 108, src, dst);
1399e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 109, src, dst);
1400e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 110, src, dst);
1401e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 111, src, dst);
1402e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 112, src, dst);
1403e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 113, src, dst);
1404e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 114, src, dst);
1405e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 115, src, dst);
1406e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 116, src, dst);
1407e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 117, src, dst);
1408e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 118, src, dst);
1409e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 119, src, dst);
1410e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 120, src, dst);
1411e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 121, src, dst);
1412e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 122, src, dst);
1413e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 123, src, dst);
1414e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 124, src, dst);
1415e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 125, src, dst);
1416e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 126, src, dst);
1417e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 127, src, dst);
1418e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 128, src, dst);
1419e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 129, src, dst);
1420e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 130, src, dst);
1421e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 131, src, dst);
1422e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 132, src, dst);
1423e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 133, src, dst);
1424e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 134, src, dst);
1425e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 135, src, dst);
1426e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 136, src, dst);
1427e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 137, src, dst);
1428e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 138, src, dst);
1429e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 139, src, dst);
1430e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 140, src, dst);
1431e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 141, src, dst);
1432e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 142, src, dst);
1433e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 143, src, dst);
1434e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 144, src, dst);
1435e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 145, src, dst);
1436e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 146, src, dst);
1437e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 147, src, dst);
1438e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 148, src, dst);
1439e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 149, src, dst);
1440e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 150, src, dst);
1441e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 151, src, dst);
1442e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 152, src, dst);
1443e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 153, src, dst);
1444e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 154, src, dst);
1445e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 155, src, dst);
1446e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 156, src, dst);
1447e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 157, src, dst);
1448e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 158, src, dst);
1449e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 159, src, dst);
1450e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 160, src, dst);
1451e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 161, src, dst);
1452e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 162, src, dst);
1453e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 163, src, dst);
1454e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 164, src, dst);
1455e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 165, src, dst);
1456e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 166, src, dst);
1457e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 167, src, dst);
1458e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 168, src, dst);
1459e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 169, src, dst);
1460e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 170, src, dst);
1461e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 171, src, dst);
1462e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 172, src, dst);
1463e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 173, src, dst);
1464e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 174, src, dst);
1465e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 175, src, dst);
1466e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 176, src, dst);
1467e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 177, src, dst);
1468e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 178, src, dst);
1469e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 179, src, dst);
1470e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 180, src, dst);
1471e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 181, src, dst);
1472e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 182, src, dst);
1473e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 183, src, dst);
1474e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 184, src, dst);
1475e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 185, src, dst);
1476e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 186, src, dst);
1477e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 187, src, dst);
1478e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 188, src, dst);
1479e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 189, src, dst);
1480e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 190, src, dst);
1481e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 191, src, dst);
1482e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 192, src, dst);
1483e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 193, src, dst);
1484e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 194, src, dst);
1485e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 195, src, dst);
1486e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 196, src, dst);
1487e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 197, src, dst);
1488e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 198, src, dst);
1489e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 199, src, dst);
1490e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 200, src, dst);
1491e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 201, src, dst);
1492e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 202, src, dst);
1493e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 203, src, dst);
1494e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 204, src, dst);
1495e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 205, src, dst);
1496e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 206, src, dst);
1497e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 207, src, dst);
1498e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 208, src, dst);
1499e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 209, src, dst);
1500e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 210, src, dst);
1501e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 211, src, dst);
1502e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 212, src, dst);
1503e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 213, src, dst);
1504e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 214, src, dst);
1505e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 215, src, dst);
1506e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 216, src, dst);
1507e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 217, src, dst);
1508e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 218, src, dst);
1509e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 219, src, dst);
1510e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 220, src, dst);
1511e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 221, src, dst);
1512e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 222, src, dst);
1513e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 223, src, dst);
1514e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 224, src, dst);
1515e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 225, src, dst);
1516e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 226, src, dst);
1517e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 227, src, dst);
1518e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 228, src, dst);
1519e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 229, src, dst);
1520e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 230, src, dst);
1521e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 231, src, dst);
1522e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 232, src, dst);
1523e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 233, src, dst);
1524e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 234, src, dst);
1525e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 235, src, dst);
1526e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 236, src, dst);
1527e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 237, src, dst);
1528e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 238, src, dst);
1529e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 239, src, dst);
1530e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 240, src, dst);
1531e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 241, src, dst);
1532e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 242, src, dst);
1533e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 243, src, dst);
1534e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 244, src, dst);
1535e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 245, src, dst);
1536e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 246, src, dst);
1537e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 247, src, dst);
1538e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 248, src, dst);
1539e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 249, src, dst);
1540e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 250, src, dst);
1541e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 251, src, dst);
1542e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 252, src, dst);
1543e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 253, src, dst);
1544e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 254, src, dst);
1545e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_imm_mandr_r("pblendw", 255, src, dst);
1546e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1547e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1548e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1549e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1550e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PCMPEQQ ( void )
1551e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1552e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1553e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1554e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1555e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1556e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1557e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      switch (i - 6) {
1558e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         case 0: memset(&src[0], 0x55, 8);
1559e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                 memset(&dst[0], 0x55, 8); break;
1560e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         case 1: memset(&src[8], 0x55, 8);
1561e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj                 memset(&dst[8], 0x55, 8); break;
1562e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         default:
1563e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj            break;
1564e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      }
1565e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pcmpeqq", src, dst);
1566e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1567e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1568e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1569e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1570e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PEXTRB ( void )
1571e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1572e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src;
1573e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&src);
1574e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 0, src, "d");
1575e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 1, src, "d");
1576e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 2, src, "d");
1577e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 3, src, "d");
1578e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 4, src, "d");
1579e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 5, src, "d");
1580e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 6, src, "d");
1581e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 7, src, "d");
1582e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 8, src, "d");
1583e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 9, src, "d");
1584e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 10, src, "d");
1585e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 11, src, "d");
1586e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 12, src, "d");
1587e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 13, src, "d");
1588e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 14, src, "d");
1589e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrb", 15, src, "d");
1590e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1591e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1592e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PINSRB ( void )
1593e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1594e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong src;
1595e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1596e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 0, src, "d");
1597e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1598e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 1, src, "d");
1599e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1600e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 2, src, "d");
1601e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1602e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 3, src, "d");
1603e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1604e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 4, src, "d");
1605e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1606e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 5, src, "d");
1607e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1608e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 6, src, "d");
1609e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1610e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 7, src, "d");
1611e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1612e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 8, src, "d");
1613e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1614e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 9, src, "d");
1615e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1616e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 10, src, "d");
1617e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1618e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 11, src, "d");
1619e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1620e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 12, src, "d");
1621e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1622e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 13, src, "d");
1623e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1624e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 14, src, "d");
1625e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1626e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrb", 15, src, "d");
1627e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1628e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1629e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1630e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PEXTRW ( void )
1631e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1632e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src;
1633e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&src);
1634e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 0, src, "d");
1635e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 1, src, "d");
1636e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 2, src, "d");
1637e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 3, src, "d");
1638e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 4, src, "d");
1639e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 5, src, "d");
1640e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 6, src, "d");
1641e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrw", 7, src, "d");
1642e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1643e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1644e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PINSRW ( void )
1645e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1646e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong src;
1647e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1648e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 0, src, "d");
1649e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1650e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 1, src, "d");
1651e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1652e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 2, src, "d");
1653e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1654e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 3, src, "d");
1655e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1656e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 4, src, "d");
1657e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1658e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 5, src, "d");
1659e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1660e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 6, src, "d");
1661e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1662e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrw", 7, src, "d");
1663e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1664e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1665e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1666e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PEXTRD ( void )
1667e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1668e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src;
1669e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&src);
1670e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrd", 0, src, "d");
1671e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrd", 1, src, "d");
1672e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrd", 2, src, "d");
1673e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrd", 3, src, "d");
1674e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1675e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1676e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PINSRD ( void )
1677e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1678e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong src;
1679e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1680e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrd", 0, src, "d");
1681e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1682e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrd", 1, src, "d");
1683e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1684e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrd", 2, src, "d");
1685e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1686e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrd", 3, src, "d");
1687e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1688e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1689e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1690e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PEXTRQ ( void )
1691e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1692e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src;
1693e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   randV128(&src);
1694e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrq", 0, src, "");
1695e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_r_to_mandrscalar("pextrq", 1, src, "");
1696e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1697e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1698e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PINSRQ ( void )
1699e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1700e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong src;
1701e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1702e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrq", 0, src, "");
1703e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   src = randULong();
1704e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   DO_imm_mandrscalar_to_r("pinsrq", 1, src, "");
1705e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1706e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1707e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1708f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid test_EXTRACTPS ( void )
1709f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
1710f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   V128 src;
1711f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   randV128(&src);
1712f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   DO_imm_r_to_mandrscalar("extractps", 0, src, "d");
1713f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   DO_imm_r_to_mandrscalar("extractps", 1, src, "d");
1714f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   DO_imm_r_to_mandrscalar("extractps", 2, src, "d");
1715f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   DO_imm_r_to_mandrscalar("extractps", 3, src, "d");
1716f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
1717f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
1718f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
1719e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PHMINPOSUW ( void )
1720e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1721e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1722e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1723a63005c6d9b95e37301376702dbcbb20bfee3782sewardj   for (i = 0; i < 20; i++) {
1724e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1725e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1726e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("phminposuw", src, dst);
1727e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1728a63005c6d9b95e37301376702dbcbb20bfee3782sewardj   memset(src, 0x55, sizeof(src));
1729a63005c6d9b95e37301376702dbcbb20bfee3782sewardj   memset(dst, 0xAA, sizeof(dst));
1730a63005c6d9b95e37301376702dbcbb20bfee3782sewardj   DO_mandr_r("phminposuw", src, dst);
1731e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1732e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1733e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMAXSB ( void )
1734e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1735e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1736e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1737e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1738e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1739e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1740e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmaxsb", src, dst);
1741e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1742e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1743e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1744e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMAXSD ( void )
1745e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1746e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1747e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1748e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1749e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1750e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1751e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmaxsd", src, dst);
1752e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1753e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1754e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1755e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMAXUD ( void )
1756e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1757e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1758e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1759e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1760e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1761e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1762e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmaxud", src, dst);
1763e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1764e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1765e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1766e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMAXUW ( void )
1767e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1768e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1769e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1770e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1771e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1772e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1773e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmaxuw", src, dst);
1774e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1775e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1776e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1777e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMINSB ( void )
1778e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1779e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1780e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1781e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1782e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1783e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1784e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pminsb", src, dst);
1785e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1786e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1787e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1788e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMINSD ( void )
1789e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1790e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1791e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1792e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1793e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1794e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1795e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pminsd", src, dst);
1796e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1797e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1798e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1799e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMINUD ( void )
1800e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1801e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1802e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1803e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1804e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1805e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1806e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pminud", src, dst);
1807e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1808e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1809e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1810e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMINUW ( void )
1811e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1812e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1813e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1814e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1815e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1816e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1817e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pminuw", src, dst);
1818e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1819e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1820e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1821e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXBW ( void )
1822e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1823e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1824e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1825e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1826e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1827e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1828e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxbw", src, dst);
1829e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1830e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1831e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1832e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXBD ( void )
1833e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1834e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1835e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1836e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1837e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1838e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1839e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxbd", src, dst);
1840e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1841e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1842e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1843e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXBQ ( void )
1844e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1845e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1846e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1847e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1848e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1849e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1850e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxbq", src, dst);
1851e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1852e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1853e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1854e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXWD ( void )
1855e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1856e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1857e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1858e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1859e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1860e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1861e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxwd", src, dst);
1862e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1863e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1864e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1865e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXWQ ( void )
1866e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1867e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1868e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1869e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1870e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1871e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1872e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxwq", src, dst);
1873e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1874e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1875e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1876e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVSXDQ ( void )
1877e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1878e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1879e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1880e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1881e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1882e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1883e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovsxdq", src, dst);
1884e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1885e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1886e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1887e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXBW ( void )
1888e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1889e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1890e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1891e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1892e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1893e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1894e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxbw", src, dst);
1895e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1896e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1897e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1898e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXBD ( void )
1899e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1900e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1901e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1902e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1903e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1904e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1905e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxbd", src, dst);
1906e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1907e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1908e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1909e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXBQ ( void )
1910e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1911e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1912e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1913e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1914e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1915e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1916e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxbq", src, dst);
1917e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1918e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1919e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1920e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXWD ( void )
1921e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1922e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1923e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1924e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1925e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1926e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1927e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxwd", src, dst);
1928e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1929e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1930e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1931e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXWQ ( void )
1932e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1933e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1934e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1935e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1936e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1937e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1938e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxwq", src, dst);
1939e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1940e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1941e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1942e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMOVZXDQ ( void )
1943e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1944e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1945e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1946e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1947e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1948e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1949e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmovzxdq", src, dst);
1950e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1951e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1952e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1953e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMULDQ ( void )
1954e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1955e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1956e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1957e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1958e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1959e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1960e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmuldq", src, dst);
1961e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1962e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1963e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1964e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1965e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_PMULLD ( void )
1966e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1967e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   V128 src, dst;
1968e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1969e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1970e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&src);
1971e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      randV128(&dst);
1972e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      DO_mandr_r("pmulld", src, dst);
1973e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
1974e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
1975e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1976e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
1977e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_POPCNTQ ( void )
1978e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
1979e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong block[4];
1980e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
1981e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong oszacp_mask = 0x8D5;
1982e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
1983e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
1984e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
1985e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
1986e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
1987e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
1988e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
1989e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 0(%%rax), %%rdi"  "\n\t"
1990e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
19911005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
1992e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntq %%rdi, %%r11"  "\n\t"
19931005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
19941005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  %%rdi, %%r11"  "\n\t"
19951005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
1996e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
1997e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
1998e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
1999e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2000e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2001e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2002e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "rdi", "r11", "r12"
2003e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2004e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("r popcntq  %016llx %016llx  %016llx %016llx\n",
2005e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2006e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2007e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
2008e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
2009e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
2010e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
2011e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
2012e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
2013e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
20141005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
2015e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntq 0(%%rax), %%r11"  "\n\t"
20161005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
20171005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  0(%%rax), %%r11"  "\n\t"
20181005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
2019e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
2020e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
2021e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
2022e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2023e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2024e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2025e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "r11", "r12"
2026e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2027e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("m popcntq  %016llx %016llx  %016llx %016llx\n",
2028e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2029e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
2030e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
2031e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2032e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2033e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_POPCNTL ( void )
2034e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
2035e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong block[4];
2036e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
2037e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong oszacp_mask = 0x8D5;
2038e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
2039e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
2040e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
2041e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
2042e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
2043e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
2044e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
2045e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 0(%%rax), %%rdi"  "\n\t"
2046e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
20471005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
2048e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntl %%edi, %%r11d"  "\n\t"
20491005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
20501005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  %%edi, %%r11d"  "\n\t"
20511005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
2052e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
2053e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
2054e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
2055e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2056e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2057e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2058e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "rdi", "r11", "r12"
2059e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2060e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("r popcntl  %016llx %016llx  %016llx %016llx\n",
2061e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2062e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2063e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
2064e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
2065e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
2066e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
2067e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
2068e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
2069e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
20701005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
2071e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntl 0(%%rax), %%r11d"  "\n\t"
20721005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
20731005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  0(%%rax), %%r11d"  "\n\t"
20741005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
2075e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
2076e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
2077e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
2078e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2079e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2080e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2081e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "r11", "r12"
2082e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2083e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("m popcntl  %016llx %016llx  %016llx %016llx\n",
2084e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2085e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
2086e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
2087e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2088e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2089e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjvoid test_POPCNTW ( void )
2090e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
2091e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong block[4];
2092e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   Int i;
2093e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   ULong oszacp_mask = 0x8D5;
2094e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   for (i = 0; i < 10; i++) {
2095e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
2096e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
2097e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
2098e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
2099e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
2100e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
2101e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 0(%%rax), %%rdi"  "\n\t"
2102e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
21031005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
2104e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntw %%di,  %%r11w"  "\n\t"
21051005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
21061005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  %%di,  %%r11w"  "\n\t"
21071005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
2108e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
2109e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
2110e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
2111e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2112e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2113e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2114e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "rdi", "r11", "r12"
2115e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2116e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("r popcntw  %016llx %016llx  %016llx %016llx\n",
2117e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2118e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2119e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[0] = i == 0 ? 0 : randULong();
2120e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[1] = randULong();
2121e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[2] = randULong();
2122e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      block[3] = randULong();
2123e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      __asm__ __volatile__(
2124e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %0,       %%rax"  "\n\t"
2125e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq 8(%%rax), %%r11"  "\n\t"
21261005ef5ea5158da9b9f2fd252ba603243c5e5302bart#ifndef VGP_amd64_darwin
2127e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popcntw 0(%%rax), %%r11w"  "\n\t"
21281005ef5ea5158da9b9f2fd252ba603243c5e5302bart#else
21291005ef5ea5158da9b9f2fd252ba603243c5e5302bart         "popcnt  0(%%rax), %%r11w"  "\n\t"
21301005ef5ea5158da9b9f2fd252ba603243c5e5302bart#endif
2131e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r11, 16(%%rax)"  "\n\t"
2132e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "pushfq"                 "\n\t"
2133e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "popq %%r12"             "\n\t"
2134e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         "movq %%r12, 24(%%rax)"  "\n"
2135e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*out*/
2136e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*in*/"r"(&block[0])
2137e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj         : /*trash*/ "cc", "memory", "r11", "r12"
2138e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      );
2139e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj      printf("m popcntw  %016llx %016llx  %016llx %016llx\n",
2140e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj             block[0], block[1], block[2], block[3] & oszacp_mask);
2141e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   }
2142e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
2143e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2144e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2145b823b8531aedef4c8abff2544ea12aa0795e914dsewardjvoid test_PCMPGTQ ( void )
2146b823b8531aedef4c8abff2544ea12aa0795e914dsewardj{
2147b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   V128 spec[7];
2148b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[0], 0x0000000000000000ULL, 0xffffffffffffffffULL );
2149b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[1], 0x0000000000000001ULL, 0xfffffffffffffffeULL );
2150b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[2], 0x7fffffffffffffffULL, 0x8000000000000001ULL );
2151b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[3], 0x8000000000000000ULL, 0x8000000000000000ULL );
2152b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[4], 0x8000000000000001ULL, 0x7fffffffffffffffULL );
2153b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[5], 0xfffffffffffffffeULL, 0x0000000000000001ULL );
2154b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   do64HLtoV128( &spec[6], 0xffffffffffffffffULL, 0x0000000000000000ULL );
2155b823b8531aedef4c8abff2544ea12aa0795e914dsewardj
2156b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   V128 src, dst;
2157b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   Int i, j;
2158b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   for (i = 0; i < 10; i++) {
2159b823b8531aedef4c8abff2544ea12aa0795e914dsewardj      randV128(&src);
2160b823b8531aedef4c8abff2544ea12aa0795e914dsewardj      randV128(&dst);
2161b823b8531aedef4c8abff2544ea12aa0795e914dsewardj      DO_mandr_r("pcmpgtq", src, dst);
2162b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   }
2163b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   for (i = 0; i < 7; i++) {
2164b823b8531aedef4c8abff2544ea12aa0795e914dsewardj      for (j = 0; j < 7; j++) {
2165b823b8531aedef4c8abff2544ea12aa0795e914dsewardj         memcpy(&src, &spec[i], 16);
2166b823b8531aedef4c8abff2544ea12aa0795e914dsewardj         memcpy(&dst, &spec[j], 16);
2167b823b8531aedef4c8abff2544ea12aa0795e914dsewardj         DO_mandr_r("pcmpgtq", src, dst);
2168b823b8531aedef4c8abff2544ea12aa0795e914dsewardj      }
2169b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   }
2170b823b8531aedef4c8abff2544ea12aa0795e914dsewardj}
2171b823b8531aedef4c8abff2544ea12aa0795e914dsewardj
2172c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj/* ------------ ROUNDSD ------------ */
2173c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2174c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSD_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
2175c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2176c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2177c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2178c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2179c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $0, (%0), %%xmm11"   "\n\t"
2180c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2181c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2182c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2183c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2184c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2185c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2186c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2187c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2188c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2189c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $0, %%xmm2, %%xmm11"   "\n\t"
2190c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2191c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2192c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2193c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2194c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2195c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2196c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2197c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2198c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSD_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
2199c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2200c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2201c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2202c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2203c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $1, (%0), %%xmm11"   "\n\t"
2204c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2205c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2206c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2207c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2208c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2209c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2210c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2211c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2212c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2213c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $1, %%xmm2, %%xmm11"   "\n\t"
2214c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2215c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2216c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2217c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2218c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2219c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2220c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2221c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2222c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSD_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
2223c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2224c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2225c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2226c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2227c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $2, (%0), %%xmm11"   "\n\t"
2228c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2229c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2230c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2231c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2232c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2233c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2234c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2235c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2236c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2237c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $2, %%xmm2, %%xmm11"   "\n\t"
2238c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2239c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2240c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2241c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2242c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2243c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2244c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2245e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
2246c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSD_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
2247c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2248c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2249c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2250c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2251c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $3, (%0), %%xmm11"   "\n\t"
2252c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2253c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2254c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2255c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2256c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2257c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2258c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2259c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2260c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2261c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundsd $3, %%xmm2, %%xmm11"   "\n\t"
2262c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2263c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2264c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2265c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2266c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2267c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2268c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2269c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
22704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid do_ROUNDSD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
22714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
22724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (mem) {
22734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
22744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"       "\n\t"
22754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundsd $4, (%0), %%xmm11"   "\n\t"
22764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"       "\n"
22774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
22784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
22794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11"
22804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
22814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   } else {
22824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
22834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"         "\n\t"
22844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%0), %%xmm2"          "\n\t"
22854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundsd $4, %%xmm2, %%xmm11"   "\n\t"
22864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"         "\n"
22874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
22884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
22894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11","xmm2"
22904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
22914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
22924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
2293c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2294c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid test_ROUNDSD_w_immediate_rounding ( void )
2295c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2296c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   double vals[22];
2297c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   Int i = 0;
2298c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.0;
2299c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.0;
2300c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkPosInf();
2301c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkNegInf();
2302c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkPosNan();
2303c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkNegNan();
2304c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -1.3;
2305c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -1.1;
2306c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.9;
2307c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.7;
2308c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.50001;
2309c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.49999;
2310c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.3;
2311c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.1;
2312c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.1;
2313c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.3;
2314c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.49999;
2315c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.50001;
2316c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.7;
2317c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.9;
2318c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 1.1;
2319c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 1.3;
2320c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   assert(i == 22);
2321c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2322c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
2323c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      V128 src, dst;
2324c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2325c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2326c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2327c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2328c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_000(False/*reg*/, &src, &dst);
2329c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundsd_000  ");
2330c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2331c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2332c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2333c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2334c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2335c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2336c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2337c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2338c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2339c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_000(True/*mem*/, &src, &dst);
2340c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundsd_000  ");
2341c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2342c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2343c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2344c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2345c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2346c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2347c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2348c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2349c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2350c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2351c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_001(False/*reg*/, &src, &dst);
2352c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundsd_001  ");
2353c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2354c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2355c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2356c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2357c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2358c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2359c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2360c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2361c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2362c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_001(True/*mem*/, &src, &dst);
2363c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundsd_001  ");
2364c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2365c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2366c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2367c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2368c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2369c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2370c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2371c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2372c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2373c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2374c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_010(False/*reg*/, &src, &dst);
2375c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundsd_010  ");
2376c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2377c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2378c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2379c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2380c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2381c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2382c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2383c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2384c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2385c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_010(True/*mem*/, &src, &dst);
2386c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundsd_010  ");
2387c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2388c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2389c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2390c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2391c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2392c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2393c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2394c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2395c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2396c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2397c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_011(False/*reg*/, &src, &dst);
2398c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundsd_011  ");
2399c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2400c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2401c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2402c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2403c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2404c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2405c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2406c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2407c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 8);
2408c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSD_011(True/*mem*/, &src, &dst);
2409c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundsd_011  ");
2410c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2411c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2412c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2413c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
2414c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2415c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2416c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2417c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
24184fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid test_ROUNDSD_w_mxcsr_rounding ( void )
24194fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
24204fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt rm;
24214fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   double vals[22];
24224fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   Int i = 0;
24234fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.0;
24244fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.0;
24254fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosInf();
24264fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegInf();
24274fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosNan();
24284fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegNan();
24294fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.3;
24304fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.1;
24314fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.9;
24324fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.7;
24334fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.50001;
24344fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.49999;
24354fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.3;
24364fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.1;
24374fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.1;
24384fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.3;
24394fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.49999;
24404fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.50001;
24414fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.7;
24424fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.9;
24434fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.1;
24444fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.3;
24454fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(i == 22);
24464fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24474fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
24484fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
24494fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24504fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
24514fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      V128 src, dst;
24524fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24534fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      for (rm = 0; rm <= 3; rm++) {
24544fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         set_sse_roundingmode(rm);
24554fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24564fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
24574fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
24584fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 8);
24594fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDSD_1XX(False/*reg*/, &src, &dst);
24604fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("r (rm=%u) roundsd_1XX  ", rm);
24614fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
24624fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
24634fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
24644fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
24654fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
24664fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24674fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
24684fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
24694fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 8);
24704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDSD_1XX(True/*mem*/, &src, &dst);
24714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("m (rm=%u) roundsd_1XX  ", rm);
24724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
24734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
24744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
24754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
24764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
24774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      }
24784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
24794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
24814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 3);
24824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   set_sse_roundingmode(0);
24834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
24844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
24854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
24864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
24874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
2488c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj/* ------------ ROUNDSS ------------ */
2489c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2490c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSS_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
2491c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2492c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2493c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2494c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2495c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $0, (%0), %%xmm11"   "\n\t"
2496c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2497c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2498c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2499c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2500c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2501c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2502c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2503c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2504c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2505c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $0, %%xmm2, %%xmm11"   "\n\t"
2506c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2507c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2508c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2509c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2510c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2511c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2512c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2513c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2514c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSS_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
2515c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2516c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2517c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2518c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2519c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $1, (%0), %%xmm11"   "\n\t"
2520c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2521c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2522c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2523c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2524c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2525c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2526c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2527c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2528c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2529c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $1, %%xmm2, %%xmm11"   "\n\t"
2530c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2531c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2532c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2533c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2534c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2535c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2536c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2537c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2538c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSS_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
2539c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2540c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2541c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2542c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2543c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $2, (%0), %%xmm11"   "\n\t"
2544c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2545c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2546c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2547c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2548c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2549c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2550c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2551c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2552c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2553c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $2, %%xmm2, %%xmm11"   "\n\t"
2554c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2555c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2556c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2557c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2558c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2559c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2560c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2561c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2562c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid do_ROUNDSS_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
2563c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2564c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   if (mem) {
2565c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2566c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"       "\n\t"
2567c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $3, (%0), %%xmm11"   "\n\t"
2568c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"       "\n"
2569c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2570c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2571c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11"
2572c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2573c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   } else {
2574c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      __asm__ __volatile__(
2575c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%1), %%xmm11"         "\n\t"
2576c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  (%0), %%xmm2"          "\n\t"
2577c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "roundss $3, %%xmm2, %%xmm11"   "\n\t"
2578c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         "movupd  %%xmm11, (%1)"         "\n"
2579c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*OUT*/
2580c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*IN*/ "r"(src), "r"(dst)
2581c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj         : /*TRASH*/ "xmm11","xmm2"
2582c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      );
2583c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2584c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2585c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
25864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid do_ROUNDSS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
25874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
25884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (mem) {
25894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
25904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"       "\n\t"
25914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundss $4, (%0), %%xmm11"   "\n\t"
25924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"       "\n"
25934fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
25944fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
25954fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11"
25964fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
25974fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   } else {
25984fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
25994fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"         "\n\t"
26004fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%0), %%xmm2"          "\n\t"
26014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundss $4, %%xmm2, %%xmm11"   "\n\t"
26024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"         "\n"
26034fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
26044fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
26054fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11","xmm2"
26064fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
26074fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
26084fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
2609c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2610c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardjvoid test_ROUNDSS_w_immediate_rounding ( void )
2611c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj{
2612c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   float vals[22];
2613c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   Int i = 0;
2614c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.0;
2615c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.0;
2616c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkPosInf();
2617c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkNegInf();
2618c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkPosNan();
2619c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = mkNegNan();
2620c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -1.3;
2621c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -1.1;
2622c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.9;
2623c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.7;
2624c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.50001;
2625c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.49999;
2626c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.3;
2627c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = -0.1;
2628c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.1;
2629c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.3;
2630c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.49999;
2631c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.50001;
2632c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.7;
2633c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 0.9;
2634c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 1.1;
2635c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   vals[i++] = 1.3;
2636c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   assert(i == 22);
2637c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2638c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
2639c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      V128 src, dst;
2640c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2641c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2642c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2643c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2644c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_000(False/*reg*/, &src, &dst);
2645c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundss_000  ");
2646c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2647c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2648c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2649c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2650c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2651c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2652c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2653c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2654c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2655c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_000(True/*mem*/, &src, &dst);
2656c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundss_000  ");
2657c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2658c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2659c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2660c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2661c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2662c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2663c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2664c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2665c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2666c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2667c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_001(False/*reg*/, &src, &dst);
2668c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundss_001  ");
2669c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2670c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2671c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2672c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2673c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2674c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2675c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2676c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2677c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2678c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_001(True/*mem*/, &src, &dst);
2679c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundss_001  ");
2680c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2681c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2682c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2683c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2684c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2685c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2686c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2687c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2688c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2689c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2690c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_010(False/*reg*/, &src, &dst);
2691c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundss_010  ");
2692c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2693c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2694c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2695c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2696c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2697c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2698c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2699c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2700c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2701c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_010(True/*mem*/, &src, &dst);
2702c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundss_010  ");
2703c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2704c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2705c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2706c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2707c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2708c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2709c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2710c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2711c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2712c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2713c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_011(False/*reg*/, &src, &dst);
2714c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("r roundss_011  ");
2715c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2716c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2717c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2718c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2719c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2720c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj
2721c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&src);
2722c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      randV128(&dst);
2723c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      memcpy(&src[0], &vals[i], 4);
2724c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      do_ROUNDSS_011(True/*mem*/, &src, &dst);
2725c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("m roundss_011  ");
2726c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&src);
2727c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf(" ");
2728c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      showV128(&dst);
2729c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
2730c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj      printf("\n");
2731c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   }
2732c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj}
2733e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
27344fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid test_ROUNDSS_w_mxcsr_rounding ( void )
27354fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
27364fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt rm;
27374fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   float vals[22];
27384fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   Int i = 0;
27394fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.0;
27404fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.0;
27414fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosInf();
27424fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegInf();
27434fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosNan();
27444fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegNan();
27454fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.3;
27464fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.1;
27474fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.9;
27484fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.7;
27494fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.50001;
27504fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.49999;
27514fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.3;
27524fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.1;
27534fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.1;
27544fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.3;
27554fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.49999;
27564fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.50001;
27574fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.7;
27584fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.9;
27594fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.1;
27604fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.3;
27614fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(i == 22);
27624fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27634fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
27644fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
27654fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27664fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
27674fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      V128 src, dst;
27684fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27694fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      for (rm = 0; rm <= 3; rm++) {
27704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         set_sse_roundingmode(rm);
27714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
27734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
27744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 4);
27754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDSS_1XX(False/*reg*/, &src, &dst);
27764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("r (rm=%u) roundss_1XX  ", rm);
27774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
27784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
27794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
27804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
27814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
27824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
27844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
27854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 4);
27864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDSS_1XX(True/*mem*/, &src, &dst);
27874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("m (rm=%u) roundss_1XX  ", rm);
27884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
27894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
27904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
27914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
27924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
27934fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      }
27944fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
27954fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
27964fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
27974fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 3);
27984fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   set_sse_roundingmode(0);
27994fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
28004fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
28014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
28024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
280305b885350430ded6fe29966b5af645e16c88f18bsewardj/* ------------ ROUNDPD ------------ */
280405b885350430ded6fe29966b5af645e16c88f18bsewardj
280505b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPD_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
280605b885350430ded6fe29966b5af645e16c88f18bsewardj{
280705b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
280805b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
280905b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
281005b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $0, (%0), %%xmm11"   "\n\t"
281105b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
281205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
281305b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
281405b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
281505b885350430ded6fe29966b5af645e16c88f18bsewardj      );
281605b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
281705b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
281805b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
281905b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
282005b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $0, %%xmm2, %%xmm11"   "\n\t"
282105b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
282205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
282305b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
282405b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
282505b885350430ded6fe29966b5af645e16c88f18bsewardj      );
282605b885350430ded6fe29966b5af645e16c88f18bsewardj   }
282705b885350430ded6fe29966b5af645e16c88f18bsewardj}
282805b885350430ded6fe29966b5af645e16c88f18bsewardj
282905b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPD_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
283005b885350430ded6fe29966b5af645e16c88f18bsewardj{
283105b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
283205b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
283305b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
283405b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $1, (%0), %%xmm11"   "\n\t"
283505b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
283605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
283705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
283805b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
283905b885350430ded6fe29966b5af645e16c88f18bsewardj      );
284005b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
284105b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
284205b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
284305b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
284405b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $1, %%xmm2, %%xmm11"   "\n\t"
284505b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
284605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
284705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
284805b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
284905b885350430ded6fe29966b5af645e16c88f18bsewardj      );
285005b885350430ded6fe29966b5af645e16c88f18bsewardj   }
285105b885350430ded6fe29966b5af645e16c88f18bsewardj}
285205b885350430ded6fe29966b5af645e16c88f18bsewardj
285305b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPD_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
285405b885350430ded6fe29966b5af645e16c88f18bsewardj{
285505b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
285605b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
285705b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
285805b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $2, (%0), %%xmm11"   "\n\t"
285905b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
286005b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
286105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
286205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
286305b885350430ded6fe29966b5af645e16c88f18bsewardj      );
286405b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
286505b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
286605b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
286705b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
286805b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $2, %%xmm2, %%xmm11"   "\n\t"
286905b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
287005b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
287105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
287205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
287305b885350430ded6fe29966b5af645e16c88f18bsewardj      );
287405b885350430ded6fe29966b5af645e16c88f18bsewardj   }
287505b885350430ded6fe29966b5af645e16c88f18bsewardj}
287605b885350430ded6fe29966b5af645e16c88f18bsewardj
287705b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPD_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
287805b885350430ded6fe29966b5af645e16c88f18bsewardj{
287905b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
288005b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
288105b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
288205b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $3, (%0), %%xmm11"   "\n\t"
288305b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
288405b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
288505b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
288605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
288705b885350430ded6fe29966b5af645e16c88f18bsewardj      );
288805b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
288905b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
289005b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
289105b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
289205b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundpd $3, %%xmm2, %%xmm11"   "\n\t"
289305b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
289405b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
289505b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
289605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
289705b885350430ded6fe29966b5af645e16c88f18bsewardj      );
289805b885350430ded6fe29966b5af645e16c88f18bsewardj   }
289905b885350430ded6fe29966b5af645e16c88f18bsewardj}
290005b885350430ded6fe29966b5af645e16c88f18bsewardj
29014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid do_ROUNDPD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
29024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
29034fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (mem) {
29044fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
29054fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"       "\n\t"
29064fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundpd $4, (%0), %%xmm11"   "\n\t"
29074fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"       "\n"
29084fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
29094fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
29104fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11"
29114fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
29124fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   } else {
29134fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
29144fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"         "\n\t"
29154fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%0), %%xmm2"          "\n\t"
29164fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundpd $4, %%xmm2, %%xmm11"   "\n\t"
29174fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"         "\n"
29184fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
29194fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
29204fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11","xmm2"
29214fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
29224fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
29234fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
292405b885350430ded6fe29966b5af645e16c88f18bsewardj
292505b885350430ded6fe29966b5af645e16c88f18bsewardjvoid test_ROUNDPD_w_immediate_rounding ( void )
292605b885350430ded6fe29966b5af645e16c88f18bsewardj{
292705b885350430ded6fe29966b5af645e16c88f18bsewardj   double vals[22];
292805b885350430ded6fe29966b5af645e16c88f18bsewardj   Int i = 0;
292905b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.0;
293005b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.0;
293105b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkPosInf();
293205b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkNegInf();
293305b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkPosNan();
293405b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkNegNan();
293505b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -1.3;
293605b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -1.1;
293705b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.9;
293805b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.7;
293905b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.50001;
294005b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.49999;
294105b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.3;
294205b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.1;
294305b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.1;
294405b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.3;
294505b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.49999;
294605b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.50001;
294705b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.7;
294805b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.9;
294905b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 1.1;
295005b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 1.3;
295105b885350430ded6fe29966b5af645e16c88f18bsewardj   assert(i == 22);
295205b885350430ded6fe29966b5af645e16c88f18bsewardj
295305b885350430ded6fe29966b5af645e16c88f18bsewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
295405b885350430ded6fe29966b5af645e16c88f18bsewardj      V128 src, dst;
295505b885350430ded6fe29966b5af645e16c88f18bsewardj
295605b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
295705b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
295805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
295905b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
296005b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_000(False/*reg*/, &src, &dst);
296105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundpd_000  ");
296205b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
296305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
296405b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
296505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
296605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
296705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
296805b885350430ded6fe29966b5af645e16c88f18bsewardj
296905b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
297005b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
297105b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
297205b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
297305b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_000(True/*mem*/, &src, &dst);
297405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundpd_000  ");
297505b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
297605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
297705b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
297805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
297905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
298005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
298105b885350430ded6fe29966b5af645e16c88f18bsewardj
298205b885350430ded6fe29966b5af645e16c88f18bsewardj
298305b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
298405b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
298505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
298605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
298705b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_001(False/*reg*/, &src, &dst);
298805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundpd_001  ");
298905b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
299005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
299105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
299205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
299305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
299405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
299505b885350430ded6fe29966b5af645e16c88f18bsewardj
299605b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
299705b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
299805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
299905b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
300005b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_001(True/*mem*/, &src, &dst);
300105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundpd_001  ");
300205b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
300305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
300405b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
300505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
300605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
300705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
300805b885350430ded6fe29966b5af645e16c88f18bsewardj
300905b885350430ded6fe29966b5af645e16c88f18bsewardj
301005b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
301105b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
301205b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
301305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
301405b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_010(False/*reg*/, &src, &dst);
301505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundpd_010  ");
301605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
301705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
301805b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
301905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
302005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
302105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
302205b885350430ded6fe29966b5af645e16c88f18bsewardj
302305b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
302405b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
302505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
302605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
302705b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_010(True/*mem*/, &src, &dst);
302805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundpd_010  ");
302905b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
303005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
303105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
303205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
303305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
303405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
303505b885350430ded6fe29966b5af645e16c88f18bsewardj
303605b885350430ded6fe29966b5af645e16c88f18bsewardj
303705b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
303805b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
303905b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
304005b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
304105b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_011(False/*reg*/, &src, &dst);
304205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundpd_011  ");
304305b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
304405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
304505b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
304605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
304705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
304805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
304905b885350430ded6fe29966b5af645e16c88f18bsewardj
305005b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
305105b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
305205b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 8);
305305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 8);
305405b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPD_011(True/*mem*/, &src, &dst);
305505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundpd_011  ");
305605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
305705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
305805b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
305905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
306005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
306105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
306205b885350430ded6fe29966b5af645e16c88f18bsewardj   }
306305b885350430ded6fe29966b5af645e16c88f18bsewardj}
306405b885350430ded6fe29966b5af645e16c88f18bsewardj
30654fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid test_ROUNDPD_w_mxcsr_rounding ( void )
30664fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
30674fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt rm;
30684fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   double vals[22];
30694fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   Int i = 0;
30704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.0;
30714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.0;
30724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosInf();
30734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegInf();
30744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosNan();
30754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegNan();
30764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.3;
30774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.1;
30784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.9;
30794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.7;
30804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.50001;
30814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.49999;
30824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.3;
30834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.1;
30844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.1;
30854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.3;
30864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.49999;
30874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.50001;
30884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.7;
30894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.9;
30904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.1;
30914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.3;
30924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(i == 22);
30934fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
30944fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
30954fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
30964fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
30974fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
30984fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      V128 src, dst;
30994fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
31004fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      for (rm = 0; rm <= 3; rm++) {
31014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         set_sse_roundingmode(rm);
31024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
31034fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
31044fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
31054fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 8);
31064fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[8], &vals[(i+11)%22], 8);
31074fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDPD_1XX(False/*reg*/, &src, &dst);
31084fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("r (rm=%u) roundpd_1XX  ", rm);
31094fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
31104fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
31114fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
31124fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
31134fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
31144fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
31154fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
31164fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
31174fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
31184fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 8);
31194fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[8], &vals[(i+11)%22], 8);
31204fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDPD_1XX(True/*mem*/, &src, &dst);
31214fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("m (rm=%u) roundpd_1XX  ", rm);
31224fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
31234fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
31244fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
31254fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %10f -> %10f", vals[i], *(double*)(&dst[0]));
31264fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("   %10f -> %10f", vals[(i+11)%22], *(double*)(&dst[8]));
31274fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
31284fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      }
31294fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
31304fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
31314fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
31324fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 3);
31334fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   set_sse_roundingmode(0);
31344fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
31354fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
31364fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
31374fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
313805b885350430ded6fe29966b5af645e16c88f18bsewardj/* ------------ ROUNDPS ------------ */
313905b885350430ded6fe29966b5af645e16c88f18bsewardj
314005b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPS_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
314105b885350430ded6fe29966b5af645e16c88f18bsewardj{
314205b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
314305b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
314405b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
314505b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $0, (%0), %%xmm11"   "\n\t"
314605b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
314705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
314805b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
314905b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
315005b885350430ded6fe29966b5af645e16c88f18bsewardj      );
315105b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
315205b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
315305b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
315405b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
315505b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $0, %%xmm2, %%xmm11"   "\n\t"
315605b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
315705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
315805b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
315905b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
316005b885350430ded6fe29966b5af645e16c88f18bsewardj      );
316105b885350430ded6fe29966b5af645e16c88f18bsewardj   }
316205b885350430ded6fe29966b5af645e16c88f18bsewardj}
316305b885350430ded6fe29966b5af645e16c88f18bsewardj
316405b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPS_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
316505b885350430ded6fe29966b5af645e16c88f18bsewardj{
316605b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
316705b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
316805b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
316905b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $1, (%0), %%xmm11"   "\n\t"
317005b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
317105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
317205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
317305b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
317405b885350430ded6fe29966b5af645e16c88f18bsewardj      );
317505b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
317605b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
317705b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
317805b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
317905b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $1, %%xmm2, %%xmm11"   "\n\t"
318005b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
318105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
318205b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
318305b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
318405b885350430ded6fe29966b5af645e16c88f18bsewardj      );
318505b885350430ded6fe29966b5af645e16c88f18bsewardj   }
318605b885350430ded6fe29966b5af645e16c88f18bsewardj}
318705b885350430ded6fe29966b5af645e16c88f18bsewardj
318805b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPS_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
318905b885350430ded6fe29966b5af645e16c88f18bsewardj{
319005b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
319105b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
319205b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
319305b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $2, (%0), %%xmm11"   "\n\t"
319405b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
319505b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
319605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
319705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
319805b885350430ded6fe29966b5af645e16c88f18bsewardj      );
319905b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
320005b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
320105b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
320205b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
320305b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $2, %%xmm2, %%xmm11"   "\n\t"
320405b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
320505b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
320605b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
320705b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
320805b885350430ded6fe29966b5af645e16c88f18bsewardj      );
320905b885350430ded6fe29966b5af645e16c88f18bsewardj   }
321005b885350430ded6fe29966b5af645e16c88f18bsewardj}
321105b885350430ded6fe29966b5af645e16c88f18bsewardj
321205b885350430ded6fe29966b5af645e16c88f18bsewardjvoid do_ROUNDPS_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
321305b885350430ded6fe29966b5af645e16c88f18bsewardj{
321405b885350430ded6fe29966b5af645e16c88f18bsewardj   if (mem) {
321505b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
321605b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"       "\n\t"
321705b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $3, (%0), %%xmm11"   "\n\t"
321805b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"       "\n"
321905b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
322005b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
322105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11"
322205b885350430ded6fe29966b5af645e16c88f18bsewardj      );
322305b885350430ded6fe29966b5af645e16c88f18bsewardj   } else {
322405b885350430ded6fe29966b5af645e16c88f18bsewardj      __asm__ __volatile__(
322505b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%1), %%xmm11"         "\n\t"
322605b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  (%0), %%xmm2"          "\n\t"
322705b885350430ded6fe29966b5af645e16c88f18bsewardj         "roundps $3, %%xmm2, %%xmm11"   "\n\t"
322805b885350430ded6fe29966b5af645e16c88f18bsewardj         "movupd  %%xmm11, (%1)"         "\n"
322905b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*OUT*/
323005b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*IN*/ "r"(src), "r"(dst)
323105b885350430ded6fe29966b5af645e16c88f18bsewardj         : /*TRASH*/ "xmm11","xmm2"
323205b885350430ded6fe29966b5af645e16c88f18bsewardj      );
323305b885350430ded6fe29966b5af645e16c88f18bsewardj   }
323405b885350430ded6fe29966b5af645e16c88f18bsewardj}
323505b885350430ded6fe29966b5af645e16c88f18bsewardj
32364fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid do_ROUNDPS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
32374fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
32384fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   if (mem) {
32394fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
32404fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"       "\n\t"
32414fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundps $4, (%0), %%xmm11"   "\n\t"
32424fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"       "\n"
32434fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
32444fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
32454fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11"
32464fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
32474fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   } else {
32484fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      __asm__ __volatile__(
32494fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%1), %%xmm11"         "\n\t"
32504fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  (%0), %%xmm2"          "\n\t"
32514fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "roundps $4, %%xmm2, %%xmm11"   "\n\t"
32524fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         "movupd  %%xmm11, (%1)"         "\n"
32534fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*OUT*/
32544fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*IN*/ "r"(src), "r"(dst)
32554fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         : /*TRASH*/ "xmm11","xmm2"
32564fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      );
32574fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
32584fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
325905b885350430ded6fe29966b5af645e16c88f18bsewardj
326005b885350430ded6fe29966b5af645e16c88f18bsewardjvoid test_ROUNDPS_w_immediate_rounding ( void )
326105b885350430ded6fe29966b5af645e16c88f18bsewardj{
326205b885350430ded6fe29966b5af645e16c88f18bsewardj   float vals[22];
326305b885350430ded6fe29966b5af645e16c88f18bsewardj   Int i = 0;
326405b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.0;
326505b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.0;
326605b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkPosInf();
326705b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkNegInf();
326805b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkPosNan();
326905b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = mkNegNan();
327005b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -1.3;
327105b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -1.1;
327205b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.9;
327305b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.7;
327405b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.50001;
327505b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.49999;
327605b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.3;
327705b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = -0.1;
327805b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.1;
327905b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.3;
328005b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.49999;
328105b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.50001;
328205b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.7;
328305b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 0.9;
328405b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 1.1;
328505b885350430ded6fe29966b5af645e16c88f18bsewardj   vals[i++] = 1.3;
328605b885350430ded6fe29966b5af645e16c88f18bsewardj   assert(i == 22);
328705b885350430ded6fe29966b5af645e16c88f18bsewardj
328805b885350430ded6fe29966b5af645e16c88f18bsewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
328905b885350430ded6fe29966b5af645e16c88f18bsewardj      V128 src, dst;
329005b885350430ded6fe29966b5af645e16c88f18bsewardj
329105b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
329205b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
329305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
329405b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
329505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
329605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
329705b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_000(False/*reg*/, &src, &dst);
329805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundps_000  ");
329905b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
330005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
330105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
330205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
330305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
330405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
330505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
330605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
330705b885350430ded6fe29966b5af645e16c88f18bsewardj
330805b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
330905b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
331005b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
331105b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
331205b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
331305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
331405b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_000(True/*mem*/, &src, &dst);
331505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundps_000  ");
331605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
331705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
331805b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
331905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
332005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
332105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
332205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
332305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
332405b885350430ded6fe29966b5af645e16c88f18bsewardj
332505b885350430ded6fe29966b5af645e16c88f18bsewardj
332605b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
332705b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
332805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
332905b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
333005b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
333105b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
333205b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_001(False/*reg*/, &src, &dst);
333305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundps_001  ");
333405b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
333505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
333605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
333705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
333805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
333905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
334005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
334105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
334205b885350430ded6fe29966b5af645e16c88f18bsewardj
334305b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
334405b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
334505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
334605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
334705b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
334805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
334905b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_001(True/*mem*/, &src, &dst);
335005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundps_001  ");
335105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
335205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
335305b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
335405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
335505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
335605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
335705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
335805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
335905b885350430ded6fe29966b5af645e16c88f18bsewardj
336005b885350430ded6fe29966b5af645e16c88f18bsewardj
336105b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
336205b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
336305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
336405b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
336505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
336605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
336705b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_010(False/*reg*/, &src, &dst);
336805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundps_010  ");
336905b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
337005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
337105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
337205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
337305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
337405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
337505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
337605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
337705b885350430ded6fe29966b5af645e16c88f18bsewardj
337805b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
337905b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
338005b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
338105b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
338205b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
338305b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
338405b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_010(True/*mem*/, &src, &dst);
338505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundps_010  ");
338605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
338705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
338805b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
338905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
339005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
339105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
339205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
339305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
339405b885350430ded6fe29966b5af645e16c88f18bsewardj
339505b885350430ded6fe29966b5af645e16c88f18bsewardj
339605b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
339705b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
339805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
339905b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
340005b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
340105b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
340205b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_011(False/*reg*/, &src, &dst);
340305b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("r roundps_011  ");
340405b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
340505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
340605b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
340705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
340805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
340905b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
341005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
341105b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
341205b885350430ded6fe29966b5af645e16c88f18bsewardj
341305b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&src);
341405b885350430ded6fe29966b5af645e16c88f18bsewardj      randV128(&dst);
341505b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[0], &vals[i], 4);
341605b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[4], &vals[(i+5)%22], 4);
341705b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[8], &vals[(i+11)%22], 4);
341805b885350430ded6fe29966b5af645e16c88f18bsewardj      memcpy(&src[12], &vals[(i+17)%22], 4);
341905b885350430ded6fe29966b5af645e16c88f18bsewardj      do_ROUNDPS_011(True/*mem*/, &src, &dst);
342005b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("m roundps_011  ");
342105b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&src);
342205b885350430ded6fe29966b5af645e16c88f18bsewardj      printf(" ");
342305b885350430ded6fe29966b5af645e16c88f18bsewardj      showV128(&dst);
342405b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
342505b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
342605b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
342705b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
342805b885350430ded6fe29966b5af645e16c88f18bsewardj      printf("\n");
342905b885350430ded6fe29966b5af645e16c88f18bsewardj   }
343005b885350430ded6fe29966b5af645e16c88f18bsewardj}
343105b885350430ded6fe29966b5af645e16c88f18bsewardj
34324fbf7c76db1a37051d329a5bd29f8733832d56a2sewardjvoid test_ROUNDPS_w_mxcsr_rounding ( void )
34334fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj{
34344fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   UInt rm;
34354fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   float vals[22];
34364fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   Int i = 0;
34374fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.0;
34384fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.0;
34394fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosInf();
34404fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegInf();
34414fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkPosNan();
34424fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = mkNegNan();
34434fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.3;
34444fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -1.1;
34454fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.9;
34464fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.7;
34474fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.50001;
34484fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.49999;
34494fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.3;
34504fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = -0.1;
34514fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.1;
34524fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.3;
34534fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.49999;
34544fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.50001;
34554fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.7;
34564fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 0.9;
34574fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.1;
34584fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   vals[i++] = 1.3;
34594fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(i == 22);
34604fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
34614fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
34624fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
34634fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
34644fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) {
34654fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      V128 src, dst;
34664fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
34674fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      for (rm = 0; rm <= 3; rm++) {
34684fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         set_sse_roundingmode(rm);
34694fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
34704fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
34714fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
34724fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 4);
34734fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[4], &vals[(i+5)%22], 4);
34744fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[8], &vals[(i+11)%22], 4);
34754fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[12], &vals[(i+17)%22], 4);
34764fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDPS_1XX(False/*reg*/, &src, &dst);
34774fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("r (rm=%u) roundps_1XX  ", rm);
34784fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
34794fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
34804fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
34814fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
34824fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
34834fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
34844fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
34854fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
34864fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
34874fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&src);
34884fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         randV128(&dst);
34894fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[0], &vals[i], 4);
34904fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[4], &vals[(i+5)%22], 4);
34914fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[8], &vals[(i+11)%22], 4);
34924fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         memcpy(&src[12], &vals[(i+17)%22], 4);
34934fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         do_ROUNDPS_1XX(True/*mem*/, &src, &dst);
34944fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("m (rm=%u) roundps_1XX  ", rm);
34954fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&src);
34964fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf(" ");
34974fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         showV128(&dst);
34984fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[i], (double)*(float*)(&dst[0]));
34994fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+5)%22], (double)*(float*)(&dst[4]));
35004fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+11)%22], (double)*(float*)(&dst[8]));
35014fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("  %9f:%9f", vals[(i+17)%22], (double)*(float*)(&dst[12]));
35024fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj         printf("\n");
35034fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj      }
35044fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   }
35054fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
35064fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
35074fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 3);
35084fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   set_sse_roundingmode(0);
35094fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   rm = get_sse_roundingmode();
35104fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   assert(rm == 0); // 0 == RN == default
35114fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj}
35124fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj
351305b885350430ded6fe29966b5af645e16c88f18bsewardj/* ------------ PTEST ------------ */
351405b885350430ded6fe29966b5af645e16c88f18bsewardj
3515db3c42fa77005947079b12ea19291c7fe041ec19sewardjvoid test_PTEST ( void )
3516db3c42fa77005947079b12ea19291c7fe041ec19sewardj{
3517db3c42fa77005947079b12ea19291c7fe041ec19sewardj   const Int ntests = 8;
3518db3c42fa77005947079b12ea19291c7fe041ec19sewardj   V128 spec[ntests];
3519db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[0], 0x0000000000000000ULL, 0x0000000000000000ULL );
3520db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[1], 0x0000000000000000ULL, 0x0000000000000001ULL );
3521db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[2], 0x0000000000000001ULL, 0x0000000000000000ULL );
3522db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[3], 0x0000000000000001ULL, 0x0000000000000001ULL );
3523db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[4], 0xffffffffffffffffULL, 0xffffffffffffffffULL );
3524db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[5], 0xffffffffffffffffULL, 0xfffffffffffffffeULL );
3525db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[6], 0xfffffffffffffffeULL, 0xffffffffffffffffULL );
3526db3c42fa77005947079b12ea19291c7fe041ec19sewardj   do64HLtoV128( &spec[7], 0xfffffffffffffffeULL, 0xfffffffffffffffeULL );
3527db3c42fa77005947079b12ea19291c7fe041ec19sewardj   V128 block[2];
3528db3c42fa77005947079b12ea19291c7fe041ec19sewardj   Int i, j;
3529db3c42fa77005947079b12ea19291c7fe041ec19sewardj   ULong flags;
3530db3c42fa77005947079b12ea19291c7fe041ec19sewardj   for (i = 0; i < ntests; i++) {
3531db3c42fa77005947079b12ea19291c7fe041ec19sewardj      for (j = 0; j < ntests; j++) {
3532db3c42fa77005947079b12ea19291c7fe041ec19sewardj         memcpy(&block[0], &spec[i], 16);
3533db3c42fa77005947079b12ea19291c7fe041ec19sewardj         memcpy(&block[1], &spec[j], 16);
3534db3c42fa77005947079b12ea19291c7fe041ec19sewardj         __asm__ __volatile__(
3535db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "subq $256, %%rsp"        "\n\t"
3536db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "movupd 0(%1), %%xmm2"    "\n\t"
3537db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "ptest 16(%1), %%xmm2"    "\n\t"
3538db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "pushfq"                  "\n\t"
3539db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "popq %0"                 "\n\t"
3540db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "addq $256, %%rsp"        "\n\t"
3541db3c42fa77005947079b12ea19291c7fe041ec19sewardj            : /*out*/"=r"(flags) : /*in*/ "r"(&block[0]) :
3542db3c42fa77005947079b12ea19291c7fe041ec19sewardj            "xmm2", "memory", "cc"
3543db3c42fa77005947079b12ea19291c7fe041ec19sewardj         );
3544db3c42fa77005947079b12ea19291c7fe041ec19sewardj         printf("r   ptest ");
3545db3c42fa77005947079b12ea19291c7fe041ec19sewardj         showV128(&block[0]);
3546db3c42fa77005947079b12ea19291c7fe041ec19sewardj         printf(" ");
3547db3c42fa77005947079b12ea19291c7fe041ec19sewardj         showV128(&block[1]);
3548db3c42fa77005947079b12ea19291c7fe041ec19sewardj         printf(" -> eflags %04x\n", (UInt)flags & 0x8D5);
3549db3c42fa77005947079b12ea19291c7fe041ec19sewardj      }
3550db3c42fa77005947079b12ea19291c7fe041ec19sewardj   }
3551db3c42fa77005947079b12ea19291c7fe041ec19sewardj}
3552e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
3553f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj/* ------------ PBLENDVB ------------ */
3554f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3555f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid do_PBLENDVB ( Bool mem, V128* xmm0, V128* src, /*MOD*/V128* dst )
3556f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3557f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   if (mem) {
3558f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3559f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3560f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3561f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "pblendvb (%0), %%xmm11"        "\n\t"
3562f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3563f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3564f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3565f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm0"
3566f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3567f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   } else {
3568f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3569f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3570f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3571f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%0), %%xmm2"         "\n\t"
3572f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "pblendvb %%xmm2, %%xmm11"      "\n\t"
3573f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3574f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3575f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3576f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm2","xmm0"
3577f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3578f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3579f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3580f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3581f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid test_PBLENDVB ( void )
3582f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3583f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   V128 xmm0, src, dst, t_xmm0, t_src, t_dst;
3584f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   Int i;
3585f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   for (i = 0; i < 10; i++) {
3586f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_xmm0);
3587f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_src);
3588f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_dst);
3589f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3590f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3591f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3592f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3593f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_PBLENDVB(False/*reg*/, &xmm0, &src, &dst);
3594f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("r pblendvb  ");
3595f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3596f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3597f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3598f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3599f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3600f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3601f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3602f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3603f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3604f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3605f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3606f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3607f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_PBLENDVB(True/*mem*/, &xmm0, &src, &dst);
3608f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("m pblendvb  ");
3609f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3610f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3611f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3612f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3613f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3614f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3615f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3616f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3617f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3618f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3619f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3620f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj/* ------------ BLENDVPD ------------ */
3621f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3622f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid do_BLENDVPD ( Bool mem, V128* xmm0, V128* src, /*MOD*/V128* dst )
3623f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3624f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   if (mem) {
3625f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3626f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3627f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3628f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "blendvpd (%0), %%xmm11"        "\n\t"
3629f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3630f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3631f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3632f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm0"
3633f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3634f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   } else {
3635f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3636f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3637f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3638f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%0), %%xmm2"         "\n\t"
3639f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "blendvpd %%xmm2, %%xmm11"      "\n\t"
3640f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3641f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3642f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3643f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm2","xmm0"
3644f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3645f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3646f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3647f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3648f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid test_BLENDVPD ( void )
3649f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3650f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   V128 xmm0, src, dst, t_xmm0, t_src, t_dst;
3651f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   Int i;
3652f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   for (i = 0; i < 10; i++) {
3653f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_xmm0);
3654f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_src);
3655f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_dst);
3656f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3657f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3658f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3659f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3660f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_BLENDVPD(False/*reg*/, &xmm0, &src, &dst);
3661f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("r blendvpd  ");
3662f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3663f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3664f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3665f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3666f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3667f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3668f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3669f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3670f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3671f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3672f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3673f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3674f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_BLENDVPD(True/*mem*/, &xmm0, &src, &dst);
3675f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("m blendvpd  ");
3676f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3677f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3678f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3679f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3680f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3681f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3682f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3683f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3684f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3685f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3686f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3687f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj/* ------------ BLENDVPS ------------ */
3688f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3689f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid do_BLENDVPS ( Bool mem, V128* xmm0, V128* src, /*MOD*/V128* dst )
3690f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3691f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   if (mem) {
3692f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3693f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3694f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3695f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "blendvps (%0), %%xmm11"        "\n\t"
3696f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3697f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3698f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3699f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm0"
3700f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3701f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   } else {
3702f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      __asm__ __volatile__(
3703f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%2), %%xmm0"         "\n\t"
3704f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%1), %%xmm11"        "\n\t"
3705f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   (%0), %%xmm2"         "\n\t"
3706f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "blendvps %%xmm2, %%xmm11"      "\n\t"
3707f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         "movupd   %%xmm11, (%1)"        "\n"
3708f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*OUT*/
3709f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*IN*/ "r"(src), "r"(dst), "r"(xmm0)
3710f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj         : /*TRASH*/ "xmm11","xmm2","xmm0"
3711f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      );
3712f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3713f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3714f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3715f60af032f3a3e1c8438ceaef2b92caa403802b21sewardjvoid test_BLENDVPS ( void )
3716f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj{
3717f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   V128 xmm0, src, dst, t_xmm0, t_src, t_dst;
3718f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   Int i;
3719f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   for (i = 0; i < 10; i++) {
3720f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_xmm0);
3721f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_src);
3722f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      randV128(&t_dst);
3723f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3724f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3725f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3726f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3727f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_BLENDVPS(False/*reg*/, &xmm0, &src, &dst);
3728f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("r blendvps  ");
3729f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3730f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3731f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3732f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3733f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3734f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3735f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3736f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3737f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3738f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&xmm0, &t_xmm0, 16);
3739f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&src, &t_src, 16);
3740f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      memcpy(&dst, &t_dst, 16);
3741f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      do_BLENDVPS(True/*mem*/, &xmm0, &src, &dst);
3742f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("m blendvps  ");
3743f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_xmm0);
3744f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3745f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_src);
3746f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" ");
3747f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&t_dst);
3748f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf(" -> ");
3749f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      showV128(&dst);
3750f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj      printf("\n");
3751f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   }
3752f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj}
3753f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3754c5a5c57b567e9781d30c422428158a71545b59fasewardjvoid test_MOVNTDQA ( void )
3755c5a5c57b567e9781d30c422428158a71545b59fasewardj{
3756c5a5c57b567e9781d30c422428158a71545b59fasewardj   V128 src, dst;
3757c5a5c57b567e9781d30c422428158a71545b59fasewardj   Int i;
3758c5a5c57b567e9781d30c422428158a71545b59fasewardj   for (i = 0; i < 10; i++) {
3759c5a5c57b567e9781d30c422428158a71545b59fasewardj      randV128(&src);
3760c5a5c57b567e9781d30c422428158a71545b59fasewardj      /* make sure the load actually happens */
3761c5a5c57b567e9781d30c422428158a71545b59fasewardj      randV128(&dst);
3762c5a5c57b567e9781d30c422428158a71545b59fasewardj      DO_m_r("movntdqa", src, dst);
3763c5a5c57b567e9781d30c422428158a71545b59fasewardj   }
3764c5a5c57b567e9781d30c422428158a71545b59fasewardj}
3765c5a5c57b567e9781d30c422428158a71545b59fasewardj
3766f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj/* ------------ main ------------ */
3767f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj
3768e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardjint main ( int argc, char** argv )
3769e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj{
3770e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#if 1
3771b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   // ------ SSE 4.1 ------
3772e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_BLENDPD();        // done Apr.01.2010
3773e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_BLENDPS();        // done Apr.02.2010
3774f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_PBLENDW();
3775f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_PBLENDVB();
3776f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_BLENDVPD();
3777f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_BLENDVPS();
3778e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_DPPD();           // done Apr.08.2010
3779e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_DPPS();           // done Apr.09.2010
3780f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_EXTRACTPS();
3781e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_INSERTPS();       // done Apr.01.2010
378212f508afbe006f56c8123ae7498854fdd2c2f366sewardj   test_PCMPEQQ();
3783e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PEXTRB();         // done Apr.15.2010
3784e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PEXTRD();         // done Apr.14.2010
3785e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PEXTRQ();         // done Apr.14.2010
3786e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PEXTRW();         // done Apr.14.2010
3787e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PINSRQ();         // done Apr.16.2010
3788e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PINSRD();         // todo
3789f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_PINSRW(); /* Umm, this is SSE2, not SSE4.  Right? */
3790db3c42fa77005947079b12ea19291c7fe041ec19sewardj   test_PINSRB();         // todo
3791b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PMAXSB();
3792e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMAXSD();         // done Apr.09.2010
3793e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMAXUD();         // done Apr.16.2010
3794b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PMAXUW();
3795b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PMINSB();
3796e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMINSD();         // done Apr.09.2010
3797e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMINUD();
3798b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PMINUW();
3799e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXBW();       // done Apr.02.2010
3800e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXBD();       // done Mar.30.2010
3801e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXBQ();       // done Mar.30.2010
3802e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXWD();       // done Mar.31.2010
3803e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXWQ();       // done Mar.31.2010
3804e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVSXDQ();       // done Mar.31.2010
3805e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXBW();       // done Mar.28.2010
3806e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXBD();       // done Mar.29.2010
3807e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXBQ();       // done Mar.29.2010
3808e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXWD();       // done Mar.28.2010
3809e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXWQ();       // done Mar.29.2010
3810e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_PMOVZXDQ();       // done Mar.29.2010
3811e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_POPCNTW();
3812e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_POPCNTL();
3813e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   test_POPCNTQ();
381412f508afbe006f56c8123ae7498854fdd2c2f366sewardj   test_PMULDQ();
3815b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PMULLD();
3816db3c42fa77005947079b12ea19291c7fe041ec19sewardj   test_PTEST();
3817c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   test_ROUNDSD_w_immediate_rounding();
3818c7d0a8fd9316f0f54af4c4c762d905453809d09fsewardj   test_ROUNDSS_w_immediate_rounding();
381905b885350430ded6fe29966b5af645e16c88f18bsewardj   test_ROUNDPD_w_immediate_rounding();
382005b885350430ded6fe29966b5af645e16c88f18bsewardj   test_ROUNDPS_w_immediate_rounding();
38214fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   test_ROUNDSD_w_mxcsr_rounding();
38224fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   test_ROUNDSS_w_mxcsr_rounding();
38234fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   test_ROUNDPD_w_mxcsr_rounding();
38244fbf7c76db1a37051d329a5bd29f8733832d56a2sewardj   test_ROUNDPS_w_mxcsr_rounding();
3825b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   // ------ SSE 4.2 ------
3826b823b8531aedef4c8abff2544ea12aa0795e914dsewardj   test_PCMPGTQ();
3827f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   // CRC32B,Q
38282a258897a1f1af8f5c7f0035a546971bce5c00b0sewardj   test_PACKUSDW();
3829a63005c6d9b95e37301376702dbcbb20bfee3782sewardj   test_PHMINPOSUW();
3830b34cb7f0fdefec97f5d3618841b140e7bd681820sewardj   test_MPSADBW();
3831c5a5c57b567e9781d30c422428158a71545b59fasewardj   test_MOVNTDQA(); /* not sure whether this is 4.1 or 4.2 */
3832e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#else
3833f60af032f3a3e1c8438ceaef2b92caa403802b21sewardj   test_MPSADBW();
3834e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj#endif
3835e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
3836e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj   return 0;
3837e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj}
3838e7acec738f3821704c69a3a1bbf449d4ef0fc680sewardj
3839