1
2#include <stdio.h>
3#include <stdlib.h>
4#include <assert.h>
5#include "tests/malloc.h"
6
7typedef  unsigned char           UChar;
8typedef  unsigned int            UInt;
9typedef  unsigned long int       UWord;
10typedef  unsigned long long int  ULong;
11
12#if defined(VGO_darwin)
13UChar randArray[1027] __attribute__((used));
14#else
15UChar _randArray[1027] __attribute__((used));
16#endif
17
18#define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr)))
19
20typedef  union { UChar u8[32];  UInt u32[8];  }  YMM;
21
22typedef  struct {  YMM a1; YMM a2; YMM a3; YMM a4; ULong u64; }  Block;
23
24void showYMM ( YMM* vec )
25{
26   int i;
27   assert(IS_32_ALIGNED(vec));
28   for (i = 31; i >= 0; i--) {
29      printf("%02x", (UInt)vec->u8[i]);
30      if (i > 0 && 0 == ((i+0) & 7)) printf(".");
31   }
32}
33
34void showBlock ( char* msg, Block* block )
35{
36   printf("  %s\n", msg);
37   printf("    "); showYMM(&block->a1); printf("\n");
38   printf("    "); showYMM(&block->a2); printf("\n");
39   printf("    "); showYMM(&block->a3); printf("\n");
40   printf("    "); showYMM(&block->a4); printf("\n");
41   printf("    %016llx\n", block->u64);
42}
43
44UChar randUChar ( void )
45{
46   static UInt seed = 80021;
47   seed = 1103515245 * seed + 12345;
48   return (seed >> 17) & 0xFF;
49}
50
51void randBlock ( Block* b )
52{
53   int i;
54   UChar* p = (UChar*)b;
55   for (i = 0; i < sizeof(Block); i++)
56      p[i] = randUChar();
57}
58
59
60/* Generate a function test_NAME, that tests the given insn, in both
61   its mem and reg forms.  The reg form of the insn may mention, as
62   operands only %ymm6, %ymm7, %ymm8, %ymm9 and %r14.  The mem form of
63   the insn may mention as operands only (%rax), %ymm7, %ymm8, %ymm9
64   and %r14.  It's OK for the insn to clobber ymm0, as this is needed
65   for testing PCMPxSTRx, and ymm6, as this is needed for testing
66   MOVMASK variants. */
67
68#define GEN_test_RandM(_name, _reg_form, _mem_form)   \
69    \
70    __attribute__ ((noinline)) static void test_##_name ( void )   \
71    { \
72       Block* b = memalign32(sizeof(Block)); \
73       randBlock(b); \
74       printf("%s(reg)\n", #_name); \
75       showBlock("before", b); \
76       __asm__ __volatile__( \
77          "vmovdqa   0(%0),%%ymm7"  "\n\t" \
78          "vmovdqa  32(%0),%%ymm8"  "\n\t" \
79          "vmovdqa  64(%0),%%ymm6"  "\n\t" \
80          "vmovdqa  96(%0),%%ymm9"  "\n\t" \
81          "movq    128(%0),%%r14"   "\n\t" \
82          _reg_form   "\n\t" \
83          "vmovdqa %%ymm7,  0(%0)"  "\n\t" \
84          "vmovdqa %%ymm8, 32(%0)"  "\n\t" \
85          "vmovdqa %%ymm6, 64(%0)"  "\n\t" \
86          "vmovdqa %%ymm9, 96(%0)"  "\n\t" \
87          "movq    %%r14, 128(%0)"  "\n\t" \
88          : /*OUT*/  \
89          : /*IN*/"r"(b) \
90          : /*TRASH*/"xmm0","xmm7","xmm8","xmm6","xmm9","r14","memory","cc" \
91       ); \
92       showBlock("after", b); \
93       randBlock(b); \
94       printf("%s(mem)\n", #_name); \
95       showBlock("before", b); \
96       __asm__ __volatile__( \
97          "leaq      0(%0),%%rax"  "\n\t" \
98          "vmovdqa  32(%0),%%ymm8"  "\n\t" \
99          "vmovdqa  64(%0),%%ymm7"  "\n\t" \
100          "vmovdqa  96(%0),%%ymm9"  "\n\t" \
101          "movq    128(%0),%%r14"   "\n\t" \
102          _mem_form   "\n\t" \
103          "vmovdqa %%ymm8, 32(%0)"  "\n\t" \
104          "vmovdqa %%ymm7, 64(%0)"  "\n\t" \
105          "vmovdqa %%ymm9, 96(%0)"  "\n\t" \
106          "movq    %%r14, 128(%0)"  "\n\t" \
107          : /*OUT*/  \
108          : /*IN*/"r"(b) \
109          : /*TRASH*/"xmm6", \
110                     "xmm0","xmm8","xmm7","xmm9","r14","rax","memory","cc" \
111       ); \
112       showBlock("after", b); \
113       printf("\n"); \
114       free(b); \
115    }
116
117#define GEN_test_Ronly(_name, _reg_form) \
118   GEN_test_RandM(_name, _reg_form, "")
119#define GEN_test_Monly(_name, _mem_form) \
120   GEN_test_RandM(_name, "", _mem_form)
121
122/* Vector integers promoved from 128-bit in AVX to 256-bit in AVX2.  */
123
124GEN_test_RandM(VPOR_256,
125               "vpor %%ymm6,  %%ymm8, %%ymm7",
126               "vpor (%%rax), %%ymm8, %%ymm7")
127
128GEN_test_RandM(VPXOR_256,
129               "vpxor %%ymm6,  %%ymm8, %%ymm7",
130               "vpxor (%%rax), %%ymm8, %%ymm7")
131
132GEN_test_RandM(VPSUBB_256,
133               "vpsubb %%ymm6,  %%ymm8, %%ymm7",
134               "vpsubb (%%rax), %%ymm8, %%ymm7")
135
136GEN_test_RandM(VPSUBD_256,
137               "vpsubd %%ymm6,  %%ymm8, %%ymm7",
138               "vpsubd (%%rax), %%ymm8, %%ymm7")
139
140GEN_test_RandM(VPADDD_256,
141               "vpaddd %%ymm6,  %%ymm8, %%ymm7",
142               "vpaddd (%%rax), %%ymm8, %%ymm7")
143
144GEN_test_RandM(VPMOVZXWD_256,
145               "vpmovzxwd %%xmm6,  %%ymm8",
146               "vpmovzxwd (%%rax), %%ymm8")
147
148GEN_test_RandM(VPMOVZXBW_256,
149               "vpmovzxbw %%xmm6,  %%ymm8",
150               "vpmovzxbw (%%rax), %%ymm8")
151
152GEN_test_RandM(VPBLENDVB_256,
153               "vpblendvb %%ymm9, %%ymm6,  %%ymm8, %%ymm7",
154               "vpblendvb %%ymm9, (%%rax), %%ymm8, %%ymm7")
155
156GEN_test_RandM(VPMINSD_256,
157               "vpminsd %%ymm6,  %%ymm8, %%ymm7",
158               "vpminsd (%%rax), %%ymm8, %%ymm7")
159
160GEN_test_RandM(VPMAXSD_256,
161               "vpmaxsd %%ymm6,  %%ymm8, %%ymm7",
162               "vpmaxsd (%%rax), %%ymm8, %%ymm7")
163
164GEN_test_RandM(VPSHUFB_256,
165               "vpshufb %%ymm6,  %%ymm8, %%ymm7",
166               "vpshufb (%%rax), %%ymm8, %%ymm7")
167
168GEN_test_RandM(VPUNPCKLBW_256,
169               "vpunpcklbw %%ymm6,  %%ymm8, %%ymm7",
170               "vpunpcklbw (%%rax), %%ymm8, %%ymm7")
171
172GEN_test_RandM(VPUNPCKHBW_256,
173               "vpunpckhbw %%ymm6,  %%ymm8, %%ymm7",
174               "vpunpckhbw (%%rax), %%ymm8, %%ymm7")
175
176GEN_test_RandM(VPABSD_256,
177               "vpabsd %%ymm6,  %%ymm8",
178               "vpabsd (%%rax), %%ymm8")
179
180GEN_test_RandM(VPACKUSWB_256,
181               "vpackuswb %%ymm9,  %%ymm8, %%ymm7",
182               "vpackuswb (%%rax), %%ymm8, %%ymm7")
183
184GEN_test_Ronly(VPMOVMSKB_256,
185               "vpmovmskb %%ymm8, %%r14")
186
187GEN_test_RandM(VPAND_256,
188               "vpand %%ymm9,  %%ymm8, %%ymm7",
189               "vpand (%%rax), %%ymm8, %%ymm7")
190
191GEN_test_RandM(VPCMPEQB_256,
192               "vpcmpeqb %%ymm9,  %%ymm8, %%ymm7",
193               "vpcmpeqb (%%rax), %%ymm8, %%ymm7")
194
195GEN_test_RandM(VPSHUFLW_0x39_256,
196               "vpshuflw $0x39, %%ymm9,  %%ymm7",
197               "vpshuflw $0xC6, (%%rax), %%ymm8")
198
199GEN_test_RandM(VPSHUFHW_0x39_256,
200               "vpshufhw $0x39, %%ymm9,  %%ymm7",
201               "vpshufhw $0xC6, (%%rax), %%ymm8")
202
203GEN_test_RandM(VPMULLW_256,
204               "vpmullw %%ymm9,  %%ymm8, %%ymm7",
205               "vpmullw (%%rax), %%ymm8, %%ymm7")
206
207GEN_test_RandM(VPADDUSW_256,
208               "vpaddusw %%ymm9,  %%ymm8, %%ymm7",
209               "vpaddusw (%%rax), %%ymm8, %%ymm7")
210
211GEN_test_RandM(VPMULHUW_256,
212               "vpmulhuw %%ymm9,  %%ymm8, %%ymm7",
213               "vpmulhuw (%%rax), %%ymm8, %%ymm7")
214
215GEN_test_RandM(VPADDUSB_256,
216               "vpaddusb %%ymm9,  %%ymm8, %%ymm7",
217               "vpaddusb (%%rax), %%ymm8, %%ymm7")
218
219GEN_test_RandM(VPUNPCKLWD_256,
220               "vpunpcklwd %%ymm6,  %%ymm8, %%ymm7",
221               "vpunpcklwd (%%rax), %%ymm8, %%ymm7")
222
223GEN_test_RandM(VPUNPCKHWD_256,
224               "vpunpckhwd %%ymm6,  %%ymm8, %%ymm7",
225               "vpunpckhwd (%%rax), %%ymm8, %%ymm7")
226
227GEN_test_Ronly(VPSLLD_0x05_256,
228               "vpslld $0x5, %%ymm9,  %%ymm7")
229
230GEN_test_Ronly(VPSRLD_0x05_256,
231               "vpsrld $0x5, %%ymm9,  %%ymm7")
232
233GEN_test_Ronly(VPSRAD_0x05_256,
234               "vpsrad $0x5, %%ymm9,  %%ymm7")
235
236GEN_test_RandM(VPSUBUSB_256,
237               "vpsubusb %%ymm9,  %%ymm8, %%ymm7",
238               "vpsubusb (%%rax), %%ymm8, %%ymm7")
239
240GEN_test_RandM(VPSUBSB_256,
241               "vpsubsb %%ymm9,  %%ymm8, %%ymm7",
242               "vpsubsb (%%rax), %%ymm8, %%ymm7")
243
244GEN_test_Ronly(VPSRLDQ_0x05_256,
245               "vpsrldq $0x5, %%ymm9,  %%ymm7")
246
247GEN_test_Ronly(VPSLLDQ_0x05_256,
248               "vpslldq $0x5, %%ymm9,  %%ymm7")
249
250GEN_test_RandM(VPANDN_256,
251               "vpandn %%ymm9,  %%ymm8, %%ymm7",
252               "vpandn (%%rax), %%ymm8, %%ymm7")
253
254GEN_test_RandM(VPUNPCKLQDQ_256,
255               "vpunpcklqdq %%ymm6,  %%ymm8, %%ymm7",
256               "vpunpcklqdq (%%rax), %%ymm8, %%ymm7")
257
258GEN_test_Ronly(VPSRLW_0x05_256,
259               "vpsrlw $0x5, %%ymm9,  %%ymm7")
260
261GEN_test_Ronly(VPSLLW_0x05_256,
262               "vpsllw $0x5, %%ymm9,  %%ymm7")
263
264GEN_test_RandM(VPADDW_256,
265               "vpaddw %%ymm6,  %%ymm8, %%ymm7",
266               "vpaddw (%%rax), %%ymm8, %%ymm7")
267
268GEN_test_RandM(VPACKSSDW_256,
269               "vpackssdw %%ymm9,  %%ymm8, %%ymm7",
270               "vpackssdw (%%rax), %%ymm8, %%ymm7")
271
272GEN_test_RandM(VPUNPCKLDQ_256,
273               "vpunpckldq %%ymm6,  %%ymm8, %%ymm7",
274               "vpunpckldq (%%rax), %%ymm8, %%ymm7")
275
276GEN_test_RandM(VPCMPEQD_256,
277               "vpcmpeqd %%ymm6,  %%ymm8, %%ymm7",
278               "vpcmpeqd (%%rax), %%ymm8, %%ymm7")
279
280GEN_test_RandM(VPSHUFD_0x39_256,
281               "vpshufd $0x39, %%ymm9,  %%ymm8",
282               "vpshufd $0xC6, (%%rax), %%ymm7")
283
284GEN_test_RandM(VPADDQ_256,
285               "vpaddq %%ymm6,  %%ymm8, %%ymm7",
286               "vpaddq (%%rax), %%ymm8, %%ymm7")
287
288GEN_test_RandM(VPSUBQ_256,
289               "vpsubq %%ymm6,  %%ymm8, %%ymm7",
290               "vpsubq (%%rax), %%ymm8, %%ymm7")
291
292GEN_test_RandM(VPSUBW_256,
293               "vpsubw %%ymm6,  %%ymm8, %%ymm7",
294               "vpsubw (%%rax), %%ymm8, %%ymm7")
295
296GEN_test_RandM(VPCMPEQQ_256,
297               "vpcmpeqq %%ymm6,  %%ymm8, %%ymm7",
298               "vpcmpeqq (%%rax), %%ymm8, %%ymm7")
299
300GEN_test_RandM(VPCMPGTQ_256,
301               "vpcmpgtq %%ymm6,  %%ymm8, %%ymm7",
302               "vpcmpgtq (%%rax), %%ymm8, %%ymm7")
303
304GEN_test_Ronly(VPSRLQ_0x05_256,
305               "vpsrlq $0x5, %%ymm9,  %%ymm7")
306
307GEN_test_RandM(VPMULUDQ_256,
308               "vpmuludq %%ymm6,  %%ymm8, %%ymm7",
309               "vpmuludq (%%rax), %%ymm8, %%ymm7")
310
311GEN_test_RandM(VPMULDQ_256,
312               "vpmuldq %%ymm6,  %%ymm8, %%ymm7",
313               "vpmuldq (%%rax), %%ymm8, %%ymm7")
314
315GEN_test_Ronly(VPSLLQ_0x05_256,
316               "vpsllq $0x5, %%ymm9,  %%ymm7")
317
318GEN_test_RandM(VPMAXUD_256,
319               "vpmaxud %%ymm6,  %%ymm8, %%ymm7",
320               "vpmaxud (%%rax), %%ymm8, %%ymm7")
321
322GEN_test_RandM(VPMINUD_256,
323               "vpminud %%ymm6,  %%ymm8, %%ymm7",
324               "vpminud (%%rax), %%ymm8, %%ymm7")
325
326GEN_test_RandM(VPMULLD_256,
327               "vpmulld %%ymm6,  %%ymm8, %%ymm7",
328               "vpmulld (%%rax), %%ymm8, %%ymm7")
329
330GEN_test_RandM(VPMAXUW_256,
331               "vpmaxuw %%ymm6,  %%ymm8, %%ymm7",
332               "vpmaxuw (%%rax), %%ymm8, %%ymm7")
333
334GEN_test_RandM(VPMINUW_256,
335               "vpminuw %%ymm6,  %%ymm8, %%ymm7",
336               "vpminuw (%%rax), %%ymm8, %%ymm7")
337
338GEN_test_RandM(VPMAXSW_256,
339               "vpmaxsw %%ymm6,  %%ymm8, %%ymm7",
340               "vpmaxsw (%%rax), %%ymm8, %%ymm7")
341
342GEN_test_RandM(VPMINSW_256,
343               "vpminsw %%ymm6,  %%ymm8, %%ymm7",
344               "vpminsw (%%rax), %%ymm8, %%ymm7")
345
346GEN_test_RandM(VPMAXUB_256,
347               "vpmaxub %%ymm6,  %%ymm8, %%ymm7",
348               "vpmaxub (%%rax), %%ymm8, %%ymm7")
349
350GEN_test_RandM(VPMINUB_256,
351               "vpminub %%ymm6,  %%ymm8, %%ymm7",
352               "vpminub (%%rax), %%ymm8, %%ymm7")
353
354GEN_test_RandM(VPMAXSB_256,
355               "vpmaxsb %%ymm6,  %%ymm8, %%ymm7",
356               "vpmaxsb (%%rax), %%ymm8, %%ymm7")
357
358GEN_test_RandM(VPMINSB_256,
359               "vpminsb %%ymm6,  %%ymm8, %%ymm7",
360               "vpminsb (%%rax), %%ymm8, %%ymm7")
361
362GEN_test_RandM(VPMOVSXBW_256,
363               "vpmovsxbw %%xmm6,  %%ymm8",
364               "vpmovsxbw (%%rax), %%ymm8")
365
366GEN_test_RandM(VPSUBUSW_256,
367               "vpsubusw %%ymm9,  %%ymm8, %%ymm7",
368               "vpsubusw (%%rax), %%ymm8, %%ymm7")
369
370GEN_test_RandM(VPSUBSW_256,
371               "vpsubsw %%ymm9,  %%ymm8, %%ymm7",
372               "vpsubsw (%%rax), %%ymm8, %%ymm7")
373
374GEN_test_RandM(VPCMPEQW_256,
375               "vpcmpeqw %%ymm6,  %%ymm8, %%ymm7",
376               "vpcmpeqw (%%rax), %%ymm8, %%ymm7")
377
378GEN_test_RandM(VPADDB_256,
379               "vpaddb %%ymm6,  %%ymm8, %%ymm7",
380               "vpaddb (%%rax), %%ymm8, %%ymm7")
381
382GEN_test_RandM(VPUNPCKHDQ_256,
383               "vpunpckhdq %%ymm6,  %%ymm8, %%ymm7",
384               "vpunpckhdq (%%rax), %%ymm8, %%ymm7")
385
386GEN_test_RandM(VPMOVSXDQ_256,
387               "vpmovsxdq %%xmm6,  %%ymm8",
388               "vpmovsxdq (%%rax), %%ymm8")
389
390GEN_test_RandM(VPMOVSXWD_256,
391               "vpmovsxwd %%xmm6,  %%ymm8",
392               "vpmovsxwd (%%rax), %%ymm8")
393
394GEN_test_RandM(VPMULHW_256,
395               "vpmulhw %%ymm9,  %%ymm8, %%ymm7",
396               "vpmulhw (%%rax), %%ymm8, %%ymm7")
397
398GEN_test_RandM(VPUNPCKHQDQ_256,
399               "vpunpckhqdq %%ymm6,  %%ymm8, %%ymm7",
400               "vpunpckhqdq (%%rax), %%ymm8, %%ymm7")
401
402GEN_test_Ronly(VPSRAW_0x05_256,
403               "vpsraw $0x5, %%ymm9,  %%ymm7")
404
405GEN_test_RandM(VPCMPGTB_256,
406               "vpcmpgtb %%ymm6,  %%ymm8, %%ymm7",
407               "vpcmpgtb (%%rax), %%ymm8, %%ymm7")
408
409GEN_test_RandM(VPCMPGTW_256,
410               "vpcmpgtw %%ymm6,  %%ymm8, %%ymm7",
411               "vpcmpgtw (%%rax), %%ymm8, %%ymm7")
412
413GEN_test_RandM(VPCMPGTD_256,
414               "vpcmpgtd %%ymm6,  %%ymm8, %%ymm7",
415               "vpcmpgtd (%%rax), %%ymm8, %%ymm7")
416
417GEN_test_RandM(VPMOVZXBD_256,
418               "vpmovzxbd %%xmm6,  %%ymm8",
419               "vpmovzxbd (%%rax), %%ymm8")
420
421GEN_test_RandM(VPMOVSXBD_256,
422               "vpmovsxbd %%xmm6,  %%ymm8",
423               "vpmovsxbd (%%rax), %%ymm8")
424
425GEN_test_RandM(VPALIGNR_256_1of3,
426               "vpalignr $0, %%ymm6,  %%ymm8, %%ymm7",
427               "vpalignr $3, (%%rax), %%ymm8, %%ymm7")
428GEN_test_RandM(VPALIGNR_256_2of3,
429               "vpalignr $6, %%ymm6,  %%ymm8, %%ymm7",
430               "vpalignr $9, (%%rax), %%ymm8, %%ymm7")
431GEN_test_RandM(VPALIGNR_256_3of3,
432               "vpalignr $12, %%ymm6,  %%ymm8, %%ymm7",
433               "vpalignr $15, (%%rax), %%ymm8, %%ymm7")
434
435GEN_test_RandM(VPBLENDW_256_0x00,
436               "vpblendw $0x00, %%ymm6,  %%ymm8, %%ymm7",
437               "vpblendw $0x01, (%%rax), %%ymm8, %%ymm7")
438GEN_test_RandM(VPBLENDW_256_0xFE,
439               "vpblendw $0xFE, %%ymm6,  %%ymm8, %%ymm7",
440               "vpblendw $0xFF, (%%rax), %%ymm8, %%ymm7")
441GEN_test_RandM(VPBLENDW_256_0x30,
442               "vpblendw $0x30, %%ymm6,  %%ymm8, %%ymm7",
443               "vpblendw $0x03, (%%rax), %%ymm8, %%ymm7")
444GEN_test_RandM(VPBLENDW_256_0x21,
445               "vpblendw $0x21, %%ymm6,  %%ymm8, %%ymm7",
446               "vpblendw $0x12, (%%rax), %%ymm8, %%ymm7")
447GEN_test_RandM(VPBLENDW_256_0xD7,
448               "vpblendw $0xD7, %%ymm6,  %%ymm8, %%ymm7",
449               "vpblendw $0x6C, (%%rax), %%ymm8, %%ymm7")
450GEN_test_RandM(VPBLENDW_256_0xB5,
451               "vpblendw $0xB5, %%ymm6,  %%ymm8, %%ymm7",
452               "vpblendw $0x4A, (%%rax), %%ymm8, %%ymm7")
453GEN_test_RandM(VPBLENDW_256_0x85,
454               "vpblendw $0x85, %%ymm6,  %%ymm8, %%ymm7",
455               "vpblendw $0xDC, (%%rax), %%ymm8, %%ymm7")
456GEN_test_RandM(VPBLENDW_256_0x29,
457               "vpblendw $0x29, %%ymm6,  %%ymm8, %%ymm7",
458               "vpblendw $0x92, (%%rax), %%ymm8, %%ymm7")
459
460GEN_test_RandM(VPSLLW_256,
461               "andl $15, %%r14d;"
462               "vmovd %%r14d, %%xmm6;"
463               "vpsllw %%xmm6,     %%ymm8, %%ymm9",
464               "andq $15, 128(%%rax);"
465               "vpsllw 128(%%rax), %%ymm8, %%ymm9")
466
467GEN_test_RandM(VPSRLW_256,
468               "andl $15, %%r14d;"
469               "vmovd %%r14d, %%xmm6;"
470               "vpsrlw %%xmm6,     %%ymm8, %%ymm9",
471               "andq $15, 128(%%rax);"
472               "vpsrlw 128(%%rax), %%ymm8, %%ymm9")
473
474GEN_test_RandM(VPSRAW_256,
475               "andl $31, %%r14d;"
476               "vmovd %%r14d, %%xmm6;"
477               "vpsraw %%xmm6,     %%ymm8, %%ymm9",
478               "andq $15, 128(%%rax);"
479               "vpsraw 128(%%rax), %%ymm8, %%ymm9")
480
481GEN_test_RandM(VPSLLD_256,
482               "andl $31, %%r14d;"
483               "vmovd %%r14d, %%xmm6;"
484               "vpslld %%xmm6,     %%ymm8, %%ymm9",
485               "andq $31, 128(%%rax);"
486               "vpslld 128(%%rax), %%ymm8, %%ymm9")
487
488GEN_test_RandM(VPSRLD_256,
489               "andl $31, %%r14d;"
490               "vmovd %%r14d, %%xmm6;"
491               "vpsrld %%xmm6,     %%ymm8, %%ymm9",
492               "andq $31, 128(%%rax);"
493               "vpsrld 128(%%rax), %%ymm8, %%ymm9")
494
495GEN_test_RandM(VPSRAD_256,
496               "andl $31, %%r14d;"
497               "vmovd %%r14d, %%xmm6;"
498               "vpsrad %%xmm6,     %%ymm8, %%ymm9",
499               "andq $31, 128(%%rax);"
500               "vpsrad 128(%%rax), %%ymm8, %%ymm9")
501
502GEN_test_RandM(VPSLLQ_256,
503               "andl $63, %%r14d;"
504               "vmovd %%r14d, %%xmm6;"
505               "vpsllq %%xmm6,     %%ymm8, %%ymm9",
506               "andq $63, 128(%%rax);"
507               "vpsllq 128(%%rax), %%ymm8, %%ymm9")
508
509GEN_test_RandM(VPSRLQ_256,
510               "andl $63, %%r14d;"
511               "vmovd %%r14d, %%xmm6;"
512               "vpsrlq %%xmm6,     %%ymm8, %%ymm9",
513               "andq $63, 128(%%rax);"
514               "vpsrlq 128(%%rax), %%ymm8, %%ymm9")
515
516GEN_test_RandM(VPMADDWD_256,
517               "vpmaddwd %%ymm6,  %%ymm8, %%ymm7",
518               "vpmaddwd (%%rax), %%ymm8, %%ymm7")
519
520GEN_test_Monly(VMOVNTDQA_256,
521               "vmovntdqa (%%rax), %%ymm9")
522
523GEN_test_RandM(VPACKSSWB_256,
524               "vpacksswb %%ymm6,  %%ymm8, %%ymm7",
525               "vpacksswb (%%rax), %%ymm8, %%ymm7")
526
527GEN_test_RandM(VPAVGB_256,
528               "vpavgb %%ymm6,  %%ymm8, %%ymm7",
529               "vpavgb (%%rax), %%ymm8, %%ymm7")
530
531GEN_test_RandM(VPAVGW_256,
532               "vpavgw %%ymm6,  %%ymm8, %%ymm7",
533               "vpavgw (%%rax), %%ymm8, %%ymm7")
534
535GEN_test_RandM(VPADDSB_256,
536               "vpaddsb %%ymm6,  %%ymm8, %%ymm7",
537               "vpaddsb (%%rax), %%ymm8, %%ymm7")
538
539GEN_test_RandM(VPADDSW_256,
540               "vpaddsw %%ymm6,  %%ymm8, %%ymm7",
541               "vpaddsw (%%rax), %%ymm8, %%ymm7")
542
543GEN_test_RandM(VPHADDW_256,
544               "vphaddw %%ymm6,  %%ymm8, %%ymm7",
545               "vphaddw (%%rax), %%ymm8, %%ymm7")
546
547GEN_test_RandM(VPHADDD_256,
548               "vphaddd %%ymm6,  %%ymm8, %%ymm7",
549               "vphaddd (%%rax), %%ymm8, %%ymm7")
550
551GEN_test_RandM(VPHADDSW_256,
552               "vphaddsw %%ymm6,  %%ymm8, %%ymm7",
553               "vphaddsw (%%rax), %%ymm8, %%ymm7")
554
555GEN_test_RandM(VPMADDUBSW_256,
556               "vpmaddubsw %%ymm6,  %%ymm8, %%ymm7",
557               "vpmaddubsw (%%rax), %%ymm8, %%ymm7")
558
559GEN_test_RandM(VPHSUBW_256,
560               "vphsubw %%ymm6,  %%ymm8, %%ymm7",
561               "vphsubw (%%rax), %%ymm8, %%ymm7")
562
563GEN_test_RandM(VPHSUBD_256,
564               "vphsubd %%ymm6,  %%ymm8, %%ymm7",
565               "vphsubd (%%rax), %%ymm8, %%ymm7")
566
567GEN_test_RandM(VPHSUBSW_256,
568               "vphsubsw %%ymm6,  %%ymm8, %%ymm7",
569               "vphsubsw (%%rax), %%ymm8, %%ymm7")
570
571GEN_test_RandM(VPABSB_256,
572               "vpabsb %%ymm6,  %%ymm7",
573               "vpabsb (%%rax), %%ymm7")
574
575GEN_test_RandM(VPABSW_256,
576               "vpabsw %%ymm6,  %%ymm7",
577               "vpabsw (%%rax), %%ymm7")
578
579GEN_test_RandM(VPMOVSXBQ_256,
580               "vpmovsxbq %%xmm6,  %%ymm8",
581               "vpmovsxbq (%%rax), %%ymm8")
582
583GEN_test_RandM(VPMOVSXWQ_256,
584               "vpmovsxwq %%xmm6,  %%ymm8",
585               "vpmovsxwq (%%rax), %%ymm8")
586
587GEN_test_RandM(VPACKUSDW_256,
588               "vpackusdw %%ymm6,  %%ymm8, %%ymm7",
589               "vpackusdw (%%rax), %%ymm8, %%ymm7")
590
591GEN_test_RandM(VPMOVZXBQ_256,
592               "vpmovzxbq %%xmm6,  %%ymm8",
593               "vpmovzxbq (%%rax), %%ymm8")
594
595GEN_test_RandM(VPMOVZXWQ_256,
596               "vpmovzxwq %%xmm6,  %%ymm8",
597               "vpmovzxwq (%%rax), %%ymm8")
598
599GEN_test_RandM(VPMOVZXDQ_256,
600               "vpmovzxdq %%xmm6,  %%ymm8",
601               "vpmovzxdq (%%rax), %%ymm8")
602
603GEN_test_RandM(VMPSADBW_256_0x0,
604               "vmpsadbw $0, %%ymm6,  %%ymm8, %%ymm7",
605               "vmpsadbw $0, (%%rax), %%ymm8, %%ymm7")
606GEN_test_RandM(VMPSADBW_256_0x39,
607               "vmpsadbw $0x39, %%ymm6,  %%ymm8, %%ymm7",
608               "vmpsadbw $0x39, (%%rax), %%ymm8, %%ymm7")
609GEN_test_RandM(VMPSADBW_256_0x32,
610               "vmpsadbw $0x32, %%ymm6,  %%ymm8, %%ymm7",
611               "vmpsadbw $0x32, (%%rax), %%ymm8, %%ymm7")
612GEN_test_RandM(VMPSADBW_256_0x2b,
613               "vmpsadbw $0x2b, %%ymm6,  %%ymm8, %%ymm7",
614               "vmpsadbw $0x2b, (%%rax), %%ymm8, %%ymm7")
615GEN_test_RandM(VMPSADBW_256_0x24,
616               "vmpsadbw $0x24, %%ymm6,  %%ymm8, %%ymm7",
617               "vmpsadbw $0x24, (%%rax), %%ymm8, %%ymm7")
618GEN_test_RandM(VMPSADBW_256_0x1d,
619               "vmpsadbw $0x1d, %%ymm6,  %%ymm8, %%ymm7",
620               "vmpsadbw $0x1d, (%%rax), %%ymm8, %%ymm7")
621GEN_test_RandM(VMPSADBW_256_0x16,
622               "vmpsadbw $0x16, %%ymm6,  %%ymm8, %%ymm7",
623               "vmpsadbw $0x16, (%%rax), %%ymm8, %%ymm7")
624GEN_test_RandM(VMPSADBW_256_0x0f,
625               "vmpsadbw $0x0f, %%ymm6,  %%ymm8, %%ymm7",
626               "vmpsadbw $0x0f, (%%rax), %%ymm8, %%ymm7")
627
628GEN_test_RandM(VPSADBW_256,
629               "vpsadbw %%ymm6,  %%ymm8, %%ymm7",
630               "vpsadbw (%%rax), %%ymm8, %%ymm7")
631
632GEN_test_RandM(VPSIGNB_256,
633               "vpsignb %%ymm6,  %%ymm8, %%ymm7",
634               "vpsignb (%%rax), %%ymm8, %%ymm7")
635
636GEN_test_RandM(VPSIGNW_256,
637               "vpsignw %%ymm6,  %%ymm8, %%ymm7",
638               "vpsignw (%%rax), %%ymm8, %%ymm7")
639
640GEN_test_RandM(VPSIGND_256,
641               "vpsignd %%ymm6,  %%ymm8, %%ymm7",
642               "vpsignd (%%rax), %%ymm8, %%ymm7")
643
644GEN_test_RandM(VPMULHRSW_256,
645               "vpmulhrsw %%ymm6,  %%ymm8, %%ymm7",
646               "vpmulhrsw (%%rax), %%ymm8, %%ymm7")
647
648/* Instructions new in AVX2.  */
649
650GEN_test_Monly(VBROADCASTI128,
651               "vbroadcasti128 (%%rax), %%ymm9")
652
653GEN_test_RandM(VEXTRACTI128_0x0,
654               "vextracti128 $0x0, %%ymm7, %%xmm9",
655               "vextracti128 $0x0, %%ymm7, (%%rax)")
656
657GEN_test_RandM(VEXTRACTI128_0x1,
658               "vextracti128 $0x1, %%ymm7, %%xmm9",
659               "vextracti128 $0x1, %%ymm7, (%%rax)")
660
661GEN_test_RandM(VINSERTI128_0x0,
662               "vinserti128 $0x0, %%xmm9,  %%ymm7, %%ymm8",
663               "vinserti128 $0x0, (%%rax), %%ymm7, %%ymm8")
664
665GEN_test_RandM(VINSERTI128_0x1,
666               "vinserti128 $0x1, %%xmm9,  %%ymm7, %%ymm8",
667               "vinserti128 $0x1, (%%rax), %%ymm7, %%ymm8")
668
669GEN_test_RandM(VPERM2I128_0x00,
670               "vperm2i128 $0x00, %%ymm6,  %%ymm8, %%ymm7",
671               "vperm2i128 $0x00, (%%rax), %%ymm8, %%ymm7")
672GEN_test_RandM(VPERM2I128_0xFF,
673               "vperm2i128 $0xFF, %%ymm6,  %%ymm8, %%ymm7",
674               "vperm2i128 $0xFF, (%%rax), %%ymm8, %%ymm7")
675GEN_test_RandM(VPERM2I128_0x30,
676               "vperm2i128 $0x30, %%ymm6,  %%ymm8, %%ymm7",
677               "vperm2i128 $0x30, (%%rax), %%ymm8, %%ymm7")
678GEN_test_RandM(VPERM2I128_0x21,
679               "vperm2i128 $0x21, %%ymm6,  %%ymm8, %%ymm7",
680               "vperm2i128 $0x21, (%%rax), %%ymm8, %%ymm7")
681GEN_test_RandM(VPERM2I128_0x12,
682               "vperm2i128 $0x12, %%ymm6,  %%ymm8, %%ymm7",
683               "vperm2i128 $0x12, (%%rax), %%ymm8, %%ymm7")
684GEN_test_RandM(VPERM2I128_0x03,
685               "vperm2i128 $0x03, %%ymm6,  %%ymm8, %%ymm7",
686               "vperm2i128 $0x03, (%%rax), %%ymm8, %%ymm7")
687GEN_test_RandM(VPERM2I128_0x85,
688               "vperm2i128 $0x85, %%ymm6,  %%ymm8, %%ymm7",
689               "vperm2i128 $0x85, (%%rax), %%ymm8, %%ymm7")
690GEN_test_RandM(VPERM2I128_0x5A,
691               "vperm2i128 $0x5A, %%ymm6,  %%ymm8, %%ymm7",
692               "vperm2i128 $0x5A, (%%rax), %%ymm8, %%ymm7")
693
694GEN_test_Ronly(VBROADCASTSS_128,
695               "vbroadcastss %%xmm9, %%xmm7")
696
697GEN_test_Ronly(VBROADCASTSS_256,
698               "vbroadcastss %%xmm9, %%ymm7")
699
700GEN_test_Ronly(VBROADCASTSD_256,
701               "vbroadcastsd %%xmm9, %%ymm7")
702
703GEN_test_RandM(VPERMD,
704               "vpermd %%ymm6, %%ymm7, %%ymm9",
705               "vpermd (%%rax), %%ymm7, %%ymm9")
706
707GEN_test_RandM(VPERMQ_0x00,
708               "vpermq $0x00, %%ymm6,  %%ymm7",
709               "vpermq $0x01, (%%rax), %%ymm7")
710GEN_test_RandM(VPERMQ_0xFE,
711               "vpermq $0xFE, %%ymm6,  %%ymm7",
712               "vpermq $0xFF, (%%rax), %%ymm7")
713GEN_test_RandM(VPERMQ_0x30,
714               "vpermq $0x30, %%ymm6,  %%ymm7",
715               "vpermq $0x03, (%%rax), %%ymm7")
716GEN_test_RandM(VPERMQ_0x21,
717               "vpermq $0x21, %%ymm6,  %%ymm7",
718               "vpermq $0x12, (%%rax), %%ymm7")
719GEN_test_RandM(VPERMQ_0xD7,
720               "vpermq $0xD7, %%ymm6,  %%ymm7",
721               "vpermq $0x6C, (%%rax), %%ymm7")
722GEN_test_RandM(VPERMQ_0xB5,
723               "vpermq $0xB5, %%ymm6,  %%ymm7",
724               "vpermq $0x4A, (%%rax), %%ymm7")
725GEN_test_RandM(VPERMQ_0x85,
726               "vpermq $0x85, %%ymm6,  %%ymm7",
727               "vpermq $0xDC, (%%rax), %%ymm7")
728GEN_test_RandM(VPERMQ_0x29,
729               "vpermq $0x29, %%ymm6,  %%ymm7",
730               "vpermq $0x92, (%%rax), %%ymm7")
731
732GEN_test_RandM(VPERMPS,
733               "vpermps %%ymm6, %%ymm7, %%ymm9",
734               "vpermps (%%rax), %%ymm7, %%ymm9")
735
736GEN_test_RandM(VPERMPD_0x00,
737               "vpermpd $0x00, %%ymm6,  %%ymm7",
738               "vpermpd $0x01, (%%rax), %%ymm7")
739GEN_test_RandM(VPERMPD_0xFE,
740               "vpermpd $0xFE, %%ymm6,  %%ymm7",
741               "vpermpd $0xFF, (%%rax), %%ymm7")
742GEN_test_RandM(VPERMPD_0x30,
743               "vpermpd $0x30, %%ymm6,  %%ymm7",
744               "vpermpd $0x03, (%%rax), %%ymm7")
745GEN_test_RandM(VPERMPD_0x21,
746               "vpermpd $0x21, %%ymm6,  %%ymm7",
747               "vpermpd $0x12, (%%rax), %%ymm7")
748GEN_test_RandM(VPERMPD_0xD7,
749               "vpermpd $0xD7, %%ymm6,  %%ymm7",
750               "vpermpd $0x6C, (%%rax), %%ymm7")
751GEN_test_RandM(VPERMPD_0xB5,
752               "vpermpd $0xB5, %%ymm6,  %%ymm7",
753               "vpermpd $0x4A, (%%rax), %%ymm7")
754GEN_test_RandM(VPERMPD_0x85,
755               "vpermpd $0x85, %%ymm6,  %%ymm7",
756               "vpermpd $0xDC, (%%rax), %%ymm7")
757GEN_test_RandM(VPERMPD_0x29,
758               "vpermpd $0x29, %%ymm6,  %%ymm7",
759               "vpermpd $0x92, (%%rax), %%ymm7")
760
761GEN_test_RandM(VPBLENDD_128_0x00,
762               "vpblendd $0x00, %%xmm6,  %%xmm8, %%xmm7",
763               "vpblendd $0x01, (%%rax), %%xmm8, %%xmm7")
764GEN_test_RandM(VPBLENDD_128_0x02,
765               "vpblendd $0x02, %%xmm6,  %%xmm8, %%xmm7",
766               "vpblendd $0x03, (%%rax), %%xmm8, %%xmm7")
767GEN_test_RandM(VPBLENDD_128_0x04,
768               "vpblendd $0x04, %%xmm6,  %%xmm8, %%xmm7",
769               "vpblendd $0x05, (%%rax), %%xmm8, %%xmm7")
770GEN_test_RandM(VPBLENDD_128_0x06,
771               "vpblendd $0x06, %%xmm6,  %%xmm8, %%xmm7",
772               "vpblendd $0x07, (%%rax), %%xmm8, %%xmm7")
773GEN_test_RandM(VPBLENDD_128_0x08,
774               "vpblendd $0x08, %%xmm6,  %%xmm8, %%xmm7",
775               "vpblendd $0x09, (%%rax), %%xmm8, %%xmm7")
776GEN_test_RandM(VPBLENDD_128_0x0A,
777               "vpblendd $0x0A, %%xmm6,  %%xmm8, %%xmm7",
778               "vpblendd $0x0B, (%%rax), %%xmm8, %%xmm7")
779GEN_test_RandM(VPBLENDD_128_0x0C,
780               "vpblendd $0x0C, %%xmm6,  %%xmm8, %%xmm7",
781               "vpblendd $0x0D, (%%rax), %%xmm8, %%xmm7")
782GEN_test_RandM(VPBLENDD_128_0x0E,
783               "vpblendd $0x0E, %%xmm6,  %%xmm8, %%xmm7",
784               "vpblendd $0x0F, (%%rax), %%xmm8, %%xmm7")
785
786GEN_test_RandM(VPBLENDD_256_0x00,
787               "vpblendd $0x00, %%ymm6,  %%ymm8, %%ymm7",
788               "vpblendd $0x01, (%%rax), %%ymm8, %%ymm7")
789GEN_test_RandM(VPBLENDD_256_0xFE,
790               "vpblendd $0xFE, %%ymm6,  %%ymm8, %%ymm7",
791               "vpblendd $0xFF, (%%rax), %%ymm8, %%ymm7")
792GEN_test_RandM(VPBLENDD_256_0x30,
793               "vpblendd $0x30, %%ymm6,  %%ymm8, %%ymm7",
794               "vpblendd $0x03, (%%rax), %%ymm8, %%ymm7")
795GEN_test_RandM(VPBLENDD_256_0x21,
796               "vpblendd $0x21, %%ymm6,  %%ymm8, %%ymm7",
797               "vpblendd $0x12, (%%rax), %%ymm8, %%ymm7")
798GEN_test_RandM(VPBLENDD_256_0xD7,
799               "vpblendd $0xD7, %%ymm6,  %%ymm8, %%ymm7",
800               "vpblendd $0x6C, (%%rax), %%ymm8, %%ymm7")
801GEN_test_RandM(VPBLENDD_256_0xB5,
802               "vpblendd $0xB5, %%ymm6,  %%ymm8, %%ymm7",
803               "vpblendd $0x4A, (%%rax), %%ymm8, %%ymm7")
804GEN_test_RandM(VPBLENDD_256_0x85,
805               "vpblendd $0x85, %%ymm6,  %%ymm8, %%ymm7",
806               "vpblendd $0xDC, (%%rax), %%ymm8, %%ymm7")
807GEN_test_RandM(VPBLENDD_256_0x29,
808               "vpblendd $0x29, %%ymm6,  %%ymm8, %%ymm7",
809               "vpblendd $0x92, (%%rax), %%ymm8, %%ymm7")
810
811GEN_test_RandM(VPSLLVD_128,
812               "vpslld $27, %%xmm6, %%xmm6;"
813               "vpsrld $27, %%xmm6, %%xmm6;"
814               "vpsllvd %%xmm6, %%xmm8, %%xmm7",
815               "andl $31, (%%rax);"
816               "andl $31, 4(%%rax);"
817               "andl $31, 8(%%rax);"
818               "vpsllvd (%%rax), %%xmm8, %%xmm7")
819
820GEN_test_RandM(VPSLLVD_256,
821               "vpslld $27, %%ymm6, %%ymm6;"
822               "vpsrld $27, %%ymm6, %%ymm6;"
823               "vpsllvd %%ymm6, %%ymm8, %%ymm7",
824               "andl $31, (%%rax);"
825               "andl $31, 4(%%rax);"
826               "andl $31, 8(%%rax);"
827               "andl $31, 16(%%rax);"
828               "andl $31, 20(%%rax);"
829               "andl $31, 24(%%rax);"
830               "vpsllvd (%%rax), %%ymm8, %%ymm7")
831
832GEN_test_RandM(VPSLLVQ_128,
833               "vpsllq $58, %%xmm6, %%xmm6;"
834               "vpsrlq $58, %%xmm6, %%xmm6;"
835               "vpsllvq %%xmm6, %%xmm8, %%xmm7",
836               "andl $63, (%%rax);"
837               "vpsllvq (%%rax), %%xmm8, %%xmm7")
838
839GEN_test_RandM(VPSLLVQ_256,
840               "vpsllq $58, %%ymm6, %%ymm6;"
841               "vpsrlq $58, %%ymm6, %%ymm6;"
842               "vpsllvq %%ymm6, %%ymm8, %%ymm7",
843               "andl $63, (%%rax);"
844               "andl $63, 8(%%rax);"
845               "andl $63, 16(%%rax);"
846               "vpsllvq (%%rax), %%ymm8, %%ymm7")
847
848GEN_test_RandM(VPSRLVD_128,
849               "vpslld $27, %%xmm6, %%xmm6;"
850               "vpsrld $27, %%xmm6, %%xmm6;"
851               "vpsrlvd %%xmm6, %%xmm8, %%xmm7",
852               "andl $31, (%%rax);"
853               "andl $31, 4(%%rax);"
854               "andl $31, 8(%%rax);"
855               "vpsrlvd (%%rax), %%xmm8, %%xmm7")
856
857GEN_test_RandM(VPSRLVD_256,
858               "vpslld $27, %%ymm6, %%ymm6;"
859               "vpsrld $27, %%ymm6, %%ymm6;"
860               "vpsrlvd %%ymm6, %%ymm8, %%ymm7",
861               "andl $31, (%%rax);"
862               "andl $31, 4(%%rax);"
863               "andl $31, 8(%%rax);"
864               "andl $31, 16(%%rax);"
865               "andl $31, 20(%%rax);"
866               "andl $31, 24(%%rax);"
867               "vpsrlvd (%%rax), %%ymm8, %%ymm7")
868
869GEN_test_RandM(VPSRLVQ_128,
870               "vpsllq $58, %%xmm6, %%xmm6;"
871               "vpsrlq $58, %%xmm6, %%xmm6;"
872               "vpsrlvq %%xmm6, %%xmm8, %%xmm7",
873               "andl $63, (%%rax);"
874               "vpsrlvq (%%rax), %%xmm8, %%xmm7")
875
876GEN_test_RandM(VPSRLVQ_256,
877               "vpsllq $58, %%ymm6, %%ymm6;"
878               "vpsrlq $58, %%ymm6, %%ymm6;"
879               "vpsrlvq %%ymm6, %%ymm8, %%ymm7",
880               "andl $63, (%%rax);"
881               "andl $63, 8(%%rax);"
882               "andl $63, 16(%%rax);"
883               "vpsrlvq (%%rax), %%ymm8, %%ymm7")
884
885GEN_test_RandM(VPSRAVD_128,
886               "vpslld $27, %%xmm6, %%xmm6;"
887               "vpsrld $27, %%xmm6, %%xmm6;"
888               "vpsravd %%xmm6, %%xmm8, %%xmm7",
889               "andl $31, (%%rax);"
890               "andl $31, 4(%%rax);"
891               "andl $31, 8(%%rax);"
892               "vpsravd (%%rax), %%xmm8, %%xmm7")
893
894GEN_test_RandM(VPSRAVD_256,
895               "vpslld $27, %%ymm6, %%ymm6;"
896               "vpsrld $27, %%ymm6, %%ymm6;"
897               "vpsravd %%ymm6, %%ymm8, %%ymm7",
898               "andl $31, (%%rax);"
899               "andl $31, 4(%%rax);"
900               "andl $31, 8(%%rax);"
901               "andl $31, 16(%%rax);"
902               "andl $31, 20(%%rax);"
903               "andl $31, 24(%%rax);"
904               "vpsravd (%%rax), %%ymm8, %%ymm7")
905
906GEN_test_RandM(VPBROADCASTB_128,
907               "vpbroadcastb %%xmm9, %%xmm7",
908               "vpbroadcastb (%%rax), %%xmm7")
909
910GEN_test_RandM(VPBROADCASTB_256,
911               "vpbroadcastb %%xmm9, %%ymm7",
912               "vpbroadcastb (%%rax), %%ymm7")
913
914GEN_test_RandM(VPBROADCASTW_128,
915               "vpbroadcastw %%xmm9, %%xmm7",
916               "vpbroadcastw (%%rax), %%xmm7")
917
918GEN_test_RandM(VPBROADCASTW_256,
919               "vpbroadcastw %%xmm9, %%ymm7",
920               "vpbroadcastw (%%rax), %%ymm7")
921
922GEN_test_RandM(VPBROADCASTD_128,
923               "vpbroadcastd %%xmm9, %%xmm7",
924               "vpbroadcastd (%%rax), %%xmm7")
925
926GEN_test_RandM(VPBROADCASTD_256,
927               "vpbroadcastd %%xmm9, %%ymm7",
928               "vpbroadcastd (%%rax), %%ymm7")
929
930GEN_test_RandM(VPBROADCASTQ_128,
931               "vpbroadcastq %%xmm9, %%xmm7",
932               "vpbroadcastq (%%rax), %%xmm7")
933
934GEN_test_RandM(VPBROADCASTQ_256,
935               "vpbroadcastq %%xmm9, %%ymm7",
936               "vpbroadcastq (%%rax), %%ymm7")
937
938GEN_test_Monly(VPMASKMOVD_128_LoadForm,
939               "vpmaskmovd (%%rax), %%xmm8, %%xmm7;"
940               "vxorps %%xmm6, %%xmm6, %%xmm6;"
941               "vpmaskmovd (%%rax,%%rax,4), %%xmm6, %%xmm9")
942
943GEN_test_Monly(VPMASKMOVD_256_LoadForm,
944               "vpmaskmovd (%%rax), %%ymm8, %%ymm7;"
945               "vxorps %%ymm6, %%ymm6, %%ymm6;"
946               "vpmaskmovd (%%rax,%%rax,4), %%ymm6, %%ymm9")
947
948GEN_test_Monly(VPMASKMOVQ_128_LoadForm,
949               "vpmaskmovq (%%rax), %%xmm8, %%xmm7;"
950               "vxorpd %%xmm6, %%xmm6, %%xmm6;"
951               "vpmaskmovq (%%rax,%%rax,4), %%xmm6, %%xmm9")
952
953GEN_test_Monly(VPMASKMOVQ_256_LoadForm,
954               "vpmaskmovq (%%rax), %%ymm8, %%ymm7;"
955               "vxorpd %%ymm6, %%ymm6, %%ymm6;"
956               "vpmaskmovq (%%rax,%%rax,4), %%ymm6, %%ymm9")
957
958GEN_test_Monly(VPMASKMOVD_128_StoreForm,
959               "vpmaskmovd %%xmm8, %%xmm7, (%%rax);"
960               "vxorps %%xmm6, %%xmm6, %%xmm6;"
961               "vpmaskmovd %%xmm9, %%xmm6, (%%rax,%%rax,4)")
962
963GEN_test_Monly(VPMASKMOVD_256_StoreForm,
964               "vpmaskmovd %%ymm8, %%ymm7, (%%rax);"
965               "vxorps %%ymm6, %%ymm6, %%ymm6;"
966               "vpmaskmovd %%ymm9, %%ymm6, (%%rax,%%rax,4)")
967
968GEN_test_Monly(VPMASKMOVQ_128_StoreForm,
969               "vpmaskmovq %%xmm8, %%xmm7, (%%rax);"
970               "vxorpd %%xmm6, %%xmm6, %%xmm6;"
971               "vpmaskmovq %%xmm9, %%xmm6, (%%rax,%%rax,4)")
972
973GEN_test_Monly(VPMASKMOVQ_256_StoreForm,
974               "vpmaskmovq %%ymm8, %%ymm7, (%%rax);"
975               "vxorpd %%ymm6, %%ymm6, %%ymm6;"
976               "vpmaskmovq %%ymm9, %%ymm6, (%%rax,%%rax,4)")
977
978GEN_test_Ronly(VGATHERDPS_128,
979               "vpslld $25, %%xmm7, %%xmm8;"
980               "vpsrld $25, %%xmm8, %%xmm8;"
981               "vblendvps %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
982               "leaq _randArray(%%rip), %%r14;"
983               "vgatherdps %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
984               "xorl %%r14d, %%r14d")
985
986GEN_test_Ronly(VGATHERDPS_256,
987               "vpslld $25, %%ymm7, %%ymm8;"
988               "vpsrld $25, %%ymm8, %%ymm8;"
989               "vblendvps %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
990               "leaq _randArray(%%rip), %%r14;"
991               "vgatherdps %%ymm6, 3(%%r14,%%ymm8,4), %%ymm9;"
992               "xorl %%r14d, %%r14d")
993
994GEN_test_Ronly(VGATHERQPS_128_1,
995               "vpsllq $57, %%xmm7, %%xmm8;"
996               "vpsrlq $57, %%xmm8, %%xmm8;"
997               "vpmovsxdq %%xmm6, %%xmm9;"
998               "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
999               "vmovdqa 96(%0), %%ymm9;"
1000               "leaq _randArray(%%rip), %%r14;"
1001               "vgatherqps %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
1002               "xorl %%r14d, %%r14d")
1003
1004GEN_test_Ronly(VGATHERQPS_256_1,
1005               "vpsllq $57, %%ymm7, %%ymm8;"
1006               "vpsrlq $57, %%ymm8, %%ymm8;"
1007               "vpmovsxdq %%xmm6, %%ymm9;"
1008               "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1009               "vmovdqa 96(%0), %%ymm9;"
1010               "leaq _randArray(%%rip), %%r14;"
1011               "vgatherqps %%xmm6, 3(%%r14,%%ymm8,4), %%xmm9;"
1012               "xorl %%r14d, %%r14d")
1013
1014GEN_test_Ronly(VGATHERQPS_128_2,
1015               "vpsllq $57, %%xmm7, %%xmm8;"
1016               "vpsrlq $57, %%xmm8, %%xmm8;"
1017               "vpmovsxdq %%xmm6, %%xmm9;"
1018               "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
1019               "vmovdqa 96(%0), %%ymm9;"
1020               "leaq _randArray(%%rip), %%r14;"
1021               "vmovq %%r14, %%xmm7;"
1022               "vpsllq $2, %%xmm8, %%xmm8;"
1023               "vpbroadcastq %%xmm7, %%xmm7;"
1024               "vpaddq %%xmm7, %%xmm8, %%xmm8;"
1025               "vgatherqps %%xmm6, 1(,%%xmm8,1), %%xmm9;"
1026               "vpsubq %%xmm7, %%xmm8, %%xmm8;"
1027               "vmovdqa 0(%0), %%ymm7;"
1028               "xorl %%r14d, %%r14d")
1029
1030GEN_test_Ronly(VGATHERQPS_256_2,
1031               "vpsllq $57, %%ymm7, %%ymm8;"
1032               "vpsrlq $57, %%ymm8, %%ymm8;"
1033               "vpmovsxdq %%xmm6, %%ymm9;"
1034               "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1035               "vmovdqa 96(%0), %%ymm9;"
1036               "leaq _randArray(%%rip), %%r14;"
1037               "vmovq %%r14, %%xmm7;"
1038               "vpsllq $2, %%ymm8, %%ymm8;"
1039               "vpbroadcastq %%xmm7, %%ymm7;"
1040               "vpaddq %%ymm7, %%ymm8, %%ymm8;"
1041               "vgatherqps %%xmm6, 1(,%%ymm8,1), %%xmm9;"
1042               "vpsubq %%ymm7, %%ymm8, %%ymm8;"
1043               "vmovdqa 0(%0), %%ymm7;"
1044               "xorl %%r14d, %%r14d")
1045
1046GEN_test_Ronly(VGATHERDPD_128,
1047               "vpslld $26, %%xmm7, %%xmm8;"
1048               "vpsrld $26, %%xmm8, %%xmm8;"
1049               "vshufps $13, %%xmm6, %%xmm6, %%xmm9;"
1050               "vblendvps %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
1051               "vmovdqa 96(%0), %%ymm9;"
1052               "leaq _randArray(%%rip), %%r14;"
1053               "vgatherdpd %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
1054               "xorl %%r14d, %%r14d")
1055
1056GEN_test_Ronly(VGATHERDPD_256,
1057               "vpslld $26, %%ymm7, %%ymm8;"
1058               "vpsrld $26, %%ymm8, %%ymm8;"
1059               "vextracti128 $1, %%ymm6, %%xmm9;"
1060               "vshufps $221, %%ymm9, %%ymm6, %%ymm9;"
1061               "vblendvps %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1062               "vmovdqa 96(%0), %%ymm9;"
1063               "leaq _randArray(%%rip), %%r14;"
1064               "vgatherdpd %%ymm6, 3(%%r14,%%xmm8,8), %%ymm9;"
1065               "xorl %%r14d, %%r14d")
1066
1067GEN_test_Ronly(VGATHERQPD_128_1,
1068               "vpsllq $58, %%xmm7, %%xmm8;"
1069               "vpsrlq $58, %%xmm8, %%xmm8;"
1070               "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
1071               "leaq _randArray(%%rip), %%r14;"
1072               "vgatherqpd %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
1073               "xorl %%r14d, %%r14d")
1074
1075GEN_test_Ronly(VGATHERQPD_256_1,
1076               "vpsllq $58, %%ymm7, %%ymm8;"
1077               "vpsrlq $58, %%ymm8, %%ymm8;"
1078               "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
1079               "leaq _randArray(%%rip), %%r14;"
1080               "vgatherqpd %%ymm6, 3(%%r14,%%ymm8,8), %%ymm9;"
1081               "xorl %%r14d, %%r14d")
1082
1083GEN_test_Ronly(VGATHERQPD_128_2,
1084               "vpsllq $58, %%xmm7, %%xmm8;"
1085               "vpsrlq $58, %%xmm8, %%xmm8;"
1086               "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
1087               "leaq _randArray(%%rip), %%r14;"
1088               "vmovq %%r14, %%xmm7;"
1089               "vpsllq $2, %%xmm8, %%xmm8;"
1090               "vpbroadcastq %%xmm7, %%xmm7;"
1091               "vpaddq %%xmm7, %%xmm8, %%xmm8;"
1092               "vgatherqpd %%xmm6, 1(,%%xmm8,1), %%xmm9;"
1093               "vpsubq %%xmm7, %%xmm8, %%xmm8;"
1094               "vmovdqa 0(%0), %%ymm7;"
1095               "xorl %%r14d, %%r14d")
1096
1097GEN_test_Ronly(VGATHERQPD_256_2,
1098               "vpsllq $58, %%ymm7, %%ymm8;"
1099               "vpsrlq $58, %%ymm8, %%ymm8;"
1100               "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
1101               "leaq _randArray(%%rip), %%r14;"
1102               "vmovq %%r14, %%xmm7;"
1103               "vpsllq $2, %%ymm8, %%ymm8;"
1104               "vpbroadcastq %%xmm7, %%ymm7;"
1105               "vpaddq %%ymm7, %%ymm8, %%ymm8;"
1106               "vgatherqpd %%ymm6, 1(,%%ymm8,1), %%ymm9;"
1107               "vpsubq %%ymm7, %%ymm8, %%ymm8;"
1108               "vmovdqa 0(%0), %%ymm7;"
1109               "xorl %%r14d, %%r14d")
1110
1111GEN_test_Ronly(VPGATHERDD_128,
1112               "vpslld $25, %%xmm7, %%xmm8;"
1113               "vpsrld $25, %%xmm8, %%xmm8;"
1114               "vblendvps %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
1115               "leaq _randArray(%%rip), %%r14;"
1116               "vpgatherdd %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
1117               "xorl %%r14d, %%r14d")
1118
1119GEN_test_Ronly(VPGATHERDD_256,
1120               "vpslld $25, %%ymm7, %%ymm8;"
1121               "vpsrld $25, %%ymm8, %%ymm8;"
1122               "vblendvps %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
1123               "leaq _randArray(%%rip), %%r14;"
1124               "vpgatherdd %%ymm6, 3(%%r14,%%ymm8,4), %%ymm9;"
1125               "xorl %%r14d, %%r14d")
1126
1127GEN_test_Ronly(VPGATHERQD_128_1,
1128               "vpsllq $57, %%xmm7, %%xmm8;"
1129               "vpsrlq $57, %%xmm8, %%xmm8;"
1130               "vpmovsxdq %%xmm6, %%xmm9;"
1131               "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
1132               "vmovdqa 96(%0), %%ymm9;"
1133               "leaq _randArray(%%rip), %%r14;"
1134               "vpgatherqd %%xmm6, 3(%%r14,%%xmm8,4), %%xmm9;"
1135               "xorl %%r14d, %%r14d")
1136
1137GEN_test_Ronly(VPGATHERQD_256_1,
1138               "vpsllq $57, %%ymm7, %%ymm8;"
1139               "vpsrlq $57, %%ymm8, %%ymm8;"
1140               "vpmovsxdq %%xmm6, %%ymm9;"
1141               "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1142               "vmovdqa 96(%0), %%ymm9;"
1143               "leaq _randArray(%%rip), %%r14;"
1144               "vpgatherqd %%xmm6, 3(%%r14,%%ymm8,4), %%xmm9;"
1145               "xorl %%r14d, %%r14d")
1146
1147GEN_test_Ronly(VPGATHERQD_128_2,
1148               "vpsllq $57, %%xmm7, %%xmm8;"
1149               "vpsrlq $57, %%xmm8, %%xmm8;"
1150               "vpmovsxdq %%xmm6, %%xmm9;"
1151               "vblendvpd %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
1152               "vmovdqa 96(%0), %%ymm9;"
1153               "leaq _randArray(%%rip), %%r14;"
1154               "vmovq %%r14, %%xmm7;"
1155               "vpsllq $2, %%xmm8, %%xmm8;"
1156               "vpbroadcastq %%xmm7, %%xmm7;"
1157               "vpaddq %%xmm7, %%xmm8, %%xmm8;"
1158               "vpgatherqd %%xmm6, 1(,%%xmm8,1), %%xmm9;"
1159               "vpsubq %%xmm7, %%xmm8, %%xmm8;"
1160               "vmovdqa 0(%0), %%ymm7;"
1161               "xorl %%r14d, %%r14d")
1162
1163GEN_test_Ronly(VPGATHERQD_256_2,
1164               "vpsllq $57, %%ymm7, %%ymm8;"
1165               "vpsrlq $57, %%ymm8, %%ymm8;"
1166               "vpmovsxdq %%xmm6, %%ymm9;"
1167               "vblendvpd %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1168               "vmovdqa 96(%0), %%ymm9;"
1169               "leaq _randArray(%%rip), %%r14;"
1170               "vmovq %%r14, %%xmm7;"
1171               "vpsllq $2, %%ymm8, %%ymm8;"
1172               "vpbroadcastq %%xmm7, %%ymm7;"
1173               "vpaddq %%ymm7, %%ymm8, %%ymm8;"
1174               "vpgatherqd %%xmm6, 1(,%%ymm8,1), %%xmm9;"
1175               "vpsubq %%ymm7, %%ymm8, %%ymm8;"
1176               "vmovdqa 0(%0), %%ymm7;"
1177               "xorl %%r14d, %%r14d")
1178
1179GEN_test_Ronly(VPGATHERDQ_128,
1180               "vpslld $26, %%xmm7, %%xmm8;"
1181               "vpsrld $26, %%xmm8, %%xmm8;"
1182               "vshufps $13, %%xmm6, %%xmm6, %%xmm9;"
1183               "vblendvps %%xmm9, %%xmm8, %%xmm7, %%xmm8;"
1184               "vmovdqa 96(%0), %%ymm9;"
1185               "leaq _randArray(%%rip), %%r14;"
1186               "vpgatherdq %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
1187               "xorl %%r14d, %%r14d")
1188
1189GEN_test_Ronly(VPGATHERDQ_256,
1190               "vpslld $26, %%ymm7, %%ymm8;"
1191               "vpsrld $26, %%ymm8, %%ymm8;"
1192               "vextracti128 $1, %%ymm6, %%xmm9;"
1193               "vshufps $221, %%ymm9, %%ymm6, %%ymm9;"
1194               "vblendvps %%ymm9, %%ymm8, %%ymm7, %%ymm8;"
1195               "vmovdqa 96(%0), %%ymm9;"
1196               "leaq _randArray(%%rip), %%r14;"
1197               "vpgatherdq %%ymm6, 3(%%r14,%%xmm8,8), %%ymm9;"
1198               "xorl %%r14d, %%r14d")
1199
1200GEN_test_Ronly(VPGATHERQQ_128_1,
1201               "vpsllq $58, %%xmm7, %%xmm8;"
1202               "vpsrlq $58, %%xmm8, %%xmm8;"
1203               "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
1204               "leaq _randArray(%%rip), %%r14;"
1205               "vpgatherqq %%xmm6, 3(%%r14,%%xmm8,8), %%xmm9;"
1206               "xorl %%r14d, %%r14d")
1207
1208GEN_test_Ronly(VPGATHERQQ_256_1,
1209               "vpsllq $58, %%ymm7, %%ymm8;"
1210               "vpsrlq $58, %%ymm8, %%ymm8;"
1211               "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
1212               "leaq _randArray(%%rip), %%r14;"
1213               "vpgatherqq %%ymm6, 3(%%r14,%%ymm8,8), %%ymm9;"
1214               "xorl %%r14d, %%r14d")
1215
1216GEN_test_Ronly(VPGATHERQQ_128_2,
1217               "vpsllq $58, %%xmm7, %%xmm8;"
1218               "vpsrlq $58, %%xmm8, %%xmm8;"
1219               "vblendvpd %%xmm6, %%xmm8, %%xmm7, %%xmm8;"
1220               "leaq _randArray(%%rip), %%r14;"
1221               "vmovq %%r14, %%xmm7;"
1222               "vpsllq $2, %%xmm8, %%xmm8;"
1223               "vpbroadcastq %%xmm7, %%xmm7;"
1224               "vpaddq %%xmm7, %%xmm8, %%xmm8;"
1225               "vpgatherqq %%xmm6, 1(,%%xmm8,1), %%xmm9;"
1226               "vpsubq %%xmm7, %%xmm8, %%xmm8;"
1227               "vmovdqa 0(%0), %%ymm7;"
1228               "xorl %%r14d, %%r14d")
1229
1230GEN_test_Ronly(VPGATHERQQ_256_2,
1231               "vpsllq $58, %%ymm7, %%ymm8;"
1232               "vpsrlq $58, %%ymm8, %%ymm8;"
1233               "vblendvpd %%ymm6, %%ymm8, %%ymm7, %%ymm8;"
1234               "leaq _randArray(%%rip), %%r14;"
1235               "vmovq %%r14, %%xmm7;"
1236               "vpsllq $2, %%ymm8, %%ymm8;"
1237               "vpbroadcastq %%xmm7, %%ymm7;"
1238               "vpaddq %%ymm7, %%ymm8, %%ymm8;"
1239               "vpgatherqq %%ymm6, 1(,%%ymm8,1), %%ymm9;"
1240               "vpsubq %%ymm7, %%ymm8, %%ymm8;"
1241               "vmovdqa 0(%0), %%ymm7;"
1242               "xorl %%r14d, %%r14d")
1243
1244/* Comment duplicated above, for convenient reference:
1245   Allowed operands in test insns:
1246     Reg form:  %ymm6,  %ymm7, %ymm8, %ymm9 and %r14.
1247     Mem form:  (%rax), %ymm7, %ymm8, %ymm9 and %r14.
1248   Imm8 etc fields are also allowed, where they make sense.
1249   Both forms may use ymm0 as scratch.  Mem form may also use
1250   ymm6 as scratch.
1251*/
1252
1253#define N_DEFAULT_ITERS 3
1254
1255// Do the specified test some number of times
1256#define DO_N(_iters, _testfn) \
1257   do { int i; for (i = 0; i < (_iters); i++) { test_##_testfn(); } } while (0)
1258
1259// Do the specified test the default number of times
1260#define DO_D(_testfn) DO_N(N_DEFAULT_ITERS, _testfn)
1261
1262
1263int main ( void )
1264{
1265   DO_D( VPOR_256 );
1266   DO_D( VPXOR_256 );
1267   DO_D( VPSUBB_256 );
1268   DO_D( VPSUBD_256 );
1269   DO_D( VPADDD_256 );
1270   DO_D( VPMOVZXWD_256 );
1271   DO_D( VPMOVZXBW_256 );
1272   DO_D( VPBLENDVB_256 );
1273   DO_D( VPMINSD_256 );
1274   DO_D( VPMAXSD_256 );
1275   DO_D( VPSHUFB_256 );
1276   DO_D( VPUNPCKLBW_256 );
1277   DO_D( VPUNPCKHBW_256 );
1278   DO_D( VPABSD_256 );
1279   DO_D( VPACKUSWB_256 );
1280   DO_D( VPMOVMSKB_256 );
1281   DO_D( VPAND_256 );
1282   DO_D( VPCMPEQB_256 );
1283   DO_D( VPSHUFLW_0x39_256 );
1284   DO_D( VPSHUFHW_0x39_256 );
1285   DO_D( VPMULLW_256 );
1286   DO_D( VPADDUSW_256 );
1287   DO_D( VPMULHUW_256 );
1288   DO_D( VPADDUSB_256 );
1289   DO_D( VPUNPCKLWD_256 );
1290   DO_D( VPUNPCKHWD_256 );
1291   DO_D( VPSLLD_0x05_256 );
1292   DO_D( VPSRLD_0x05_256 );
1293   DO_D( VPSRAD_0x05_256 );
1294   DO_D( VPSUBUSB_256 );
1295   DO_D( VPSUBSB_256 );
1296   DO_D( VPSRLDQ_0x05_256 );
1297   DO_D( VPSLLDQ_0x05_256 );
1298   DO_D( VPANDN_256 );
1299   DO_D( VPUNPCKLQDQ_256 );
1300   DO_D( VPSRLW_0x05_256 );
1301   DO_D( VPSLLW_0x05_256 );
1302   DO_D( VPADDW_256 );
1303   DO_D( VPACKSSDW_256 );
1304   DO_D( VPUNPCKLDQ_256 );
1305   DO_D( VPCMPEQD_256 );
1306   DO_D( VPSHUFD_0x39_256 );
1307   DO_D( VPADDQ_256 );
1308   DO_D( VPSUBQ_256 );
1309   DO_D( VPSUBW_256 );
1310   DO_D( VPCMPEQQ_256 );
1311   DO_D( VPCMPGTQ_256 );
1312   DO_D( VPSRLQ_0x05_256 );
1313   DO_D( VPMULUDQ_256 );
1314   DO_D( VPMULDQ_256 );
1315   DO_D( VPSLLQ_0x05_256 );
1316   DO_D( VPMAXUD_256 );
1317   DO_D( VPMINUD_256 );
1318   DO_D( VPMULLD_256 );
1319   DO_D( VPMAXUW_256 );
1320   DO_D( VPMINUW_256 );
1321   DO_D( VPMAXSW_256 );
1322   DO_D( VPMINSW_256 );
1323   DO_D( VPMAXUB_256 );
1324   DO_D( VPMINUB_256 );
1325   DO_D( VPMAXSB_256 );
1326   DO_D( VPMINSB_256 );
1327   DO_D( VPMOVSXBW_256 );
1328   DO_D( VPSUBUSW_256 );
1329   DO_D( VPSUBSW_256 );
1330   DO_D( VPCMPEQW_256 );
1331   DO_D( VPADDB_256 );
1332   DO_D( VPUNPCKHDQ_256 );
1333   DO_D( VPMOVSXDQ_256 );
1334   DO_D( VPMOVSXWD_256 );
1335   DO_D( VPMULHW_256 );
1336   DO_D( VPUNPCKHQDQ_256 );
1337   DO_D( VPSRAW_0x05_256 );
1338   DO_D( VPCMPGTB_256 );
1339   DO_D( VPCMPGTW_256 );
1340   DO_D( VPCMPGTD_256 );
1341   DO_D( VPMOVZXBD_256 );
1342   DO_D( VPMOVSXBD_256 );
1343   DO_D( VPALIGNR_256_1of3 );
1344   DO_D( VPALIGNR_256_2of3 );
1345   DO_D( VPALIGNR_256_3of3 );
1346   DO_D( VPBLENDW_256_0x00 );
1347   DO_D( VPBLENDW_256_0xFE );
1348   DO_D( VPBLENDW_256_0x30 );
1349   DO_D( VPBLENDW_256_0x21 );
1350   DO_D( VPBLENDW_256_0xD7 );
1351   DO_D( VPBLENDW_256_0xB5 );
1352   DO_D( VPBLENDW_256_0x85 );
1353   DO_D( VPBLENDW_256_0x29 );
1354   DO_D( VPSLLW_256 );
1355   DO_D( VPSRLW_256 );
1356   DO_D( VPSRAW_256 );
1357   DO_D( VPSLLD_256 );
1358   DO_D( VPSRLD_256 );
1359   DO_D( VPSRAD_256 );
1360   DO_D( VPSLLQ_256 );
1361   DO_D( VPSRLQ_256 );
1362   DO_D( VPMADDWD_256 );
1363   DO_D( VMOVNTDQA_256 );
1364   DO_D( VPACKSSWB_256 );
1365   DO_D( VPAVGB_256 );
1366   DO_D( VPAVGW_256 );
1367   DO_D( VPADDSB_256 );
1368   DO_D( VPADDSW_256 );
1369   DO_D( VPHADDW_256 );
1370   DO_D( VPHADDD_256 );
1371   DO_D( VPHADDSW_256 );
1372   DO_D( VPMADDUBSW_256 );
1373   DO_D( VPHSUBW_256 );
1374   DO_D( VPHSUBD_256 );
1375   DO_D( VPHSUBSW_256 );
1376   DO_D( VPABSB_256 );
1377   DO_D( VPABSW_256 );
1378   DO_D( VPMOVSXBQ_256 );
1379   DO_D( VPMOVSXWQ_256 );
1380   DO_D( VPACKUSDW_256 );
1381   DO_D( VPMOVZXBQ_256 );
1382   DO_D( VPMOVZXWQ_256 );
1383   DO_D( VPMOVZXDQ_256 );
1384   DO_D( VMPSADBW_256_0x0 );
1385   DO_D( VMPSADBW_256_0x39 );
1386   DO_D( VMPSADBW_256_0x32 );
1387   DO_D( VMPSADBW_256_0x2b );
1388   DO_D( VMPSADBW_256_0x24 );
1389   DO_D( VMPSADBW_256_0x1d );
1390   DO_D( VMPSADBW_256_0x16 );
1391   DO_D( VMPSADBW_256_0x0f );
1392   DO_D( VPSADBW_256 );
1393   DO_D( VPSIGNB_256 );
1394   DO_D( VPSIGNW_256 );
1395   DO_D( VPSIGND_256 );
1396   DO_D( VPMULHRSW_256 );
1397   DO_D( VBROADCASTI128 );
1398   DO_D( VEXTRACTI128_0x0 );
1399   DO_D( VEXTRACTI128_0x1 );
1400   DO_D( VINSERTI128_0x0 );
1401   DO_D( VINSERTI128_0x1 );
1402   DO_D( VPERM2I128_0x00 );
1403   DO_D( VPERM2I128_0xFF );
1404   DO_D( VPERM2I128_0x30 );
1405   DO_D( VPERM2I128_0x21 );
1406   DO_D( VPERM2I128_0x12 );
1407   DO_D( VPERM2I128_0x03 );
1408   DO_D( VPERM2I128_0x85 );
1409   DO_D( VPERM2I128_0x5A );
1410   DO_D( VBROADCASTSS_128 );
1411   DO_D( VBROADCASTSS_256 );
1412   DO_D( VBROADCASTSD_256 );
1413   DO_D( VPERMD );
1414   DO_D( VPERMQ_0x00 );
1415   DO_D( VPERMQ_0xFE );
1416   DO_D( VPERMQ_0x30 );
1417   DO_D( VPERMQ_0x21 );
1418   DO_D( VPERMQ_0xD7 );
1419   DO_D( VPERMQ_0xB5 );
1420   DO_D( VPERMQ_0x85 );
1421   DO_D( VPERMQ_0x29 );
1422   DO_D( VPERMPS );
1423   DO_D( VPERMPD_0x00 );
1424   DO_D( VPERMPD_0xFE );
1425   DO_D( VPERMPD_0x30 );
1426   DO_D( VPERMPD_0x21 );
1427   DO_D( VPERMPD_0xD7 );
1428   DO_D( VPERMPD_0xB5 );
1429   DO_D( VPERMPD_0x85 );
1430   DO_D( VPERMPD_0x29 );
1431   DO_D( VPBLENDD_128_0x00 );
1432   DO_D( VPBLENDD_128_0x02 );
1433   DO_D( VPBLENDD_128_0x04 );
1434   DO_D( VPBLENDD_128_0x06 );
1435   DO_D( VPBLENDD_128_0x08 );
1436   DO_D( VPBLENDD_128_0x0A );
1437   DO_D( VPBLENDD_128_0x0C );
1438   DO_D( VPBLENDD_128_0x0E );
1439   DO_D( VPBLENDD_256_0x00 );
1440   DO_D( VPBLENDD_256_0xFE );
1441   DO_D( VPBLENDD_256_0x30 );
1442   DO_D( VPBLENDD_256_0x21 );
1443   DO_D( VPBLENDD_256_0xD7 );
1444   DO_D( VPBLENDD_256_0xB5 );
1445   DO_D( VPBLENDD_256_0x85 );
1446   DO_D( VPBLENDD_256_0x29 );
1447   DO_D( VPSLLVD_128 );
1448   DO_D( VPSLLVD_256 );
1449   DO_D( VPSLLVQ_128 );
1450   DO_D( VPSLLVQ_256 );
1451   DO_D( VPSRLVD_128 );
1452   DO_D( VPSRLVD_256 );
1453   DO_D( VPSRLVQ_128 );
1454   DO_D( VPSRLVQ_256 );
1455   DO_D( VPSRAVD_128 );
1456   DO_D( VPSRAVD_256 );
1457   DO_D( VPBROADCASTB_128 );
1458   DO_D( VPBROADCASTB_256 );
1459   DO_D( VPBROADCASTW_128 );
1460   DO_D( VPBROADCASTW_256 );
1461   DO_D( VPBROADCASTD_128 );
1462   DO_D( VPBROADCASTD_256 );
1463   DO_D( VPBROADCASTQ_128 );
1464   DO_D( VPBROADCASTQ_256 );
1465   DO_D( VPMASKMOVD_128_LoadForm );
1466   DO_D( VPMASKMOVD_256_LoadForm );
1467   DO_D( VPMASKMOVQ_128_LoadForm );
1468   DO_D( VPMASKMOVQ_256_LoadForm );
1469   DO_D( VPMASKMOVD_128_StoreForm );
1470   DO_D( VPMASKMOVD_256_StoreForm );
1471   DO_D( VPMASKMOVQ_128_StoreForm );
1472   DO_D( VPMASKMOVQ_256_StoreForm );
1473#if defined(VGO_darwin)
1474   { int i; for (i = 0; i < sizeof(randArray); i++) randArray[i] = randUChar(); }
1475#else
1476   { int i; for (i = 0; i < sizeof(_randArray); i++) _randArray[i] = randUChar(); }
1477#endif
1478   DO_D( VGATHERDPS_128 );
1479   DO_D( VGATHERDPS_256 );
1480   DO_D( VGATHERQPS_128_1 );
1481   DO_D( VGATHERQPS_256_1 );
1482   DO_D( VGATHERQPS_128_2 );
1483   DO_D( VGATHERQPS_256_2 );
1484   DO_D( VGATHERDPD_128 );
1485   DO_D( VGATHERDPD_256 );
1486   DO_D( VGATHERQPD_128_1 );
1487   DO_D( VGATHERQPD_256_1 );
1488   DO_D( VGATHERQPD_128_2 );
1489   DO_D( VGATHERQPD_256_2 );
1490   DO_D( VPGATHERDD_128 );
1491   DO_D( VPGATHERDD_256 );
1492   DO_D( VPGATHERQD_128_1 );
1493   DO_D( VPGATHERQD_256_1 );
1494   DO_D( VPGATHERQD_128_2 );
1495   DO_D( VPGATHERQD_256_2 );
1496   DO_D( VPGATHERDQ_128 );
1497   DO_D( VPGATHERDQ_256 );
1498   DO_D( VPGATHERQQ_128_1 );
1499   DO_D( VPGATHERQQ_256_1 );
1500   DO_D( VPGATHERQQ_128_2 );
1501   DO_D( VPGATHERQQ_256_2 );
1502   return 0;
1503}
1504