fp_and_simd.c revision b5b05affe1b9179353e7ccfdc96df750529daede
1
2#include <stdio.h>
3#include <assert.h>
4#include <malloc.h>  // memalign
5#include <string.h>  // memset
6#include <math.h>    // isnormal
7
8typedef  unsigned char           UChar;
9typedef  unsigned short int      UShort;
10typedef  unsigned int            UInt;
11typedef  signed int              Int;
12typedef  unsigned char           UChar;
13typedef  unsigned long long int  ULong;
14
15typedef  unsigned char           Bool;
16#define False ((Bool)0)
17#define True  ((Bool)1)
18
19
20#define ITERS 1
21
22typedef
23  enum { TySF=1234, TyDF, TyB, TyH, TyS, TyD, TyNONE }
24  LaneTy;
25
26union _V128 {
27   UChar  u8[16];
28   UShort u16[8];
29   UInt   u32[4];
30   ULong  u64[2];
31   float  f32[4];
32   double f64[2];
33};
34typedef  union _V128   V128;
35
36static inline UChar randUChar ( void )
37{
38   static UInt seed = 80021;
39   seed = 1103515245 * seed + 12345;
40   return (seed >> 17) & 0xFF;
41}
42
43static ULong randULong ( LaneTy ty )
44{
45   Int i;
46   ULong r = 0;
47   for (i = 0; i < 8; i++) {
48      r = (r << 8) | (ULong)(0xFF & randUChar());
49   }
50   return r;
51}
52
53/* Generates a random V128.  Ensures that that it contains normalised
54   FP numbers when viewed as either F32x4 or F64x2, so that it is
55   reasonable to use in FP test cases. */
56static void randV128 ( /*OUT*/V128* v, LaneTy ty )
57{
58   static UInt nCalls = 0, nIters = 0;
59   Int i;
60   nCalls++;
61   while (1) {
62      nIters++;
63      for (i = 0; i < 16; i++) {
64         v->u8[i] = randUChar();
65      }
66      if (isnormal(v->f32[0]) && isnormal(v->f32[1]) && isnormal(v->f32[2])
67          && isnormal(v->f32[3]) && isnormal(v->f64[0]) && isnormal(v->f64[1]))
68        break;
69   }
70   if (0 == (nCalls & 0xFF))
71      printf("randV128: %u calls, %u iters\n", nCalls, nIters);
72}
73
74static void showV128 ( V128* v )
75{
76   Int i;
77   for (i = 15; i >= 0; i--)
78      printf("%02x", (Int)v->u8[i]);
79}
80
81__attribute__((unused))
82static void* memalign16(size_t szB)
83{
84   void* x;
85   x = memalign(16, szB);
86   assert(x);
87   assert(0 == ((16-1) & (unsigned long)x));
88   return x;
89}
90
91
92/* ---------------------------------------------------------------- */
93/* -- Test functions                                             -- */
94/* ---------------------------------------------------------------- */
95
96/* Note this also sets the destination register to a known value (0x55..55)
97   since it can sometimes be an input to the instruction too. */
98#define GEN_UNARY_TEST(INSN,SUFFIXD,SUFFIXN) \
99  __attribute__((noinline)) \
100  static void test_##INSN##_##SUFFIXD##_##SUFFIXN ( LaneTy ty ) { \
101     Int i; \
102     for (i = 0; i < ITERS; i++) { \
103        V128 block[2]; \
104        memset(block, 0x55, sizeof(block)); \
105        randV128(&block[0], ty); \
106        randV128(&block[1], ty); \
107        __asm__ __volatile__( \
108           "ldr   q7, [%0, #0]   ; " \
109           "ldr   q8, [%0, #16]   ; " \
110           #INSN " v8." #SUFFIXD ", v7." #SUFFIXN " ; " \
111           "str   q8, [%0, #16] " \
112           : : "r"(&block[0]) : "memory", "v7", "v8" \
113        ); \
114        printf(#INSN   " v8." #SUFFIXD ", v7." #SUFFIXN); \
115        showV128(&block[0]); printf("  "); \
116        showV128(&block[1]); printf("\n"); \
117     } \
118  }
119
120
121/* Note this also sets the destination register to a known value (0x55..55)
122   since it can sometimes be an input to the instruction too. */
123#define GEN_BINARY_TEST(INSN,SUFFIXD,SUFFIXN,SUFFIXM)  \
124  __attribute__((noinline)) \
125  static void test_##INSN##_##SUFFIXD##_##SUFFIXN##_##SUFFIXM ( LaneTy ty ) { \
126     Int i; \
127     for (i = 0; i < ITERS; i++) { \
128        V128 block[3]; \
129        memset(block, 0x55, sizeof(block)); \
130        randV128(&block[0], ty); \
131        randV128(&block[1], ty); \
132        randV128(&block[2], ty); \
133        __asm__ __volatile__( \
134           "ldr   q7, [%0, #0]   ; " \
135           "ldr   q8, [%0, #16]   ; " \
136           "ldr   q9, [%0, #32]   ; " \
137           #INSN " v9." #SUFFIXD ", v7." #SUFFIXN ", v8." #SUFFIXM " ; " \
138           "str   q9, [%0, #32] " \
139           : : "r"(&block[0]) : "memory", "v7", "v8", "v9" \
140        ); \
141        printf(#INSN   " v9." #SUFFIXD \
142               ", v7." #SUFFIXN ", v8." #SUFFIXM "  ");   \
143        showV128(&block[0]); printf("  "); \
144        showV128(&block[1]); printf("  "); \
145        showV128(&block[2]); printf("\n"); \
146     } \
147  }
148
149
150/* Note this also sets the destination register to a known value (0x55..55)
151   since it can sometimes be an input to the instruction too. */
152#define GEN_SHIFT_TEST(INSN,SUFFIXD,SUFFIXN,AMOUNT) \
153  __attribute__((noinline)) \
154  static void test_##INSN##_##SUFFIXD##_##SUFFIXN##_##AMOUNT ( LaneTy ty ) { \
155     Int i; \
156     for (i = 0; i < ITERS; i++) { \
157        V128 block[2]; \
158        memset(block, 0x55, sizeof(block)); \
159        randV128(&block[0], ty); \
160        randV128(&block[1], ty); \
161        __asm__ __volatile__( \
162           "ldr   q7, [%0, #0]   ; " \
163           "ldr   q8, [%0, #16]   ; " \
164           #INSN " v8." #SUFFIXD ", v7." #SUFFIXN ", #" #AMOUNT " ; " \
165           "str   q8, [%0, #16] " \
166           : : "r"(&block[0]) : "memory", "v7", "v8" \
167        ); \
168        printf(#INSN   " v8." #SUFFIXD ", v7." #SUFFIXN ", #" #AMOUNT "  "); \
169        showV128(&block[0]); printf("  "); \
170        showV128(&block[1]); printf("\n"); \
171     } \
172  }
173
174
175/* Generate a test that involves one integer reg and one vector reg,
176   with no bias as towards which is input or output. */
177#define GEN_ONEINT_ONEVEC_TEST(TESTNAME,INSN,INTREGNO,VECREGNO) \
178  __attribute__((noinline)) \
179  static void test_##TESTNAME ( LaneTy ty ) { \
180     Int i; \
181     for (i = 0; i < ITERS; i++) { \
182        V128 block[4]; \
183        memset(block, 0x55, sizeof(block)); \
184        randV128(&block[0], ty); \
185        randV128(&block[1], ty); \
186        randV128(&block[2], ty); \
187        randV128(&block[3], ty); \
188        __asm__ __volatile__( \
189           "ldr   q"#VECREGNO", [%0, #0]  ; " \
190           "ldr   x"#INTREGNO", [%0, #16] ; " \
191           INSN " ; " \
192           "str   q"#VECREGNO", [%0, #32] ; " \
193           "str   x"#INTREGNO", [%0, #48] ; " \
194           : : "r"(&block[0]) : "memory", "v"#VECREGNO, "x"#INTREGNO \
195        ); \
196        printf(INSN   "   "); \
197        showV128(&block[0]); printf("  "); \
198        showV128(&block[1]); printf("  "); \
199        showV128(&block[2]); printf("  "); \
200        showV128(&block[3]); printf("\n"); \
201     } \
202  }
203
204
205/* Generate a test that involves two vector regs,
206   with no bias as towards which is input or output.
207   It's OK to use x10 as scratch.*/
208#define GEN_TWOVEC_TEST(TESTNAME,INSN,VECREG1NO,VECREG2NO) \
209  __attribute__((noinline)) \
210  static void test_##TESTNAME ( LaneTy ty ) { \
211     Int i; \
212     for (i = 0; i < ITERS; i++) { \
213        V128 block[4]; \
214        memset(block, 0x55, sizeof(block)); \
215        randV128(&block[0], ty); \
216        randV128(&block[1], ty); \
217        randV128(&block[2], ty); \
218        randV128(&block[3], ty); \
219        __asm__ __volatile__( \
220           "ldr   q"#VECREG1NO", [%0, #0]  ; " \
221           "ldr   q"#VECREG2NO", [%0, #16] ; " \
222           INSN " ; " \
223           "str   q"#VECREG1NO", [%0, #32] ; " \
224           "str   q"#VECREG2NO", [%0, #48] ; " \
225           : : "r"(&block[0]) \
226             : "memory", "v"#VECREG1NO, "v"#VECREG2NO, "x10" \
227        ); \
228        printf(INSN   "   "); \
229        showV128(&block[0]); printf("  "); \
230        showV128(&block[1]); printf("  "); \
231        showV128(&block[2]); printf("  "); \
232        showV128(&block[3]); printf("\n"); \
233     } \
234  }
235
236
237/* Generate a test that involves three vector regs,
238   with no bias as towards which is input or output.  It's also OK
239   to use v16, v17, v18 as scratch. */
240#define GEN_THREEVEC_TEST(TESTNAME,INSN,VECREG1NO,VECREG2NO,VECREG3NO)  \
241  __attribute__((noinline)) \
242  static void test_##TESTNAME ( LaneTy ty ) { \
243     Int i; \
244     for (i = 0; i < ITERS; i++) { \
245        V128 block[6]; \
246        memset(block, 0x55, sizeof(block)); \
247        randV128(&block[0], ty); \
248        randV128(&block[1], ty); \
249        randV128(&block[2], ty); \
250        randV128(&block[3], ty); \
251        randV128(&block[4], ty); \
252        randV128(&block[5], ty); \
253        __asm__ __volatile__( \
254           "ldr   q"#VECREG1NO", [%0, #0]  ; " \
255           "ldr   q"#VECREG2NO", [%0, #16] ; " \
256           "ldr   q"#VECREG3NO", [%0, #32] ; " \
257           INSN " ; " \
258           "str   q"#VECREG1NO", [%0, #48] ; " \
259           "str   q"#VECREG2NO", [%0, #64] ; " \
260           "str   q"#VECREG3NO", [%0, #80] ; " \
261           : : "r"(&block[0]) \
262           : "memory", "v"#VECREG1NO, "v"#VECREG2NO, "v"#VECREG3NO, \
263             "v16", "v17", "v18" \
264        ); \
265        printf(INSN   "   "); \
266        showV128(&block[0]); printf("  "); \
267        showV128(&block[1]); printf("  "); \
268        showV128(&block[2]); printf("  "); \
269        showV128(&block[3]); printf("  "); \
270        showV128(&block[4]); printf("  "); \
271        showV128(&block[5]); printf("\n"); \
272     } \
273  }
274
275
276void test_UMINV ( void )
277{
278  int i;
279  V128 block[2];
280
281  /* -- 4s -- */
282
283  for (i = 0; i < 10; i++) {
284    memset(&block, 0x55, sizeof(block));
285    randV128(&block[0], TyS);
286    randV128(&block[1], TyS);
287    __asm__ __volatile__(
288       "ldr   q7, [%0, #0]   ; "
289       "uminv s8, v7.4s   ; "
290       "str   q8, [%0, #16] "
291       : : "r"(&block[0]) : "memory", "v7", "v8"
292                         );
293    printf("UMINV v8, v7.4s  ");
294    showV128(&block[0]); printf("  ");
295    showV128(&block[1]); printf("\n");
296  }
297
298  /* -- 8h -- */
299
300  for (i = 0; i < 10; i++) {
301    memset(&block, 0x55, sizeof(block));
302    randV128(&block[0], TyH);
303    randV128(&block[1], TyH);
304    __asm__ __volatile__(
305       "ldr   q7, [%0, #0]   ; "
306       "uminv h8, v7.8h   ; "
307       "str   q8, [%0, #16] "
308       : : "r"(&block[0]) : "memory", "v7", "v8"
309                         );
310    printf("UMINV h8, v7.8h  ");
311    showV128(&block[0]); printf("  ");
312    showV128(&block[1]); printf("\n");
313  }
314
315  /* -- 4h -- */
316
317  for (i = 0; i < 10; i++) {
318    memset(&block, 0x55, sizeof(block));
319    randV128(&block[0], TyH);
320    randV128(&block[1], TyH);
321    __asm__ __volatile__(
322       "ldr   q7, [%0, #0]   ; "
323       "uminv h8, v7.4h   ; "
324       "str   q8, [%0, #16] "
325       : : "r"(&block[0]) : "memory", "v7", "v8"
326                         );
327    printf("UMINV h8, v7.4h  ");
328    showV128(&block[0]); printf("  ");
329    showV128(&block[1]); printf("\n");
330  }
331
332  /* -- 16b -- */
333
334  for (i = 0; i < 10; i++) {
335    memset(&block, 0x55, sizeof(block));
336    randV128(&block[0], TyB);
337    randV128(&block[1], TyB);
338    __asm__ __volatile__(
339       "ldr   q7, [%0, #0]   ; "
340       "uminv b8, v7.16b   ; "
341       "str   q8, [%0, #16] "
342       : : "r"(&block[0]) : "memory", "v7", "v8"
343                         );
344    printf("UMINV b8, v7.16b  ");
345    showV128(&block[0]); printf("  ");
346    showV128(&block[1]); printf("\n");
347  }
348
349  /* -- 8b -- */
350
351  for (i = 0; i < 10; i++) {
352    memset(&block, 0x55, sizeof(block));
353    randV128(&block[0], TyB);
354    randV128(&block[1], TyB);
355    __asm__ __volatile__(
356       "ldr   q7, [%0, #0]   ; "
357       "uminv b8, v7.8b   ; "
358       "str   q8, [%0, #16] "
359       : : "r"(&block[0]) : "memory", "v7", "v8"
360                         );
361    printf("UMINV b8, v7.8b  ");
362    showV128(&block[0]); printf("  ");
363    showV128(&block[1]); printf("\n");
364  }
365
366}
367
368
369void test_UMAXV ( void )
370{
371  int i;
372  V128 block[2];
373
374  /* -- 4s -- */
375
376  for (i = 0; i < 10; i++) {
377    memset(&block, 0x55, sizeof(block));
378    randV128(&block[0], TyS);
379    randV128(&block[1], TyS);
380    __asm__ __volatile__(
381       "ldr   q7, [%0, #0]   ; "
382       "umaxv s8, v7.4s   ; "
383       "str   q8, [%0, #16] "
384       : : "r"(&block[0]) : "memory", "v7", "v8"
385                         );
386    printf("UMAXV v8, v7.4s  ");
387    showV128(&block[0]); printf("  ");
388    showV128(&block[1]); printf("\n");
389  }
390
391  /* -- 8h -- */
392
393  for (i = 0; i < 10; i++) {
394    memset(&block, 0x55, sizeof(block));
395    randV128(&block[0], TyH);
396    randV128(&block[1], TyH);
397    __asm__ __volatile__(
398       "ldr   q7, [%0, #0]   ; "
399       "umaxv h8, v7.8h   ; "
400       "str   q8, [%0, #16] "
401       : : "r"(&block[0]) : "memory", "v7", "v8"
402                         );
403    printf("UMAXV h8, v7.8h  ");
404    showV128(&block[0]); printf("  ");
405    showV128(&block[1]); printf("\n");
406  }
407
408  /* -- 4h -- */
409
410  for (i = 0; i < 10; i++) {
411    memset(&block, 0x55, sizeof(block));
412    randV128(&block[0], TyH);
413    randV128(&block[1], TyH);
414    __asm__ __volatile__(
415       "ldr   q7, [%0, #0]   ; "
416       "umaxv h8, v7.4h   ; "
417       "str   q8, [%0, #16] "
418       : : "r"(&block[0]) : "memory", "v7", "v8"
419                         );
420    printf("UMAXV h8, v7.4h  ");
421    showV128(&block[0]); printf("  ");
422    showV128(&block[1]); printf("\n");
423  }
424
425  /* -- 16b -- */
426
427  for (i = 0; i < 10; i++) {
428    memset(&block, 0x55, sizeof(block));
429    randV128(&block[0], TyB);
430    randV128(&block[1], TyB);
431    __asm__ __volatile__(
432       "ldr   q7, [%0, #0]   ; "
433       "umaxv b8, v7.16b   ; "
434       "str   q8, [%0, #16] "
435       : : "r"(&block[0]) : "memory", "v7", "v8"
436                         );
437    printf("UMAXV b8, v7.16b  ");
438    showV128(&block[0]); printf("  ");
439    showV128(&block[1]); printf("\n");
440  }
441
442  /* -- 8b -- */
443
444  for (i = 0; i < 10; i++) {
445    memset(&block, 0x55, sizeof(block));
446    randV128(&block[0], TyB);
447    randV128(&block[1], TyB);
448    __asm__ __volatile__(
449       "ldr   q7, [%0, #0]   ; "
450       "umaxv b8, v7.8b   ; "
451       "str   q8, [%0, #16] "
452       : : "r"(&block[0]) : "memory", "v7", "v8"
453                         );
454    printf("UMAXV b8, v7.8b  ");
455    showV128(&block[0]); printf("  ");
456    showV128(&block[1]); printf("\n");
457  }
458
459}
460
461
462void test_INS_general ( void )
463{
464  V128 block[3];
465
466  /* -- D[0..1] -- */
467
468  memset(&block, 0x55, sizeof(block));
469  block[1].u64[0] = randULong(TyD);
470  __asm__ __volatile__(
471     "ldr q7, [%0, #0]   ; "
472     "ldr x19, [%0, #16] ; "
473     "ins v7.d[0], x19   ; "
474     "str q7, [%0, #32] "
475     : : "r"(&block[0]) : "memory", "x19", "v7"
476  );
477  printf("INS v7.u64[0],x19  ");
478  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
479  showV128(&block[2]); printf("\n");
480
481  memset(&block, 0x55, sizeof(block));
482  block[1].u64[0] = randULong(TyD);
483  __asm__ __volatile__(
484     "ldr q7, [%0, #0]   ; "
485     "ldr x19, [%0, #16] ; "
486     "ins v7.d[1], x19   ; "
487     "str q7, [%0, #32] "
488     : : "r"(&block[0]) : "memory", "x19", "v7"
489  );
490  printf("INS v7.d[1],x19  ");
491  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
492  showV128(&block[2]); printf("\n");
493
494  /* -- S[0..3] -- */
495
496  memset(&block, 0x55, sizeof(block));
497  block[1].u64[0] = randULong(TyS);
498  __asm__ __volatile__(
499     "ldr q7, [%0, #0]   ; "
500     "ldr x19, [%0, #16] ; "
501     "ins v7.s[0], w19   ; "
502     "str q7, [%0, #32] "
503     : : "r"(&block[0]) : "memory", "x19", "v7"
504  );
505  printf("INS v7.s[0],x19  ");
506  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
507  showV128(&block[2]); printf("\n");
508
509  memset(&block, 0x55, sizeof(block));
510  block[1].u64[0] = randULong(TyS);
511  __asm__ __volatile__(
512     "ldr q7, [%0, #0]   ; "
513     "ldr x19, [%0, #16] ; "
514     "ins v7.s[1], w19   ; "
515     "str q7, [%0, #32] "
516     : : "r"(&block[0]) : "memory", "x19", "v7"
517  );
518  printf("INS v7.s[1],x19  ");
519  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
520  showV128(&block[2]); printf("\n");
521
522  memset(&block, 0x55, sizeof(block));
523  block[1].u64[0] = randULong(TyS);
524  __asm__ __volatile__(
525     "ldr q7, [%0, #0]   ; "
526     "ldr x19, [%0, #16] ; "
527     "ins v7.s[2], w19   ; "
528     "str q7, [%0, #32] "
529     : : "r"(&block[0]) : "memory", "x19", "v7"
530  );
531  printf("INS v7.s[2],x19  ");
532  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
533  showV128(&block[2]); printf("\n");
534
535  memset(&block, 0x55, sizeof(block));
536  block[1].u64[0] = randULong(TyS);
537  __asm__ __volatile__(
538     "ldr q7, [%0, #0]   ; "
539     "ldr x19, [%0, #16] ; "
540     "ins v7.s[3], w19   ; "
541     "str q7, [%0, #32] "
542     : : "r"(&block[0]) : "memory", "x19", "v7"
543  );
544  printf("INS v7.s[3],x19  ");
545  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
546  showV128(&block[2]); printf("\n");
547
548  /* -- H[0..7] -- */
549
550  memset(&block, 0x55, sizeof(block));
551  block[1].u64[0] = randULong(TyH);
552  __asm__ __volatile__(
553     "ldr q7, [%0, #0]   ; "
554     "ldr x19, [%0, #16] ; "
555     "ins v7.h[0], w19   ; "
556     "str q7, [%0, #32] "
557     : : "r"(&block[0]) : "memory", "x19", "v7"
558  );
559  printf("INS v7.h[0],x19  ");
560  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
561  showV128(&block[2]); printf("\n");
562
563  memset(&block, 0x55, sizeof(block));
564  block[1].u64[0] = randULong(TyH);
565  __asm__ __volatile__(
566     "ldr q7, [%0, #0]   ; "
567     "ldr x19, [%0, #16] ; "
568     "ins v7.h[1], w19   ; "
569     "str q7, [%0, #32] "
570     : : "r"(&block[0]) : "memory", "x19", "v7"
571  );
572  printf("INS v7.h[1],x19  ");
573  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
574  showV128(&block[2]); printf("\n");
575
576  memset(&block, 0x55, sizeof(block));
577  block[1].u64[0] = randULong(TyH);
578  __asm__ __volatile__(
579     "ldr q7, [%0, #0]   ; "
580     "ldr x19, [%0, #16] ; "
581     "ins v7.h[2], w19   ; "
582     "str q7, [%0, #32] "
583     : : "r"(&block[0]) : "memory", "x19", "v7"
584  );
585  printf("INS v7.h[2],x19  ");
586  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
587  showV128(&block[2]); printf("\n");
588
589  memset(&block, 0x55, sizeof(block));
590  block[1].u64[0] = randULong(TyH);
591  __asm__ __volatile__(
592     "ldr q7, [%0, #0]   ; "
593     "ldr x19, [%0, #16] ; "
594     "ins v7.h[3], w19   ; "
595     "str q7, [%0, #32] "
596     : : "r"(&block[0]) : "memory", "x19", "v7"
597  );
598  printf("INS v7.h[3],x19  ");
599  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
600  showV128(&block[2]); printf("\n");
601
602  memset(&block, 0x55, sizeof(block));
603  block[1].u64[0] = randULong(TyH);
604  __asm__ __volatile__(
605     "ldr q7, [%0, #0]   ; "
606     "ldr x19, [%0, #16] ; "
607     "ins v7.h[4], w19   ; "
608     "str q7, [%0, #32] "
609     : : "r"(&block[0]) : "memory", "x19", "v7"
610  );
611  printf("INS v7.h[4],x19  ");
612  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
613  showV128(&block[2]); printf("\n");
614
615  memset(&block, 0x55, sizeof(block));
616  block[1].u64[0] = randULong(TyH);
617  __asm__ __volatile__(
618     "ldr q7, [%0, #0]   ; "
619     "ldr x19, [%0, #16] ; "
620     "ins v7.h[5], w19   ; "
621     "str q7, [%0, #32] "
622     : : "r"(&block[0]) : "memory", "x19", "v7"
623  );
624  printf("INS v7.h[5],x19  ");
625  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
626  showV128(&block[2]); printf("\n");
627
628  memset(&block, 0x55, sizeof(block));
629  block[1].u64[0] = randULong(TyH);
630  __asm__ __volatile__(
631     "ldr q7, [%0, #0]   ; "
632     "ldr x19, [%0, #16] ; "
633     "ins v7.h[6], w19   ; "
634     "str q7, [%0, #32] "
635     : : "r"(&block[0]) : "memory", "x19", "v7"
636  );
637  printf("INS v7.h[6],x19  ");
638  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
639  showV128(&block[2]); printf("\n");
640
641  memset(&block, 0x55, sizeof(block));
642  block[1].u64[0] = randULong(TyH);
643  __asm__ __volatile__(
644     "ldr q7, [%0, #0]   ; "
645     "ldr x19, [%0, #16] ; "
646     "ins v7.h[7], w19   ; "
647     "str q7, [%0, #32] "
648     : : "r"(&block[0]) : "memory", "x19", "v7"
649  );
650  printf("INS v7.h[7],x19  ");
651  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
652  showV128(&block[2]); printf("\n");
653
654  /* -- B[0,15] -- */
655
656  memset(&block, 0x55, sizeof(block));
657  block[1].u64[0] = randULong(TyB);
658  __asm__ __volatile__(
659     "ldr q7, [%0, #0]   ; "
660     "ldr x19, [%0, #16] ; "
661     "ins v7.b[0], w19   ; "
662     "str q7, [%0, #32] "
663     : : "r"(&block[0]) : "memory", "x19", "v7"
664  );
665  printf("INS v7.b[0],x19  ");
666  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
667  showV128(&block[2]); printf("\n");
668
669  memset(&block, 0x55, sizeof(block));
670  block[1].u64[0] = randULong(TyB);
671  __asm__ __volatile__(
672     "ldr q7, [%0, #0]   ; "
673     "ldr x19, [%0, #16] ; "
674     "ins v7.b[15], w19   ; "
675     "str q7, [%0, #32] "
676     : : "r"(&block[0]) : "memory", "x19", "v7"
677  );
678  printf("INS v7.b[15],x19 ");
679  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
680  showV128(&block[2]); printf("\n");
681}
682
683
684
685void test_SMINV ( void )
686{
687  int i;
688  V128 block[2];
689
690  /* -- 4s -- */
691
692  for (i = 0; i < 10; i++) {
693    memset(&block, 0x55, sizeof(block));
694    randV128(&block[0], TyS);
695    randV128(&block[1], TyS);
696    __asm__ __volatile__(
697       "ldr   q7, [%0, #0]   ; "
698       "sminv s8, v7.4s   ; "
699       "str   q8, [%0, #16] "
700       : : "r"(&block[0]) : "memory", "v7", "v8"
701                         );
702    printf("SMINV v8, v7.4s  ");
703    showV128(&block[0]); printf("  ");
704    showV128(&block[1]); printf("\n");
705  }
706
707  /* -- 8h -- */
708
709  for (i = 0; i < 10; i++) {
710    memset(&block, 0x55, sizeof(block));
711    randV128(&block[0], TyH);
712    randV128(&block[1], TyH);
713    __asm__ __volatile__(
714       "ldr   q7, [%0, #0]   ; "
715       "sminv h8, v7.8h   ; "
716       "str   q8, [%0, #16] "
717       : : "r"(&block[0]) : "memory", "v7", "v8"
718                         );
719    printf("SMINV h8, v7.8h  ");
720    showV128(&block[0]); printf("  ");
721    showV128(&block[1]); printf("\n");
722  }
723
724  /* -- 4h -- */
725
726  for (i = 0; i < 10; i++) {
727    memset(&block, 0x55, sizeof(block));
728    randV128(&block[0], TyH);
729    randV128(&block[1], TyH);
730    __asm__ __volatile__(
731       "ldr   q7, [%0, #0]   ; "
732       "sminv h8, v7.4h   ; "
733       "str   q8, [%0, #16] "
734       : : "r"(&block[0]) : "memory", "v7", "v8"
735                         );
736    printf("SMINV h8, v7.4h  ");
737    showV128(&block[0]); printf("  ");
738    showV128(&block[1]); printf("\n");
739  }
740
741  /* -- 16b -- */
742
743  for (i = 0; i < 10; i++) {
744    memset(&block, 0x55, sizeof(block));
745    randV128(&block[0], TyB);
746    randV128(&block[1], TyB);
747    __asm__ __volatile__(
748       "ldr   q7, [%0, #0]   ; "
749       "sminv b8, v7.16b   ; "
750       "str   q8, [%0, #16] "
751       : : "r"(&block[0]) : "memory", "v7", "v8"
752                         );
753    printf("SMINV b8, v7.16b  ");
754    showV128(&block[0]); printf("  ");
755    showV128(&block[1]); printf("\n");
756  }
757
758  /* -- 8b -- */
759
760  for (i = 0; i < 10; i++) {
761    memset(&block, 0x55, sizeof(block));
762    randV128(&block[0], TyB);
763    randV128(&block[1], TyB);
764    __asm__ __volatile__(
765       "ldr   q7, [%0, #0]   ; "
766       "sminv b8, v7.8b   ; "
767       "str   q8, [%0, #16] "
768       : : "r"(&block[0]) : "memory", "v7", "v8"
769                         );
770    printf("SMINV b8, v7.8b  ");
771    showV128(&block[0]); printf("  ");
772    showV128(&block[1]); printf("\n");
773  }
774
775}
776
777
778void test_SMAXV ( void )
779{
780  int i;
781  V128 block[2];
782
783  /* -- 4s -- */
784
785  for (i = 0; i < 10; i++) {
786    memset(&block, 0x55, sizeof(block));
787    randV128(&block[0], TyS);
788    randV128(&block[1], TyS);
789    __asm__ __volatile__(
790       "ldr   q7, [%0, #0]   ; "
791       "smaxv s8, v7.4s   ; "
792       "str   q8, [%0, #16] "
793       : : "r"(&block[0]) : "memory", "v7", "v8"
794                         );
795    printf("SMAXV v8, v7.4s  ");
796    showV128(&block[0]); printf("  ");
797    showV128(&block[1]); printf("\n");
798  }
799
800  /* -- 8h -- */
801
802  for (i = 0; i < 10; i++) {
803    memset(&block, 0x55, sizeof(block));
804    randV128(&block[0], TyH);
805    randV128(&block[1], TyH);
806    __asm__ __volatile__(
807       "ldr   q7, [%0, #0]   ; "
808       "smaxv h8, v7.8h   ; "
809       "str   q8, [%0, #16] "
810       : : "r"(&block[0]) : "memory", "v7", "v8"
811                         );
812    printf("SMAXV h8, v7.8h  ");
813    showV128(&block[0]); printf("  ");
814    showV128(&block[1]); printf("\n");
815  }
816
817  /* -- 4h -- */
818
819  for (i = 0; i < 10; i++) {
820    memset(&block, 0x55, sizeof(block));
821    randV128(&block[0], TyH);
822    randV128(&block[1], TyH);
823    __asm__ __volatile__(
824       "ldr   q7, [%0, #0]   ; "
825       "smaxv h8, v7.4h   ; "
826       "str   q8, [%0, #16] "
827       : : "r"(&block[0]) : "memory", "v7", "v8"
828                         );
829    printf("SMAXV h8, v7.4h  ");
830    showV128(&block[0]); printf("  ");
831    showV128(&block[1]); printf("\n");
832  }
833
834  /* -- 16b -- */
835
836  for (i = 0; i < 10; i++) {
837    memset(&block, 0x55, sizeof(block));
838    randV128(&block[0], TyB);
839    randV128(&block[1], TyB);
840    __asm__ __volatile__(
841       "ldr   q7, [%0, #0]   ; "
842       "smaxv b8, v7.16b   ; "
843       "str   q8, [%0, #16] "
844       : : "r"(&block[0]) : "memory", "v7", "v8"
845                         );
846    printf("SMAXV b8, v7.16b  ");
847    showV128(&block[0]); printf("  ");
848    showV128(&block[1]); printf("\n");
849  }
850
851  /* -- 8b -- */
852
853  for (i = 0; i < 10; i++) {
854    memset(&block, 0x55, sizeof(block));
855    randV128(&block[0], TyB);
856    randV128(&block[1], TyB);
857    __asm__ __volatile__(
858       "ldr   q7, [%0, #0]   ; "
859       "smaxv b8, v7.8b   ; "
860       "str   q8, [%0, #16] "
861       : : "r"(&block[0]) : "memory", "v7", "v8"
862                         );
863    printf("SMAXV b8, v7.8b  ");
864    showV128(&block[0]); printf("  ");
865    showV128(&block[1]); printf("\n");
866  }
867
868}
869
870
871GEN_BINARY_TEST(umax, 4s, 4s, 4s)
872GEN_BINARY_TEST(umax, 2s, 2s, 2s)
873GEN_BINARY_TEST(umax, 8h, 8h, 8h)
874GEN_BINARY_TEST(umax, 4h, 4h, 4h)
875GEN_BINARY_TEST(umax, 16b, 16b, 16b)
876GEN_BINARY_TEST(umax, 8b, 8b, 8b)
877
878GEN_BINARY_TEST(umin, 4s, 4s, 4s)
879GEN_BINARY_TEST(umin, 2s, 2s, 2s)
880GEN_BINARY_TEST(umin, 8h, 8h, 8h)
881GEN_BINARY_TEST(umin, 4h, 4h, 4h)
882GEN_BINARY_TEST(umin, 16b, 16b, 16b)
883GEN_BINARY_TEST(umin, 8b, 8b, 8b)
884
885GEN_BINARY_TEST(smax, 4s, 4s, 4s)
886GEN_BINARY_TEST(smax, 2s, 2s, 2s)
887GEN_BINARY_TEST(smax, 8h, 8h, 8h)
888GEN_BINARY_TEST(smax, 4h, 4h, 4h)
889GEN_BINARY_TEST(smax, 16b, 16b, 16b)
890GEN_BINARY_TEST(smax, 8b, 8b, 8b)
891
892GEN_BINARY_TEST(smin, 4s, 4s, 4s)
893GEN_BINARY_TEST(smin, 2s, 2s, 2s)
894GEN_BINARY_TEST(smin, 8h, 8h, 8h)
895GEN_BINARY_TEST(smin, 4h, 4h, 4h)
896GEN_BINARY_TEST(smin, 16b, 16b, 16b)
897GEN_BINARY_TEST(smin, 8b, 8b, 8b)
898
899GEN_BINARY_TEST(add, 2d, 2d, 2d)
900GEN_BINARY_TEST(add, 4s, 4s, 4s)
901GEN_BINARY_TEST(add, 2s, 2s, 2s)
902GEN_BINARY_TEST(add, 8h, 8h, 8h)
903GEN_BINARY_TEST(add, 4h, 4h, 4h)
904GEN_BINARY_TEST(add, 16b, 16b, 16b)
905GEN_BINARY_TEST(add, 8b, 8b, 8b)
906
907GEN_BINARY_TEST(sub, 2d, 2d, 2d)
908GEN_BINARY_TEST(sub, 4s, 4s, 4s)
909GEN_BINARY_TEST(sub, 2s, 2s, 2s)
910GEN_BINARY_TEST(sub, 8h, 8h, 8h)
911GEN_BINARY_TEST(sub, 4h, 4h, 4h)
912GEN_BINARY_TEST(sub, 16b, 16b, 16b)
913GEN_BINARY_TEST(sub, 8b, 8b, 8b)
914
915GEN_BINARY_TEST(mul, 4s, 4s, 4s)
916GEN_BINARY_TEST(mul, 2s, 2s, 2s)
917GEN_BINARY_TEST(mul, 8h, 8h, 8h)
918GEN_BINARY_TEST(mul, 4h, 4h, 4h)
919GEN_BINARY_TEST(mul, 16b, 16b, 16b)
920GEN_BINARY_TEST(mul, 8b, 8b, 8b)
921
922GEN_BINARY_TEST(mla, 4s, 4s, 4s)
923GEN_BINARY_TEST(mla, 2s, 2s, 2s)
924GEN_BINARY_TEST(mla, 8h, 8h, 8h)
925GEN_BINARY_TEST(mla, 4h, 4h, 4h)
926GEN_BINARY_TEST(mla, 16b, 16b, 16b)
927GEN_BINARY_TEST(mla, 8b, 8b, 8b)
928
929GEN_BINARY_TEST(mls, 4s, 4s, 4s)
930GEN_BINARY_TEST(mls, 2s, 2s, 2s)
931GEN_BINARY_TEST(mls, 8h, 8h, 8h)
932GEN_BINARY_TEST(mls, 4h, 4h, 4h)
933GEN_BINARY_TEST(mls, 16b, 16b, 16b)
934GEN_BINARY_TEST(mls, 8b, 8b, 8b)
935
936GEN_BINARY_TEST(and, 16b, 16b, 16b)
937GEN_BINARY_TEST(and, 8b, 8b, 8b)
938
939GEN_BINARY_TEST(bic, 16b, 16b, 16b)
940GEN_BINARY_TEST(bic, 8b, 8b, 8b)
941
942GEN_BINARY_TEST(orr, 16b, 16b, 16b)
943GEN_BINARY_TEST(orr, 8b, 8b, 8b)
944
945GEN_BINARY_TEST(orn, 16b, 16b, 16b)
946GEN_BINARY_TEST(orn, 8b, 8b, 8b)
947
948GEN_BINARY_TEST(eor, 16b, 16b, 16b)
949GEN_BINARY_TEST(eor, 8b, 8b, 8b)
950
951GEN_BINARY_TEST(bsl, 16b, 16b, 16b)
952GEN_BINARY_TEST(bsl, 8b, 8b, 8b)
953
954GEN_BINARY_TEST(bit, 16b, 16b, 16b)
955GEN_BINARY_TEST(bit, 8b, 8b, 8b)
956
957GEN_BINARY_TEST(bif, 16b, 16b, 16b)
958GEN_BINARY_TEST(bif, 8b, 8b, 8b)
959
960GEN_BINARY_TEST(cmeq, 2d, 2d, 2d)
961GEN_BINARY_TEST(cmeq, 4s, 4s, 4s)
962GEN_BINARY_TEST(cmeq, 2s, 2s, 2s)
963GEN_BINARY_TEST(cmeq, 8h, 8h, 8h)
964GEN_BINARY_TEST(cmeq, 4h, 4h, 4h)
965GEN_BINARY_TEST(cmeq, 16b, 16b, 16b)
966GEN_BINARY_TEST(cmeq, 8b, 8b, 8b)
967
968GEN_BINARY_TEST(cmtst, 2d, 2d, 2d)
969GEN_BINARY_TEST(cmtst, 4s, 4s, 4s)
970GEN_BINARY_TEST(cmtst, 2s, 2s, 2s)
971GEN_BINARY_TEST(cmtst, 8h, 8h, 8h)
972GEN_BINARY_TEST(cmtst, 4h, 4h, 4h)
973GEN_BINARY_TEST(cmtst, 16b, 16b, 16b)
974GEN_BINARY_TEST(cmtst, 8b, 8b, 8b)
975
976GEN_BINARY_TEST(cmhi, 2d, 2d, 2d)
977GEN_BINARY_TEST(cmhi, 4s, 4s, 4s)
978GEN_BINARY_TEST(cmhi, 2s, 2s, 2s)
979GEN_BINARY_TEST(cmhi, 8h, 8h, 8h)
980GEN_BINARY_TEST(cmhi, 4h, 4h, 4h)
981GEN_BINARY_TEST(cmhi, 16b, 16b, 16b)
982GEN_BINARY_TEST(cmhi, 8b, 8b, 8b)
983
984GEN_BINARY_TEST(cmgt, 2d, 2d, 2d)
985GEN_BINARY_TEST(cmgt, 4s, 4s, 4s)
986GEN_BINARY_TEST(cmgt, 2s, 2s, 2s)
987GEN_BINARY_TEST(cmgt, 8h, 8h, 8h)
988GEN_BINARY_TEST(cmgt, 4h, 4h, 4h)
989GEN_BINARY_TEST(cmgt, 16b, 16b, 16b)
990GEN_BINARY_TEST(cmgt, 8b, 8b, 8b)
991
992GEN_BINARY_TEST(cmhs, 2d, 2d, 2d)
993GEN_BINARY_TEST(cmhs, 4s, 4s, 4s)
994GEN_BINARY_TEST(cmhs, 2s, 2s, 2s)
995GEN_BINARY_TEST(cmhs, 8h, 8h, 8h)
996GEN_BINARY_TEST(cmhs, 4h, 4h, 4h)
997GEN_BINARY_TEST(cmhs, 16b, 16b, 16b)
998GEN_BINARY_TEST(cmhs, 8b, 8b, 8b)
999
1000GEN_BINARY_TEST(cmge, 2d, 2d, 2d)
1001GEN_BINARY_TEST(cmge, 4s, 4s, 4s)
1002GEN_BINARY_TEST(cmge, 2s, 2s, 2s)
1003GEN_BINARY_TEST(cmge, 8h, 8h, 8h)
1004GEN_BINARY_TEST(cmge, 4h, 4h, 4h)
1005GEN_BINARY_TEST(cmge, 16b, 16b, 16b)
1006GEN_BINARY_TEST(cmge, 8b, 8b, 8b)
1007
1008GEN_SHIFT_TEST(ushr, 2d, 2d, 1)
1009GEN_SHIFT_TEST(ushr, 2d, 2d, 13)
1010GEN_SHIFT_TEST(ushr, 2d, 2d, 64)
1011GEN_SHIFT_TEST(sshr, 2d, 2d, 1)
1012GEN_SHIFT_TEST(sshr, 2d, 2d, 13)
1013GEN_SHIFT_TEST(sshr, 2d, 2d, 64)
1014GEN_SHIFT_TEST(shl,  2d, 2d, 0)
1015GEN_SHIFT_TEST(shl,  2d, 2d, 13)
1016GEN_SHIFT_TEST(shl,  2d, 2d, 63)
1017
1018GEN_SHIFT_TEST(ushr, 4s, 4s, 1)
1019GEN_SHIFT_TEST(ushr, 4s, 4s, 13)
1020GEN_SHIFT_TEST(ushr, 4s, 4s, 32)
1021GEN_SHIFT_TEST(sshr, 4s, 4s, 1)
1022GEN_SHIFT_TEST(sshr, 4s, 4s, 13)
1023GEN_SHIFT_TEST(sshr, 4s, 4s, 32)
1024GEN_SHIFT_TEST(shl,  4s, 4s, 0)
1025GEN_SHIFT_TEST(shl,  4s, 4s, 13)
1026GEN_SHIFT_TEST(shl,  4s, 4s, 31)
1027
1028GEN_SHIFT_TEST(ushr, 2s, 2s, 1)
1029GEN_SHIFT_TEST(ushr, 2s, 2s, 13)
1030GEN_SHIFT_TEST(ushr, 2s, 2s, 32)
1031GEN_SHIFT_TEST(sshr, 2s, 2s, 1)
1032GEN_SHIFT_TEST(sshr, 2s, 2s, 13)
1033GEN_SHIFT_TEST(sshr, 2s, 2s, 32)
1034GEN_SHIFT_TEST(shl,  2s, 2s, 0)
1035GEN_SHIFT_TEST(shl,  2s, 2s, 13)
1036GEN_SHIFT_TEST(shl,  2s, 2s, 31)
1037
1038GEN_SHIFT_TEST(ushr, 8h, 8h, 1)
1039GEN_SHIFT_TEST(ushr, 8h, 8h, 13)
1040GEN_SHIFT_TEST(ushr, 8h, 8h, 16)
1041GEN_SHIFT_TEST(sshr, 8h, 8h, 1)
1042GEN_SHIFT_TEST(sshr, 8h, 8h, 13)
1043GEN_SHIFT_TEST(sshr, 8h, 8h, 16)
1044GEN_SHIFT_TEST(shl,  8h, 8h, 0)
1045GEN_SHIFT_TEST(shl,  8h, 8h, 13)
1046GEN_SHIFT_TEST(shl,  8h, 8h, 15)
1047
1048GEN_SHIFT_TEST(ushr, 4h, 4h, 1)
1049GEN_SHIFT_TEST(ushr, 4h, 4h, 13)
1050GEN_SHIFT_TEST(ushr, 4h, 4h, 16)
1051GEN_SHIFT_TEST(sshr, 4h, 4h, 1)
1052GEN_SHIFT_TEST(sshr, 4h, 4h, 13)
1053GEN_SHIFT_TEST(sshr, 4h, 4h, 16)
1054GEN_SHIFT_TEST(shl,  4h, 4h, 0)
1055GEN_SHIFT_TEST(shl,  4h, 4h, 13)
1056GEN_SHIFT_TEST(shl,  4h, 4h, 15)
1057
1058GEN_SHIFT_TEST(ushr, 16b, 16b, 1)
1059GEN_SHIFT_TEST(ushr, 16b, 16b, 8)
1060GEN_SHIFT_TEST(sshr, 16b, 16b, 1)
1061GEN_SHIFT_TEST(sshr, 16b, 16b, 8)
1062GEN_SHIFT_TEST(shl,  16b, 16b, 0)
1063GEN_SHIFT_TEST(shl,  16b, 16b, 7)
1064
1065GEN_SHIFT_TEST(ushr, 8b, 8b, 1)
1066GEN_SHIFT_TEST(ushr, 8b, 8b, 8)
1067GEN_SHIFT_TEST(sshr, 8b, 8b, 1)
1068GEN_SHIFT_TEST(sshr, 8b, 8b, 8)
1069GEN_SHIFT_TEST(shl,  8b, 8b, 0)
1070GEN_SHIFT_TEST(shl,  8b, 8b, 7)
1071
1072GEN_SHIFT_TEST(ushll,  2d, 2s, 0)
1073GEN_SHIFT_TEST(ushll,  2d, 2s, 15)
1074GEN_SHIFT_TEST(ushll,  2d, 2s, 31)
1075GEN_SHIFT_TEST(ushll2, 2d, 4s, 0)
1076GEN_SHIFT_TEST(ushll2, 2d, 4s, 15)
1077GEN_SHIFT_TEST(ushll2, 2d, 4s, 31)
1078GEN_SHIFT_TEST(ushll,  4s, 4h,  0)
1079GEN_SHIFT_TEST(ushll,  4s, 4h,  7)
1080GEN_SHIFT_TEST(ushll,  4s, 4h,  15)
1081GEN_SHIFT_TEST(ushll2, 4s, 8h,  0)
1082GEN_SHIFT_TEST(ushll2, 4s, 8h,  7)
1083GEN_SHIFT_TEST(ushll2, 4s, 8h,  15)
1084GEN_SHIFT_TEST(ushll,  8h, 8b,  0)
1085GEN_SHIFT_TEST(ushll,  8h, 8b,  3)
1086GEN_SHIFT_TEST(ushll,  8h, 8b,  7)
1087GEN_SHIFT_TEST(ushll2, 8h, 16b, 0)
1088GEN_SHIFT_TEST(ushll2, 8h, 16b, 3)
1089GEN_SHIFT_TEST(ushll2, 8h, 16b, 7)
1090
1091GEN_SHIFT_TEST(sshll,  2d, 2s,  0)
1092GEN_SHIFT_TEST(sshll,  2d, 2s,  15)
1093GEN_SHIFT_TEST(sshll,  2d, 2s,  31)
1094GEN_SHIFT_TEST(sshll2, 2d, 4s,  0)
1095GEN_SHIFT_TEST(sshll2, 2d, 4s,  15)
1096GEN_SHIFT_TEST(sshll2, 2d, 4s,  31)
1097GEN_SHIFT_TEST(sshll,  4s, 4h,  0)
1098GEN_SHIFT_TEST(sshll,  4s, 4h,  7)
1099GEN_SHIFT_TEST(sshll,  4s, 4h,  15)
1100GEN_SHIFT_TEST(sshll2, 4s, 8h,  0)
1101GEN_SHIFT_TEST(sshll2, 4s, 8h,  7)
1102GEN_SHIFT_TEST(sshll2, 4s, 8h,  15)
1103GEN_SHIFT_TEST(sshll,  8h, 8b,  0)
1104GEN_SHIFT_TEST(sshll,  8h, 8b,  3)
1105GEN_SHIFT_TEST(sshll,  8h, 8b,  7)
1106GEN_SHIFT_TEST(sshll2, 8h, 16b, 0)
1107GEN_SHIFT_TEST(sshll2, 8h, 16b, 3)
1108GEN_SHIFT_TEST(sshll2, 8h, 16b, 7)
1109
1110
1111GEN_UNARY_TEST(xtn,  2s, 2d)
1112GEN_UNARY_TEST(xtn2, 4s, 2d)
1113GEN_UNARY_TEST(xtn,  4h, 4s)
1114GEN_UNARY_TEST(xtn2, 8h, 4s)
1115GEN_UNARY_TEST(xtn,  8b, 8h)
1116GEN_UNARY_TEST(xtn2, 16b, 8h)
1117
1118GEN_ONEINT_ONEVEC_TEST(umov_x_d0,  "umov x9, v10.d[0]", 9, 10)
1119GEN_ONEINT_ONEVEC_TEST(umov_x_d1,  "umov x9, v10.d[1]", 9, 10)
1120GEN_ONEINT_ONEVEC_TEST(umov_w_s0,  "umov w9, v10.s[0]", 9, 10)
1121GEN_ONEINT_ONEVEC_TEST(umov_w_s3,  "umov w9, v10.s[3]", 9, 10)
1122GEN_ONEINT_ONEVEC_TEST(umov_w_h0,  "umov w9, v10.h[0]", 9, 10)
1123GEN_ONEINT_ONEVEC_TEST(umov_w_h7,  "umov w9, v10.h[7]", 9, 10)
1124GEN_ONEINT_ONEVEC_TEST(umov_w_b0,  "umov w9, v10.b[0]", 9, 10)
1125GEN_ONEINT_ONEVEC_TEST(umov_w_b15, "umov w9, v10.b[15]", 9, 10)
1126
1127GEN_ONEINT_ONEVEC_TEST(smov_x_s0,  "smov x9, v10.s[0]", 9, 10)
1128GEN_ONEINT_ONEVEC_TEST(smov_x_s3,  "smov x9, v10.s[3]", 9, 10)
1129GEN_ONEINT_ONEVEC_TEST(smov_x_h0,  "smov x9, v10.h[0]", 9, 10)
1130GEN_ONEINT_ONEVEC_TEST(smov_x_h7,  "smov x9, v10.h[7]", 9, 10)
1131GEN_ONEINT_ONEVEC_TEST(smov_w_h0,  "smov w9, v10.h[0]", 9, 10)
1132GEN_ONEINT_ONEVEC_TEST(smov_w_h7,  "smov w9, v10.h[7]", 9, 10)
1133GEN_ONEINT_ONEVEC_TEST(smov_x_b0,  "smov x9, v10.b[0]", 9, 10)
1134GEN_ONEINT_ONEVEC_TEST(smov_x_b15, "smov x9, v10.b[15]", 9, 10)
1135GEN_ONEINT_ONEVEC_TEST(smov_w_b0,  "smov w9, v10.b[0]", 9, 10)
1136GEN_ONEINT_ONEVEC_TEST(smov_w_b15, "smov w9, v10.b[15]", 9, 10)
1137
1138GEN_TWOVEC_TEST(fcvtn_2s_2d, "fcvtn  v22.2s, v23.2d", 22, 23)
1139GEN_TWOVEC_TEST(fcvtn_4s_2d, "fcvtn2 v22.4s, v23.2d", 22, 23)
1140
1141GEN_UNARY_TEST(neg, 2d, 2d)
1142GEN_UNARY_TEST(neg, 4s, 4s)
1143GEN_UNARY_TEST(neg, 2s, 2s)
1144GEN_UNARY_TEST(neg, 8h, 8h)
1145GEN_UNARY_TEST(neg, 4h, 4h)
1146GEN_UNARY_TEST(neg, 16b, 16b)
1147GEN_UNARY_TEST(neg, 8b,  8b)
1148
1149GEN_BINARY_TEST(fadd, 2d, 2d, 2d)
1150GEN_BINARY_TEST(fadd, 4s, 4s, 4s)
1151GEN_BINARY_TEST(fadd, 2s, 2s, 2s)
1152GEN_BINARY_TEST(fsub, 2d, 2d, 2d)
1153GEN_BINARY_TEST(fsub, 4s, 4s, 4s)
1154GEN_BINARY_TEST(fsub, 2s, 2s, 2s)
1155GEN_BINARY_TEST(fmul, 2d, 2d, 2d)
1156GEN_BINARY_TEST(fmul, 4s, 4s, 4s)
1157GEN_BINARY_TEST(fmul, 2s, 2s, 2s)
1158GEN_BINARY_TEST(fdiv, 2d, 2d, 2d)
1159GEN_BINARY_TEST(fdiv, 4s, 4s, 4s)
1160GEN_BINARY_TEST(fdiv, 2s, 2s, 2s)
1161GEN_BINARY_TEST(fmla, 2d, 2d, 2d)
1162GEN_BINARY_TEST(fmla, 4s, 4s, 4s)
1163GEN_BINARY_TEST(fmla, 2s, 2s, 2s)
1164GEN_BINARY_TEST(fmls, 2d, 2d, 2d)
1165GEN_BINARY_TEST(fmls, 4s, 4s, 4s)
1166GEN_BINARY_TEST(fmls, 2s, 2s, 2s)
1167GEN_BINARY_TEST(fabd, 2d, 2d, 2d)
1168GEN_BINARY_TEST(fabd, 4s, 4s, 4s)
1169GEN_BINARY_TEST(fabd, 2s, 2s, 2s)
1170
1171GEN_THREEVEC_TEST(add_d_d_d, "add d21, d22, d23", 21, 22, 23)
1172GEN_THREEVEC_TEST(sub_d_d_d, "sub d21, d22, d23", 21, 22, 23)
1173
1174/* overkill -- don't need two vecs, only one */
1175GEN_TWOVEC_TEST(fmov_d_imm_01, "fmov d22, #0.125", 22, 23)
1176GEN_TWOVEC_TEST(fmov_d_imm_02, "fmov d22, #-4.0",  22, 23)
1177GEN_TWOVEC_TEST(fmov_d_imm_03, "fmov d22, #1.0",   22, 23)
1178GEN_TWOVEC_TEST(fmov_s_imm_01, "fmov s22, #0.125", 22, 23)
1179GEN_TWOVEC_TEST(fmov_s_imm_02, "fmov s22, #-4.0",  22, 23)
1180GEN_TWOVEC_TEST(fmov_s_imm_03, "fmov s22, #-1.0",   22, 23)
1181
1182GEN_ONEINT_ONEVEC_TEST(fmov_s_w,  "fmov s7,      w15", 15, 7)
1183GEN_ONEINT_ONEVEC_TEST(fmov_d_x,  "fmov d7,      x15", 15, 7)
1184GEN_ONEINT_ONEVEC_TEST(fmov_d1_x, "fmov v7.d[1], x15", 15, 7)
1185GEN_ONEINT_ONEVEC_TEST(fmov_w_s,  "fmov w15,      s7", 15, 7)
1186GEN_ONEINT_ONEVEC_TEST(fmov_x_d,  "fmov x15,      d7", 15, 7)
1187GEN_ONEINT_ONEVEC_TEST(fmov_x_d1, "fmov x15, v7.d[1]", 15, 7)
1188
1189GEN_TWOVEC_TEST(fmov_2d_imm_01, "fmov v22.2d, #0.125", 22, 23)
1190GEN_TWOVEC_TEST(fmov_2d_imm_02, "fmov v22.2d, #-4.0",  22, 23)
1191GEN_TWOVEC_TEST(fmov_2d_imm_03, "fmov v22.2d, #1.0",   22, 23)
1192GEN_TWOVEC_TEST(fmov_4s_imm_01, "fmov v22.4s, #0.125", 22, 23)
1193GEN_TWOVEC_TEST(fmov_4s_imm_02, "fmov v22.4s, #-4.0",  22, 23)
1194GEN_TWOVEC_TEST(fmov_4s_imm_03, "fmov v22.4s, #1.0",   22, 23)
1195GEN_TWOVEC_TEST(fmov_2s_imm_01, "fmov v22.2s, #0.125", 22, 23)
1196GEN_TWOVEC_TEST(fmov_2s_imm_02, "fmov v22.2s, #-4.0",  22, 23)
1197GEN_TWOVEC_TEST(fmov_2s_imm_03, "fmov v22.2s, #1.0",   22, 23)
1198
1199GEN_ONEINT_ONEVEC_TEST(scvtf_s_w, "scvtf s7, w15", 15, 7)
1200GEN_ONEINT_ONEVEC_TEST(scvtf_d_w, "scvtf d7, w15", 15, 7)
1201GEN_ONEINT_ONEVEC_TEST(scvtf_s_x, "scvtf s7, x15", 15, 7)
1202GEN_ONEINT_ONEVEC_TEST(scvtf_d_x, "scvtf d7, x15", 15, 7)
1203GEN_ONEINT_ONEVEC_TEST(ucvtf_s_w, "ucvtf s7, w15", 15, 7)
1204GEN_ONEINT_ONEVEC_TEST(ucvtf_d_w, "ucvtf d7, w15", 15, 7)
1205GEN_ONEINT_ONEVEC_TEST(ucvtf_s_x, "ucvtf s7, x15", 15, 7)
1206GEN_ONEINT_ONEVEC_TEST(ucvtf_d_x, "ucvtf d7, x15", 15, 7)
1207
1208GEN_THREEVEC_TEST(fadd_d_d_d,  "fadd d2, d11, d29", 2, 11, 29)
1209GEN_THREEVEC_TEST(fadd_s_s_s,  "fadd s2, s11, s29", 2, 11, 29)
1210GEN_THREEVEC_TEST(fsub_d_d_d,  "fsub d2, d11, d29", 2, 11, 29)
1211GEN_THREEVEC_TEST(fsub_s_s_s,  "fsub s2, s11, s29", 2, 11, 29)
1212GEN_THREEVEC_TEST(fmul_d_d_d,  "fmul d2, d11, d29", 2, 11, 29)
1213GEN_THREEVEC_TEST(fmul_s_s_s,  "fmul s2, s11, s29", 2, 11, 29)
1214GEN_THREEVEC_TEST(fdiv_d_d_d,  "fdiv d2, d11, d29", 2, 11, 29)
1215GEN_THREEVEC_TEST(fdiv_s_s_s,  "fdiv s2, s11, s29", 2, 11, 29)
1216GEN_THREEVEC_TEST(fnmul_d_d_d, "fnmul d2, d11, d29", 2, 11, 29)
1217GEN_THREEVEC_TEST(fnmul_s_s_s, "fnmul s2, s11, s29", 2, 11, 29)
1218
1219GEN_THREEVEC_TEST(fabd_d_d_d,  "fabd d2, d11, d29", 2, 11, 29)
1220GEN_THREEVEC_TEST(fabd_s_s_s,  "fabd s2, s11, s29", 2, 11, 29)
1221
1222GEN_TWOVEC_TEST(fmov_d_d,  "fmov d22, d23",   22, 23)
1223GEN_TWOVEC_TEST(fmov_s_s,  "fmov s22, s23",   22, 23)
1224GEN_TWOVEC_TEST(fabs_d_d,  "fabs d22, d23",   22, 23)
1225GEN_TWOVEC_TEST(fabs_s_s,  "fabs s22, s23",   22, 23)
1226GEN_TWOVEC_TEST(fneg_d_d,  "fneg d22, d23",   22, 23)
1227GEN_TWOVEC_TEST(fneg_s_s,  "fneg s22, s23",   22, 23)
1228GEN_TWOVEC_TEST(fsqrt_d_d, "fsqrt d22, d23",   22, 23)
1229GEN_TWOVEC_TEST(fsqrt_s_s, "fsqrt s22, s23",   22, 23)
1230
1231GEN_UNARY_TEST(fneg, 2d, 2d)
1232GEN_UNARY_TEST(fneg, 4s, 4s)
1233GEN_UNARY_TEST(fneg, 2s, 2s)
1234GEN_UNARY_TEST(fabs, 2d, 2d)
1235GEN_UNARY_TEST(fabs, 4s, 4s)
1236GEN_UNARY_TEST(fabs, 2s, 2s)
1237
1238GEN_BINARY_TEST(fcmeq, 2d, 2d, 2d)
1239GEN_BINARY_TEST(fcmeq, 4s, 4s, 4s)
1240GEN_BINARY_TEST(fcmeq, 2s, 2s, 2s)
1241GEN_BINARY_TEST(fcmge, 2d, 2d, 2d)
1242GEN_BINARY_TEST(fcmge, 4s, 4s, 4s)
1243GEN_BINARY_TEST(fcmge, 2s, 2s, 2s)
1244GEN_BINARY_TEST(fcmgt, 2d, 2d, 2d)
1245GEN_BINARY_TEST(fcmgt, 4s, 4s, 4s)
1246GEN_BINARY_TEST(fcmgt, 2s, 2s, 2s)
1247GEN_BINARY_TEST(facge, 2d, 2d, 2d)
1248GEN_BINARY_TEST(facge, 4s, 4s, 4s)
1249GEN_BINARY_TEST(facge, 2s, 2s, 2s)
1250GEN_BINARY_TEST(facgt, 2d, 2d, 2d)
1251GEN_BINARY_TEST(facgt, 4s, 4s, 4s)
1252GEN_BINARY_TEST(facgt, 2s, 2s, 2s)
1253
1254// Uses v15 as the first table entry
1255GEN_THREEVEC_TEST(
1256   tbl_16b_1reg, "tbl v21.16b, {v15.16b}, v23.16b", 21, 15, 23)
1257// and v15 ^ v21 as the second table entry
1258GEN_THREEVEC_TEST(
1259   tbl_16b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
1260                 "tbl v21.16b, {v15.16b, v16.16b}, v23.16b", 21, 15, 23)
1261// and v15 ^ v23 as the third table entry
1262GEN_THREEVEC_TEST(
1263   tbl_16b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
1264                 "eor v17.16b, v15.16b, v23.16b ; "
1265                 "tbl v21.16b, {v15.16b, v16.16b, v17.16b}, v23.16b",
1266                 21, 15, 23)
1267// and v21 ^ v23 as the fourth table entry
1268GEN_THREEVEC_TEST(
1269   tbl_16b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
1270                 "eor v17.16b, v15.16b, v23.16b ; "
1271                 "eor v18.16b, v21.16b, v23.16b ; "
1272                 "tbl v21.16b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.16b",
1273                 21, 15, 23)
1274
1275// Same register scheme for tbl .8b, tbx .16b, tbx.8b
1276GEN_THREEVEC_TEST(
1277   tbl_8b_1reg, "tbl v21.8b, {v15.16b}, v23.8b", 21, 15, 23)
1278GEN_THREEVEC_TEST(
1279   tbl_8b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
1280                "tbl v21.8b, {v15.16b, v16.16b}, v23.8b", 21, 15, 23)
1281GEN_THREEVEC_TEST(
1282   tbl_8b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
1283                "eor v17.16b, v15.16b, v23.16b ; "
1284                "tbl v21.8b, {v15.16b, v16.16b, v17.16b}, v23.8b",
1285                21, 15, 23)
1286GEN_THREEVEC_TEST(
1287   tbl_8b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
1288                "eor v17.16b, v15.16b, v23.16b ; "
1289                "eor v18.16b, v21.16b, v23.16b ; "
1290                "tbl v21.8b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.8b",
1291                21, 15, 23)
1292
1293GEN_THREEVEC_TEST(
1294   tbx_16b_1reg, "tbx v21.16b, {v15.16b}, v23.16b", 21, 15, 23)
1295GEN_THREEVEC_TEST(
1296   tbx_16b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
1297                 "tbx v21.16b, {v15.16b, v16.16b}, v23.16b", 21, 15, 23)
1298GEN_THREEVEC_TEST(
1299   tbx_16b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
1300                 "eor v17.16b, v15.16b, v23.16b ; "
1301                 "tbx v21.16b, {v15.16b, v16.16b, v17.16b}, v23.16b",
1302                 21, 15, 23)
1303GEN_THREEVEC_TEST(
1304   tbx_16b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
1305                 "eor v17.16b, v15.16b, v23.16b ; "
1306                 "eor v18.16b, v21.16b, v23.16b ; "
1307                 "tbx v21.16b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.16b",
1308                 21, 15, 23)
1309
1310// Same register scheme for tbx .8b, tbx .16b, tbx.8b
1311GEN_THREEVEC_TEST(
1312   tbx_8b_1reg, "tbx v21.8b, {v15.16b}, v23.8b", 21, 15, 23)
1313GEN_THREEVEC_TEST(
1314   tbx_8b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
1315                "tbx v21.8b, {v15.16b, v16.16b}, v23.8b", 21, 15, 23)
1316GEN_THREEVEC_TEST(
1317   tbx_8b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
1318                "eor v17.16b, v15.16b, v23.16b ; "
1319                "tbx v21.8b, {v15.16b, v16.16b, v17.16b}, v23.8b",
1320                21, 15, 23)
1321GEN_THREEVEC_TEST(
1322   tbx_8b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
1323                "eor v17.16b, v15.16b, v23.16b ; "
1324                "eor v18.16b, v21.16b, v23.16b ; "
1325                "tbx v21.8b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.8b",
1326                21, 15, 23)
1327
1328GEN_TWOVEC_TEST(cmge_zero_2d_2d,   "cmge v5.2d,  v22.2d,  #0", 5, 22)
1329GEN_TWOVEC_TEST(cmge_zero_4s_4s,   "cmge v5.4s,  v22.4s,  #0", 5, 22)
1330GEN_TWOVEC_TEST(cmge_zero_2s_2s,   "cmge v5.2s,  v22.2s,  #0", 5, 22)
1331GEN_TWOVEC_TEST(cmge_zero_8h_8h,   "cmge v5.8h,  v22.8h,  #0", 5, 22)
1332GEN_TWOVEC_TEST(cmge_zero_4h_4h,   "cmge v5.4h,  v22.4h,  #0", 5, 22)
1333GEN_TWOVEC_TEST(cmge_zero_16b_16b, "cmge v5.16b, v22.16b, #0", 5, 22)
1334GEN_TWOVEC_TEST(cmge_zero_8b_8b,   "cmge v5.8b,  v22.8b,  #0", 5, 22)
1335
1336GEN_TWOVEC_TEST(cmgt_zero_2d_2d,   "cmgt v5.2d,  v22.2d,  #0", 5, 22)
1337GEN_TWOVEC_TEST(cmgt_zero_4s_4s,   "cmgt v5.4s,  v22.4s,  #0", 5, 22)
1338GEN_TWOVEC_TEST(cmgt_zero_2s_2s,   "cmgt v5.2s,  v22.2s,  #0", 5, 22)
1339GEN_TWOVEC_TEST(cmgt_zero_8h_8h,   "cmgt v5.8h,  v22.8h,  #0", 5, 22)
1340GEN_TWOVEC_TEST(cmgt_zero_4h_4h,   "cmgt v5.4h,  v22.4h,  #0", 5, 22)
1341GEN_TWOVEC_TEST(cmgt_zero_16b_16b, "cmgt v5.16b, v22.16b, #0", 5, 22)
1342GEN_TWOVEC_TEST(cmgt_zero_8b_8b,   "cmgt v5.8b,  v22.8b,  #0", 5, 22)
1343
1344GEN_TWOVEC_TEST(cmle_zero_2d_2d,   "cmle v5.2d,  v22.2d,  #0", 5, 22)
1345GEN_TWOVEC_TEST(cmle_zero_4s_4s,   "cmle v5.4s,  v22.4s,  #0", 5, 22)
1346GEN_TWOVEC_TEST(cmle_zero_2s_2s,   "cmle v5.2s,  v22.2s,  #0", 5, 22)
1347GEN_TWOVEC_TEST(cmle_zero_8h_8h,   "cmle v5.8h,  v22.8h,  #0", 5, 22)
1348GEN_TWOVEC_TEST(cmle_zero_4h_4h,   "cmle v5.4h,  v22.4h,  #0", 5, 22)
1349GEN_TWOVEC_TEST(cmle_zero_16b_16b, "cmle v5.16b, v22.16b, #0", 5, 22)
1350GEN_TWOVEC_TEST(cmle_zero_8b_8b,   "cmle v5.8b,  v22.8b,  #0", 5, 22)
1351
1352GEN_TWOVEC_TEST(cmeq_zero_2d_2d,   "cmeq v5.2d,  v22.2d,  #0", 5, 22)
1353GEN_TWOVEC_TEST(cmeq_zero_4s_4s,   "cmeq v5.4s,  v22.4s,  #0", 5, 22)
1354GEN_TWOVEC_TEST(cmeq_zero_2s_2s,   "cmeq v5.2s,  v22.2s,  #0", 5, 22)
1355GEN_TWOVEC_TEST(cmeq_zero_8h_8h,   "cmeq v5.8h,  v22.8h,  #0", 5, 22)
1356GEN_TWOVEC_TEST(cmeq_zero_4h_4h,   "cmeq v5.4h,  v22.4h,  #0", 5, 22)
1357GEN_TWOVEC_TEST(cmeq_zero_16b_16b, "cmeq v5.16b, v22.16b, #0", 5, 22)
1358GEN_TWOVEC_TEST(cmeq_zero_8b_8b,   "cmeq v5.8b,  v22.8b,  #0", 5, 22)
1359
1360GEN_TWOVEC_TEST(cmlt_zero_2d_2d,   "cmlt v5.2d,  v22.2d,  #0", 5, 22)
1361GEN_TWOVEC_TEST(cmlt_zero_4s_4s,   "cmlt v5.4s,  v22.4s,  #0", 5, 22)
1362GEN_TWOVEC_TEST(cmlt_zero_2s_2s,   "cmlt v5.2s,  v22.2s,  #0", 5, 22)
1363GEN_TWOVEC_TEST(cmlt_zero_8h_8h,   "cmlt v5.8h,  v22.8h,  #0", 5, 22)
1364GEN_TWOVEC_TEST(cmlt_zero_4h_4h,   "cmlt v5.4h,  v22.4h,  #0", 5, 22)
1365GEN_TWOVEC_TEST(cmlt_zero_16b_16b, "cmlt v5.16b, v22.16b, #0", 5, 22)
1366GEN_TWOVEC_TEST(cmlt_zero_8b_8b,   "cmlt v5.8b,  v22.8b,  #0", 5, 22)
1367
1368GEN_TWOVEC_TEST(abs_d_d,  "abs d22, d23",   22, 23)
1369GEN_TWOVEC_TEST(neg_d_d,  "neg d22, d23",   22, 23)
1370
1371GEN_UNARY_TEST(abs, 2d, 2d)
1372GEN_UNARY_TEST(abs, 4s, 4s)
1373GEN_UNARY_TEST(abs, 2s, 2s)
1374GEN_UNARY_TEST(abs, 8h, 8h)
1375GEN_UNARY_TEST(abs, 4h, 4h)
1376GEN_UNARY_TEST(abs, 16b, 16b)
1377GEN_UNARY_TEST(abs, 8b, 8b)
1378
1379GEN_BINARY_TEST(addhn,   2s, 2d, 2d)
1380GEN_BINARY_TEST(addhn2,  4s, 2d, 2d)
1381GEN_BINARY_TEST(addhn,   4h, 4s, 4s)
1382GEN_BINARY_TEST(addhn2,  8h, 4s, 4s)
1383GEN_BINARY_TEST(addhn,   8b, 8h, 8h)
1384GEN_BINARY_TEST(addhn2,  16b, 8h, 8h)
1385GEN_BINARY_TEST(subhn,   2s, 2d, 2d)
1386GEN_BINARY_TEST(subhn2,  4s, 2d, 2d)
1387GEN_BINARY_TEST(subhn,   4h, 4s, 4s)
1388GEN_BINARY_TEST(subhn2,  8h, 4s, 4s)
1389GEN_BINARY_TEST(subhn,   8b, 8h, 8h)
1390GEN_BINARY_TEST(subhn2,  16b, 8h, 8h)
1391GEN_BINARY_TEST(raddhn,  2s, 2d, 2d)
1392GEN_BINARY_TEST(raddhn2, 4s, 2d, 2d)
1393GEN_BINARY_TEST(raddhn,  4h, 4s, 4s)
1394GEN_BINARY_TEST(raddhn2, 8h, 4s, 4s)
1395GEN_BINARY_TEST(raddhn,  8b, 8h, 8h)
1396GEN_BINARY_TEST(raddhn2, 16b, 8h, 8h)
1397GEN_BINARY_TEST(rsubhn,  2s, 2d, 2d)
1398GEN_BINARY_TEST(rsubhn2, 4s, 2d, 2d)
1399GEN_BINARY_TEST(rsubhn,  4h, 4s, 4s)
1400GEN_BINARY_TEST(rsubhn2, 8h, 4s, 4s)
1401GEN_BINARY_TEST(rsubhn,  8b, 8h, 8h)
1402GEN_BINARY_TEST(rsubhn2, 16b, 8h, 8h)
1403
1404GEN_TWOVEC_TEST(addp_d_2d,  "addp d22, v23.2d",   22, 23)
1405
1406GEN_BINARY_TEST(addp, 2d, 2d, 2d)
1407GEN_BINARY_TEST(addp, 4s, 4s, 4s)
1408GEN_BINARY_TEST(addp, 2s, 2s, 2s)
1409GEN_BINARY_TEST(addp, 8h, 8h, 8h)
1410GEN_BINARY_TEST(addp, 4h, 4h, 4h)
1411GEN_BINARY_TEST(addp, 16b, 16b, 16b)
1412GEN_BINARY_TEST(addp, 8b, 8b, 8b)
1413
1414GEN_TWOVEC_TEST(addv_s_4s,  "addv s22, v23.4s",  22, 23)
1415GEN_TWOVEC_TEST(addv_h_8h,  "addv h22, v23.8h",  22, 23)
1416GEN_TWOVEC_TEST(addv_h_4h,  "addv h22, v23.4h",  22, 23)
1417GEN_TWOVEC_TEST(addv_b_16b, "addv b22, v23.16b", 22, 23)
1418GEN_TWOVEC_TEST(addv_b_8b,  "addv b22, v23.8b",  22, 23)
1419
1420/* overkill -- don't need two vecs, only one */
1421GEN_TWOVEC_TEST(orr_8h_0x5A_lsl0, "orr v22.8h, #0x5A, LSL #0", 22, 23)
1422GEN_TWOVEC_TEST(orr_8h_0xA5_lsl8, "orr v22.8h, #0xA5, LSL #8", 22, 23)
1423GEN_TWOVEC_TEST(orr_4h_0x5A_lsl0, "orr v22.4h, #0x5A, LSL #0", 22, 23)
1424GEN_TWOVEC_TEST(orr_4h_0xA5_lsl8, "orr v22.4h, #0xA5, LSL #8", 22, 23)
1425GEN_TWOVEC_TEST(orr_4s_0x5A_lsl0,  "orr v22.4s, #0x5A, LSL #0",  22, 23)
1426GEN_TWOVEC_TEST(orr_4s_0x6B_lsl8,  "orr v22.4s, #0x6B, LSL #8",  22, 23)
1427GEN_TWOVEC_TEST(orr_4s_0x49_lsl16, "orr v22.4s, #0x49, LSL #16", 22, 23)
1428GEN_TWOVEC_TEST(orr_4s_0x3D_lsl24, "orr v22.4s, #0x3D, LSL #24", 22, 23)
1429GEN_TWOVEC_TEST(orr_2s_0x5A_lsl0,  "orr v22.2s, #0x5A, LSL #0",  22, 23)
1430GEN_TWOVEC_TEST(orr_2s_0x6B_lsl8,  "orr v22.2s, #0x6B, LSL #8",  22, 23)
1431GEN_TWOVEC_TEST(orr_2s_0x49_lsl16, "orr v22.2s, #0x49, LSL #16", 22, 23)
1432GEN_TWOVEC_TEST(orr_2s_0x3D_lsl24, "orr v22.2s, #0x3D, LSL #24", 22, 23)
1433GEN_TWOVEC_TEST(bic_8h_0x5A_lsl0, "bic v22.8h, #0x5A, LSL #0", 22, 23)
1434GEN_TWOVEC_TEST(bic_8h_0xA5_lsl8, "bic v22.8h, #0xA5, LSL #8", 22, 23)
1435GEN_TWOVEC_TEST(bic_4h_0x5A_lsl0, "bic v22.4h, #0x5A, LSL #0", 22, 23)
1436GEN_TWOVEC_TEST(bic_4h_0xA5_lsl8, "bic v22.4h, #0xA5, LSL #8", 22, 23)
1437GEN_TWOVEC_TEST(bic_4s_0x5A_lsl0,  "bic v22.4s, #0x5A, LSL #0",  22, 23)
1438GEN_TWOVEC_TEST(bic_4s_0x6B_lsl8,  "bic v22.4s, #0x6B, LSL #8",  22, 23)
1439GEN_TWOVEC_TEST(bic_4s_0x49_lsl16, "bic v22.4s, #0x49, LSL #16", 22, 23)
1440GEN_TWOVEC_TEST(bic_4s_0x3D_lsl24, "bic v22.4s, #0x3D, LSL #24", 22, 23)
1441GEN_TWOVEC_TEST(bic_2s_0x5A_lsl0,  "bic v22.2s, #0x5A, LSL #0",  22, 23)
1442GEN_TWOVEC_TEST(bic_2s_0x6B_lsl8,  "bic v22.2s, #0x6B, LSL #8",  22, 23)
1443GEN_TWOVEC_TEST(bic_2s_0x49_lsl16, "bic v22.2s, #0x49, LSL #16", 22, 23)
1444GEN_TWOVEC_TEST(bic_2s_0x3D_lsl24, "bic v22.2s, #0x3D, LSL #24", 22, 23)
1445
1446GEN_UNARY_TEST(cls, 4s, 4s)
1447GEN_UNARY_TEST(cls, 2s, 2s)
1448GEN_UNARY_TEST(cls, 8h, 8h)
1449GEN_UNARY_TEST(cls, 4h, 4h)
1450GEN_UNARY_TEST(cls, 16b, 16b)
1451GEN_UNARY_TEST(cls, 8b, 8b)
1452
1453GEN_UNARY_TEST(clz, 4s, 4s)
1454GEN_UNARY_TEST(clz, 2s, 2s)
1455GEN_UNARY_TEST(clz, 8h, 8h)
1456GEN_UNARY_TEST(clz, 4h, 4h)
1457GEN_UNARY_TEST(clz, 16b, 16b)
1458GEN_UNARY_TEST(clz, 8b, 8b)
1459
1460GEN_THREEVEC_TEST(cmeq_d_d_d,  "cmeq  d2, d11, d29", 2, 11, 29)
1461GEN_THREEVEC_TEST(cmge_d_d_d,  "cmge  d2, d11, d29", 2, 11, 29)
1462GEN_THREEVEC_TEST(cmgt_d_d_d,  "cmgt  d2, d11, d29", 2, 11, 29)
1463GEN_THREEVEC_TEST(cmhi_d_d_d,  "cmhi  d2, d11, d29", 2, 11, 29)
1464GEN_THREEVEC_TEST(cmhs_d_d_d,  "cmhs  d2, d11, d29", 2, 11, 29)
1465GEN_THREEVEC_TEST(cmtst_d_d_d, "cmtst d2, d11, d29", 2, 11, 29)
1466
1467GEN_TWOVEC_TEST(cmeq_zero_d_d,  "cmeq  d2, d11, #0", 2, 11)
1468GEN_TWOVEC_TEST(cmge_zero_d_d,  "cmge  d2, d11, #0", 2, 11)
1469GEN_TWOVEC_TEST(cmgt_zero_d_d,  "cmgt  d2, d11, #0", 2, 11)
1470GEN_TWOVEC_TEST(cmle_zero_d_d,  "cmle  d2, d11, #0", 2, 11)
1471GEN_TWOVEC_TEST(cmlt_zero_d_d,  "cmlt  d2, d11, #0", 2, 11)
1472
1473GEN_UNARY_TEST(cnt, 16b, 16b)
1474GEN_UNARY_TEST(cnt, 8b, 8b)
1475
1476GEN_TWOVEC_TEST(dup_d_d0,  "dup d22, v23.d[0]", 22, 23)
1477GEN_TWOVEC_TEST(dup_d_d1,  "dup d22, v23.d[1]", 22, 23)
1478GEN_TWOVEC_TEST(dup_s_s0,  "dup s22, v23.s[0]", 22, 23)
1479GEN_TWOVEC_TEST(dup_s_s3,  "dup s22, v23.s[3]", 22, 23)
1480GEN_TWOVEC_TEST(dup_h_h0,  "dup h22, v23.h[0]", 22, 23)
1481GEN_TWOVEC_TEST(dup_h_h6,  "dup h22, v23.h[6]", 22, 23)
1482GEN_TWOVEC_TEST(dup_b_b0,  "dup b0,  v23.b[0]",  22, 23)
1483GEN_TWOVEC_TEST(dup_b_b13, "dup b13, v23.b[13]", 22, 23)
1484
1485GEN_TWOVEC_TEST(dup_2d_d0,  "dup v9.2d, v17.d[0]", 9, 17)
1486GEN_TWOVEC_TEST(dup_2d_d1,  "dup v9.2d, v17.d[1]", 9, 17)
1487GEN_TWOVEC_TEST(dup_4s_s0,  "dup v9.4s, v17.s[0]", 9, 17)
1488GEN_TWOVEC_TEST(dup_4s_s3,  "dup v9.4s, v17.s[3]", 9, 17)
1489GEN_TWOVEC_TEST(dup_2s_s0,  "dup v9.2s, v17.s[0]", 9, 17)
1490GEN_TWOVEC_TEST(dup_2s_s2,  "dup v9.2s, v17.s[2]", 9, 17)
1491GEN_TWOVEC_TEST(dup_8h_h0,  "dup v9.8h, v17.h[0]", 9, 17)
1492GEN_TWOVEC_TEST(dup_8h_h6,  "dup v9.8h, v17.h[6]", 9, 17)
1493GEN_TWOVEC_TEST(dup_4h_h1,  "dup v9.4h, v17.h[1]", 9, 17)
1494GEN_TWOVEC_TEST(dup_4h_h5,  "dup v9.4h, v17.h[5]", 9, 17)
1495GEN_TWOVEC_TEST(dup_16b_b2,  "dup v9.16b, v17.b[2]", 9, 17)
1496GEN_TWOVEC_TEST(dup_16b_b12, "dup v9.16b, v17.b[12]", 9, 17)
1497GEN_TWOVEC_TEST(dup_8b_b3,  "dup v9.8b, v17.b[3]", 9, 17)
1498GEN_TWOVEC_TEST(dup_8b_b13, "dup v9.8b, v17.b[13]", 9, 17)
1499
1500GEN_TWOVEC_TEST(dup_2d_x,  "mov x10, v17.d[0];  dup v9.2d,  x10", 9, 17)
1501GEN_TWOVEC_TEST(dup_4s_w,  "mov x10, v17.d[0];  dup v9.4s,  w10", 9, 17)
1502GEN_TWOVEC_TEST(dup_2s_w,  "mov x10, v17.d[0];  dup v9.2s,  w10", 9, 17)
1503GEN_TWOVEC_TEST(dup_8h_w,  "mov x10, v17.d[0];  dup v9.8h,  w10",  9, 17)
1504GEN_TWOVEC_TEST(dup_4h_w,  "mov x10, v17.d[0];  dup v9.4h,  w10",  9, 17)
1505GEN_TWOVEC_TEST(dup_16b_w, "mov x10, v17.d[0];  dup v9.16b, w10", 9, 17)
1506GEN_TWOVEC_TEST(dup_8b_w,  "mov x10, v17.d[0];  dup v9.8b,  w10",  9, 17)
1507
1508GEN_THREEVEC_TEST(ext_16b_16b_16b_0x0,
1509                  "ext  v2.16b, v11.16b, v29.16b, #0", 2, 11, 29)
1510GEN_THREEVEC_TEST(ext_16b_16b_16b_0x7,
1511                  "ext  v2.16b, v11.16b, v29.16b, #7", 2, 11, 29)
1512GEN_THREEVEC_TEST(ext_16b_16b_16b_0x8,
1513                  "ext  v2.16b, v11.16b, v29.16b, #8", 2, 11, 29)
1514GEN_THREEVEC_TEST(ext_16b_16b_16b_0x9,
1515                  "ext  v2.16b, v11.16b, v29.16b, #9", 2, 11, 29)
1516GEN_THREEVEC_TEST(ext_16b_16b_16b_0xF,
1517                  "ext  v2.16b, v11.16b, v29.16b, #15", 2, 11, 29)
1518
1519GEN_THREEVEC_TEST(ext_8b_8b_8b_0x0,
1520                  "ext  v2.8b, v11.8b, v29.8b, #0", 2, 11, 29)
1521GEN_THREEVEC_TEST(ext_8b_8b_8b_0x1,
1522                  "ext  v2.8b, v11.8b, v29.8b, #1", 2, 11, 29)
1523GEN_THREEVEC_TEST(ext_8b_8b_8b_0x6,
1524                  "ext  v2.8b, v11.8b, v29.8b, #6", 2, 11, 29)
1525GEN_THREEVEC_TEST(ext_8b_8b_8b_0x7,
1526                  "ext  v2.8b, v11.8b, v29.8b, #7", 2, 11, 29)
1527
1528
1529GEN_TWOVEC_TEST(ins_d0_d0, "ins v3.d[0], v24.d[0]", 3, 24)
1530GEN_TWOVEC_TEST(ins_d0_d1, "ins v3.d[0], v24.d[1]", 3, 24)
1531GEN_TWOVEC_TEST(ins_d1_d0, "ins v3.d[1], v24.d[0]", 3, 24)
1532GEN_TWOVEC_TEST(ins_d1_d1, "ins v3.d[1], v24.d[1]", 3, 24)
1533
1534GEN_TWOVEC_TEST(ins_s0_s2, "ins v3.s[0], v24.s[2]", 3, 24)
1535GEN_TWOVEC_TEST(ins_s3_s0, "ins v3.s[3], v24.s[0]", 3, 24)
1536GEN_TWOVEC_TEST(ins_s2_s1, "ins v3.s[2], v24.s[1]", 3, 24)
1537GEN_TWOVEC_TEST(ins_s1_s3, "ins v3.s[1], v24.s[3]", 3, 24)
1538
1539GEN_TWOVEC_TEST(ins_h0_h6, "ins v3.h[0], v24.h[6]", 3, 24)
1540GEN_TWOVEC_TEST(ins_h7_h0, "ins v3.h[7], v24.h[0]", 3, 24)
1541GEN_TWOVEC_TEST(ins_h6_h1, "ins v3.h[6], v24.h[1]", 3, 24)
1542GEN_TWOVEC_TEST(ins_h1_h7, "ins v3.h[1], v24.h[7]", 3, 24)
1543
1544GEN_TWOVEC_TEST(ins_b0_b14, "ins v3.b[0],  v24.b[14]", 3, 24)
1545GEN_TWOVEC_TEST(ins_b15_b8, "ins v3.b[15], v24.b[8]",  3, 24)
1546GEN_TWOVEC_TEST(ins_b13_b9, "ins v3.b[13], v24.b[9]",  3, 24)
1547GEN_TWOVEC_TEST(ins_b5_b12, "ins v3.b[5],  v24.b[12]", 3, 24)
1548
1549GEN_THREEVEC_TEST(mla_4s_4s_s0, "mla v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
1550GEN_THREEVEC_TEST(mla_4s_4s_s3, "mla v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
1551GEN_THREEVEC_TEST(mla_2s_2s_s0, "mla v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
1552GEN_THREEVEC_TEST(mla_2s_2s_s3, "mla v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
1553// For the 'h' version of these, Rm can only be <= 15 (!)
1554GEN_THREEVEC_TEST(mla_8h_8h_h1, "mla v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
1555GEN_THREEVEC_TEST(mla_8h_8h_h5, "mla v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
1556GEN_THREEVEC_TEST(mla_4h_4h_h2, "mla v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
1557GEN_THREEVEC_TEST(mla_4h_4h_h7, "mla v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
1558
1559GEN_THREEVEC_TEST(mls_4s_4s_s0, "mls v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
1560GEN_THREEVEC_TEST(mls_4s_4s_s3, "mls v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
1561GEN_THREEVEC_TEST(mls_2s_2s_s0, "mls v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
1562GEN_THREEVEC_TEST(mls_2s_2s_s3, "mls v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
1563// For the 'h' version of these, Rm can only be <= 15 (!)
1564GEN_THREEVEC_TEST(mls_8h_8h_h1, "mls v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
1565GEN_THREEVEC_TEST(mls_8h_8h_h5, "mls v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
1566GEN_THREEVEC_TEST(mls_4h_4h_h2, "mls v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
1567GEN_THREEVEC_TEST(mls_4h_4h_h7, "mls v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
1568
1569GEN_THREEVEC_TEST(mul_4s_4s_s0, "mul v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
1570GEN_THREEVEC_TEST(mul_4s_4s_s3, "mul v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
1571GEN_THREEVEC_TEST(mul_2s_2s_s0, "mul v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
1572GEN_THREEVEC_TEST(mul_2s_2s_s3, "mul v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
1573// For the 'h' version of these, Rm can only be <= 15 (!)
1574GEN_THREEVEC_TEST(mul_8h_8h_h1, "mul v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
1575GEN_THREEVEC_TEST(mul_8h_8h_h5, "mul v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
1576GEN_THREEVEC_TEST(mul_4h_4h_h2, "mul v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
1577GEN_THREEVEC_TEST(mul_4h_4h_h7, "mul v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
1578
1579/* overkill -- don't need two vecs, only one */
1580GEN_TWOVEC_TEST(movi_16b_0x9C_lsl0, "movi v22.16b, #0x9C, LSL #0", 22, 23)
1581GEN_TWOVEC_TEST(movi_8b_0x8B_lsl0,  "movi v22.8b,  #0x8B, LSL #0", 22, 23)
1582GEN_TWOVEC_TEST(movi_8h_0x5A_lsl0,  "movi v22.8h,  #0x5A, LSL #0", 22, 23)
1583GEN_TWOVEC_TEST(movi_8h_0xA5_lsl8,  "movi v22.8h,  #0xA5, LSL #8", 22, 23)
1584GEN_TWOVEC_TEST(movi_4h_0x5A_lsl0,  "movi v22.4h,  #0x5A, LSL #0", 22, 23)
1585GEN_TWOVEC_TEST(movi_4h_0xA5_lsl8,  "movi v22.4h,  #0xA5, LSL #8", 22, 23)
1586GEN_TWOVEC_TEST(movi_4s_0x5A_lsl0,  "movi v22.4s,  #0x5A, LSL #0",  22, 23)
1587GEN_TWOVEC_TEST(movi_4s_0x6B_lsl8,  "movi v22.4s,  #0x6B, LSL #8",  22, 23)
1588GEN_TWOVEC_TEST(movi_4s_0x49_lsl16, "movi v22.4s,  #0x49, LSL #16", 22, 23)
1589GEN_TWOVEC_TEST(movi_4s_0x3D_lsl24, "movi v22.4s,  #0x3D, LSL #24", 22, 23)
1590GEN_TWOVEC_TEST(movi_2s_0x5A_lsl0,  "movi v22.2s,  #0x5A, LSL #0",  22, 23)
1591GEN_TWOVEC_TEST(movi_2s_0x6B_lsl8,  "movi v22.2s,  #0x6B, LSL #8",  22, 23)
1592GEN_TWOVEC_TEST(movi_2s_0x49_lsl16, "movi v22.2s,  #0x49, LSL #16", 22, 23)
1593GEN_TWOVEC_TEST(movi_2s_0x3D_lsl24, "movi v22.2s,  #0x3D, LSL #24", 22, 23)
1594GEN_TWOVEC_TEST(movi_4s_0x6B_msl8,  "movi v22.4s,  #0x6B, MSL #8", 22, 23)
1595GEN_TWOVEC_TEST(movi_4s_0x94_msl16, "movi v22.4s,  #0x94, MSL #16", 22, 23)
1596GEN_TWOVEC_TEST(movi_2s_0x7A_msl8,  "movi v22.2s,  #0x7A, MSL #8", 22, 23)
1597GEN_TWOVEC_TEST(movi_2s_0xA5_msl16, "movi v22.2s,  #0xA5, MSL #16", 22, 23)
1598
1599GEN_TWOVEC_TEST(movi_d_0xA5,  "movi d22,    #0xFF00FF0000FF00FF", 22, 23)
1600GEN_TWOVEC_TEST(movi_2d_0xB4, "movi v22.2d, #0xFF00FFFF00FF0000", 22, 23)
1601
1602/* overkill -- don't need two vecs, only one */
1603GEN_TWOVEC_TEST(mvni_8h_0x5A_lsl0,  "mvni v22.8h,  #0x5A, LSL #0", 22, 23)
1604GEN_TWOVEC_TEST(mvni_8h_0xA5_lsl8,  "mvni v22.8h,  #0xA5, LSL #8", 22, 23)
1605GEN_TWOVEC_TEST(mvni_4h_0x5A_lsl0,  "mvni v22.4h,  #0x5A, LSL #0", 22, 23)
1606GEN_TWOVEC_TEST(mvni_4h_0xA5_lsl8,  "mvni v22.4h,  #0xA5, LSL #8", 22, 23)
1607GEN_TWOVEC_TEST(mvni_4s_0x5A_lsl0,  "mvni v22.4s,  #0x5A, LSL #0",  22, 23)
1608GEN_TWOVEC_TEST(mvni_4s_0x6B_lsl8,  "mvni v22.4s,  #0x6B, LSL #8",  22, 23)
1609GEN_TWOVEC_TEST(mvni_4s_0x49_lsl16, "mvni v22.4s,  #0x49, LSL #16", 22, 23)
1610GEN_TWOVEC_TEST(mvni_4s_0x3D_lsl24, "mvni v22.4s,  #0x3D, LSL #24", 22, 23)
1611GEN_TWOVEC_TEST(mvni_2s_0x5A_lsl0,  "mvni v22.2s,  #0x5A, LSL #0",  22, 23)
1612GEN_TWOVEC_TEST(mvni_2s_0x6B_lsl8,  "mvni v22.2s,  #0x6B, LSL #8",  22, 23)
1613GEN_TWOVEC_TEST(mvni_2s_0x49_lsl16, "mvni v22.2s,  #0x49, LSL #16", 22, 23)
1614GEN_TWOVEC_TEST(mvni_2s_0x3D_lsl24, "mvni v22.2s,  #0x3D, LSL #24", 22, 23)
1615GEN_TWOVEC_TEST(mvni_4s_0x6B_msl8,  "mvni v22.4s,  #0x6B, MSL #8", 22, 23)
1616GEN_TWOVEC_TEST(mvni_4s_0x94_msl16, "mvni v22.4s,  #0x94, MSL #16", 22, 23)
1617GEN_TWOVEC_TEST(mvni_2s_0x7A_msl8,  "mvni v22.2s,  #0x7A, MSL #8", 22, 23)
1618GEN_TWOVEC_TEST(mvni_2s_0xA5_msl16, "mvni v22.2s,  #0xA5, MSL #16", 22, 23)
1619
1620GEN_UNARY_TEST(not, 16b, 16b)
1621GEN_UNARY_TEST(not, 8b,  8b)
1622
1623GEN_BINARY_TEST(pmul, 16b, 16b, 16b)
1624GEN_BINARY_TEST(pmul, 8b, 8b, 8b)
1625
1626GEN_BINARY_TEST(pmull,  8h, 8b,  8b)
1627GEN_BINARY_TEST(pmull2, 8h, 16b, 16b)
1628//GEN_BINARY_TEST(pmull,  1q, 1d,  1d)
1629//GEN_BINARY_TEST(pmull,  1q, 2d,  2d)
1630
1631GEN_UNARY_TEST(rbit, 16b, 16b)
1632GEN_UNARY_TEST(rbit, 8b, 8b)
1633GEN_UNARY_TEST(rev16, 16b, 16b)
1634GEN_UNARY_TEST(rev16, 8b, 8b)
1635GEN_UNARY_TEST(rev32, 16b, 16b)
1636GEN_UNARY_TEST(rev32, 8b, 8b)
1637GEN_UNARY_TEST(rev32, 8h, 8h)
1638GEN_UNARY_TEST(rev32, 4h, 4h)
1639GEN_UNARY_TEST(rev64, 16b, 16b)
1640GEN_UNARY_TEST(rev64, 8b, 8b)
1641GEN_UNARY_TEST(rev64, 8h, 8h)
1642GEN_UNARY_TEST(rev64, 4h, 4h)
1643GEN_UNARY_TEST(rev64, 4s, 4s)
1644GEN_UNARY_TEST(rev64, 2s, 2s)
1645
1646GEN_BINARY_TEST(saba, 4s, 4s, 4s)
1647GEN_BINARY_TEST(saba, 2s, 2s, 2s)
1648GEN_BINARY_TEST(saba, 8h, 8h, 8h)
1649GEN_BINARY_TEST(saba, 4h, 4h, 4h)
1650GEN_BINARY_TEST(saba, 16b, 16b, 16b)
1651GEN_BINARY_TEST(saba, 8b, 8b, 8b)
1652
1653GEN_BINARY_TEST(uaba, 4s, 4s, 4s)
1654GEN_BINARY_TEST(uaba, 2s, 2s, 2s)
1655GEN_BINARY_TEST(uaba, 8h, 8h, 8h)
1656GEN_BINARY_TEST(uaba, 4h, 4h, 4h)
1657GEN_BINARY_TEST(uaba, 16b, 16b, 16b)
1658GEN_BINARY_TEST(uaba, 8b, 8b, 8b)
1659
1660GEN_THREEVEC_TEST(sabal_2d_2s_2s,  "sabal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1661GEN_THREEVEC_TEST(sabal2_2d_4s_4s, "sabal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1662
1663GEN_THREEVEC_TEST(sabal_4s_4h_4h,  "sabal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1664GEN_THREEVEC_TEST(sabal2_4s_8h_8h, "sabal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1665
1666GEN_THREEVEC_TEST(sabal_8h_8b_8b,  "sabal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1667GEN_THREEVEC_TEST(sabal2_8h_16b_16b,
1668                                   "sabal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1669
1670GEN_THREEVEC_TEST(uabal_2d_2s_2s,  "uabal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1671GEN_THREEVEC_TEST(uabal2_2d_4s_4s, "uabal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1672
1673GEN_THREEVEC_TEST(uabal_4s_4h_4h,  "uabal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1674GEN_THREEVEC_TEST(uabal2_4s_8h_8h, "uabal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1675
1676GEN_THREEVEC_TEST(uabal_8h_8b_8b,  "uabal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1677GEN_THREEVEC_TEST(uabal2_8h_16b_16b,
1678                                   "uabal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1679
1680GEN_THREEVEC_TEST(sabd_4s_4s_4s,    "sabd v2.4s, v11.4s, v29.4s", 2, 11, 29)
1681GEN_THREEVEC_TEST(sabd_2s_2s_2s,    "sabd v2.2s, v11.2s, v29.2s", 2, 11, 29)
1682GEN_THREEVEC_TEST(sabd_8h_8h_8h,    "sabd v2.8h, v11.8h, v29.8h", 2, 11, 29)
1683GEN_THREEVEC_TEST(sabd_4h_4h_4h,    "sabd v2.4h, v11.4h, v29.4h", 2, 11, 29)
1684GEN_THREEVEC_TEST(sabd_16b_16b_16b, "sabd v2.16b, v11.16b, v29.16b", 2, 11, 29)
1685GEN_THREEVEC_TEST(sabd_8b_8b_8b,    "sabd v2.8b, v11.8b, v29.8b", 2, 11, 29)
1686
1687GEN_THREEVEC_TEST(uabd_4s_4s_4s,    "uabd v2.4s, v11.4s, v29.4s", 2, 11, 29)
1688GEN_THREEVEC_TEST(uabd_2s_2s_2s,    "uabd v2.2s, v11.2s, v29.2s", 2, 11, 29)
1689GEN_THREEVEC_TEST(uabd_8h_8h_8h,    "uabd v2.8h, v11.8h, v29.8h", 2, 11, 29)
1690GEN_THREEVEC_TEST(uabd_4h_4h_4h,    "uabd v2.4h, v11.4h, v29.4h", 2, 11, 29)
1691GEN_THREEVEC_TEST(uabd_16b_16b_16b, "uabd v2.16b, v11.16b, v29.16b", 2, 11, 29)
1692GEN_THREEVEC_TEST(uabd_8b_8b_8b,    "uabd v2.8b, v11.8b, v29.8b", 2, 11, 29)
1693
1694GEN_THREEVEC_TEST(sabdl_2d_2s_2s,  "sabdl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1695GEN_THREEVEC_TEST(sabdl2_2d_4s_4s, "sabdl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1696
1697GEN_THREEVEC_TEST(sabdl_4s_4h_4h,  "sabdl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1698GEN_THREEVEC_TEST(sabdl2_4s_8h_8h, "sabdl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1699
1700GEN_THREEVEC_TEST(sabdl_8h_8b_8b,  "sabdl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1701GEN_THREEVEC_TEST(sabdl2_8h_16b_16b,
1702                                   "sabdl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1703
1704GEN_THREEVEC_TEST(uabdl_2d_2s_2s,  "uabdl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1705GEN_THREEVEC_TEST(uabdl2_2d_4s_4s, "uabdl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1706
1707GEN_THREEVEC_TEST(uabdl_4s_4h_4h,  "uabdl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1708GEN_THREEVEC_TEST(uabdl2_4s_8h_8h, "uabdl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1709
1710GEN_THREEVEC_TEST(uabdl_8h_8b_8b,  "uabdl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1711GEN_THREEVEC_TEST(uabdl2_8h_16b_16b,
1712                                   "uabdl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1713
1714GEN_TWOVEC_TEST(sadalp_4h_8b,  "sadalp v3.4h, v19.8b",  3, 19)
1715GEN_TWOVEC_TEST(sadalp_8h_16b, "sadalp v3.8h, v19.16b", 3, 19)
1716GEN_TWOVEC_TEST(sadalp_2s_4h,  "sadalp v3.2s, v19.4h",  3, 19)
1717GEN_TWOVEC_TEST(sadalp_4s_8h,  "sadalp v3.4s, v19.8h",  3, 19)
1718GEN_TWOVEC_TEST(sadalp_1d_2s,  "sadalp v3.1d, v19.2s",  3, 19)
1719GEN_TWOVEC_TEST(sadalp_2d_4s,  "sadalp v3.2d, v19.4s",  3, 19)
1720
1721GEN_TWOVEC_TEST(uadalp_4h_8b,  "uadalp v3.4h, v19.8b",  3, 19)
1722GEN_TWOVEC_TEST(uadalp_8h_16b, "uadalp v3.8h, v19.16b", 3, 19)
1723GEN_TWOVEC_TEST(uadalp_2s_4h,  "uadalp v3.2s, v19.4h",  3, 19)
1724GEN_TWOVEC_TEST(uadalp_4s_8h,  "uadalp v3.4s, v19.8h",  3, 19)
1725GEN_TWOVEC_TEST(uadalp_1d_2s,  "uadalp v3.1d, v19.2s",  3, 19)
1726GEN_TWOVEC_TEST(uadalp_2d_4s,  "uadalp v3.2d, v19.4s",  3, 19)
1727
1728GEN_THREEVEC_TEST(saddl_2d_2s_2s,  "saddl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1729GEN_THREEVEC_TEST(saddl2_2d_4s_4s, "saddl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1730
1731GEN_THREEVEC_TEST(saddl_4s_4h_4h,  "saddl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1732GEN_THREEVEC_TEST(saddl2_4s_8h_8h, "saddl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1733
1734GEN_THREEVEC_TEST(saddl_8h_8b_8b,  "saddl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1735GEN_THREEVEC_TEST(saddl2_8h_16b_16b,
1736                                   "saddl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1737
1738GEN_THREEVEC_TEST(uaddl_2d_2s_2s,  "uaddl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1739GEN_THREEVEC_TEST(uaddl2_2d_4s_4s, "uaddl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1740
1741GEN_THREEVEC_TEST(uaddl_4s_4h_4h,  "uaddl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1742GEN_THREEVEC_TEST(uaddl2_4s_8h_8h, "uaddl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1743
1744GEN_THREEVEC_TEST(uaddl_8h_8b_8b,  "uaddl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1745GEN_THREEVEC_TEST(uaddl2_8h_16b_16b,
1746                                   "uaddl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1747
1748GEN_THREEVEC_TEST(ssubl_2d_2s_2s,  "ssubl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1749GEN_THREEVEC_TEST(ssubl2_2d_4s_4s, "ssubl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1750
1751GEN_THREEVEC_TEST(ssubl_4s_4h_4h,  "ssubl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1752GEN_THREEVEC_TEST(ssubl2_4s_8h_8h, "ssubl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1753
1754GEN_THREEVEC_TEST(ssubl_8h_8b_8b,  "ssubl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1755GEN_THREEVEC_TEST(ssubl2_8h_16b_16b,
1756                                   "ssubl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1757
1758GEN_THREEVEC_TEST(usubl_2d_2s_2s,  "usubl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
1759GEN_THREEVEC_TEST(usubl2_2d_4s_4s, "usubl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
1760
1761GEN_THREEVEC_TEST(usubl_4s_4h_4h,  "usubl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
1762GEN_THREEVEC_TEST(usubl2_4s_8h_8h, "usubl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
1763
1764GEN_THREEVEC_TEST(usubl_8h_8b_8b,  "usubl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
1765GEN_THREEVEC_TEST(usubl2_8h_16b_16b,
1766                                   "usubl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
1767
1768GEN_TWOVEC_TEST(saddlp_4h_8b,  "saddlp v3.4h, v19.8b",  3, 19)
1769GEN_TWOVEC_TEST(saddlp_8h_16b, "saddlp v3.8h, v19.16b", 3, 19)
1770GEN_TWOVEC_TEST(saddlp_2s_4h,  "saddlp v3.2s, v19.4h",  3, 19)
1771GEN_TWOVEC_TEST(saddlp_4s_8h,  "saddlp v3.4s, v19.8h",  3, 19)
1772GEN_TWOVEC_TEST(saddlp_1d_2s,  "saddlp v3.1d, v19.2s",  3, 19)
1773GEN_TWOVEC_TEST(saddlp_2d_4s,  "saddlp v3.2d, v19.4s",  3, 19)
1774
1775GEN_TWOVEC_TEST(uaddlp_4h_8b,  "uaddlp v3.4h, v19.8b",  3, 19)
1776GEN_TWOVEC_TEST(uaddlp_8h_16b, "uaddlp v3.8h, v19.16b", 3, 19)
1777GEN_TWOVEC_TEST(uaddlp_2s_4h,  "uaddlp v3.2s, v19.4h",  3, 19)
1778GEN_TWOVEC_TEST(uaddlp_4s_8h,  "uaddlp v3.4s, v19.8h",  3, 19)
1779GEN_TWOVEC_TEST(uaddlp_1d_2s,  "uaddlp v3.1d, v19.2s",  3, 19)
1780GEN_TWOVEC_TEST(uaddlp_2d_4s,  "uaddlp v3.2d, v19.4s",  3, 19)
1781
1782GEN_TWOVEC_TEST(saddlv_h_16b, "saddlv h3, v19.16b",  3, 19)
1783GEN_TWOVEC_TEST(saddlv_h_8b,  "saddlv h3, v19.8b",   3, 19)
1784GEN_TWOVEC_TEST(saddlv_s_8h,  "saddlv s3, v19.8h",   3, 19)
1785GEN_TWOVEC_TEST(saddlv_s_4h,  "saddlv s3, v19.4h",   3, 19)
1786GEN_TWOVEC_TEST(saddlv_d_4s,  "saddlv d3, v19.4s",   3, 19)
1787
1788GEN_TWOVEC_TEST(uaddlv_h_16b, "uaddlv h3, v19.16b",  3, 19)
1789GEN_TWOVEC_TEST(uaddlv_h_8b,  "uaddlv h3, v19.8b",   3, 19)
1790GEN_TWOVEC_TEST(uaddlv_s_8h,  "uaddlv s3, v19.8h",   3, 19)
1791GEN_TWOVEC_TEST(uaddlv_s_4h,  "uaddlv s3, v19.4h",   3, 19)
1792GEN_TWOVEC_TEST(uaddlv_d_4s,  "uaddlv d3, v19.4s",   3, 19)
1793
1794GEN_THREEVEC_TEST(saddw2_8h_8h_16b, "saddw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
1795GEN_THREEVEC_TEST(saddw_8h_8h_8b,   "saddw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
1796GEN_THREEVEC_TEST(saddw2_4s_4s_8h,  "saddw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
1797GEN_THREEVEC_TEST(saddw_4s_4s_4h,   "saddw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
1798GEN_THREEVEC_TEST(saddw2_2d_2d_4s,  "saddw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
1799GEN_THREEVEC_TEST(saddw_2d_2d_2s,   "saddw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
1800
1801GEN_THREEVEC_TEST(uaddw2_8h_8h_16b, "uaddw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
1802GEN_THREEVEC_TEST(uaddw_8h_8h_8b,   "uaddw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
1803GEN_THREEVEC_TEST(uaddw2_4s_4s_8h,  "uaddw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
1804GEN_THREEVEC_TEST(uaddw_4s_4s_4h,   "uaddw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
1805GEN_THREEVEC_TEST(uaddw2_2d_2d_4s,  "uaddw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
1806GEN_THREEVEC_TEST(uaddw_2d_2d_2s,   "uaddw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
1807
1808GEN_THREEVEC_TEST(ssubw2_8h_8h_16b, "ssubw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
1809GEN_THREEVEC_TEST(ssubw_8h_8h_8b,   "ssubw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
1810GEN_THREEVEC_TEST(ssubw2_4s_4s_8h,  "ssubw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
1811GEN_THREEVEC_TEST(ssubw_4s_4s_4h,   "ssubw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
1812GEN_THREEVEC_TEST(ssubw2_2d_2d_4s,  "ssubw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
1813GEN_THREEVEC_TEST(ssubw_2d_2d_2s,   "ssubw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
1814
1815GEN_THREEVEC_TEST(usubw2_8h_8h_16b, "usubw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
1816GEN_THREEVEC_TEST(usubw_8h_8h_8b,   "usubw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
1817GEN_THREEVEC_TEST(usubw2_4s_4s_8h,  "usubw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
1818GEN_THREEVEC_TEST(usubw_4s_4s_4h,   "usubw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
1819GEN_THREEVEC_TEST(usubw2_2d_2d_4s,  "usubw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
1820GEN_THREEVEC_TEST(usubw_2d_2d_2s,   "usubw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
1821
1822GEN_THREEVEC_TEST(shadd_4s_4s_4s,   "shadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
1823GEN_THREEVEC_TEST(shadd_2s_2s_2s,   "shadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
1824GEN_THREEVEC_TEST(shadd_8h_8h_8h,   "shadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
1825GEN_THREEVEC_TEST(shadd_4h_4h_4h,   "shadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
1826GEN_THREEVEC_TEST(shadd_16b_16b_16b,"shadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
1827GEN_THREEVEC_TEST(shadd_8b_8b_8b,   "shadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
1828
1829GEN_THREEVEC_TEST(uhadd_4s_4s_4s,   "uhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
1830GEN_THREEVEC_TEST(uhadd_2s_2s_2s,   "uhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
1831GEN_THREEVEC_TEST(uhadd_8h_8h_8h,   "uhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
1832GEN_THREEVEC_TEST(uhadd_4h_4h_4h,   "uhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
1833GEN_THREEVEC_TEST(uhadd_16b_16b_16b,"uhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
1834GEN_THREEVEC_TEST(uhadd_8b_8b_8b,   "uhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
1835
1836GEN_THREEVEC_TEST(shsub_4s_4s_4s,   "shsub v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
1837GEN_THREEVEC_TEST(shsub_2s_2s_2s,   "shsub v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
1838GEN_THREEVEC_TEST(shsub_8h_8h_8h,   "shsub v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
1839GEN_THREEVEC_TEST(shsub_4h_4h_4h,   "shsub v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
1840GEN_THREEVEC_TEST(shsub_16b_16b_16b,"shsub v2.16b, v11.16b, v29.16b", 2, 11, 29)
1841GEN_THREEVEC_TEST(shsub_8b_8b_8b,   "shsub v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
1842
1843GEN_THREEVEC_TEST(uhsub_4s_4s_4s,   "uhsub v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
1844GEN_THREEVEC_TEST(uhsub_2s_2s_2s,   "uhsub v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
1845GEN_THREEVEC_TEST(uhsub_8h_8h_8h,   "uhsub v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
1846GEN_THREEVEC_TEST(uhsub_4h_4h_4h,   "uhsub v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
1847GEN_THREEVEC_TEST(uhsub_16b_16b_16b,"uhsub v2.16b, v11.16b, v29.16b", 2, 11, 29)
1848GEN_THREEVEC_TEST(uhsub_8b_8b_8b,   "uhsub v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
1849
1850GEN_TWOVEC_TEST(shll_8h_8b_8,   "shll  v3.8h, v24.8b,  #8", 3, 24)
1851GEN_TWOVEC_TEST(shll2_8h_16b_8, "shll2 v3.8h, v24.16b, #8", 3, 24)
1852GEN_TWOVEC_TEST(shll_4s_4h_16,  "shll  v3.4s, v24.4h, #16", 3, 24)
1853GEN_TWOVEC_TEST(shll2_4s_8h_16, "shll2 v3.4s, v24.8h, #16", 3, 24)
1854GEN_TWOVEC_TEST(shll_2d_2s_32,  "shll  v3.2d, v24.2s, #32", 3, 24)
1855GEN_TWOVEC_TEST(shll2_2d_4s_32, "shll2 v3.2d, v24.4s, #32", 3, 24)
1856
1857GEN_TWOVEC_TEST(shrn_2s_2d_1,   "shrn  v4.2s,  v29.2d, #1",  4, 29)
1858GEN_TWOVEC_TEST(shrn_2s_2d_32,  "shrn  v4.2s,  v29.2d, #32", 4, 29)
1859GEN_TWOVEC_TEST(shrn2_4s_2d_1,  "shrn2 v4.4s,  v29.2d, #1",  4, 29)
1860GEN_TWOVEC_TEST(shrn2_4s_2d_32, "shrn2 v4.4s,  v29.2d, #32", 4, 29)
1861GEN_TWOVEC_TEST(shrn_4h_4s_1,   "shrn  v4.4h,  v29.4s, #1",  4, 29)
1862GEN_TWOVEC_TEST(shrn_4h_4s_16,  "shrn  v4.4h,  v29.4s, #16", 4, 29)
1863GEN_TWOVEC_TEST(shrn2_8h_4s_1,  "shrn2 v4.8h,  v29.4s, #1",  4, 29)
1864GEN_TWOVEC_TEST(shrn2_8h_4s_16, "shrn2 v4.8h,  v29.4s, #16", 4, 29)
1865GEN_TWOVEC_TEST(shrn_8b_8h_1,   "shrn  v4.8b,  v29.8h, #1",  4, 29)
1866GEN_TWOVEC_TEST(shrn_8b_8h_8,   "shrn  v4.8b,  v29.8h, #8",  4, 29)
1867GEN_TWOVEC_TEST(shrn2_16b_8h_1, "shrn2 v4.16b, v29.8h, #1",  4, 29)
1868GEN_TWOVEC_TEST(shrn2_16b_8h_8, "shrn2 v4.16b, v29.8h, #8",  4, 29)
1869
1870GEN_TWOVEC_TEST(rshrn_2s_2d_1,   "rshrn  v4.2s,  v29.2d, #1",  4, 29)
1871GEN_TWOVEC_TEST(rshrn_2s_2d_32,  "rshrn  v4.2s,  v29.2d, #32", 4, 29)
1872GEN_TWOVEC_TEST(rshrn2_4s_2d_1,  "rshrn2 v4.4s,  v29.2d, #1",  4, 29)
1873GEN_TWOVEC_TEST(rshrn2_4s_2d_32, "rshrn2 v4.4s,  v29.2d, #32", 4, 29)
1874GEN_TWOVEC_TEST(rshrn_4h_4s_1,   "rshrn  v4.4h,  v29.4s, #1",  4, 29)
1875GEN_TWOVEC_TEST(rshrn_4h_4s_16,  "rshrn  v4.4h,  v29.4s, #16", 4, 29)
1876GEN_TWOVEC_TEST(rshrn2_8h_4s_1,  "rshrn2 v4.8h,  v29.4s, #1",  4, 29)
1877GEN_TWOVEC_TEST(rshrn2_8h_4s_16, "rshrn2 v4.8h,  v29.4s, #16", 4, 29)
1878GEN_TWOVEC_TEST(rshrn_8b_8h_1,   "rshrn  v4.8b,  v29.8h, #1",  4, 29)
1879GEN_TWOVEC_TEST(rshrn_8b_8h_8,   "rshrn  v4.8b,  v29.8h, #8",  4, 29)
1880GEN_TWOVEC_TEST(rshrn2_16b_8h_1, "rshrn2 v4.16b, v29.8h, #1",  4, 29)
1881GEN_TWOVEC_TEST(rshrn2_16b_8h_8, "rshrn2 v4.16b, v29.8h, #8",  4, 29)
1882
1883GEN_TWOVEC_TEST(sli_d_d_0,  "sli d5, d28, #0",  5, 28)
1884GEN_TWOVEC_TEST(sli_d_d_32, "sli d5, d28, #32", 5, 28)
1885GEN_TWOVEC_TEST(sli_d_d_63, "sli d5, d28, #63", 5, 28)
1886GEN_TWOVEC_TEST(sri_d_d_1,  "sri d5, d28, #1",  5, 28)
1887GEN_TWOVEC_TEST(sri_d_d_33, "sri d5, d28, #33", 5, 28)
1888GEN_TWOVEC_TEST(sri_d_d_64, "sri d5, d28, #64", 5, 28)
1889
1890GEN_TWOVEC_TEST(sli_2d_2d_0,   "sli v6.2d,  v27.2d, #0",  6, 27)
1891GEN_TWOVEC_TEST(sli_2d_2d_32,  "sli v6.2d,  v27.2d, #32", 6, 27)
1892GEN_TWOVEC_TEST(sli_2d_2d_63,  "sli v6.2d,  v27.2d, #63", 6, 27)
1893GEN_TWOVEC_TEST(sli_4s_4s_0,   "sli v6.4s,  v27.4s, #0",  6, 27)
1894GEN_TWOVEC_TEST(sli_4s_4s_16,  "sli v6.4s,  v27.4s, #16", 6, 27)
1895GEN_TWOVEC_TEST(sli_4s_4s_31,  "sli v6.4s,  v27.4s, #31", 6, 27)
1896GEN_TWOVEC_TEST(sli_2s_2s_0,   "sli v6.2s,  v27.2s, #0",  6, 27)
1897GEN_TWOVEC_TEST(sli_2s_2s_16,  "sli v6.2s,  v27.2s, #16", 6, 27)
1898GEN_TWOVEC_TEST(sli_2s_2s_31,  "sli v6.2s,  v27.2s, #31", 6, 27)
1899GEN_TWOVEC_TEST(sli_8h_8h_0,   "sli v6.8h,  v27.8h, #0",  6, 27)
1900GEN_TWOVEC_TEST(sli_8h_8h_8,   "sli v6.8h,  v27.8h, #8",  6, 27)
1901GEN_TWOVEC_TEST(sli_8h_8h_15,  "sli v6.8h,  v27.8h, #15", 6, 27)
1902GEN_TWOVEC_TEST(sli_4h_4h_0,   "sli v6.4h,  v27.4h, #0",  6, 27)
1903GEN_TWOVEC_TEST(sli_4h_4h_8,   "sli v6.4h,  v27.4h, #8",  6, 27)
1904GEN_TWOVEC_TEST(sli_4h_4h_15,  "sli v6.4h,  v27.4h, #15", 6, 27)
1905GEN_TWOVEC_TEST(sli_16b_16b_0, "sli v6.16b, v27.16b, #0", 6, 27)
1906GEN_TWOVEC_TEST(sli_16b_16b_3, "sli v6.16b, v27.16b, #3", 6, 27)
1907GEN_TWOVEC_TEST(sli_16b_16b_7, "sli v6.16b, v27.16b, #7", 6, 27)
1908GEN_TWOVEC_TEST(sli_8b_8b_0,   "sli v6.8b,  v27.8b, #0",  6, 27)
1909GEN_TWOVEC_TEST(sli_8b_8b_3,   "sli v6.8b,  v27.8b, #3",  6, 27)
1910GEN_TWOVEC_TEST(sli_8b_8b_7,   "sli v6.8b,  v27.8b, #7",  6, 27)
1911
1912GEN_TWOVEC_TEST(sri_2d_2d_1,   "sri v6.2d,  v27.2d,  #1",  6, 27)
1913GEN_TWOVEC_TEST(sri_2d_2d_33,  "sri v6.2d,  v27.2d,  #33", 6, 27)
1914GEN_TWOVEC_TEST(sri_2d_2d_64,  "sri v6.2d,  v27.2d,  #64", 6, 27)
1915GEN_TWOVEC_TEST(sri_4s_4s_1,   "sri v6.4s,  v27.4s,  #1",  6, 27)
1916GEN_TWOVEC_TEST(sri_4s_4s_17,  "sri v6.4s,  v27.4s,  #17", 6, 27)
1917GEN_TWOVEC_TEST(sri_4s_4s_32,  "sri v6.4s,  v27.4s,  #32", 6, 27)
1918GEN_TWOVEC_TEST(sri_2s_2s_1,   "sri v6.2s,  v27.2s,  #1",  6, 27)
1919GEN_TWOVEC_TEST(sri_2s_2s_17,  "sri v6.2s,  v27.2s,  #17", 6, 27)
1920GEN_TWOVEC_TEST(sri_2s_2s_32,  "sri v6.2s,  v27.2s,  #32", 6, 27)
1921GEN_TWOVEC_TEST(sri_8h_8h_1,   "sri v6.8h,  v27.8h,  #1",  6, 27)
1922GEN_TWOVEC_TEST(sri_8h_8h_8,   "sri v6.8h,  v27.8h,  #8",  6, 27)
1923GEN_TWOVEC_TEST(sri_8h_8h_16,  "sri v6.8h,  v27.8h,  #16", 6, 27)
1924GEN_TWOVEC_TEST(sri_4h_4h_1,   "sri v6.4h,  v27.4h,  #1",  6, 27)
1925GEN_TWOVEC_TEST(sri_4h_4h_8,   "sri v6.4h,  v27.4h,  #8",  6, 27)
1926GEN_TWOVEC_TEST(sri_4h_4h_16,  "sri v6.4h,  v27.4h,  #16", 6, 27)
1927GEN_TWOVEC_TEST(sri_16b_16b_1, "sri v6.16b, v27.16b, #1", 6, 27)
1928GEN_TWOVEC_TEST(sri_16b_16b_4, "sri v6.16b, v27.16b, #4", 6, 27)
1929GEN_TWOVEC_TEST(sri_16b_16b_8, "sri v6.16b, v27.16b, #8", 6, 27)
1930GEN_TWOVEC_TEST(sri_8b_8b_1,   "sri v6.8b,  v27.8b,  #1",  6, 27)
1931GEN_TWOVEC_TEST(sri_8b_8b_4,   "sri v6.8b,  v27.8b,  #4",  6, 27)
1932GEN_TWOVEC_TEST(sri_8b_8b_8,   "sri v6.8b,  v27.8b,  #8",  6, 27)
1933
1934GEN_BINARY_TEST(smaxp, 4s, 4s, 4s)
1935GEN_BINARY_TEST(smaxp, 2s, 2s, 2s)
1936GEN_BINARY_TEST(smaxp, 8h, 8h, 8h)
1937GEN_BINARY_TEST(smaxp, 4h, 4h, 4h)
1938GEN_BINARY_TEST(smaxp, 16b, 16b, 16b)
1939GEN_BINARY_TEST(smaxp, 8b, 8b, 8b)
1940
1941GEN_BINARY_TEST(umaxp, 4s, 4s, 4s)
1942GEN_BINARY_TEST(umaxp, 2s, 2s, 2s)
1943GEN_BINARY_TEST(umaxp, 8h, 8h, 8h)
1944GEN_BINARY_TEST(umaxp, 4h, 4h, 4h)
1945GEN_BINARY_TEST(umaxp, 16b, 16b, 16b)
1946GEN_BINARY_TEST(umaxp, 8b, 8b, 8b)
1947
1948GEN_BINARY_TEST(sminp, 4s, 4s, 4s)
1949GEN_BINARY_TEST(sminp, 2s, 2s, 2s)
1950GEN_BINARY_TEST(sminp, 8h, 8h, 8h)
1951GEN_BINARY_TEST(sminp, 4h, 4h, 4h)
1952GEN_BINARY_TEST(sminp, 16b, 16b, 16b)
1953GEN_BINARY_TEST(sminp, 8b, 8b, 8b)
1954
1955GEN_BINARY_TEST(uminp, 4s, 4s, 4s)
1956GEN_BINARY_TEST(uminp, 2s, 2s, 2s)
1957GEN_BINARY_TEST(uminp, 8h, 8h, 8h)
1958GEN_BINARY_TEST(uminp, 4h, 4h, 4h)
1959GEN_BINARY_TEST(uminp, 16b, 16b, 16b)
1960GEN_BINARY_TEST(uminp, 8b, 8b, 8b)
1961
1962GEN_THREEVEC_TEST(smlal_2d_2s_s0,  "smlal  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
1963GEN_THREEVEC_TEST(smlal_2d_2s_s3,  "smlal  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
1964GEN_THREEVEC_TEST(smlal2_2d_4s_s1, "smlal2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
1965GEN_THREEVEC_TEST(smlal2_2d_4s_s2, "smlal2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
1966GEN_THREEVEC_TEST(smlal_4s_4h_h0,  "smlal  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
1967GEN_THREEVEC_TEST(smlal_4s_4h_h7,  "smlal  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
1968GEN_THREEVEC_TEST(smlal2_4s_8h_h1, "smlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1969GEN_THREEVEC_TEST(smlal2_4s_8h_h4, "smlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1970
1971GEN_THREEVEC_TEST(umlal_2d_2s_s0,  "umlal  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
1972GEN_THREEVEC_TEST(umlal_2d_2s_s3,  "umlal  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
1973GEN_THREEVEC_TEST(umlal2_2d_4s_s1, "umlal2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
1974GEN_THREEVEC_TEST(umlal2_2d_4s_s2, "umlal2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
1975GEN_THREEVEC_TEST(umlal_4s_4h_h0,  "umlal  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
1976GEN_THREEVEC_TEST(umlal_4s_4h_h7,  "umlal  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
1977GEN_THREEVEC_TEST(umlal2_4s_8h_h1, "umlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1978GEN_THREEVEC_TEST(umlal2_4s_8h_h4, "umlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1979
1980GEN_THREEVEC_TEST(smlsl_2d_2s_s0,  "smlsl  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
1981GEN_THREEVEC_TEST(smlsl_2d_2s_s3,  "smlsl  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
1982GEN_THREEVEC_TEST(smlsl2_2d_4s_s1, "smlsl2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
1983GEN_THREEVEC_TEST(smlsl2_2d_4s_s2, "smlsl2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
1984GEN_THREEVEC_TEST(smlsl_4s_4h_h0,  "smlsl  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
1985GEN_THREEVEC_TEST(smlsl_4s_4h_h7,  "smlsl  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
1986GEN_THREEVEC_TEST(smlsl2_4s_8h_h1, "smlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1987GEN_THREEVEC_TEST(smlsl2_4s_8h_h4, "smlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1988
1989GEN_THREEVEC_TEST(umlsl_2d_2s_s0,  "umlsl  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
1990GEN_THREEVEC_TEST(umlsl_2d_2s_s3,  "umlsl  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
1991GEN_THREEVEC_TEST(umlsl2_2d_4s_s1, "umlsl2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
1992GEN_THREEVEC_TEST(umlsl2_2d_4s_s2, "umlsl2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
1993GEN_THREEVEC_TEST(umlsl_4s_4h_h0,  "umlsl  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
1994GEN_THREEVEC_TEST(umlsl_4s_4h_h7,  "umlsl  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
1995GEN_THREEVEC_TEST(umlsl2_4s_8h_h1, "umlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1996GEN_THREEVEC_TEST(umlsl2_4s_8h_h4, "umlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
1997
1998GEN_THREEVEC_TEST(smull_2d_2s_s0,  "smull  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
1999GEN_THREEVEC_TEST(smull_2d_2s_s3,  "smull  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
2000GEN_THREEVEC_TEST(smull2_2d_4s_s1, "smull2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
2001GEN_THREEVEC_TEST(smull2_2d_4s_s2, "smull2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
2002GEN_THREEVEC_TEST(smull_4s_4h_h0,  "smull  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
2003GEN_THREEVEC_TEST(smull_4s_4h_h7,  "smull  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
2004GEN_THREEVEC_TEST(smull2_4s_8h_h1, "smull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
2005GEN_THREEVEC_TEST(smull2_4s_8h_h4, "smull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
2006
2007GEN_THREEVEC_TEST(umull_2d_2s_s0,  "umull  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
2008GEN_THREEVEC_TEST(umull_2d_2s_s3,  "umull  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
2009GEN_THREEVEC_TEST(umull2_2d_4s_s1, "umull2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
2010GEN_THREEVEC_TEST(umull2_2d_4s_s2, "umull2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
2011GEN_THREEVEC_TEST(umull_4s_4h_h0,  "umull  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
2012GEN_THREEVEC_TEST(umull_4s_4h_h7,  "umull  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
2013GEN_THREEVEC_TEST(umull2_4s_8h_h1, "umull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
2014GEN_THREEVEC_TEST(umull2_4s_8h_h4, "umull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
2015
2016GEN_THREEVEC_TEST(smlal_2d_2s_2s,  "smlal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2017GEN_THREEVEC_TEST(smlal2_2d_4s_4s, "smlal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2018
2019GEN_THREEVEC_TEST(smlal_4s_4h_4h,  "smlal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2020GEN_THREEVEC_TEST(smlal2_4s_8h_8h, "smlal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2021
2022GEN_THREEVEC_TEST(smlal_8h_8b_8b,  "smlal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2023GEN_THREEVEC_TEST(smlal2_8h_16b_16b,
2024                                   "smlal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2025
2026GEN_THREEVEC_TEST(umlal_2d_2s_2s,  "umlal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2027GEN_THREEVEC_TEST(umlal2_2d_4s_4s, "umlal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2028
2029GEN_THREEVEC_TEST(umlal_4s_4h_4h,  "umlal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2030GEN_THREEVEC_TEST(umlal2_4s_8h_8h, "umlal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2031
2032GEN_THREEVEC_TEST(umlal_8h_8b_8b,  "umlal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2033GEN_THREEVEC_TEST(umlal2_8h_16b_16b,
2034                                   "umlal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2035
2036GEN_THREEVEC_TEST(smlsl_2d_2s_2s,  "smlsl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2037GEN_THREEVEC_TEST(smlsl2_2d_4s_4s, "smlsl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2038
2039GEN_THREEVEC_TEST(smlsl_4s_4h_4h,  "smlsl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2040GEN_THREEVEC_TEST(smlsl2_4s_8h_8h, "smlsl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2041
2042GEN_THREEVEC_TEST(smlsl_8h_8b_8b,  "smlsl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2043GEN_THREEVEC_TEST(smlsl2_8h_16b_16b,
2044                                   "smlsl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2045
2046GEN_THREEVEC_TEST(umlsl_2d_2s_2s,  "umlsl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2047GEN_THREEVEC_TEST(umlsl2_2d_4s_4s, "umlsl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2048
2049GEN_THREEVEC_TEST(umlsl_4s_4h_4h,  "umlsl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2050GEN_THREEVEC_TEST(umlsl2_4s_8h_8h, "umlsl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2051
2052GEN_THREEVEC_TEST(umlsl_8h_8b_8b,  "umlsl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2053GEN_THREEVEC_TEST(umlsl2_8h_16b_16b,
2054                                   "umlsl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2055
2056GEN_THREEVEC_TEST(smull_2d_2s_2s,  "smull  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2057GEN_THREEVEC_TEST(smull2_2d_4s_4s, "smull2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2058
2059GEN_THREEVEC_TEST(smull_4s_4h_4h,  "smull  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2060GEN_THREEVEC_TEST(smull2_4s_8h_8h, "smull2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2061
2062GEN_THREEVEC_TEST(smull_8h_8b_8b,  "smull  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2063GEN_THREEVEC_TEST(smull2_8h_16b_16b,
2064                                   "smull2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2065
2066GEN_THREEVEC_TEST(umull_2d_2s_2s,  "umull  v2.2d, v11.2s, v29.2s", 2, 11, 29)
2067GEN_THREEVEC_TEST(umull2_2d_4s_4s, "umull2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
2068
2069GEN_THREEVEC_TEST(umull_4s_4h_4h,  "umull  v2.4s, v11.4h, v29.4h", 2, 11, 29)
2070GEN_THREEVEC_TEST(umull2_4s_8h_8h, "umull2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
2071
2072GEN_THREEVEC_TEST(umull_8h_8b_8b,  "umull  v2.8h, v11.8b, v29.8b", 2, 11, 29)
2073GEN_THREEVEC_TEST(umull2_8h_16b_16b,
2074                                   "umull2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
2075
2076GEN_TWOVEC_TEST(sqabs_d_d, "sqabs d7, d30", 7, 30)
2077GEN_TWOVEC_TEST(sqabs_s_s, "sqabs s7, s30", 7, 30)
2078GEN_TWOVEC_TEST(sqabs_h_h, "sqabs h7, h30", 7, 30)
2079GEN_TWOVEC_TEST(sqabs_b_b, "sqabs b7, b30", 7, 30)
2080
2081GEN_TWOVEC_TEST(sqneg_d_d, "sqneg d7, d30", 7, 30)
2082GEN_TWOVEC_TEST(sqneg_s_s, "sqneg s7, s30", 7, 30)
2083GEN_TWOVEC_TEST(sqneg_h_h, "sqneg h7, h30", 7, 30)
2084GEN_TWOVEC_TEST(sqneg_b_b, "sqneg b7, b30", 7, 30)
2085
2086GEN_UNARY_TEST(sqabs, 2d, 2d)
2087GEN_UNARY_TEST(sqabs, 4s, 4s)
2088GEN_UNARY_TEST(sqabs, 2s, 2s)
2089GEN_UNARY_TEST(sqabs, 8h, 8h)
2090GEN_UNARY_TEST(sqabs, 4h, 4h)
2091GEN_UNARY_TEST(sqabs, 16b, 16b)
2092GEN_UNARY_TEST(sqabs, 8b, 8b)
2093
2094GEN_UNARY_TEST(sqneg, 2d, 2d)
2095GEN_UNARY_TEST(sqneg, 4s, 4s)
2096GEN_UNARY_TEST(sqneg, 2s, 2s)
2097GEN_UNARY_TEST(sqneg, 8h, 8h)
2098GEN_UNARY_TEST(sqneg, 4h, 4h)
2099GEN_UNARY_TEST(sqneg, 16b, 16b)
2100GEN_UNARY_TEST(sqneg, 8b, 8b)
2101
2102GEN_THREEVEC_TEST(sqadd_d_d_d, "sqadd d1, d2, d4", 1, 2, 4)
2103GEN_THREEVEC_TEST(sqadd_s_s_s, "sqadd s1, s2, s4", 1, 2, 4)
2104GEN_THREEVEC_TEST(sqadd_h_h_h, "sqadd h1, h2, h4", 1, 2, 4)
2105GEN_THREEVEC_TEST(sqadd_b_b_b, "sqadd b1, b2, b4", 1, 2, 4)
2106GEN_THREEVEC_TEST(sqadd_2d_2d_2d,    "sqadd v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2107GEN_THREEVEC_TEST(sqadd_4s_4s_4s,    "sqadd v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2108GEN_THREEVEC_TEST(sqadd_2s_2s_2s,    "sqadd v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2109GEN_THREEVEC_TEST(sqadd_8h_8h_8h,    "sqadd v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2110GEN_THREEVEC_TEST(sqadd_4h_4h_4h,    "sqadd v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2111GEN_THREEVEC_TEST(sqadd_16b_16b_16b, "sqadd v1.16b, v2.16b, v4.16b", 1, 2, 4)
2112GEN_THREEVEC_TEST(sqadd_8b_8b_8b,    "sqadd v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2113
2114GEN_THREEVEC_TEST(uqadd_d_d_d, "uqadd d1, d2, d4", 1, 2, 4)
2115GEN_THREEVEC_TEST(uqadd_s_s_s, "uqadd s1, s2, s4", 1, 2, 4)
2116GEN_THREEVEC_TEST(uqadd_h_h_h, "uqadd h1, h2, h4", 1, 2, 4)
2117GEN_THREEVEC_TEST(uqadd_b_b_b, "uqadd b1, b2, b4", 1, 2, 4)
2118GEN_THREEVEC_TEST(uqadd_2d_2d_2d,    "uqadd v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2119GEN_THREEVEC_TEST(uqadd_4s_4s_4s,    "uqadd v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2120GEN_THREEVEC_TEST(uqadd_2s_2s_2s,    "uqadd v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2121GEN_THREEVEC_TEST(uqadd_8h_8h_8h,    "uqadd v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2122GEN_THREEVEC_TEST(uqadd_4h_4h_4h,    "uqadd v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2123GEN_THREEVEC_TEST(uqadd_16b_16b_16b, "uqadd v1.16b, v2.16b, v4.16b", 1, 2, 4)
2124GEN_THREEVEC_TEST(uqadd_8b_8b_8b,    "uqadd v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2125
2126GEN_THREEVEC_TEST(sqsub_d_d_d, "sqsub d1, d2, d4", 1, 2, 4)
2127GEN_THREEVEC_TEST(sqsub_s_s_s, "sqsub s1, s2, s4", 1, 2, 4)
2128GEN_THREEVEC_TEST(sqsub_h_h_h, "sqsub h1, h2, h4", 1, 2, 4)
2129GEN_THREEVEC_TEST(sqsub_b_b_b, "sqsub b1, b2, b4", 1, 2, 4)
2130GEN_THREEVEC_TEST(sqsub_2d_2d_2d,    "sqsub v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2131GEN_THREEVEC_TEST(sqsub_4s_4s_4s,    "sqsub v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2132GEN_THREEVEC_TEST(sqsub_2s_2s_2s,    "sqsub v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2133GEN_THREEVEC_TEST(sqsub_8h_8h_8h,    "sqsub v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2134GEN_THREEVEC_TEST(sqsub_4h_4h_4h,    "sqsub v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2135GEN_THREEVEC_TEST(sqsub_16b_16b_16b, "sqsub v1.16b, v2.16b, v4.16b", 1, 2, 4)
2136GEN_THREEVEC_TEST(sqsub_8b_8b_8b,    "sqsub v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2137
2138GEN_THREEVEC_TEST(uqsub_d_d_d, "uqsub d1, d2, d4", 1, 2, 4)
2139GEN_THREEVEC_TEST(uqsub_s_s_s, "uqsub s1, s2, s4", 1, 2, 4)
2140GEN_THREEVEC_TEST(uqsub_h_h_h, "uqsub h1, h2, h4", 1, 2, 4)
2141GEN_THREEVEC_TEST(uqsub_b_b_b, "uqsub b1, b2, b4", 1, 2, 4)
2142GEN_THREEVEC_TEST(uqsub_2d_2d_2d,    "uqsub v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2143GEN_THREEVEC_TEST(uqsub_4s_4s_4s,    "uqsub v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2144GEN_THREEVEC_TEST(uqsub_2s_2s_2s,    "uqsub v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2145GEN_THREEVEC_TEST(uqsub_8h_8h_8h,    "uqsub v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2146GEN_THREEVEC_TEST(uqsub_4h_4h_4h,    "uqsub v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2147GEN_THREEVEC_TEST(uqsub_16b_16b_16b, "uqsub v1.16b, v2.16b, v4.16b", 1, 2, 4)
2148GEN_THREEVEC_TEST(uqsub_8b_8b_8b,    "uqsub v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2149
2150GEN_THREEVEC_TEST(sqdmlal_d_s_s0, "sqdmlal d31, s30, v29.s[0]", 31,30,29)
2151GEN_THREEVEC_TEST(sqdmlal_d_s_s3, "sqdmlal d31, s30, v29.s[3]", 31,30,29)
2152GEN_THREEVEC_TEST(sqdmlal_s_h_h1, "sqdmlal s31, h30, v13.h[1]", 31,30,13)
2153GEN_THREEVEC_TEST(sqdmlal_s_h_h5, "sqdmlal s31, h30, v13.h[5]", 31,30,13)
2154
2155GEN_THREEVEC_TEST(sqdmlsl_d_s_s0, "sqdmlsl d31, s30, v29.s[0]", 31,30,29)
2156GEN_THREEVEC_TEST(sqdmlsl_d_s_s3, "sqdmlsl d31, s30, v29.s[3]", 31,30,29)
2157GEN_THREEVEC_TEST(sqdmlsl_s_h_h1, "sqdmlsl s31, h30, v13.h[1]", 31,30,13)
2158GEN_THREEVEC_TEST(sqdmlsl_s_h_h5, "sqdmlsl s31, h30, v13.h[5]", 31,30,13)
2159
2160GEN_THREEVEC_TEST(sqdmull_d_s_s0, "sqdmull d31, s30, v29.s[0]", 31,30,29)
2161GEN_THREEVEC_TEST(sqdmull_d_s_s3, "sqdmull d31, s30, v29.s[3]", 31,30,29)
2162GEN_THREEVEC_TEST(sqdmull_s_h_h1, "sqdmull s31, h30, v13.h[1]", 31,30,13)
2163GEN_THREEVEC_TEST(sqdmull_s_h_h5, "sqdmull s31, h30, v13.h[5]", 31,30,13)
2164
2165GEN_THREEVEC_TEST(sqdmlal_2d_2s_s0, "sqdmlal  v29.2d, v20.2s, v3.s[0]",29,20,3)
2166GEN_THREEVEC_TEST(sqdmlal_2d_2s_s3, "sqdmlal  v29.2d, v20.2s, v3.s[3]",29,20,3)
2167GEN_THREEVEC_TEST(sqdmlal2_2d_4s_s1,"sqdmlal2 v29.2d, v20.4s, v3.s[1]",29,20,3)
2168GEN_THREEVEC_TEST(sqdmlal2_2d_4s_s2,"sqdmlal2 v29.2d, v20.4s, v3.s[2]",29,20,3)
2169GEN_THREEVEC_TEST(sqdmlal_4s_4h_h0, "sqdmlal  v29.4s, v20.4h, v3.h[0]",29,20,3)
2170GEN_THREEVEC_TEST(sqdmlal_4s_4h_h7, "sqdmlal  v29.4s, v20.4h, v3.h[7]",29,20,3)
2171GEN_THREEVEC_TEST(sqdmlal2_4s_8h_h1,"sqdmlal2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2172GEN_THREEVEC_TEST(sqdmlal2_4s_8h_h4,"sqdmlal2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2173
2174GEN_THREEVEC_TEST(sqdmlsl_2d_2s_s0, "sqdmlsl  v29.2d, v20.2s, v3.s[0]",29,20,3)
2175GEN_THREEVEC_TEST(sqdmlsl_2d_2s_s3, "sqdmlsl  v29.2d, v20.2s, v3.s[3]",29,20,3)
2176GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_s1,"sqdmlsl2 v29.2d, v20.4s, v3.s[1]",29,20,3)
2177GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_s2,"sqdmlsl2 v29.2d, v20.4s, v3.s[2]",29,20,3)
2178GEN_THREEVEC_TEST(sqdmlsl_4s_4h_h0, "sqdmlsl  v29.4s, v20.4h, v3.h[0]",29,20,3)
2179GEN_THREEVEC_TEST(sqdmlsl_4s_4h_h7, "sqdmlsl  v29.4s, v20.4h, v3.h[7]",29,20,3)
2180GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_h1,"sqdmlsl2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2181GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_h4,"sqdmlsl2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2182
2183GEN_THREEVEC_TEST(sqdmull_2d_2s_s0, "sqdmull  v29.2d, v20.2s, v3.s[0]",29,20,3)
2184GEN_THREEVEC_TEST(sqdmull_2d_2s_s3, "sqdmull  v29.2d, v20.2s, v3.s[3]",29,20,3)
2185GEN_THREEVEC_TEST(sqdmull2_2d_4s_s1,"sqdmull2 v29.2d, v20.4s, v3.s[1]",29,20,3)
2186GEN_THREEVEC_TEST(sqdmull2_2d_4s_s2,"sqdmull2 v29.2d, v20.4s, v3.s[2]",29,20,3)
2187GEN_THREEVEC_TEST(sqdmull_4s_4h_h0, "sqdmull  v29.4s, v20.4h, v3.h[0]",29,20,3)
2188GEN_THREEVEC_TEST(sqdmull_4s_4h_h7, "sqdmull  v29.4s, v20.4h, v3.h[7]",29,20,3)
2189GEN_THREEVEC_TEST(sqdmull2_4s_8h_h1,"sqdmull2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2190GEN_THREEVEC_TEST(sqdmull2_4s_8h_h4,"sqdmull2 v29.4s, v20.8h, v3.h[1]",29,20,3)
2191
2192GEN_THREEVEC_TEST(sqdmlal_d_s_s, "sqdmlal d0, s8, s16", 0, 8, 16)
2193GEN_THREEVEC_TEST(sqdmlal_s_h_h, "sqdmlal s0, h8, h16", 0, 8, 16)
2194GEN_THREEVEC_TEST(sqdmlsl_d_s_s, "sqdmlsl d0, s8, s16", 0, 8, 16)
2195GEN_THREEVEC_TEST(sqdmlsl_s_h_h, "sqdmlsl s0, h8, h16", 0, 8, 16)
2196GEN_THREEVEC_TEST(sqdmull_d_s_s, "sqdmull d0, s8, s16", 0, 8, 16)
2197GEN_THREEVEC_TEST(sqdmull_s_h_h, "sqdmull s0, h8, h16", 0, 8, 16)
2198
2199GEN_THREEVEC_TEST(sqdmlal_2d_2s_2s,  "sqdmlal  v2.2d, v11.2s, v29.2s", 2,11,29)
2200GEN_THREEVEC_TEST(sqdmlal2_2d_4s_4s, "sqdmlal2 v2.2d, v11.4s, v29.4s", 2,11,29)
2201GEN_THREEVEC_TEST(sqdmlal_4s_4h_4h,  "sqdmlal  v2.4s, v11.4h, v29.4h", 2,11,29)
2202GEN_THREEVEC_TEST(sqdmlal2_4s_8h_8h, "sqdmlal2 v2.4s, v11.8h, v29.8h", 2,11,29)
2203
2204GEN_THREEVEC_TEST(sqdmlsl_2d_2s_2s,  "sqdmlsl  v2.2d, v11.2s, v29.2s", 2,11,29)
2205GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_4s, "sqdmlsl2 v2.2d, v11.4s, v29.4s", 2,11,29)
2206GEN_THREEVEC_TEST(sqdmlsl_4s_4h_4h,  "sqdmlsl  v2.4s, v11.4h, v29.4h", 2,11,29)
2207GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_8h, "sqdmlsl2 v2.4s, v11.8h, v29.8h", 2,11,29)
2208
2209GEN_THREEVEC_TEST(sqdmull_2d_2s_2s,  "sqdmull  v2.2d, v11.2s, v29.2s", 2,11,29)
2210GEN_THREEVEC_TEST(sqdmull2_2d_4s_4s, "sqdmull2 v2.2d, v11.4s, v29.4s", 2,11,29)
2211GEN_THREEVEC_TEST(sqdmull_4s_4h_4h,  "sqdmull  v2.4s, v11.4h, v29.4h", 2,11,29)
2212GEN_THREEVEC_TEST(sqdmull2_4s_8h_8h, "sqdmull2 v2.4s, v11.8h, v29.8h", 2,11,29)
2213
2214GEN_THREEVEC_TEST(sqdmulh_s_s_s1, "sqdmulh s0, s1, v2.s[1]", 0,1,2)
2215GEN_THREEVEC_TEST(sqdmulh_s_s_s3, "sqdmulh s0, s1, v2.s[3]", 0,1,2)
2216GEN_THREEVEC_TEST(sqdmulh_h_h_h2, "sqdmulh h0, h1, v2.h[2]", 0,1,2)
2217GEN_THREEVEC_TEST(sqdmulh_h_h_h7, "sqdmulh h0, h1, v2.h[7]", 0,1,2)
2218
2219GEN_THREEVEC_TEST(sqrdmulh_s_s_s1, "sqrdmulh s0, s1, v2.s[1]", 0,1,2)
2220GEN_THREEVEC_TEST(sqrdmulh_s_s_s3, "sqrdmulh s0, s1, v2.s[3]", 0,1,2)
2221GEN_THREEVEC_TEST(sqrdmulh_h_h_h2, "sqrdmulh h0, h1, v2.h[2]", 0,1,2)
2222GEN_THREEVEC_TEST(sqrdmulh_h_h_h7, "sqrdmulh h0, h1, v2.h[7]", 0,1,2)
2223
2224GEN_THREEVEC_TEST(sqdmulh_4s_4s_s1, "sqdmulh v0.4s, v1.4s, v2.s[1]", 0,1,2)
2225GEN_THREEVEC_TEST(sqdmulh_4s_4s_s3, "sqdmulh v0.4s, v1.4s, v2.s[3]", 0,1,2)
2226GEN_THREEVEC_TEST(sqdmulh_2s_2s_s1, "sqdmulh v0.2s, v1.2s, v2.s[1]", 0,1,2)
2227GEN_THREEVEC_TEST(sqdmulh_2s_2s_s3, "sqdmulh v0.2s, v1.2s, v2.s[3]", 0,1,2)
2228GEN_THREEVEC_TEST(sqdmulh_8h_8h_h2, "sqdmulh v0.8h, v1.8h, v2.h[2]", 0,1,2)
2229GEN_THREEVEC_TEST(sqdmulh_8h_8h_h7, "sqdmulh v0.8h, v1.8h, v2.h[7]", 0,1,2)
2230GEN_THREEVEC_TEST(sqdmulh_4h_4h_h2, "sqdmulh v0.4h, v1.4h, v2.h[2]", 0,1,2)
2231GEN_THREEVEC_TEST(sqdmulh_4h_4h_h7, "sqdmulh v0.4h, v1.4h, v2.h[7]", 0,1,2)
2232
2233GEN_THREEVEC_TEST(sqrdmulh_4s_4s_s1, "sqrdmulh v0.4s, v1.4s, v2.s[1]", 0,1,2)
2234GEN_THREEVEC_TEST(sqrdmulh_4s_4s_s3, "sqrdmulh v0.4s, v1.4s, v2.s[3]", 0,1,2)
2235GEN_THREEVEC_TEST(sqrdmulh_2s_2s_s1, "sqrdmulh v0.2s, v1.2s, v2.s[1]", 0,1,2)
2236GEN_THREEVEC_TEST(sqrdmulh_2s_2s_s3, "sqrdmulh v0.2s, v1.2s, v2.s[3]", 0,1,2)
2237GEN_THREEVEC_TEST(sqrdmulh_8h_8h_h2, "sqrdmulh v0.8h, v1.8h, v2.h[2]", 0,1,2)
2238GEN_THREEVEC_TEST(sqrdmulh_8h_8h_h7, "sqrdmulh v0.8h, v1.8h, v2.h[7]", 0,1,2)
2239GEN_THREEVEC_TEST(sqrdmulh_4h_4h_h2, "sqrdmulh v0.4h, v1.4h, v2.h[2]", 0,1,2)
2240GEN_THREEVEC_TEST(sqrdmulh_4h_4h_h7, "sqrdmulh v0.4h, v1.4h, v2.h[7]", 0,1,2)
2241
2242GEN_THREEVEC_TEST(sqdmulh_s_s_s,  "sqdmulh  s1, s2, s4", 1, 2, 4)
2243GEN_THREEVEC_TEST(sqdmulh_h_h_h,  "sqdmulh  h1, h2, h4", 1, 2, 4)
2244GEN_THREEVEC_TEST(sqrdmulh_s_s_s, "sqrdmulh s1, s2, s4", 1, 2, 4)
2245GEN_THREEVEC_TEST(sqrdmulh_h_h_h, "sqrdmulh h1, h2, h4", 1, 2, 4)
2246
2247GEN_THREEVEC_TEST(sqdmulh_4s_4s_4s, "sqdmulh v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2248GEN_THREEVEC_TEST(sqdmulh_2s_2s_2s, "sqdmulh v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2249GEN_THREEVEC_TEST(sqdmulh_8h_8h_8h, "sqdmulh v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2250GEN_THREEVEC_TEST(sqdmulh_4h_4h_4h, "sqdmulh v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2251GEN_THREEVEC_TEST(sqrdmulh_4s_4s_4s, "sqrdmulh v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2252GEN_THREEVEC_TEST(sqrdmulh_2s_2s_2s, "sqrdmulh v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2253GEN_THREEVEC_TEST(sqrdmulh_8h_8h_8h, "sqrdmulh v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2254GEN_THREEVEC_TEST(sqrdmulh_4h_4h_4h, "sqrdmulh v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2255
2256GEN_THREEVEC_TEST(sqshl_d_d_d, "sqshl d1, d2, d4", 1, 2, 4)
2257GEN_THREEVEC_TEST(sqshl_s_s_s, "sqshl s1, s2, s4", 1, 2, 4)
2258GEN_THREEVEC_TEST(sqshl_h_h_h, "sqshl h1, h2, h4", 1, 2, 4)
2259GEN_THREEVEC_TEST(sqshl_b_b_b, "sqshl b1, b2, b4", 1, 2, 4)
2260GEN_THREEVEC_TEST(sqshl_2d_2d_2d,    "sqshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2261GEN_THREEVEC_TEST(sqshl_4s_4s_4s,    "sqshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2262GEN_THREEVEC_TEST(sqshl_2s_2s_2s,    "sqshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2263GEN_THREEVEC_TEST(sqshl_8h_8h_8h,    "sqshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2264GEN_THREEVEC_TEST(sqshl_4h_4h_4h,    "sqshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2265GEN_THREEVEC_TEST(sqshl_16b_16b_16b, "sqshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
2266GEN_THREEVEC_TEST(sqshl_8b_8b_8b,    "sqshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2267
2268GEN_THREEVEC_TEST(uqshl_d_d_d, "uqshl d1, d2, d4", 1, 2, 4)
2269GEN_THREEVEC_TEST(uqshl_s_s_s, "uqshl s1, s2, s4", 1, 2, 4)
2270GEN_THREEVEC_TEST(uqshl_h_h_h, "uqshl h1, h2, h4", 1, 2, 4)
2271GEN_THREEVEC_TEST(uqshl_b_b_b, "uqshl b1, b2, b4", 1, 2, 4)
2272GEN_THREEVEC_TEST(uqshl_2d_2d_2d,    "uqshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2273GEN_THREEVEC_TEST(uqshl_4s_4s_4s,    "uqshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2274GEN_THREEVEC_TEST(uqshl_2s_2s_2s,    "uqshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2275GEN_THREEVEC_TEST(uqshl_8h_8h_8h,    "uqshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2276GEN_THREEVEC_TEST(uqshl_4h_4h_4h,    "uqshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2277GEN_THREEVEC_TEST(uqshl_16b_16b_16b, "uqshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
2278GEN_THREEVEC_TEST(uqshl_8b_8b_8b,    "uqshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2279
2280GEN_THREEVEC_TEST(sqrshl_d_d_d, "sqrshl d1, d2, d4", 1, 2, 4)
2281GEN_THREEVEC_TEST(sqrshl_s_s_s, "sqrshl s1, s2, s4", 1, 2, 4)
2282GEN_THREEVEC_TEST(sqrshl_h_h_h, "sqrshl h1, h2, h4", 1, 2, 4)
2283GEN_THREEVEC_TEST(sqrshl_b_b_b, "sqrshl b1, b2, b4", 1, 2, 4)
2284GEN_THREEVEC_TEST(sqrshl_2d_2d_2d,    "sqrshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2285GEN_THREEVEC_TEST(sqrshl_4s_4s_4s,    "sqrshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2286GEN_THREEVEC_TEST(sqrshl_2s_2s_2s,    "sqrshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2287GEN_THREEVEC_TEST(sqrshl_8h_8h_8h,    "sqrshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2288GEN_THREEVEC_TEST(sqrshl_4h_4h_4h,    "sqrshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2289GEN_THREEVEC_TEST(sqrshl_16b_16b_16b, "sqrshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
2290GEN_THREEVEC_TEST(sqrshl_8b_8b_8b,    "sqrshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2291
2292GEN_THREEVEC_TEST(uqrshl_d_d_d, "uqrshl d1, d2, d4", 1, 2, 4)
2293GEN_THREEVEC_TEST(uqrshl_s_s_s, "uqrshl s1, s2, s4", 1, 2, 4)
2294GEN_THREEVEC_TEST(uqrshl_h_h_h, "uqrshl h1, h2, h4", 1, 2, 4)
2295GEN_THREEVEC_TEST(uqrshl_b_b_b, "uqrshl b1, b2, b4", 1, 2, 4)
2296GEN_THREEVEC_TEST(uqrshl_2d_2d_2d,    "uqrshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2297GEN_THREEVEC_TEST(uqrshl_4s_4s_4s,    "uqrshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2298GEN_THREEVEC_TEST(uqrshl_2s_2s_2s,    "uqrshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2299GEN_THREEVEC_TEST(uqrshl_8h_8h_8h,    "uqrshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2300GEN_THREEVEC_TEST(uqrshl_4h_4h_4h,    "uqrshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2301GEN_THREEVEC_TEST(uqrshl_16b_16b_16b, "uqrshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
2302GEN_THREEVEC_TEST(uqrshl_8b_8b_8b,    "uqrshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2303
2304GEN_TWOVEC_TEST(sqrshrn_s_d_1,  "sqrshrn s2, d5, #1",  2, 5)
2305GEN_TWOVEC_TEST(sqrshrn_s_d_17, "sqrshrn s2, d5, #17", 2, 5)
2306GEN_TWOVEC_TEST(sqrshrn_s_d_32, "sqrshrn s2, d5, #32", 2, 5)
2307GEN_TWOVEC_TEST(sqrshrn_h_s_1,  "sqrshrn h2, s5, #1",  2, 5)
2308GEN_TWOVEC_TEST(sqrshrn_h_s_9,  "sqrshrn h2, s5, #9",  2, 5)
2309GEN_TWOVEC_TEST(sqrshrn_h_s_16, "sqrshrn h2, s5, #16", 2, 5)
2310GEN_TWOVEC_TEST(sqrshrn_b_h_1,  "sqrshrn b2, h5, #1",  2, 5)
2311GEN_TWOVEC_TEST(sqrshrn_b_h_4,  "sqrshrn b2, h5, #4",  2, 5)
2312GEN_TWOVEC_TEST(sqrshrn_b_h_8,  "sqrshrn b2, h5, #8",  2, 5)
2313
2314GEN_TWOVEC_TEST(uqrshrn_s_d_1,  "uqrshrn s2, d5, #1",  2, 5)
2315GEN_TWOVEC_TEST(uqrshrn_s_d_17, "uqrshrn s2, d5, #17", 2, 5)
2316GEN_TWOVEC_TEST(uqrshrn_s_d_32, "uqrshrn s2, d5, #32", 2, 5)
2317GEN_TWOVEC_TEST(uqrshrn_h_s_1,  "uqrshrn h2, s5, #1",  2, 5)
2318GEN_TWOVEC_TEST(uqrshrn_h_s_9,  "uqrshrn h2, s5, #9",  2, 5)
2319GEN_TWOVEC_TEST(uqrshrn_h_s_16, "uqrshrn h2, s5, #16", 2, 5)
2320GEN_TWOVEC_TEST(uqrshrn_b_h_1,  "uqrshrn b2, h5, #1",  2, 5)
2321GEN_TWOVEC_TEST(uqrshrn_b_h_4,  "uqrshrn b2, h5, #4",  2, 5)
2322GEN_TWOVEC_TEST(uqrshrn_b_h_8,  "uqrshrn b2, h5, #8",  2, 5)
2323
2324GEN_TWOVEC_TEST(sqshrn_s_d_1,  "sqshrn s2, d5, #1",  2, 5)
2325GEN_TWOVEC_TEST(sqshrn_s_d_17, "sqshrn s2, d5, #17", 2, 5)
2326GEN_TWOVEC_TEST(sqshrn_s_d_32, "sqshrn s2, d5, #32", 2, 5)
2327GEN_TWOVEC_TEST(sqshrn_h_s_1,  "sqshrn h2, s5, #1",  2, 5)
2328GEN_TWOVEC_TEST(sqshrn_h_s_9,  "sqshrn h2, s5, #9",  2, 5)
2329GEN_TWOVEC_TEST(sqshrn_h_s_16, "sqshrn h2, s5, #16", 2, 5)
2330GEN_TWOVEC_TEST(sqshrn_b_h_1,  "sqshrn b2, h5, #1",  2, 5)
2331GEN_TWOVEC_TEST(sqshrn_b_h_4,  "sqshrn b2, h5, #4",  2, 5)
2332GEN_TWOVEC_TEST(sqshrn_b_h_8,  "sqshrn b2, h5, #8",  2, 5)
2333
2334GEN_TWOVEC_TEST(uqshrn_s_d_1,  "uqshrn s2, d5, #1",  2, 5)
2335GEN_TWOVEC_TEST(uqshrn_s_d_17, "uqshrn s2, d5, #17", 2, 5)
2336GEN_TWOVEC_TEST(uqshrn_s_d_32, "uqshrn s2, d5, #32", 2, 5)
2337GEN_TWOVEC_TEST(uqshrn_h_s_1,  "uqshrn h2, s5, #1",  2, 5)
2338GEN_TWOVEC_TEST(uqshrn_h_s_9,  "uqshrn h2, s5, #9",  2, 5)
2339GEN_TWOVEC_TEST(uqshrn_h_s_16, "uqshrn h2, s5, #16", 2, 5)
2340GEN_TWOVEC_TEST(uqshrn_b_h_1,  "uqshrn b2, h5, #1",  2, 5)
2341GEN_TWOVEC_TEST(uqshrn_b_h_4,  "uqshrn b2, h5, #4",  2, 5)
2342GEN_TWOVEC_TEST(uqshrn_b_h_8,  "uqshrn b2, h5, #8",  2, 5)
2343
2344GEN_TWOVEC_TEST(sqrshrun_s_d_1,  "sqrshrun s2, d5, #1",  2, 5)
2345GEN_TWOVEC_TEST(sqrshrun_s_d_17, "sqrshrun s2, d5, #17", 2, 5)
2346GEN_TWOVEC_TEST(sqrshrun_s_d_32, "sqrshrun s2, d5, #32", 2, 5)
2347GEN_TWOVEC_TEST(sqrshrun_h_s_1,  "sqrshrun h2, s5, #1",  2, 5)
2348GEN_TWOVEC_TEST(sqrshrun_h_s_9,  "sqrshrun h2, s5, #9",  2, 5)
2349GEN_TWOVEC_TEST(sqrshrun_h_s_16, "sqrshrun h2, s5, #16", 2, 5)
2350GEN_TWOVEC_TEST(sqrshrun_b_h_1,  "sqrshrun b2, h5, #1",  2, 5)
2351GEN_TWOVEC_TEST(sqrshrun_b_h_4,  "sqrshrun b2, h5, #4",  2, 5)
2352GEN_TWOVEC_TEST(sqrshrun_b_h_8,  "sqrshrun b2, h5, #8",  2, 5)
2353
2354GEN_TWOVEC_TEST(sqshrun_s_d_1,  "sqshrun s2, d5, #1",  2, 5)
2355GEN_TWOVEC_TEST(sqshrun_s_d_17, "sqshrun s2, d5, #17", 2, 5)
2356GEN_TWOVEC_TEST(sqshrun_s_d_32, "sqshrun s2, d5, #32", 2, 5)
2357GEN_TWOVEC_TEST(sqshrun_h_s_1,  "sqshrun h2, s5, #1",  2, 5)
2358GEN_TWOVEC_TEST(sqshrun_h_s_9,  "sqshrun h2, s5, #9",  2, 5)
2359GEN_TWOVEC_TEST(sqshrun_h_s_16, "sqshrun h2, s5, #16", 2, 5)
2360GEN_TWOVEC_TEST(sqshrun_b_h_1,  "sqshrun b2, h5, #1",  2, 5)
2361GEN_TWOVEC_TEST(sqshrun_b_h_4,  "sqshrun b2, h5, #4",  2, 5)
2362GEN_TWOVEC_TEST(sqshrun_b_h_8,  "sqshrun b2, h5, #8",  2, 5)
2363
2364GEN_TWOVEC_TEST(sqrshrn_2s_2d_1,   "sqrshrn  v4.2s,  v29.2d, #1",  4, 29)
2365GEN_TWOVEC_TEST(sqrshrn_2s_2d_17,  "sqrshrn  v4.2s,  v29.2d, #17", 4, 29)
2366GEN_TWOVEC_TEST(sqrshrn_2s_2d_32,  "sqrshrn  v4.2s,  v29.2d, #32", 4, 29)
2367GEN_TWOVEC_TEST(sqrshrn2_4s_2d_1,  "sqrshrn2 v4.4s,  v29.2d, #1",  4, 29)
2368GEN_TWOVEC_TEST(sqrshrn2_4s_2d_17, "sqrshrn2 v4.4s,  v29.2d, #17", 4, 29)
2369GEN_TWOVEC_TEST(sqrshrn2_4s_2d_32, "sqrshrn2 v4.4s,  v29.2d, #32", 4, 29)
2370GEN_TWOVEC_TEST(sqrshrn_4h_4s_1,   "sqrshrn  v4.4h,  v29.4s, #1",  4, 29)
2371GEN_TWOVEC_TEST(sqrshrn_4h_4s_9,   "sqrshrn  v4.4h,  v29.4s, #9",  4, 29)
2372GEN_TWOVEC_TEST(sqrshrn_4h_4s_16,  "sqrshrn  v4.4h,  v29.4s, #16", 4, 29)
2373GEN_TWOVEC_TEST(sqrshrn2_8h_4s_1,  "sqrshrn2 v4.8h,  v29.4s, #1",  4, 29)
2374GEN_TWOVEC_TEST(sqrshrn2_8h_4s_9,  "sqrshrn2 v4.8h,  v29.4s, #9",  4, 29)
2375GEN_TWOVEC_TEST(sqrshrn2_8h_4s_16, "sqrshrn2 v4.8h,  v29.4s, #16", 4, 29)
2376GEN_TWOVEC_TEST(sqrshrn_8b_8h_1,   "sqrshrn  v4.8b,  v29.8h, #1",  4, 29)
2377GEN_TWOVEC_TEST(sqrshrn_8b_8h_4,   "sqrshrn  v4.8b,  v29.8h, #4",  4, 29)
2378GEN_TWOVEC_TEST(sqrshrn_8b_8h_8,   "sqrshrn  v4.8b,  v29.8h, #8",  4, 29)
2379GEN_TWOVEC_TEST(sqrshrn2_16b_8h_1, "sqrshrn2 v4.16b, v29.8h, #1",  4, 29)
2380GEN_TWOVEC_TEST(sqrshrn2_16b_8h_4, "sqrshrn2 v4.16b, v29.8h, #4",  4, 29)
2381GEN_TWOVEC_TEST(sqrshrn2_16b_8h_8, "sqrshrn2 v4.16b, v29.8h, #8",  4, 29)
2382
2383GEN_TWOVEC_TEST(uqrshrn_2s_2d_1,   "uqrshrn  v4.2s,  v29.2d, #1",  4, 29)
2384GEN_TWOVEC_TEST(uqrshrn_2s_2d_17,  "uqrshrn  v4.2s,  v29.2d, #17", 4, 29)
2385GEN_TWOVEC_TEST(uqrshrn_2s_2d_32,  "uqrshrn  v4.2s,  v29.2d, #32", 4, 29)
2386GEN_TWOVEC_TEST(uqrshrn2_4s_2d_1,  "uqrshrn2 v4.4s,  v29.2d, #1",  4, 29)
2387GEN_TWOVEC_TEST(uqrshrn2_4s_2d_17, "uqrshrn2 v4.4s,  v29.2d, #17", 4, 29)
2388GEN_TWOVEC_TEST(uqrshrn2_4s_2d_32, "uqrshrn2 v4.4s,  v29.2d, #32", 4, 29)
2389GEN_TWOVEC_TEST(uqrshrn_4h_4s_1,   "uqrshrn  v4.4h,  v29.4s, #1",  4, 29)
2390GEN_TWOVEC_TEST(uqrshrn_4h_4s_9,   "uqrshrn  v4.4h,  v29.4s, #9",  4, 29)
2391GEN_TWOVEC_TEST(uqrshrn_4h_4s_16,  "uqrshrn  v4.4h,  v29.4s, #16", 4, 29)
2392GEN_TWOVEC_TEST(uqrshrn2_8h_4s_1,  "uqrshrn2 v4.8h,  v29.4s, #1",  4, 29)
2393GEN_TWOVEC_TEST(uqrshrn2_8h_4s_9,  "uqrshrn2 v4.8h,  v29.4s, #9",  4, 29)
2394GEN_TWOVEC_TEST(uqrshrn2_8h_4s_16, "uqrshrn2 v4.8h,  v29.4s, #16", 4, 29)
2395GEN_TWOVEC_TEST(uqrshrn_8b_8h_1,   "uqrshrn  v4.8b,  v29.8h, #1",  4, 29)
2396GEN_TWOVEC_TEST(uqrshrn_8b_8h_4,   "uqrshrn  v4.8b,  v29.8h, #4",  4, 29)
2397GEN_TWOVEC_TEST(uqrshrn_8b_8h_8,   "uqrshrn  v4.8b,  v29.8h, #8",  4, 29)
2398GEN_TWOVEC_TEST(uqrshrn2_16b_8h_1, "uqrshrn2 v4.16b, v29.8h, #1",  4, 29)
2399GEN_TWOVEC_TEST(uqrshrn2_16b_8h_4, "uqrshrn2 v4.16b, v29.8h, #4",  4, 29)
2400GEN_TWOVEC_TEST(uqrshrn2_16b_8h_8, "uqrshrn2 v4.16b, v29.8h, #8",  4, 29)
2401
2402GEN_TWOVEC_TEST(sqshrn_2s_2d_1,   "sqshrn  v4.2s,  v29.2d, #1",  4, 29)
2403GEN_TWOVEC_TEST(sqshrn_2s_2d_17,  "sqshrn  v4.2s,  v29.2d, #17", 4, 29)
2404GEN_TWOVEC_TEST(sqshrn_2s_2d_32,  "sqshrn  v4.2s,  v29.2d, #32", 4, 29)
2405GEN_TWOVEC_TEST(sqshrn2_4s_2d_1,  "sqshrn2 v4.4s,  v29.2d, #1",  4, 29)
2406GEN_TWOVEC_TEST(sqshrn2_4s_2d_17, "sqshrn2 v4.4s,  v29.2d, #17", 4, 29)
2407GEN_TWOVEC_TEST(sqshrn2_4s_2d_32, "sqshrn2 v4.4s,  v29.2d, #32", 4, 29)
2408GEN_TWOVEC_TEST(sqshrn_4h_4s_1,   "sqshrn  v4.4h,  v29.4s, #1",  4, 29)
2409GEN_TWOVEC_TEST(sqshrn_4h_4s_9,   "sqshrn  v4.4h,  v29.4s, #9",  4, 29)
2410GEN_TWOVEC_TEST(sqshrn_4h_4s_16,  "sqshrn  v4.4h,  v29.4s, #16", 4, 29)
2411GEN_TWOVEC_TEST(sqshrn2_8h_4s_1,  "sqshrn2 v4.8h,  v29.4s, #1",  4, 29)
2412GEN_TWOVEC_TEST(sqshrn2_8h_4s_9,  "sqshrn2 v4.8h,  v29.4s, #9",  4, 29)
2413GEN_TWOVEC_TEST(sqshrn2_8h_4s_16, "sqshrn2 v4.8h,  v29.4s, #16", 4, 29)
2414GEN_TWOVEC_TEST(sqshrn_8b_8h_1,   "sqshrn  v4.8b,  v29.8h, #1",  4, 29)
2415GEN_TWOVEC_TEST(sqshrn_8b_8h_4,   "sqshrn  v4.8b,  v29.8h, #4",  4, 29)
2416GEN_TWOVEC_TEST(sqshrn_8b_8h_8,   "sqshrn  v4.8b,  v29.8h, #8",  4, 29)
2417GEN_TWOVEC_TEST(sqshrn2_16b_8h_1, "sqshrn2 v4.16b, v29.8h, #1",  4, 29)
2418GEN_TWOVEC_TEST(sqshrn2_16b_8h_4, "sqshrn2 v4.16b, v29.8h, #4",  4, 29)
2419GEN_TWOVEC_TEST(sqshrn2_16b_8h_8, "sqshrn2 v4.16b, v29.8h, #8",  4, 29)
2420
2421GEN_TWOVEC_TEST(uqshrn_2s_2d_1,   "uqshrn  v4.2s,  v29.2d, #1",  4, 29)
2422GEN_TWOVEC_TEST(uqshrn_2s_2d_17,  "uqshrn  v4.2s,  v29.2d, #17", 4, 29)
2423GEN_TWOVEC_TEST(uqshrn_2s_2d_32,  "uqshrn  v4.2s,  v29.2d, #32", 4, 29)
2424GEN_TWOVEC_TEST(uqshrn2_4s_2d_1,  "uqshrn2 v4.4s,  v29.2d, #1",  4, 29)
2425GEN_TWOVEC_TEST(uqshrn2_4s_2d_17, "uqshrn2 v4.4s,  v29.2d, #17", 4, 29)
2426GEN_TWOVEC_TEST(uqshrn2_4s_2d_32, "uqshrn2 v4.4s,  v29.2d, #32", 4, 29)
2427GEN_TWOVEC_TEST(uqshrn_4h_4s_1,   "uqshrn  v4.4h,  v29.4s, #1",  4, 29)
2428GEN_TWOVEC_TEST(uqshrn_4h_4s_9,   "uqshrn  v4.4h,  v29.4s, #9",  4, 29)
2429GEN_TWOVEC_TEST(uqshrn_4h_4s_16,  "uqshrn  v4.4h,  v29.4s, #16", 4, 29)
2430GEN_TWOVEC_TEST(uqshrn2_8h_4s_1,  "uqshrn2 v4.8h,  v29.4s, #1",  4, 29)
2431GEN_TWOVEC_TEST(uqshrn2_8h_4s_9,  "uqshrn2 v4.8h,  v29.4s, #9",  4, 29)
2432GEN_TWOVEC_TEST(uqshrn2_8h_4s_16, "uqshrn2 v4.8h,  v29.4s, #16", 4, 29)
2433GEN_TWOVEC_TEST(uqshrn_8b_8h_1,   "uqshrn  v4.8b,  v29.8h, #1",  4, 29)
2434GEN_TWOVEC_TEST(uqshrn_8b_8h_4,   "uqshrn  v4.8b,  v29.8h, #4",  4, 29)
2435GEN_TWOVEC_TEST(uqshrn_8b_8h_8,   "uqshrn  v4.8b,  v29.8h, #8",  4, 29)
2436GEN_TWOVEC_TEST(uqshrn2_16b_8h_1, "uqshrn2 v4.16b, v29.8h, #1",  4, 29)
2437GEN_TWOVEC_TEST(uqshrn2_16b_8h_4, "uqshrn2 v4.16b, v29.8h, #4",  4, 29)
2438GEN_TWOVEC_TEST(uqshrn2_16b_8h_8, "uqshrn2 v4.16b, v29.8h, #8",  4, 29)
2439
2440GEN_TWOVEC_TEST(sqrshrun_2s_2d_1,   "sqrshrun  v4.2s,  v29.2d, #1",  4, 29)
2441GEN_TWOVEC_TEST(sqrshrun_2s_2d_17,  "sqrshrun  v4.2s,  v29.2d, #17", 4, 29)
2442GEN_TWOVEC_TEST(sqrshrun_2s_2d_32,  "sqrshrun  v4.2s,  v29.2d, #32", 4, 29)
2443GEN_TWOVEC_TEST(sqrshrun2_4s_2d_1,  "sqrshrun2 v4.4s,  v29.2d, #1",  4, 29)
2444GEN_TWOVEC_TEST(sqrshrun2_4s_2d_17, "sqrshrun2 v4.4s,  v29.2d, #17", 4, 29)
2445GEN_TWOVEC_TEST(sqrshrun2_4s_2d_32, "sqrshrun2 v4.4s,  v29.2d, #32", 4, 29)
2446GEN_TWOVEC_TEST(sqrshrun_4h_4s_1,   "sqrshrun  v4.4h,  v29.4s, #1",  4, 29)
2447GEN_TWOVEC_TEST(sqrshrun_4h_4s_9,   "sqrshrun  v4.4h,  v29.4s, #9",  4, 29)
2448GEN_TWOVEC_TEST(sqrshrun_4h_4s_16,  "sqrshrun  v4.4h,  v29.4s, #16", 4, 29)
2449GEN_TWOVEC_TEST(sqrshrun2_8h_4s_1,  "sqrshrun2 v4.8h,  v29.4s, #1",  4, 29)
2450GEN_TWOVEC_TEST(sqrshrun2_8h_4s_9,  "sqrshrun2 v4.8h,  v29.4s, #9",  4, 29)
2451GEN_TWOVEC_TEST(sqrshrun2_8h_4s_16, "sqrshrun2 v4.8h,  v29.4s, #16", 4, 29)
2452GEN_TWOVEC_TEST(sqrshrun_8b_8h_1,   "sqrshrun  v4.8b,  v29.8h, #1",  4, 29)
2453GEN_TWOVEC_TEST(sqrshrun_8b_8h_4,   "sqrshrun  v4.8b,  v29.8h, #4",  4, 29)
2454GEN_TWOVEC_TEST(sqrshrun_8b_8h_8,   "sqrshrun  v4.8b,  v29.8h, #8",  4, 29)
2455GEN_TWOVEC_TEST(sqrshrun2_16b_8h_1, "sqrshrun2 v4.16b, v29.8h, #1",  4, 29)
2456GEN_TWOVEC_TEST(sqrshrun2_16b_8h_4, "sqrshrun2 v4.16b, v29.8h, #4",  4, 29)
2457GEN_TWOVEC_TEST(sqrshrun2_16b_8h_8, "sqrshrun2 v4.16b, v29.8h, #8",  4, 29)
2458
2459GEN_TWOVEC_TEST(sqshrun_2s_2d_1,   "sqshrun  v4.2s,  v29.2d, #1",  4, 29)
2460GEN_TWOVEC_TEST(sqshrun_2s_2d_17,  "sqshrun  v4.2s,  v29.2d, #17", 4, 29)
2461GEN_TWOVEC_TEST(sqshrun_2s_2d_32,  "sqshrun  v4.2s,  v29.2d, #32", 4, 29)
2462GEN_TWOVEC_TEST(sqshrun2_4s_2d_1,  "sqshrun2 v4.4s,  v29.2d, #1",  4, 29)
2463GEN_TWOVEC_TEST(sqshrun2_4s_2d_17, "sqshrun2 v4.4s,  v29.2d, #17", 4, 29)
2464GEN_TWOVEC_TEST(sqshrun2_4s_2d_32, "sqshrun2 v4.4s,  v29.2d, #32", 4, 29)
2465GEN_TWOVEC_TEST(sqshrun_4h_4s_1,   "sqshrun  v4.4h,  v29.4s, #1",  4, 29)
2466GEN_TWOVEC_TEST(sqshrun_4h_4s_9,   "sqshrun  v4.4h,  v29.4s, #9",  4, 29)
2467GEN_TWOVEC_TEST(sqshrun_4h_4s_16,  "sqshrun  v4.4h,  v29.4s, #16", 4, 29)
2468GEN_TWOVEC_TEST(sqshrun2_8h_4s_1,  "sqshrun2 v4.8h,  v29.4s, #1",  4, 29)
2469GEN_TWOVEC_TEST(sqshrun2_8h_4s_9,  "sqshrun2 v4.8h,  v29.4s, #9",  4, 29)
2470GEN_TWOVEC_TEST(sqshrun2_8h_4s_16, "sqshrun2 v4.8h,  v29.4s, #16", 4, 29)
2471GEN_TWOVEC_TEST(sqshrun_8b_8h_1,   "sqshrun  v4.8b,  v29.8h, #1",  4, 29)
2472GEN_TWOVEC_TEST(sqshrun_8b_8h_4,   "sqshrun  v4.8b,  v29.8h, #4",  4, 29)
2473GEN_TWOVEC_TEST(sqshrun_8b_8h_8,   "sqshrun  v4.8b,  v29.8h, #8",  4, 29)
2474GEN_TWOVEC_TEST(sqshrun2_16b_8h_1, "sqshrun2 v4.16b, v29.8h, #1",  4, 29)
2475GEN_TWOVEC_TEST(sqshrun2_16b_8h_4, "sqshrun2 v4.16b, v29.8h, #4",  4, 29)
2476GEN_TWOVEC_TEST(sqshrun2_16b_8h_8, "sqshrun2 v4.16b, v29.8h, #8",  4, 29)
2477
2478GEN_TWOVEC_TEST(sqshl_d_d_0,  "sqshl d5, d28, #0",  5, 28)
2479GEN_TWOVEC_TEST(sqshl_d_d_32, "sqshl d5, d28, #32", 5, 28)
2480GEN_TWOVEC_TEST(sqshl_d_d_63, "sqshl d5, d28, #63", 5, 28)
2481GEN_TWOVEC_TEST(sqshl_s_s_0,  "sqshl s5, s28, #0",  5, 28)
2482GEN_TWOVEC_TEST(sqshl_s_s_16, "sqshl s5, s28, #16", 5, 28)
2483GEN_TWOVEC_TEST(sqshl_s_s_31, "sqshl s5, s28, #31", 5, 28)
2484GEN_TWOVEC_TEST(sqshl_h_h_0,  "sqshl h5, h28, #0",  5, 28)
2485GEN_TWOVEC_TEST(sqshl_h_h_8,  "sqshl h5, h28, #8",  5, 28)
2486GEN_TWOVEC_TEST(sqshl_h_h_15, "sqshl h5, h28, #15", 5, 28)
2487GEN_TWOVEC_TEST(sqshl_b_b_0,  "sqshl b5, b28, #0",  5, 28)
2488GEN_TWOVEC_TEST(sqshl_b_b_4,  "sqshl b5, b28, #4",  5, 28)
2489GEN_TWOVEC_TEST(sqshl_b_b_7,  "sqshl b5, b28, #7",  5, 28)
2490
2491GEN_TWOVEC_TEST(uqshl_d_d_0,  "uqshl d5, d28, #0",  5, 28)
2492GEN_TWOVEC_TEST(uqshl_d_d_32, "uqshl d5, d28, #32", 5, 28)
2493GEN_TWOVEC_TEST(uqshl_d_d_63, "uqshl d5, d28, #63", 5, 28)
2494GEN_TWOVEC_TEST(uqshl_s_s_0,  "uqshl s5, s28, #0",  5, 28)
2495GEN_TWOVEC_TEST(uqshl_s_s_16, "uqshl s5, s28, #16", 5, 28)
2496GEN_TWOVEC_TEST(uqshl_s_s_31, "uqshl s5, s28, #31", 5, 28)
2497GEN_TWOVEC_TEST(uqshl_h_h_0,  "uqshl h5, h28, #0",  5, 28)
2498GEN_TWOVEC_TEST(uqshl_h_h_8,  "uqshl h5, h28, #8",  5, 28)
2499GEN_TWOVEC_TEST(uqshl_h_h_15, "uqshl h5, h28, #15", 5, 28)
2500GEN_TWOVEC_TEST(uqshl_b_b_0,  "uqshl b5, b28, #0",  5, 28)
2501GEN_TWOVEC_TEST(uqshl_b_b_4,  "uqshl b5, b28, #4",  5, 28)
2502GEN_TWOVEC_TEST(uqshl_b_b_7,  "uqshl b5, b28, #7",  5, 28)
2503
2504GEN_TWOVEC_TEST(sqshlu_d_d_0,  "sqshlu d5, d28, #0",  5, 28)
2505GEN_TWOVEC_TEST(sqshlu_d_d_32, "sqshlu d5, d28, #32", 5, 28)
2506GEN_TWOVEC_TEST(sqshlu_d_d_63, "sqshlu d5, d28, #63", 5, 28)
2507GEN_TWOVEC_TEST(sqshlu_s_s_0,  "sqshlu s5, s28, #0",  5, 28)
2508GEN_TWOVEC_TEST(sqshlu_s_s_16, "sqshlu s5, s28, #16", 5, 28)
2509GEN_TWOVEC_TEST(sqshlu_s_s_31, "sqshlu s5, s28, #31", 5, 28)
2510GEN_TWOVEC_TEST(sqshlu_h_h_0,  "sqshlu h5, h28, #0",  5, 28)
2511GEN_TWOVEC_TEST(sqshlu_h_h_8,  "sqshlu h5, h28, #8",  5, 28)
2512GEN_TWOVEC_TEST(sqshlu_h_h_15, "sqshlu h5, h28, #15", 5, 28)
2513GEN_TWOVEC_TEST(sqshlu_b_b_0,  "sqshlu b5, b28, #0",  5, 28)
2514GEN_TWOVEC_TEST(sqshlu_b_b_4,  "sqshlu b5, b28, #4",  5, 28)
2515GEN_TWOVEC_TEST(sqshlu_b_b_7,  "sqshlu b5, b28, #7",  5, 28)
2516
2517GEN_TWOVEC_TEST(sqshl_2d_2d_0,   "sqshl v6.2d,  v27.2d, #0",  6, 27)
2518GEN_TWOVEC_TEST(sqshl_2d_2d_32,  "sqshl v6.2d,  v27.2d, #32", 6, 27)
2519GEN_TWOVEC_TEST(sqshl_2d_2d_63,  "sqshl v6.2d,  v27.2d, #63", 6, 27)
2520GEN_TWOVEC_TEST(sqshl_4s_4s_0,   "sqshl v6.4s,  v27.4s, #0",  6, 27)
2521GEN_TWOVEC_TEST(sqshl_4s_4s_16,  "sqshl v6.4s,  v27.4s, #16", 6, 27)
2522GEN_TWOVEC_TEST(sqshl_4s_4s_31,  "sqshl v6.4s,  v27.4s, #31", 6, 27)
2523GEN_TWOVEC_TEST(sqshl_2s_2s_0,   "sqshl v6.2s,  v27.2s, #0",  6, 27)
2524GEN_TWOVEC_TEST(sqshl_2s_2s_16,  "sqshl v6.2s,  v27.2s, #16", 6, 27)
2525GEN_TWOVEC_TEST(sqshl_2s_2s_31,  "sqshl v6.2s,  v27.2s, #31", 6, 27)
2526GEN_TWOVEC_TEST(sqshl_8h_8h_0,   "sqshl v6.8h,  v27.8h, #0",  6, 27)
2527GEN_TWOVEC_TEST(sqshl_8h_8h_8,   "sqshl v6.8h,  v27.8h, #8",  6, 27)
2528GEN_TWOVEC_TEST(sqshl_8h_8h_15,  "sqshl v6.8h,  v27.8h, #15", 6, 27)
2529GEN_TWOVEC_TEST(sqshl_4h_4h_0,   "sqshl v6.4h,  v27.4h, #0",  6, 27)
2530GEN_TWOVEC_TEST(sqshl_4h_4h_8,   "sqshl v6.4h,  v27.4h, #8",  6, 27)
2531GEN_TWOVEC_TEST(sqshl_4h_4h_15,  "sqshl v6.4h,  v27.4h, #15", 6, 27)
2532GEN_TWOVEC_TEST(sqshl_16b_16b_0, "sqshl v6.16b, v27.16b, #0", 6, 27)
2533GEN_TWOVEC_TEST(sqshl_16b_16b_3, "sqshl v6.16b, v27.16b, #3", 6, 27)
2534GEN_TWOVEC_TEST(sqshl_16b_16b_7, "sqshl v6.16b, v27.16b, #7", 6, 27)
2535GEN_TWOVEC_TEST(sqshl_8b_8b_0,   "sqshl v6.8b,  v27.8b, #0",  6, 27)
2536GEN_TWOVEC_TEST(sqshl_8b_8b_3,   "sqshl v6.8b,  v27.8b, #3",  6, 27)
2537GEN_TWOVEC_TEST(sqshl_8b_8b_7,   "sqshl v6.8b,  v27.8b, #7",  6, 27)
2538
2539GEN_TWOVEC_TEST(uqshl_2d_2d_0,   "uqshl v6.2d,  v27.2d, #0",  6, 27)
2540GEN_TWOVEC_TEST(uqshl_2d_2d_32,  "uqshl v6.2d,  v27.2d, #32", 6, 27)
2541GEN_TWOVEC_TEST(uqshl_2d_2d_63,  "uqshl v6.2d,  v27.2d, #63", 6, 27)
2542GEN_TWOVEC_TEST(uqshl_4s_4s_0,   "uqshl v6.4s,  v27.4s, #0",  6, 27)
2543GEN_TWOVEC_TEST(uqshl_4s_4s_16,  "uqshl v6.4s,  v27.4s, #16", 6, 27)
2544GEN_TWOVEC_TEST(uqshl_4s_4s_31,  "uqshl v6.4s,  v27.4s, #31", 6, 27)
2545GEN_TWOVEC_TEST(uqshl_2s_2s_0,   "uqshl v6.2s,  v27.2s, #0",  6, 27)
2546GEN_TWOVEC_TEST(uqshl_2s_2s_16,  "uqshl v6.2s,  v27.2s, #16", 6, 27)
2547GEN_TWOVEC_TEST(uqshl_2s_2s_31,  "uqshl v6.2s,  v27.2s, #31", 6, 27)
2548GEN_TWOVEC_TEST(uqshl_8h_8h_0,   "uqshl v6.8h,  v27.8h, #0",  6, 27)
2549GEN_TWOVEC_TEST(uqshl_8h_8h_8,   "uqshl v6.8h,  v27.8h, #8",  6, 27)
2550GEN_TWOVEC_TEST(uqshl_8h_8h_15,  "uqshl v6.8h,  v27.8h, #15", 6, 27)
2551GEN_TWOVEC_TEST(uqshl_4h_4h_0,   "uqshl v6.4h,  v27.4h, #0",  6, 27)
2552GEN_TWOVEC_TEST(uqshl_4h_4h_8,   "uqshl v6.4h,  v27.4h, #8",  6, 27)
2553GEN_TWOVEC_TEST(uqshl_4h_4h_15,  "uqshl v6.4h,  v27.4h, #15", 6, 27)
2554GEN_TWOVEC_TEST(uqshl_16b_16b_0, "uqshl v6.16b, v27.16b, #0", 6, 27)
2555GEN_TWOVEC_TEST(uqshl_16b_16b_3, "uqshl v6.16b, v27.16b, #3", 6, 27)
2556GEN_TWOVEC_TEST(uqshl_16b_16b_7, "uqshl v6.16b, v27.16b, #7", 6, 27)
2557GEN_TWOVEC_TEST(uqshl_8b_8b_0,   "uqshl v6.8b,  v27.8b, #0",  6, 27)
2558GEN_TWOVEC_TEST(uqshl_8b_8b_3,   "uqshl v6.8b,  v27.8b, #3",  6, 27)
2559GEN_TWOVEC_TEST(uqshl_8b_8b_7,   "uqshl v6.8b,  v27.8b, #7",  6, 27)
2560
2561GEN_TWOVEC_TEST(sqshlu_2d_2d_0,   "sqshlu v6.2d,  v27.2d, #0",  6, 27)
2562GEN_TWOVEC_TEST(sqshlu_2d_2d_32,  "sqshlu v6.2d,  v27.2d, #32", 6, 27)
2563GEN_TWOVEC_TEST(sqshlu_2d_2d_63,  "sqshlu v6.2d,  v27.2d, #63", 6, 27)
2564GEN_TWOVEC_TEST(sqshlu_4s_4s_0,   "sqshlu v6.4s,  v27.4s, #0",  6, 27)
2565GEN_TWOVEC_TEST(sqshlu_4s_4s_16,  "sqshlu v6.4s,  v27.4s, #16", 6, 27)
2566GEN_TWOVEC_TEST(sqshlu_4s_4s_31,  "sqshlu v6.4s,  v27.4s, #31", 6, 27)
2567GEN_TWOVEC_TEST(sqshlu_2s_2s_0,   "sqshlu v6.2s,  v27.2s, #0",  6, 27)
2568GEN_TWOVEC_TEST(sqshlu_2s_2s_16,  "sqshlu v6.2s,  v27.2s, #16", 6, 27)
2569GEN_TWOVEC_TEST(sqshlu_2s_2s_31,  "sqshlu v6.2s,  v27.2s, #31", 6, 27)
2570GEN_TWOVEC_TEST(sqshlu_8h_8h_0,   "sqshlu v6.8h,  v27.8h, #0",  6, 27)
2571GEN_TWOVEC_TEST(sqshlu_8h_8h_8,   "sqshlu v6.8h,  v27.8h, #8",  6, 27)
2572GEN_TWOVEC_TEST(sqshlu_8h_8h_15,  "sqshlu v6.8h,  v27.8h, #15", 6, 27)
2573GEN_TWOVEC_TEST(sqshlu_4h_4h_0,   "sqshlu v6.4h,  v27.4h, #0",  6, 27)
2574GEN_TWOVEC_TEST(sqshlu_4h_4h_8,   "sqshlu v6.4h,  v27.4h, #8",  6, 27)
2575GEN_TWOVEC_TEST(sqshlu_4h_4h_15,  "sqshlu v6.4h,  v27.4h, #15", 6, 27)
2576GEN_TWOVEC_TEST(sqshlu_16b_16b_0, "sqshlu v6.16b, v27.16b, #0", 6, 27)
2577GEN_TWOVEC_TEST(sqshlu_16b_16b_3, "sqshlu v6.16b, v27.16b, #3", 6, 27)
2578GEN_TWOVEC_TEST(sqshlu_16b_16b_7, "sqshlu v6.16b, v27.16b, #7", 6, 27)
2579GEN_TWOVEC_TEST(sqshlu_8b_8b_0,   "sqshlu v6.8b,  v27.8b, #0",  6, 27)
2580GEN_TWOVEC_TEST(sqshlu_8b_8b_3,   "sqshlu v6.8b,  v27.8b, #3",  6, 27)
2581GEN_TWOVEC_TEST(sqshlu_8b_8b_7,   "sqshlu v6.8b,  v27.8b, #7",  6, 27)
2582
2583GEN_TWOVEC_TEST(sqxtn_s_d,  "sqxtn s31,  d0", 31, 0)
2584GEN_TWOVEC_TEST(sqxtn_h_s,  "sqxtn h31,  s0", 31, 0)
2585GEN_TWOVEC_TEST(sqxtn_b_h,  "sqxtn b31,  h0", 31, 0)
2586GEN_TWOVEC_TEST(uqxtn_s_d,  "uqxtn s31,  d0", 31, 0)
2587GEN_TWOVEC_TEST(uqxtn_h_s,  "uqxtn h31,  s0", 31, 0)
2588GEN_TWOVEC_TEST(uqxtn_b_h,  "uqxtn b31,  h0", 31, 0)
2589GEN_TWOVEC_TEST(sqxtun_s_d, "sqxtun s31, d0", 31, 0)
2590GEN_TWOVEC_TEST(sqxtun_h_s, "sqxtun h31, s0", 31, 0)
2591GEN_TWOVEC_TEST(sqxtun_b_h, "sqxtun b31, h0", 31, 0)
2592
2593GEN_UNARY_TEST(sqxtn,   2s, 2d)
2594GEN_UNARY_TEST(sqxtn2,  4s, 2d)
2595GEN_UNARY_TEST(sqxtn,   4h, 4s)
2596GEN_UNARY_TEST(sqxtn2,  8h, 4s)
2597GEN_UNARY_TEST(sqxtn,   8b, 8h)
2598GEN_UNARY_TEST(sqxtn2, 16b, 8h)
2599
2600GEN_UNARY_TEST(uqxtn,   2s, 2d)
2601GEN_UNARY_TEST(uqxtn2,  4s, 2d)
2602GEN_UNARY_TEST(uqxtn,   4h, 4s)
2603GEN_UNARY_TEST(uqxtn2,  8h, 4s)
2604GEN_UNARY_TEST(uqxtn,   8b, 8h)
2605GEN_UNARY_TEST(uqxtn2, 16b, 8h)
2606
2607GEN_UNARY_TEST(sqxtun,   2s, 2d)
2608GEN_UNARY_TEST(sqxtun2,  4s, 2d)
2609GEN_UNARY_TEST(sqxtun,   4h, 4s)
2610GEN_UNARY_TEST(sqxtun2,  8h, 4s)
2611GEN_UNARY_TEST(sqxtun,   8b, 8h)
2612GEN_UNARY_TEST(sqxtun2, 16b, 8h)
2613
2614GEN_THREEVEC_TEST(srhadd_4s_4s_4s,"srhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
2615GEN_THREEVEC_TEST(srhadd_2s_2s_2s,"srhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
2616GEN_THREEVEC_TEST(srhadd_8h_8h_8h,"srhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
2617GEN_THREEVEC_TEST(srhadd_4h_4h_4h,"srhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
2618GEN_THREEVEC_TEST(srhadd_16b_16b_16b,
2619                                  "srhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
2620GEN_THREEVEC_TEST(srhadd_8b_8b_8b,"srhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
2621
2622GEN_THREEVEC_TEST(urhadd_4s_4s_4s,"urhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
2623GEN_THREEVEC_TEST(urhadd_2s_2s_2s,"urhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
2624GEN_THREEVEC_TEST(urhadd_8h_8h_8h,"urhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
2625GEN_THREEVEC_TEST(urhadd_4h_4h_4h,"urhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
2626GEN_THREEVEC_TEST(urhadd_16b_16b_16b,
2627                                  "urhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
2628GEN_THREEVEC_TEST(urhadd_8b_8b_8b,"urhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
2629
2630GEN_THREEVEC_TEST(sshl_d_d_d, "sshl d29, d28, d27", 29, 28, 27)
2631GEN_THREEVEC_TEST(ushl_d_d_d, "ushl d29, d28, d27", 29, 28, 27)
2632
2633GEN_THREEVEC_TEST(sshl_2d_2d_2d,    "sshl v29.2d, v28.2d, v27.2d", 29,28,27)
2634GEN_THREEVEC_TEST(sshl_4s_4s_4s,    "sshl v29.4s, v28.4s, v27.4s", 29,28,27)
2635GEN_THREEVEC_TEST(sshl_2s_2s_2s,    "sshl v29.2s, v28.2s, v27.2s", 29,28,27)
2636GEN_THREEVEC_TEST(sshl_8h_8h_8h,    "sshl v29.8h, v28.8h, v27.8h", 29,28,27)
2637GEN_THREEVEC_TEST(sshl_4h_4h_4h,    "sshl v29.4h, v28.4h, v27.4h", 29,28,27)
2638GEN_THREEVEC_TEST(sshl_16b_16b_16b, "sshl v29.16b, v28.16b, v27.16b", 29,28,27)
2639GEN_THREEVEC_TEST(sshl_8b_8b_8b,    "sshl v29.8b, v28.8b, v27.8b", 29,28,27)
2640
2641GEN_THREEVEC_TEST(ushl_2d_2d_2d,    "ushl v29.2d, v28.2d, v27.2d", 29,28,27)
2642GEN_THREEVEC_TEST(ushl_4s_4s_4s,    "ushl v29.4s, v28.4s, v27.4s", 29,28,27)
2643GEN_THREEVEC_TEST(ushl_2s_2s_2s,    "ushl v29.2s, v28.2s, v27.2s", 29,28,27)
2644GEN_THREEVEC_TEST(ushl_8h_8h_8h,    "ushl v29.8h, v28.8h, v27.8h", 29,28,27)
2645GEN_THREEVEC_TEST(ushl_4h_4h_4h,    "ushl v29.4h, v28.4h, v27.4h", 29,28,27)
2646GEN_THREEVEC_TEST(ushl_16b_16b_16b, "ushl v29.16b, v28.16b, v27.16b", 29,28,27)
2647GEN_THREEVEC_TEST(ushl_8b_8b_8b,    "ushl v29.8b, v28.8b, v27.8b", 29,28,27)
2648
2649GEN_TWOVEC_TEST(shl_d_d_0,  "shl d5, d28, #0",  5, 28)
2650GEN_TWOVEC_TEST(shl_d_d_32, "shl d5, d28, #32", 5, 28)
2651GEN_TWOVEC_TEST(shl_d_d_63, "shl d5, d28, #63", 5, 28)
2652
2653GEN_TWOVEC_TEST(sshr_d_d_1,  "sshr d5, d28, #1",  5, 28)
2654GEN_TWOVEC_TEST(sshr_d_d_32, "sshr d5, d28, #32", 5, 28)
2655GEN_TWOVEC_TEST(sshr_d_d_64, "sshr d5, d28, #64", 5, 28)
2656
2657GEN_TWOVEC_TEST(ushr_d_d_1,  "ushr d5, d28, #1",  5, 28)
2658GEN_TWOVEC_TEST(ushr_d_d_32, "ushr d5, d28, #32", 5, 28)
2659GEN_TWOVEC_TEST(ushr_d_d_64, "ushr d5, d28, #64", 5, 28)
2660
2661GEN_TWOVEC_TEST(ssra_d_d_1,  "ssra d5, d28, #1",  5, 28)
2662GEN_TWOVEC_TEST(ssra_d_d_32, "ssra d5, d28, #32", 5, 28)
2663GEN_TWOVEC_TEST(ssra_d_d_64, "ssra d5, d28, #64", 5, 28)
2664
2665GEN_TWOVEC_TEST(usra_d_d_1,  "usra d5, d28, #1",  5, 28)
2666GEN_TWOVEC_TEST(usra_d_d_32, "usra d5, d28, #32", 5, 28)
2667GEN_TWOVEC_TEST(usra_d_d_64, "usra d5, d28, #64", 5, 28)
2668
2669GEN_TWOVEC_TEST(ssra_2d_2d_1,   "ssra v6.2d,  v27.2d, #1",  6, 27)
2670GEN_TWOVEC_TEST(ssra_2d_2d_32,  "ssra v6.2d,  v27.2d, #32", 6, 27)
2671GEN_TWOVEC_TEST(ssra_2d_2d_64,  "ssra v6.2d,  v27.2d, #64", 6, 27)
2672GEN_TWOVEC_TEST(ssra_4s_4s_1,   "ssra v6.4s,  v27.4s, #1",  6, 27)
2673GEN_TWOVEC_TEST(ssra_4s_4s_16,  "ssra v6.4s,  v27.4s, #16", 6, 27)
2674GEN_TWOVEC_TEST(ssra_4s_4s_32,  "ssra v6.4s,  v27.4s, #32", 6, 27)
2675GEN_TWOVEC_TEST(ssra_2s_2s_1,   "ssra v6.2s,  v27.2s, #1",  6, 27)
2676GEN_TWOVEC_TEST(ssra_2s_2s_16,  "ssra v6.2s,  v27.2s, #16", 6, 27)
2677GEN_TWOVEC_TEST(ssra_2s_2s_32,  "ssra v6.2s,  v27.2s, #32", 6, 27)
2678GEN_TWOVEC_TEST(ssra_8h_8h_1,   "ssra v6.8h,  v27.8h, #1",  6, 27)
2679GEN_TWOVEC_TEST(ssra_8h_8h_8,   "ssra v6.8h,  v27.8h, #8",  6, 27)
2680GEN_TWOVEC_TEST(ssra_8h_8h_16,  "ssra v6.8h,  v27.8h, #16", 6, 27)
2681GEN_TWOVEC_TEST(ssra_4h_4h_1,   "ssra v6.4h,  v27.4h, #1",  6, 27)
2682GEN_TWOVEC_TEST(ssra_4h_4h_8,   "ssra v6.4h,  v27.4h, #8",  6, 27)
2683GEN_TWOVEC_TEST(ssra_4h_4h_16,  "ssra v6.4h,  v27.4h, #16", 6, 27)
2684GEN_TWOVEC_TEST(ssra_16b_16b_1, "ssra v6.16b, v27.16b, #1", 6, 27)
2685GEN_TWOVEC_TEST(ssra_16b_16b_3, "ssra v6.16b, v27.16b, #3", 6, 27)
2686GEN_TWOVEC_TEST(ssra_16b_16b_8, "ssra v6.16b, v27.16b, #8", 6, 27)
2687GEN_TWOVEC_TEST(ssra_8b_8b_1,   "ssra v6.8b,  v27.8b, #1",  6, 27)
2688GEN_TWOVEC_TEST(ssra_8b_8b_3,   "ssra v6.8b,  v27.8b, #3",  6, 27)
2689GEN_TWOVEC_TEST(ssra_8b_8b_8,   "ssra v6.8b,  v27.8b, #8",  6, 27)
2690
2691GEN_TWOVEC_TEST(usra_2d_2d_1,   "usra v6.2d,  v27.2d, #1",  6, 27)
2692GEN_TWOVEC_TEST(usra_2d_2d_32,  "usra v6.2d,  v27.2d, #32", 6, 27)
2693GEN_TWOVEC_TEST(usra_2d_2d_64,  "usra v6.2d,  v27.2d, #64", 6, 27)
2694GEN_TWOVEC_TEST(usra_4s_4s_1,   "usra v6.4s,  v27.4s, #1",  6, 27)
2695GEN_TWOVEC_TEST(usra_4s_4s_16,  "usra v6.4s,  v27.4s, #16", 6, 27)
2696GEN_TWOVEC_TEST(usra_4s_4s_32,  "usra v6.4s,  v27.4s, #32", 6, 27)
2697GEN_TWOVEC_TEST(usra_2s_2s_1,   "usra v6.2s,  v27.2s, #1",  6, 27)
2698GEN_TWOVEC_TEST(usra_2s_2s_16,  "usra v6.2s,  v27.2s, #16", 6, 27)
2699GEN_TWOVEC_TEST(usra_2s_2s_32,  "usra v6.2s,  v27.2s, #32", 6, 27)
2700GEN_TWOVEC_TEST(usra_8h_8h_1,   "usra v6.8h,  v27.8h, #1",  6, 27)
2701GEN_TWOVEC_TEST(usra_8h_8h_8,   "usra v6.8h,  v27.8h, #8",  6, 27)
2702GEN_TWOVEC_TEST(usra_8h_8h_16,  "usra v6.8h,  v27.8h, #16", 6, 27)
2703GEN_TWOVEC_TEST(usra_4h_4h_1,   "usra v6.4h,  v27.4h, #1",  6, 27)
2704GEN_TWOVEC_TEST(usra_4h_4h_8,   "usra v6.4h,  v27.4h, #8",  6, 27)
2705GEN_TWOVEC_TEST(usra_4h_4h_16,  "usra v6.4h,  v27.4h, #16", 6, 27)
2706GEN_TWOVEC_TEST(usra_16b_16b_1, "usra v6.16b, v27.16b, #1", 6, 27)
2707GEN_TWOVEC_TEST(usra_16b_16b_3, "usra v6.16b, v27.16b, #3", 6, 27)
2708GEN_TWOVEC_TEST(usra_16b_16b_8, "usra v6.16b, v27.16b, #8", 6, 27)
2709GEN_TWOVEC_TEST(usra_8b_8b_1,   "usra v6.8b,  v27.8b, #1",  6, 27)
2710GEN_TWOVEC_TEST(usra_8b_8b_3,   "usra v6.8b,  v27.8b, #3",  6, 27)
2711GEN_TWOVEC_TEST(usra_8b_8b_8,   "usra v6.8b,  v27.8b, #8",  6, 27)
2712
2713GEN_THREEVEC_TEST(srshl_d_d_d, "srshl d29, d28, d27", 29, 28, 27)
2714GEN_THREEVEC_TEST(urshl_d_d_d, "urshl d29, d28, d27", 29, 28, 27)
2715
2716GEN_THREEVEC_TEST(srshl_2d_2d_2d,   "srshl v29.2d, v28.2d, v27.2d", 29,28,27)
2717GEN_THREEVEC_TEST(srshl_4s_4s_4s,   "srshl v29.4s, v28.4s, v27.4s", 29,28,27)
2718GEN_THREEVEC_TEST(srshl_2s_2s_2s,   "srshl v29.2s, v28.2s, v27.2s", 29,28,27)
2719GEN_THREEVEC_TEST(srshl_8h_8h_8h,   "srshl v29.8h, v28.8h, v27.8h", 29,28,27)
2720GEN_THREEVEC_TEST(srshl_4h_4h_4h,   "srshl v29.4h, v28.4h, v27.4h", 29,28,27)
2721GEN_THREEVEC_TEST(srshl_16b_16b_16b,"srshl v29.16b, v28.16b, v27.16b", 29,28,27)
2722GEN_THREEVEC_TEST(srshl_8b_8b_8b,   "srshl v29.8b, v28.8b, v27.8b", 29,28,27)
2723
2724GEN_THREEVEC_TEST(urshl_2d_2d_2d,   "urshl v29.2d, v28.2d, v27.2d", 29,28,27)
2725GEN_THREEVEC_TEST(urshl_4s_4s_4s,   "urshl v29.4s, v28.4s, v27.4s", 29,28,27)
2726GEN_THREEVEC_TEST(urshl_2s_2s_2s,   "urshl v29.2s, v28.2s, v27.2s", 29,28,27)
2727GEN_THREEVEC_TEST(urshl_8h_8h_8h,   "urshl v29.8h, v28.8h, v27.8h", 29,28,27)
2728GEN_THREEVEC_TEST(urshl_4h_4h_4h,   "urshl v29.4h, v28.4h, v27.4h", 29,28,27)
2729GEN_THREEVEC_TEST(urshl_16b_16b_16b,"urshl v29.16b, v28.16b, v27.16b", 29,28,27)
2730GEN_THREEVEC_TEST(urshl_8b_8b_8b,   "urshl v29.8b, v28.8b, v27.8b", 29,28,27)
2731
2732GEN_TWOVEC_TEST(srshr_d_d_1,  "srshr d5, d28, #1",  5, 28)
2733GEN_TWOVEC_TEST(srshr_d_d_32, "srshr d5, d28, #32", 5, 28)
2734GEN_TWOVEC_TEST(srshr_d_d_64, "srshr d5, d28, #64", 5, 28)
2735
2736GEN_TWOVEC_TEST(urshr_d_d_1,  "urshr d5, d28, #1",  5, 28)
2737GEN_TWOVEC_TEST(urshr_d_d_32, "urshr d5, d28, #32", 5, 28)
2738GEN_TWOVEC_TEST(urshr_d_d_64, "urshr d5, d28, #64", 5, 28)
2739
2740GEN_TWOVEC_TEST(srshr_2d_2d_1,   "srshr v6.2d,  v27.2d, #1",  6, 27)
2741GEN_TWOVEC_TEST(srshr_2d_2d_32,  "srshr v6.2d,  v27.2d, #32", 6, 27)
2742GEN_TWOVEC_TEST(srshr_2d_2d_64,  "srshr v6.2d,  v27.2d, #64", 6, 27)
2743GEN_TWOVEC_TEST(srshr_4s_4s_1,   "srshr v6.4s,  v27.4s, #1",  6, 27)
2744GEN_TWOVEC_TEST(srshr_4s_4s_16,  "srshr v6.4s,  v27.4s, #16", 6, 27)
2745GEN_TWOVEC_TEST(srshr_4s_4s_32,  "srshr v6.4s,  v27.4s, #32", 6, 27)
2746GEN_TWOVEC_TEST(srshr_2s_2s_1,   "srshr v6.2s,  v27.2s, #1",  6, 27)
2747GEN_TWOVEC_TEST(srshr_2s_2s_16,  "srshr v6.2s,  v27.2s, #16", 6, 27)
2748GEN_TWOVEC_TEST(srshr_2s_2s_32,  "srshr v6.2s,  v27.2s, #32", 6, 27)
2749GEN_TWOVEC_TEST(srshr_8h_8h_1,   "srshr v6.8h,  v27.8h, #1",  6, 27)
2750GEN_TWOVEC_TEST(srshr_8h_8h_8,   "srshr v6.8h,  v27.8h, #8",  6, 27)
2751GEN_TWOVEC_TEST(srshr_8h_8h_16,  "srshr v6.8h,  v27.8h, #16", 6, 27)
2752GEN_TWOVEC_TEST(srshr_4h_4h_1,   "srshr v6.4h,  v27.4h, #1",  6, 27)
2753GEN_TWOVEC_TEST(srshr_4h_4h_8,   "srshr v6.4h,  v27.4h, #8",  6, 27)
2754GEN_TWOVEC_TEST(srshr_4h_4h_16,  "srshr v6.4h,  v27.4h, #16", 6, 27)
2755GEN_TWOVEC_TEST(srshr_16b_16b_1, "srshr v6.16b, v27.16b, #1", 6, 27)
2756GEN_TWOVEC_TEST(srshr_16b_16b_3, "srshr v6.16b, v27.16b, #3", 6, 27)
2757GEN_TWOVEC_TEST(srshr_16b_16b_8, "srshr v6.16b, v27.16b, #8", 6, 27)
2758GEN_TWOVEC_TEST(srshr_8b_8b_1,   "srshr v6.8b,  v27.8b, #1",  6, 27)
2759GEN_TWOVEC_TEST(srshr_8b_8b_3,   "srshr v6.8b,  v27.8b, #3",  6, 27)
2760GEN_TWOVEC_TEST(srshr_8b_8b_8,   "srshr v6.8b,  v27.8b, #8",  6, 27)
2761
2762GEN_TWOVEC_TEST(urshr_2d_2d_1,   "urshr v6.2d,  v27.2d, #1",  6, 27)
2763GEN_TWOVEC_TEST(urshr_2d_2d_32,  "urshr v6.2d,  v27.2d, #32", 6, 27)
2764GEN_TWOVEC_TEST(urshr_2d_2d_64,  "urshr v6.2d,  v27.2d, #64", 6, 27)
2765GEN_TWOVEC_TEST(urshr_4s_4s_1,   "urshr v6.4s,  v27.4s, #1",  6, 27)
2766GEN_TWOVEC_TEST(urshr_4s_4s_16,  "urshr v6.4s,  v27.4s, #16", 6, 27)
2767GEN_TWOVEC_TEST(urshr_4s_4s_32,  "urshr v6.4s,  v27.4s, #32", 6, 27)
2768GEN_TWOVEC_TEST(urshr_2s_2s_1,   "urshr v6.2s,  v27.2s, #1",  6, 27)
2769GEN_TWOVEC_TEST(urshr_2s_2s_16,  "urshr v6.2s,  v27.2s, #16", 6, 27)
2770GEN_TWOVEC_TEST(urshr_2s_2s_32,  "urshr v6.2s,  v27.2s, #32", 6, 27)
2771GEN_TWOVEC_TEST(urshr_8h_8h_1,   "urshr v6.8h,  v27.8h, #1",  6, 27)
2772GEN_TWOVEC_TEST(urshr_8h_8h_8,   "urshr v6.8h,  v27.8h, #8",  6, 27)
2773GEN_TWOVEC_TEST(urshr_8h_8h_16,  "urshr v6.8h,  v27.8h, #16", 6, 27)
2774GEN_TWOVEC_TEST(urshr_4h_4h_1,   "urshr v6.4h,  v27.4h, #1",  6, 27)
2775GEN_TWOVEC_TEST(urshr_4h_4h_8,   "urshr v6.4h,  v27.4h, #8",  6, 27)
2776GEN_TWOVEC_TEST(urshr_4h_4h_16,  "urshr v6.4h,  v27.4h, #16", 6, 27)
2777GEN_TWOVEC_TEST(urshr_16b_16b_1, "urshr v6.16b, v27.16b, #1", 6, 27)
2778GEN_TWOVEC_TEST(urshr_16b_16b_3, "urshr v6.16b, v27.16b, #3", 6, 27)
2779GEN_TWOVEC_TEST(urshr_16b_16b_8, "urshr v6.16b, v27.16b, #8", 6, 27)
2780GEN_TWOVEC_TEST(urshr_8b_8b_1,   "urshr v6.8b,  v27.8b, #1",  6, 27)
2781GEN_TWOVEC_TEST(urshr_8b_8b_3,   "urshr v6.8b,  v27.8b, #3",  6, 27)
2782GEN_TWOVEC_TEST(urshr_8b_8b_8,   "urshr v6.8b,  v27.8b, #8",  6, 27)
2783
2784GEN_TWOVEC_TEST(srsra_d_d_1,  "srsra d5, d28, #1",  5, 28)
2785GEN_TWOVEC_TEST(srsra_d_d_32, "srsra d5, d28, #32", 5, 28)
2786GEN_TWOVEC_TEST(srsra_d_d_64, "srsra d5, d28, #64", 5, 28)
2787
2788GEN_TWOVEC_TEST(ursra_d_d_1,  "ursra d5, d28, #1",  5, 28)
2789GEN_TWOVEC_TEST(ursra_d_d_32, "ursra d5, d28, #32", 5, 28)
2790GEN_TWOVEC_TEST(ursra_d_d_64, "ursra d5, d28, #64", 5, 28)
2791
2792GEN_TWOVEC_TEST(srsra_2d_2d_1,   "srsra v6.2d,  v27.2d, #1",  6, 27)
2793GEN_TWOVEC_TEST(srsra_2d_2d_32,  "srsra v6.2d,  v27.2d, #32", 6, 27)
2794GEN_TWOVEC_TEST(srsra_2d_2d_64,  "srsra v6.2d,  v27.2d, #64", 6, 27)
2795GEN_TWOVEC_TEST(srsra_4s_4s_1,   "srsra v6.4s,  v27.4s, #1",  6, 27)
2796GEN_TWOVEC_TEST(srsra_4s_4s_16,  "srsra v6.4s,  v27.4s, #16", 6, 27)
2797GEN_TWOVEC_TEST(srsra_4s_4s_32,  "srsra v6.4s,  v27.4s, #32", 6, 27)
2798GEN_TWOVEC_TEST(srsra_2s_2s_1,   "srsra v6.2s,  v27.2s, #1",  6, 27)
2799GEN_TWOVEC_TEST(srsra_2s_2s_16,  "srsra v6.2s,  v27.2s, #16", 6, 27)
2800GEN_TWOVEC_TEST(srsra_2s_2s_32,  "srsra v6.2s,  v27.2s, #32", 6, 27)
2801GEN_TWOVEC_TEST(srsra_8h_8h_1,   "srsra v6.8h,  v27.8h, #1",  6, 27)
2802GEN_TWOVEC_TEST(srsra_8h_8h_8,   "srsra v6.8h,  v27.8h, #8",  6, 27)
2803GEN_TWOVEC_TEST(srsra_8h_8h_16,  "srsra v6.8h,  v27.8h, #16", 6, 27)
2804GEN_TWOVEC_TEST(srsra_4h_4h_1,   "srsra v6.4h,  v27.4h, #1",  6, 27)
2805GEN_TWOVEC_TEST(srsra_4h_4h_8,   "srsra v6.4h,  v27.4h, #8",  6, 27)
2806GEN_TWOVEC_TEST(srsra_4h_4h_16,  "srsra v6.4h,  v27.4h, #16", 6, 27)
2807GEN_TWOVEC_TEST(srsra_16b_16b_1, "srsra v6.16b, v27.16b, #1", 6, 27)
2808GEN_TWOVEC_TEST(srsra_16b_16b_3, "srsra v6.16b, v27.16b, #3", 6, 27)
2809GEN_TWOVEC_TEST(srsra_16b_16b_8, "srsra v6.16b, v27.16b, #8", 6, 27)
2810GEN_TWOVEC_TEST(srsra_8b_8b_1,   "srsra v6.8b,  v27.8b, #1",  6, 27)
2811GEN_TWOVEC_TEST(srsra_8b_8b_3,   "srsra v6.8b,  v27.8b, #3",  6, 27)
2812GEN_TWOVEC_TEST(srsra_8b_8b_8,   "srsra v6.8b,  v27.8b, #8",  6, 27)
2813
2814GEN_TWOVEC_TEST(ursra_2d_2d_1,   "ursra v6.2d,  v27.2d, #1",  6, 27)
2815GEN_TWOVEC_TEST(ursra_2d_2d_32,  "ursra v6.2d,  v27.2d, #32", 6, 27)
2816GEN_TWOVEC_TEST(ursra_2d_2d_64,  "ursra v6.2d,  v27.2d, #64", 6, 27)
2817GEN_TWOVEC_TEST(ursra_4s_4s_1,   "ursra v6.4s,  v27.4s, #1",  6, 27)
2818GEN_TWOVEC_TEST(ursra_4s_4s_16,  "ursra v6.4s,  v27.4s, #16", 6, 27)
2819GEN_TWOVEC_TEST(ursra_4s_4s_32,  "ursra v6.4s,  v27.4s, #32", 6, 27)
2820GEN_TWOVEC_TEST(ursra_2s_2s_1,   "ursra v6.2s,  v27.2s, #1",  6, 27)
2821GEN_TWOVEC_TEST(ursra_2s_2s_16,  "ursra v6.2s,  v27.2s, #16", 6, 27)
2822GEN_TWOVEC_TEST(ursra_2s_2s_32,  "ursra v6.2s,  v27.2s, #32", 6, 27)
2823GEN_TWOVEC_TEST(ursra_8h_8h_1,   "ursra v6.8h,  v27.8h, #1",  6, 27)
2824GEN_TWOVEC_TEST(ursra_8h_8h_8,   "ursra v6.8h,  v27.8h, #8",  6, 27)
2825GEN_TWOVEC_TEST(ursra_8h_8h_16,  "ursra v6.8h,  v27.8h, #16", 6, 27)
2826GEN_TWOVEC_TEST(ursra_4h_4h_1,   "ursra v6.4h,  v27.4h, #1",  6, 27)
2827GEN_TWOVEC_TEST(ursra_4h_4h_8,   "ursra v6.4h,  v27.4h, #8",  6, 27)
2828GEN_TWOVEC_TEST(ursra_4h_4h_16,  "ursra v6.4h,  v27.4h, #16", 6, 27)
2829GEN_TWOVEC_TEST(ursra_16b_16b_1, "ursra v6.16b, v27.16b, #1", 6, 27)
2830GEN_TWOVEC_TEST(ursra_16b_16b_3, "ursra v6.16b, v27.16b, #3", 6, 27)
2831GEN_TWOVEC_TEST(ursra_16b_16b_8, "ursra v6.16b, v27.16b, #8", 6, 27)
2832GEN_TWOVEC_TEST(ursra_8b_8b_1,   "ursra v6.8b,  v27.8b, #1",  6, 27)
2833GEN_TWOVEC_TEST(ursra_8b_8b_3,   "ursra v6.8b,  v27.8b, #3",  6, 27)
2834GEN_TWOVEC_TEST(ursra_8b_8b_8,   "ursra v6.8b,  v27.8b, #8",  6, 27)
2835
2836GEN_TWOVEC_TEST(suqadd_d_d,  "suqadd d22, d23",   22, 23)
2837GEN_TWOVEC_TEST(suqadd_s_s,  "suqadd s22, s23",   22, 23)
2838GEN_TWOVEC_TEST(suqadd_h_h,  "suqadd h22, h23",   22, 23)
2839GEN_TWOVEC_TEST(suqadd_b_b,  "suqadd b22, b23",   22, 23)
2840
2841GEN_TWOVEC_TEST(suqadd_2d_2d,   "suqadd v6.2d,  v27.2d",  6, 27)
2842GEN_TWOVEC_TEST(suqadd_4s_4s,   "suqadd v6.4s,  v27.4s",  6, 27)
2843GEN_TWOVEC_TEST(suqadd_2s_2s,   "suqadd v6.2s,  v27.2s",  6, 27)
2844GEN_TWOVEC_TEST(suqadd_8h_8h,   "suqadd v6.8h,  v27.8h",  6, 27)
2845GEN_TWOVEC_TEST(suqadd_4h_4h,   "suqadd v6.4h,  v27.4h",  6, 27)
2846GEN_TWOVEC_TEST(suqadd_16b_16b, "suqadd v6.16b, v27.16b", 6, 27)
2847GEN_TWOVEC_TEST(suqadd_8b_8b,   "suqadd v6.8b,  v27.8b",  6, 27)
2848
2849GEN_TWOVEC_TEST(usqadd_d_d,  "usqadd d22, d23",   22, 23)
2850GEN_TWOVEC_TEST(usqadd_s_s,  "usqadd s22, s23",   22, 23)
2851GEN_TWOVEC_TEST(usqadd_h_h,  "usqadd h22, h23",   22, 23)
2852GEN_TWOVEC_TEST(usqadd_b_b,  "usqadd b22, b23",   22, 23)
2853
2854GEN_TWOVEC_TEST(usqadd_2d_2d,   "usqadd v6.2d,  v27.2d",  6, 27)
2855GEN_TWOVEC_TEST(usqadd_4s_4s,   "usqadd v6.4s,  v27.4s",  6, 27)
2856GEN_TWOVEC_TEST(usqadd_2s_2s,   "usqadd v6.2s,  v27.2s",  6, 27)
2857GEN_TWOVEC_TEST(usqadd_8h_8h,   "usqadd v6.8h,  v27.8h",  6, 27)
2858GEN_TWOVEC_TEST(usqadd_4h_4h,   "usqadd v6.4h,  v27.4h",  6, 27)
2859GEN_TWOVEC_TEST(usqadd_16b_16b, "usqadd v6.16b, v27.16b", 6, 27)
2860GEN_TWOVEC_TEST(usqadd_8b_8b,   "usqadd v6.8b,  v27.8b",  6, 27)
2861
2862GEN_THREEVEC_TEST(trn1_2d_2d_2d,    "trn1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2863GEN_THREEVEC_TEST(trn1_4s_4s_4s,    "trn1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2864GEN_THREEVEC_TEST(trn1_2s_2s_2s,    "trn1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2865GEN_THREEVEC_TEST(trn1_8h_8h_8h,    "trn1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2866GEN_THREEVEC_TEST(trn1_4h_4h_4h,    "trn1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2867GEN_THREEVEC_TEST(trn1_16b_16b_16b, "trn1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2868GEN_THREEVEC_TEST(trn1_8b_8b_8b,    "trn1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2869
2870GEN_THREEVEC_TEST(trn2_2d_2d_2d,    "trn2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2871GEN_THREEVEC_TEST(trn2_4s_4s_4s,    "trn2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2872GEN_THREEVEC_TEST(trn2_2s_2s_2s,    "trn2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2873GEN_THREEVEC_TEST(trn2_8h_8h_8h,    "trn2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2874GEN_THREEVEC_TEST(trn2_4h_4h_4h,    "trn2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2875GEN_THREEVEC_TEST(trn2_16b_16b_16b, "trn2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2876GEN_THREEVEC_TEST(trn2_8b_8b_8b,    "trn2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2877
2878GEN_THREEVEC_TEST(uzp1_2d_2d_2d,    "uzp1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2879GEN_THREEVEC_TEST(uzp1_4s_4s_4s,    "uzp1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2880GEN_THREEVEC_TEST(uzp1_2s_2s_2s,    "uzp1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2881GEN_THREEVEC_TEST(uzp1_8h_8h_8h,    "uzp1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2882GEN_THREEVEC_TEST(uzp1_4h_4h_4h,    "uzp1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2883GEN_THREEVEC_TEST(uzp1_16b_16b_16b, "uzp1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2884GEN_THREEVEC_TEST(uzp1_8b_8b_8b,    "uzp1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2885
2886GEN_THREEVEC_TEST(uzp2_2d_2d_2d,    "uzp2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2887GEN_THREEVEC_TEST(uzp2_4s_4s_4s,    "uzp2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2888GEN_THREEVEC_TEST(uzp2_2s_2s_2s,    "uzp2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2889GEN_THREEVEC_TEST(uzp2_8h_8h_8h,    "uzp2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2890GEN_THREEVEC_TEST(uzp2_4h_4h_4h,    "uzp2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2891GEN_THREEVEC_TEST(uzp2_16b_16b_16b, "uzp2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2892GEN_THREEVEC_TEST(uzp2_8b_8b_8b,    "uzp2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2893
2894GEN_THREEVEC_TEST(zip1_2d_2d_2d,    "zip1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2895GEN_THREEVEC_TEST(zip1_4s_4s_4s,    "zip1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2896GEN_THREEVEC_TEST(zip1_2s_2s_2s,    "zip1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2897GEN_THREEVEC_TEST(zip1_8h_8h_8h,    "zip1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2898GEN_THREEVEC_TEST(zip1_4h_4h_4h,    "zip1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2899GEN_THREEVEC_TEST(zip1_16b_16b_16b, "zip1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2900GEN_THREEVEC_TEST(zip1_8b_8b_8b,    "zip1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2901
2902GEN_THREEVEC_TEST(zip2_2d_2d_2d,    "zip2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
2903GEN_THREEVEC_TEST(zip2_4s_4s_4s,    "zip2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
2904GEN_THREEVEC_TEST(zip2_2s_2s_2s,    "zip2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
2905GEN_THREEVEC_TEST(zip2_8h_8h_8h,    "zip2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
2906GEN_THREEVEC_TEST(zip2_4h_4h_4h,    "zip2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
2907GEN_THREEVEC_TEST(zip2_16b_16b_16b, "zip2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
2908GEN_THREEVEC_TEST(zip2_8b_8b_8b,    "zip2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
2909
2910GEN_TWOVEC_TEST(urecpe_4s_4s,   "urecpe v6.4s,  v27.4s",  6, 27)
2911GEN_TWOVEC_TEST(urecpe_2s_2s,   "urecpe v6.2s,  v27.2s",  6, 27)
2912
2913GEN_TWOVEC_TEST(ursqrte_4s_4s,   "ursqrte v6.4s,  v27.4s",  6, 27)
2914GEN_TWOVEC_TEST(ursqrte_2s_2s,   "ursqrte v6.2s,  v27.2s",  6, 27)
2915
2916
2917/* ---------------------------------------------------------------- */
2918/* -- main()                                                     -- */
2919/* ---------------------------------------------------------------- */
2920
2921int main ( void )
2922{
2923   assert(sizeof(V128) == 16);
2924
2925   // ======================== FP ========================
2926
2927   // fabs      d,s
2928   // fabs      2d,4s,2s
2929   if (1) test_fabs_d_d(TyDF);
2930   if (1) test_fabs_s_s(TySF);
2931   if (1) test_fabs_2d_2d(TyDF);
2932   if (1) test_fabs_4s_4s(TySF);
2933   if (1) test_fabs_2s_2s(TyDF);
2934   if (1) test_fneg_2d_2d(TySF);
2935   if (1) test_fneg_4s_4s(TyDF);
2936   if (1) test_fneg_2s_2s(TySF);
2937
2938   // fneg      d,s
2939   // fneg      2d,4s,2s
2940   if (1) test_fneg_d_d(TyDF);
2941   if (1) test_fneg_s_s(TySF);
2942
2943   // fsqrt     d,s
2944   // fsqrt     2d,4s,2s
2945   if (1) test_fsqrt_d_d(TyDF);
2946   if (1) test_fsqrt_s_s(TySF);
2947
2948   // fadd      d,s
2949   // fsub      d,s
2950   if (1) test_fadd_d_d_d(TyDF);
2951   if (1) test_fadd_s_s_s(TySF);
2952   if (1) test_fsub_d_d_d(TyDF);
2953   if (1) test_fsub_s_s_s(TySF);
2954
2955   // fadd      2d,4s,2s
2956   // fsub      2d,4s,2s
2957   if (1) test_fadd_2d_2d_2d(TyDF);
2958   if (1) test_fadd_4s_4s_4s(TySF);
2959   if (1) test_fadd_2s_2s_2s(TySF);
2960   if (1) test_fsub_2d_2d_2d(TyDF);
2961   if (1) test_fsub_4s_4s_4s(TySF);
2962   if (1) test_fsub_2s_2s_2s(TySF);
2963
2964   // fabd      d,s
2965   // fabd      2d,4s,2s
2966   if (1) test_fabd_d_d_d(TyDF);
2967   if (1) test_fabd_s_s_s(TySF);
2968   if (1) test_fabd_2d_2d_2d(TyDF);
2969   if (1) test_fabd_4s_4s_4s(TySF);
2970   if (1) test_fabd_2s_2s_2s(TySF);
2971
2972   // faddp     d,s (floating add pair)
2973   // faddp     2d,4s,2s
2974
2975   // fccmp     d,s (floating point conditional quiet compare)
2976   // fccmpe    d,s (floating point conditional signaling compare)
2977
2978   // fcmeq     d,s
2979   // fcmge     d,s
2980   // fcmgt     d,s
2981   // facgt     d,s  (floating abs compare GE)
2982   // facge     d,s  (floating abs compare GE)
2983
2984   // fcmeq     2d,4s,2s
2985   // fcmge     2d,4s,2s
2986   // fcmgt     2d,4s,2s
2987   // facge     2d,4s,2s
2988   // facgt     2d,4s,2s
2989   if (1) test_fcmeq_2d_2d_2d(TyDF);
2990   if (1) test_fcmeq_4s_4s_4s(TySF);
2991   if (1) test_fcmeq_2s_2s_2s(TySF);
2992   if (1) test_fcmge_2d_2d_2d(TyDF);
2993   if (1) test_fcmge_4s_4s_4s(TySF);
2994   if (1) test_fcmge_2s_2s_2s(TySF);
2995   if (1) test_fcmgt_2d_2d_2d(TyDF);
2996   if (1) test_fcmgt_4s_4s_4s(TySF);
2997   if (1) test_fcmgt_2s_2s_2s(TySF);
2998   if (1) test_facge_2d_2d_2d(TyDF);
2999   if (1) test_facge_4s_4s_4s(TySF);
3000   if (1) test_facge_2s_2s_2s(TySF);
3001   if (1) test_facgt_2d_2d_2d(TyDF);
3002   if (1) test_facgt_4s_4s_4s(TySF);
3003   if (1) test_facgt_2s_2s_2s(TySF);
3004
3005   // fcmeq_z   d,s
3006   // fcmge_z   d,s
3007   // fcmgt_z   d,s
3008   // fcmle_z   d,s
3009   // fcmlt_z   d,s
3010
3011   // fcmeq_z   2d,4s,2s
3012   // fcmge_z   2d,4s,2s
3013   // fcmgt_z   2d,4s,2s
3014   // fcmle_z   2d,4s,2s
3015   // fcmlt_z   2d,4s,2s
3016
3017   // fcmp_z    d,s
3018   // fcmpe_z   d,s
3019   // fcmp      d,s (floating point quiet, set flags)
3020   // fcmpe     d,s (floating point signaling, set flags)
3021
3022   // fcsel     d,s (fp cond select)
3023
3024   // fdiv      d,s
3025   // fdiv      2d,4s,2s
3026   if (1) test_fdiv_d_d_d(TyDF);
3027   if (1) test_fdiv_s_s_s(TySF);
3028   if (1) test_fdiv_2d_2d_2d(TyDF);
3029   if (1) test_fdiv_4s_4s_4s(TySF);
3030   if (1) test_fdiv_2s_2s_2s(TySF);
3031
3032   // fmadd     d,s
3033   // fnmadd    d,s
3034   // fmsub     d,s
3035   // fnmsub    d,s
3036
3037   // fnmul     d,s
3038   if (1) test_fnmul_d_d_d(TyDF);
3039   if (1) test_fnmul_s_s_s(TySF);
3040
3041   // fmax      d,s
3042   // fmin      d,s
3043   // fmaxnm    d,s ("max number")
3044   // fminnm    d,s
3045
3046   // fmax      2d,4s,2s
3047   // fmin      2d,4s,2s
3048   // fmaxnm    2d,4s,2s
3049   // fminnm    2d,4s,2s
3050
3051   // fmaxnmp   d_2d,s_2s ("max number pairwise")
3052   // fminnmp   d_2d,s_2s
3053
3054   // fmaxnmp   2d,4s,2s
3055   // fminnmp   2d,4s,2s
3056
3057   // fmaxnmv   s_4s (maxnum across vector)
3058   // fminnmv   s_4s
3059
3060   // fmaxp     d_2d,s_2s (max of a pair)
3061   // fminp     d_2d,s_2s (max of a pair)
3062
3063   // fmaxp     2d,4s,2s  (max pairwise)
3064   // fminp     2d,4s,2s
3065
3066   // fmaxv     s_4s (max across vector)
3067   // fminv     s_4s
3068
3069   // fmla      2d,4s,2s
3070   // fmls      2d,4s,2s
3071   if (1) test_fmla_2d_2d_2d(TyDF);
3072   if (1) test_fmla_4s_4s_4s(TySF);
3073   if (1) test_fmla_2s_2s_2s(TySF);
3074   if (1) test_fmls_2d_2d_2d(TyDF);
3075   if (1) test_fmls_4s_4s_4s(TySF);
3076   if (1) test_fmls_2s_2s_2s(TySF);
3077
3078   // fmla      d_d_d[],s_s_s[] (by element)
3079   // fmls      d_d_d[],s_s_s[] (by element)
3080
3081   // fmla      2d_2d_d[],4s_4s_s[],2s_2s_s[]
3082   // fmls      2d_2d_d[],4s_4s_s[],2s_2s_s[]
3083
3084   // fmov      2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
3085   // INCOMPLETE
3086   if (1) test_fmov_2d_imm_01(TyD);
3087   if (1) test_fmov_2d_imm_02(TyD);
3088   if (1) test_fmov_2d_imm_03(TyD);
3089   if (0) test_fmov_4s_imm_01(TyS);
3090   if (0) test_fmov_4s_imm_02(TyS);
3091   if (0) test_fmov_4s_imm_03(TyS);
3092   if (0) test_fmov_2s_imm_01(TyS);
3093   if (0) test_fmov_2s_imm_02(TyS);
3094   if (0) test_fmov_2s_imm_03(TyS);
3095
3096   // fmov      d_d,s_s
3097   if (1) test_fmov_d_d(TyDF);
3098   if (1) test_fmov_s_s(TySF);
3099
3100   // fmov      s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
3101   if (1) test_fmov_s_w(TyS);
3102   if (1) test_fmov_d_x(TyD);
3103   if (1) test_fmov_d1_x(TyD);
3104   if (1) test_fmov_w_s(TyS);
3105   if (1) test_fmov_x_d(TyD);
3106   if (1) test_fmov_x_d1(TyD);
3107
3108   // fmov      d,s #imm
3109   if (1) test_fmov_d_imm_01(TyNONE);
3110   if (1) test_fmov_d_imm_02(TyNONE);
3111   if (1) test_fmov_d_imm_03(TyNONE);
3112   if (1) test_fmov_s_imm_01(TyNONE);
3113   if (1) test_fmov_s_imm_02(TyNONE);
3114   if (1) test_fmov_s_imm_03(TyNONE);
3115
3116   // fmul      d_d_d[],s_s_s[]
3117   // fmul      2d_2d_d[],4s_4s_s[],2s_2s_s[]
3118
3119   // fmul      2d,4s,2s
3120   // fmul      d,s
3121   if (1) test_fmul_d_d_d(TyDF);
3122   if (1) test_fmul_s_s_s(TySF);
3123   if (1) test_fmul_2d_2d_2d(TyDF);
3124   if (1) test_fmul_4s_4s_4s(TySF);
3125   if (1) test_fmul_2s_2s_2s(TySF);
3126
3127   // fmulx     d_d_d[],s_s_s[]
3128   // fmulx     2d_2d_d[],4s_4s_s[],2s_2s_s[]
3129
3130   // fmulx     d,s
3131   // fmulx     2d,4s,2s
3132
3133   // frecpe    d,s (recip estimate)
3134   // frecpe    2d,4s,2s
3135
3136   // frecps    d,s (recip step)
3137   // frecps    2d,4s,2s
3138
3139   // frecpx    d,s (recip exponent)
3140
3141   // frinta    d,s
3142   // frinti    d,s
3143   // frintm    d,s
3144   // frintn    d,s
3145   // frintp    d,s
3146   // frintx    d,s
3147   // frintz    d,s
3148
3149   // frinta    2d,4s,2s (round to integral, nearest away)
3150   // frinti    2d,4s,2s (round to integral, per FPCR)
3151   // frintm    2d,4s,2s (round to integral, minus inf)
3152   // frintn    2d,4s,2s (round to integral, nearest, to even)
3153   // frintp    2d,4s,2s (round to integral, plus inf)
3154   // frintx    2d,4s,2s (round to integral exact, per FPCR)
3155   // frintz    2d,4s,2s (round to integral, zero)
3156
3157   // frsqrte   d,s (est)
3158   // frsqrte   2d,4s,2s
3159
3160   // frsqrts   d,s (step)
3161   // frsqrts   2d,4s,2s
3162
3163   // ======================== CONV ========================
3164
3165   // fcvt      s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
3166
3167   // fcvtl{2}  4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
3168
3169   // fcvtn{2}  4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
3170   // INCOMPLETE
3171   if (1) test_fcvtn_2s_2d(TyDF);
3172   if (1) test_fcvtn_4s_2d(TyDF);
3173
3174   // fcvtas    d,s  (fcvt to signed int,   nearest, ties away)
3175   // fcvtau    d,s  (fcvt to unsigned int, nearest, ties away)
3176   // fcvtas    2d,4s,2s
3177   // fcvtau    2d,4s,2s
3178   // fcvtas    w_s,x_s,w_d,x_d
3179   // fcvtau    w_s,x_s,w_d,x_d
3180
3181   // fcvtms    d,s  (fcvt to signed int,   minus inf)
3182   // fcvtmu    d,s  (fcvt to unsigned int, minus inf)
3183   // fcvtms    2d,4s,2s
3184   // fcvtmu    2d,4s,2s
3185   // fcvtms    w_s,x_s,w_d,x_d
3186   // fcvtmu    w_s,x_s,w_d,x_d
3187
3188   // fcvtns    d,s  (fcvt to signed int,   nearest)
3189   // fcvtnu    d,s  (fcvt to unsigned int, nearest)
3190   // fcvtns    2d,4s,2s
3191   // fcvtnu    2d,4s,2s
3192   // fcvtns    w_s,x_s,w_d,x_d
3193   // fcvtnu    w_s,x_s,w_d,x_d
3194
3195   // fcvtps    d,s  (fcvt to signed int,   plus inf)
3196   // fcvtpu    d,s  (fcvt to unsigned int, plus inf)
3197   // fcvtps    2d,4s,2s
3198   // fcvtpu    2d,4s,2s
3199   // fcvtps    w_s,x_s,w_d,x_d
3200   // fcvtpu    w_s,x_s,w_d,x_d
3201
3202   // fcvtzs    d,s (fcvt to signed integer,   to zero)
3203   // fcvtzu    d,s (fcvt to unsigned integer, to zero)
3204   // fcvtzs    2d,4s,2s
3205   // fcvtzu    2d,4s,2s
3206   // fcvtzs    w_s,x_s,w_d,x_d
3207   // fcvtzu    w_s,x_s,w_d,x_d
3208
3209   // fcvtzs    d,s (fcvt to signed fixedpt,   to zero) (w/ #fbits)
3210   // fcvtzu    d,s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
3211   // fcvtzs    2d,4s,2s
3212   // fcvtzu    2d,4s,2s
3213   // fcvtzs    w_s,x_s,w_d,x_d (fcvt to signed fixedpt,   to zero) (w/ #fbits)
3214   // fcvtzu    w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
3215
3216   // fcvtxn    s_d (fcvt to lower prec narrow, rounding to odd)
3217   // fcvtxn    2s_2d,4s_2d
3218
3219   // scvtf     d,s        _#fbits
3220   // ucvtf     d,s        _#fbits
3221
3222   // scvtf     2d,4s,2s   _#fbits
3223   // ucvtf     2d,4s,2s   _#fbits
3224
3225   // scvtf     d,s
3226   // ucvtf     d,s
3227
3228   // scvtf     2d,4s,2s
3229   // ucvtf     2d,4s,2s
3230
3231   // scvtf     s_w, d_w, s_x, d_x,   _#fbits
3232   // ucvtf     s_w, d_w, s_x, d_x,   _#fbits
3233
3234   // scvtf     s_w, d_w, s_x, d_x
3235   // ucvtf     s_w, d_w, s_x, d_x
3236   if (1) test_scvtf_s_w(TyS);
3237   if (1) test_scvtf_d_w(TyS);
3238   if (1) test_scvtf_s_x(TyD);
3239   if (1) test_scvtf_d_x(TyD);
3240   if (1) test_ucvtf_s_w(TyS);
3241   if (1) test_ucvtf_d_w(TyS);
3242   if (1) test_ucvtf_s_x(TyD);
3243   if (1) test_ucvtf_d_x(TyD);
3244
3245   // ======================== INT ========================
3246
3247   // abs       d
3248   // neg       d
3249   if (0) test_abs_d_d(TyD);
3250   if (0) test_neg_d_d(TyD);
3251
3252   // abs       2d,4s,2s,8h,4h,16b,8b
3253   // neg       2d,4s,2s,8h,4h,16b,8b
3254   if (0) test_abs_2d_2d(TyD);
3255   if (0) test_abs_4s_4s(TyS);
3256   if (0) test_abs_2s_2s(TyS);
3257   if (0) test_abs_8h_8h(TyH);
3258   if (0) test_abs_4h_4h(TyH);
3259   if (0) test_abs_16b_16b(TyB);
3260   if (0) test_abs_8b_8b(TyB);
3261   if (1) test_neg_2d_2d(TyD);
3262   if (1) test_neg_4s_4s(TyS);
3263   if (1) test_neg_2s_2s(TyS);
3264   if (1) test_neg_8h_8h(TyH);
3265   if (1) test_neg_4h_4h(TyH);
3266   if (1) test_neg_16b_16b(TyB);
3267   if (1) test_neg_8b_8b(TyB);
3268
3269   // add       d
3270   // sub       d
3271   if (1) test_add_d_d_d(TyD);
3272   if (1) test_sub_d_d_d(TyD);
3273
3274   // add       2d,4s,2s,8h,4h,16b,8b
3275   // sub       2d,4s,2s,8h,4h,16b,8b
3276   if (1) test_add_2d_2d_2d(TyD);
3277   if (1) test_add_4s_4s_4s(TyS);
3278   if (1) test_add_2s_2s_2s(TyS);
3279   if (1) test_add_8h_8h_8h(TyH);
3280   if (1) test_add_4h_4h_4h(TyH);
3281   if (1) test_add_16b_16b_16b(TyB);
3282   if (1) test_add_8b_8b_8b(TyB);
3283   if (1) test_sub_2d_2d_2d(TyD);
3284   if (1) test_sub_4s_4s_4s(TyS);
3285   if (1) test_sub_2s_2s_2s(TyS);
3286   if (1) test_sub_8h_8h_8h(TyH);
3287   if (1) test_sub_4h_4h_4h(TyH);
3288   if (1) test_sub_16b_16b_16b(TyB);
3289   if (1) test_sub_8b_8b_8b(TyB);
3290
3291   // addhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
3292   // subhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
3293   // raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
3294   // rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
3295   if (0) test_addhn_2s_2d_2d(TyD);
3296   if (0) test_addhn2_4s_2d_2d(TyD);
3297   if (0) test_addhn_4h_4s_4s(TyS);
3298   if (0) test_addhn2_8h_4s_4s(TyS);
3299   if (0) test_addhn_8b_8h_8h(TyH);
3300   if (0) test_addhn2_16b_8h_8h(TyH);
3301   if (0) test_subhn_2s_2d_2d(TyD);
3302   if (0) test_subhn2_4s_2d_2d(TyD);
3303   if (0) test_subhn_4h_4s_4s(TyS);
3304   if (0) test_subhn2_8h_4s_4s(TyS);
3305   if (0) test_subhn_8b_8h_8h(TyH);
3306   if (0) test_subhn2_16b_8h_8h(TyH);
3307   if (0) test_raddhn_2s_2d_2d(TyD);
3308   if (0) test_raddhn2_4s_2d_2d(TyD);
3309   if (0) test_raddhn_4h_4s_4s(TyS);
3310   if (0) test_raddhn2_8h_4s_4s(TyS);
3311   if (0) test_raddhn_8b_8h_8h(TyH);
3312   if (0) test_raddhn2_16b_8h_8h(TyH);
3313   if (0) test_rsubhn_2s_2d_2d(TyD);
3314   if (0) test_rsubhn2_4s_2d_2d(TyD);
3315   if (0) test_rsubhn_4h_4s_4s(TyS);
3316   if (0) test_rsubhn2_8h_4s_4s(TyS);
3317   if (0) test_rsubhn_8b_8h_8h(TyH);
3318   if (0) test_rsubhn2_16b_8h_8h(TyH);
3319
3320   // addp     d (add pairs, across)
3321   if (0) test_addp_d_2d(TyD);
3322
3323   // addp     2d,4s,2s,8h,4h,16b,8b
3324   if (0) test_addp_2d_2d_2d(TyD);
3325   if (0) test_addp_4s_4s_4s(TyS);
3326   if (0) test_addp_2s_2s_2s(TyS);
3327   if (0) test_addp_8h_8h_8h(TyH);
3328   if (0) test_addp_4h_4h_4h(TyH);
3329   if (0) test_addp_16b_16b_16b(TyB);
3330   if (0) test_addp_8b_8b_8b(TyB);
3331
3332   // addv     4s,8h,4h,16b,18b (reduce across vector)
3333   if (0) test_addv_s_4s(TyS);
3334   if (0) test_addv_h_8h(TyH);
3335   if (0) test_addv_h_4h(TyH);
3336   if (0) test_addv_b_16b(TyB);
3337   if (0) test_addv_b_8b(TyB);
3338
3339   // and      16b,8b
3340   // bic      16b,8b
3341   // orn      16b,8b
3342   // orr      16b,8b
3343   if (1) test_and_16b_16b_16b(TyB);
3344   if (1) test_and_8b_8b_8b(TyB);
3345   if (1) test_bic_16b_16b_16b(TyB);
3346   if (1) test_bic_8b_8b_8b(TyB);
3347   if (1) test_orr_16b_16b_16b(TyB);
3348   if (1) test_orr_8b_8b_8b(TyB);
3349   if (1) test_orn_16b_16b_16b(TyB);
3350   if (1) test_orn_8b_8b_8b(TyB);
3351
3352   // orr      8h,4h   #imm8, LSL #0 or 8
3353   // orr      4s,2s   #imm8, LSL #0, 8, 16 or 24
3354   // bic      8h,4h   #imm8, LSL #0 or 8
3355   // bic      4s,2s   #imm8, LSL #0, 8, 16 or 24
3356   // movi and mvni are very similar, a superset of these.
3357   // Cases are below.
3358   if (0) test_orr_8h_0x5A_lsl0(TyH);
3359   if (0) test_orr_8h_0xA5_lsl8(TyH);
3360   if (0) test_orr_4h_0x5A_lsl0(TyH);
3361   if (0) test_orr_4h_0xA5_lsl8(TyH);
3362   if (0) test_orr_4s_0x5A_lsl0(TyS);
3363   if (0) test_orr_4s_0x6B_lsl8(TyS);
3364   if (0) test_orr_4s_0x49_lsl16(TyS);
3365   if (0) test_orr_4s_0x3D_lsl24(TyS);
3366   if (0) test_orr_2s_0x5A_lsl0(TyS);
3367   if (0) test_orr_2s_0x6B_lsl8(TyS);
3368   if (0) test_orr_2s_0x49_lsl16(TyS);
3369   if (0) test_orr_2s_0x3D_lsl24(TyS);
3370   if (0) test_bic_8h_0x5A_lsl0(TyH);
3371   if (0) test_bic_8h_0xA5_lsl8(TyH);
3372   if (0) test_bic_4h_0x5A_lsl0(TyH);
3373   if (0) test_bic_4h_0xA5_lsl8(TyH);
3374   if (0) test_bic_4s_0x5A_lsl0(TyS);
3375   if (0) test_bic_4s_0x6B_lsl8(TyS);
3376   if (0) test_bic_4s_0x49_lsl16(TyS);
3377   if (0) test_bic_4s_0x3D_lsl24(TyS);
3378   if (0) test_bic_2s_0x5A_lsl0(TyS);
3379   if (0) test_bic_2s_0x6B_lsl8(TyS);
3380   if (0) test_bic_2s_0x49_lsl16(TyS);
3381   if (0) test_bic_2s_0x3D_lsl24(TyS);
3382
3383   // bif      16b,8b (vector) (bit insert if false)
3384   // bit      16b,8b (vector) (bit insert if true)
3385   // bsl      16b,8b (vector) (bit select)
3386   // eor      16b,8b (vector)
3387   if (1) test_bif_16b_16b_16b(TyB);
3388   if (1) test_bif_8b_8b_8b(TyB);
3389   if (1) test_bit_16b_16b_16b(TyB);
3390   if (1) test_bit_8b_8b_8b(TyB);
3391   if (1) test_bsl_16b_16b_16b(TyB);
3392   if (1) test_bsl_8b_8b_8b(TyB);
3393   if (1) test_eor_16b_16b_16b(TyB);
3394   if (1) test_eor_8b_8b_8b(TyB);
3395
3396   // cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
3397   // clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
3398   if (0) test_cls_4s_4s(TyS);
3399   if (0) test_cls_2s_2s(TyS);
3400   if (0) test_cls_8h_8h(TyH);
3401   if (0) test_cls_4h_4h(TyH);
3402   if (0) test_cls_16b_16b(TyB);
3403   if (0) test_cls_8b_8b(TyB);
3404   if (0) test_clz_4s_4s(TyS);
3405   if (0) test_clz_2s_2s(TyS);
3406   if (0) test_clz_8h_8h(TyH);
3407   if (0) test_clz_4h_4h(TyH);
3408   if (0) test_clz_16b_16b(TyB);
3409   if (0) test_clz_8b_8b(TyB);
3410
3411   // cmeq     d
3412   // cmge     d
3413   // cmgt     d
3414   // cmhi     d
3415   // cmhs     d
3416   // cmtst    d
3417   if (0) test_cmeq_d_d_d(TyD);
3418   if (0) test_cmge_d_d_d(TyD);
3419   if (0) test_cmgt_d_d_d(TyD);
3420   if (0) test_cmhi_d_d_d(TyD);
3421   if (0) test_cmhs_d_d_d(TyD);
3422   if (0) test_cmtst_d_d_d(TyD);
3423
3424   // cmeq     2d,4s,2s,8h,4h,16b,8b
3425   // cmge     2d,4s,2s,8h,4h,16b,8b
3426   // cmgt     2d,4s,2s,8h,4h,16b,8b
3427   // cmhi     2d,4s,2s,8h,4h,16b,8b
3428   // cmhs     2d,4s,2s,8h,4h,16b,8b
3429   // cmtst    2d,4s,2s,8h,4h,16b,8b
3430   if (1) test_cmeq_2d_2d_2d(TyD);
3431   if (1) test_cmeq_4s_4s_4s(TyS);
3432   if (1) test_cmeq_2s_2s_2s(TyS);
3433   if (1) test_cmeq_8h_8h_8h(TyH);
3434   if (1) test_cmeq_4h_4h_4h(TyH);
3435   if (1) test_cmeq_16b_16b_16b(TyB);
3436   if (1) test_cmeq_8b_8b_8b(TyB);
3437   if (1) test_cmge_2d_2d_2d(TyD);
3438   if (1) test_cmge_4s_4s_4s(TyS);
3439   if (1) test_cmge_2s_2s_2s(TyS);
3440   if (1) test_cmge_8h_8h_8h(TyH);
3441   if (1) test_cmge_4h_4h_4h(TyH);
3442   if (1) test_cmge_16b_16b_16b(TyB);
3443   if (1) test_cmge_8b_8b_8b(TyB);
3444   if (1) test_cmgt_2d_2d_2d(TyD);
3445   if (1) test_cmgt_4s_4s_4s(TyS);
3446   if (1) test_cmgt_2s_2s_2s(TyS);
3447   if (1) test_cmgt_8h_8h_8h(TyH);
3448   if (1) test_cmgt_4h_4h_4h(TyH);
3449   if (1) test_cmgt_16b_16b_16b(TyB);
3450   if (1) test_cmgt_8b_8b_8b(TyB);
3451   if (1) test_cmhi_2d_2d_2d(TyD);
3452   if (1) test_cmhi_4s_4s_4s(TyS);
3453   if (1) test_cmhi_2s_2s_2s(TyS);
3454   if (1) test_cmhi_8h_8h_8h(TyH);
3455   if (1) test_cmhi_4h_4h_4h(TyH);
3456   if (1) test_cmhi_16b_16b_16b(TyB);
3457   if (1) test_cmhi_8b_8b_8b(TyB);
3458   if (1) test_cmhs_2d_2d_2d(TyD);
3459   if (1) test_cmhs_4s_4s_4s(TyS);
3460   if (1) test_cmhs_2s_2s_2s(TyS);
3461   if (1) test_cmhs_8h_8h_8h(TyH);
3462   if (1) test_cmhs_4h_4h_4h(TyH);
3463   if (1) test_cmhs_16b_16b_16b(TyB);
3464   if (1) test_cmhs_8b_8b_8b(TyB);
3465   if (1) test_cmtst_2d_2d_2d(TyD);
3466   if (1) test_cmtst_4s_4s_4s(TyS);
3467   if (1) test_cmtst_2s_2s_2s(TyS);
3468   if (1) test_cmtst_8h_8h_8h(TyH);
3469   if (1) test_cmtst_4h_4h_4h(TyH);
3470   if (1) test_cmtst_16b_16b_16b(TyB);
3471   if (1) test_cmtst_8b_8b_8b(TyB);
3472
3473   // cmeq_z   d
3474   // cmge_z   d
3475   // cmgt_z   d
3476   // cmle_z   d
3477   // cmlt_z   d
3478   if (1) test_cmeq_zero_d_d(TyD);
3479   if (0) test_cmge_zero_d_d(TyD);
3480   if (0) test_cmgt_zero_d_d(TyD);
3481   if (0) test_cmle_zero_d_d(TyD);
3482   if (0) test_cmlt_zero_d_d(TyD);
3483
3484   // cmeq_z   2d,4s,2s,8h,4h,16b,8b
3485   // cmge_z   2d,4s,2s,8h,4h,16b,8b
3486   // cmgt_z   2d,4s,2s,8h,4h,16b,8b
3487   // cmle_z   2d,4s,2s,8h,4h,16b,8b
3488   // cmlt_z   2d,4s,2s,8h,4h,16b,8b
3489   if (1) test_cmeq_zero_2d_2d(TyD);
3490   if (1) test_cmeq_zero_4s_4s(TyS);
3491   if (1) test_cmeq_zero_2s_2s(TyS);
3492   if (1) test_cmeq_zero_8h_8h(TyH);
3493   if (1) test_cmeq_zero_4h_4h(TyH);
3494   if (1) test_cmeq_zero_16b_16b(TyB);
3495   if (1) test_cmeq_zero_8b_8b(TyB);
3496   if (1) test_cmge_zero_2d_2d(TyD);
3497   if (1) test_cmge_zero_4s_4s(TyS);
3498   if (1) test_cmge_zero_2s_2s(TyS);
3499   if (1) test_cmge_zero_8h_8h(TyH);
3500   if (1) test_cmge_zero_4h_4h(TyH);
3501   if (1) test_cmge_zero_16b_16b(TyB);
3502   if (1) test_cmge_zero_8b_8b(TyB);
3503   if (1) test_cmgt_zero_2d_2d(TyD);
3504   if (1) test_cmgt_zero_4s_4s(TyS);
3505   if (1) test_cmgt_zero_2s_2s(TyS);
3506   if (1) test_cmgt_zero_8h_8h(TyH);
3507   if (1) test_cmgt_zero_4h_4h(TyH);
3508   if (1) test_cmgt_zero_16b_16b(TyB);
3509   if (1) test_cmgt_zero_8b_8b(TyB);
3510   if (1) test_cmle_zero_2d_2d(TyD);
3511   if (1) test_cmle_zero_4s_4s(TyS);
3512   if (1) test_cmle_zero_2s_2s(TyS);
3513   if (1) test_cmle_zero_8h_8h(TyH);
3514   if (1) test_cmle_zero_4h_4h(TyH);
3515   if (1) test_cmle_zero_16b_16b(TyB);
3516   if (1) test_cmle_zero_8b_8b(TyB);
3517   if (1) test_cmlt_zero_2d_2d(TyD);
3518   if (1) test_cmlt_zero_4s_4s(TyS);
3519   if (1) test_cmlt_zero_2s_2s(TyS);
3520   if (1) test_cmlt_zero_8h_8h(TyH);
3521   if (1) test_cmlt_zero_4h_4h(TyH);
3522   if (1) test_cmlt_zero_16b_16b(TyB);
3523   if (1) test_cmlt_zero_8b_8b(TyB);
3524
3525   // cnt      16b,8b (population count per byte)
3526   if (0) test_cnt_16b_16b(TyB);
3527   if (0) test_cnt_8b_8b(TyB);
3528
3529   // dup      d,s,h,b (vec elem to scalar)
3530   if (0) test_dup_d_d0(TyD);
3531   if (0) test_dup_d_d1(TyD);
3532   if (0) test_dup_s_s0(TyS);
3533   if (0) test_dup_s_s3(TyS);
3534   if (0) test_dup_h_h0(TyH);
3535   if (0) test_dup_h_h6(TyH);
3536   if (0) test_dup_b_b0(TyB);
3537   if (0) test_dup_b_b13(TyB);
3538
3539   // dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
3540   if (1) test_dup_2d_d0(TyD);
3541   if (1) test_dup_2d_d1(TyD);
3542   if (1) test_dup_4s_s0(TyS);
3543   if (1) test_dup_4s_s3(TyS);
3544   if (1) test_dup_2s_s0(TyS);
3545   if (1) test_dup_2s_s2(TyS);
3546   if (1) test_dup_8h_h0(TyH);
3547   if (1) test_dup_8h_h6(TyH);
3548   if (1) test_dup_4h_h1(TyH);
3549   if (1) test_dup_4h_h5(TyH);
3550   if (1) test_dup_16b_b2(TyB);
3551   if (1) test_dup_16b_b12(TyB);
3552   if (1) test_dup_8b_b3(TyB);
3553   if (1) test_dup_8b_b13(TyB);
3554
3555   // dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
3556   if (1) test_dup_2d_x(TyD);
3557   if (1) test_dup_4s_w(TyS);
3558   if (1) test_dup_2s_w(TyS);
3559   if (1) test_dup_8h_w(TyH);
3560   if (1) test_dup_4h_w(TyH);
3561   if (1) test_dup_16b_w(TyB);
3562   if (1) test_dup_8b_w(TyB);
3563
3564   // ext      16b,8b,#imm4 (concat 2 vectors, then slice)
3565   if (0) test_ext_16b_16b_16b_0x0(TyB);
3566   if (0) test_ext_16b_16b_16b_0x7(TyB);
3567   if (0) test_ext_16b_16b_16b_0x8(TyB);
3568   if (0) test_ext_16b_16b_16b_0x9(TyB);
3569   if (0) test_ext_16b_16b_16b_0xF(TyB);
3570   if (0) test_ext_8b_8b_8b_0x0(TyB);
3571   if (0) test_ext_8b_8b_8b_0x1(TyB);
3572   if (0) test_ext_8b_8b_8b_0x6(TyB);
3573   if (0) test_ext_8b_8b_8b_0x7(TyB);
3574
3575   // ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
3576   if (0) test_ins_d0_d0(TyD);
3577   if (0) test_ins_d0_d1(TyD);
3578   if (0) test_ins_d1_d0(TyD);
3579   if (0) test_ins_d1_d1(TyD);
3580   if (0) test_ins_s0_s2(TyS);
3581   if (0) test_ins_s3_s0(TyS);
3582   if (0) test_ins_s2_s1(TyS);
3583   if (0) test_ins_s1_s3(TyS);
3584   if (0) test_ins_h0_h6(TyH);
3585   if (0) test_ins_h7_h0(TyH);
3586   if (0) test_ins_h6_h1(TyH);
3587   if (0) test_ins_h1_h7(TyH);
3588   if (0) test_ins_b0_b14(TyB);
3589   if (0) test_ins_b15_b8(TyB);
3590   if (0) test_ins_b13_b9(TyB);
3591   if (0) test_ins_b5_b12(TyB);
3592
3593   // ins      d[]_x, s[]_w, h[]_w, b[]_w
3594   if (1) test_INS_general();
3595
3596   // mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
3597   // mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
3598   // mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
3599   if (0) test_mla_4s_4s_s0(TyS);
3600   if (0) test_mla_4s_4s_s3(TyS);
3601   if (0) test_mla_2s_2s_s0(TyS);
3602   if (0) test_mla_2s_2s_s3(TyS);
3603   if (0) test_mla_8h_8h_h1(TyH);
3604   if (0) test_mla_8h_8h_h5(TyH);
3605   if (0) test_mla_4h_4h_h2(TyH);
3606   if (0) test_mla_4h_4h_h7(TyH);
3607   if (0) test_mls_4s_4s_s0(TyS);
3608   if (0) test_mls_4s_4s_s3(TyS);
3609   if (0) test_mls_2s_2s_s0(TyS);
3610   if (0) test_mls_2s_2s_s3(TyS);
3611   if (0) test_mls_8h_8h_h1(TyH);
3612   if (0) test_mls_8h_8h_h5(TyH);
3613   if (0) test_mls_4h_4h_h2(TyH);
3614   if (0) test_mls_4h_4h_h7(TyH);
3615   if (0) test_mul_4s_4s_s0(TyS);
3616   if (0) test_mul_4s_4s_s3(TyS);
3617   if (0) test_mul_2s_2s_s0(TyS);
3618   if (0) test_mul_2s_2s_s3(TyS);
3619   if (0) test_mul_8h_8h_h1(TyH);
3620   if (0) test_mul_8h_8h_h5(TyH);
3621   if (0) test_mul_4h_4h_h2(TyH);
3622   if (0) test_mul_4h_4h_h7(TyH);
3623
3624   // mla   4s,2s,8h,4h,16b,8b
3625   // mls   4s,2s,8h,4h,16b,8b
3626   // mul   4s,2s,8h,4h,16b,8b
3627   if (1) test_mla_4s_4s_4s(TyS);
3628   if (1) test_mla_2s_2s_2s(TyS);
3629   if (1) test_mla_8h_8h_8h(TyH);
3630   if (1) test_mla_4h_4h_4h(TyH);
3631   if (1) test_mla_16b_16b_16b(TyB);
3632   if (1) test_mla_8b_8b_8b(TyB);
3633   if (1) test_mls_4s_4s_4s(TyS);
3634   if (1) test_mls_2s_2s_2s(TyS);
3635   if (1) test_mls_8h_8h_8h(TyH);
3636   if (1) test_mls_4h_4h_4h(TyH);
3637   if (1) test_mls_16b_16b_16b(TyB);
3638   if (1) test_mls_8b_8b_8b(TyB);
3639   if (1) test_mul_4s_4s_4s(TyS);
3640   if (1) test_mul_2s_2s_2s(TyS);
3641   if (1) test_mul_8h_8h_8h(TyH);
3642   if (1) test_mul_4h_4h_4h(TyH);
3643   if (1) test_mul_16b_16b_16b(TyB);
3644   if (1) test_mul_8b_8b_8b(TyB);
3645
3646   // Some of these movi and mvni cases are similar to orr and bic
3647   // cases with immediates.  Maybe they should be moved together.
3648   // movi  16b,8b   #imm8, LSL #0
3649   if (0) test_movi_16b_0x9C_lsl0(TyB);
3650   if (0) test_movi_8b_0x8B_lsl0(TyB);
3651
3652   // movi  8h,4h    #imm8, LSL #0 or 8
3653   // mvni  8h,4h    #imm8, LSL #0 or 8
3654   if (0) test_movi_8h_0x5A_lsl0(TyH);
3655   if (0) test_movi_8h_0xA5_lsl8(TyH);
3656   if (0) test_movi_4h_0x5A_lsl0(TyH);
3657   if (0) test_movi_4h_0xA5_lsl8(TyH);
3658   if (0) test_mvni_8h_0x5A_lsl0(TyH);
3659   if (0) test_mvni_8h_0xA5_lsl8(TyH);
3660   if (0) test_mvni_4h_0x5A_lsl0(TyH);
3661   if (0) test_mvni_4h_0xA5_lsl8(TyH);
3662
3663   // movi  4s,2s    #imm8, LSL #0, 8, 16, 24
3664   // mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
3665   if (1) test_movi_4s_0x5A_lsl0(TyS);
3666   if (0) test_movi_4s_0x6B_lsl8(TyS);
3667   if (0) test_movi_4s_0x49_lsl16(TyS);
3668   if (0) test_movi_4s_0x3D_lsl24(TyS);
3669   if (0) test_movi_2s_0x5A_lsl0(TyS);
3670   if (0) test_movi_2s_0x6B_lsl8(TyS);
3671   if (0) test_movi_2s_0x49_lsl16(TyS);
3672   if (0) test_movi_2s_0x3D_lsl24(TyS);
3673   if (0) test_mvni_4s_0x5A_lsl0(TyS);
3674   if (0) test_mvni_4s_0x6B_lsl8(TyS);
3675   if (0) test_mvni_4s_0x49_lsl16(TyS);
3676   if (0) test_mvni_4s_0x3D_lsl24(TyS);
3677   if (0) test_mvni_2s_0x5A_lsl0(TyS);
3678   if (0) test_mvni_2s_0x6B_lsl8(TyS);
3679   if (0) test_mvni_2s_0x49_lsl16(TyS);
3680   if (0) test_mvni_2s_0x3D_lsl24(TyS);
3681
3682   // movi  4s,2s    #imm8, MSL #8 or 16
3683   // mvni  4s,2s    #imm8, MSL #8 or 16
3684   if (0) test_movi_4s_0x6B_msl8(TyS);
3685   if (0) test_movi_4s_0x94_msl16(TyS);
3686   if (0) test_movi_2s_0x7A_msl8(TyS);
3687   if (0) test_movi_2s_0xA5_msl16(TyS);
3688   if (0) test_mvni_4s_0x6B_msl8(TyS);
3689   if (0) test_mvni_4s_0x94_msl16(TyS);
3690   if (0) test_mvni_2s_0x7A_msl8(TyS);
3691   if (0) test_mvni_2s_0xA5_msl16(TyS);
3692
3693   // movi  d,       #imm64
3694   // movi  2d,      #imm64
3695   if (0) test_movi_d_0xA5(TyD);
3696   if (0) test_movi_2d_0xB4(TyD);
3697
3698   // not   16b,8b
3699   if (0) test_not_16b_16b(TyB);
3700   if (0) test_not_8b_8b(TyB);
3701
3702   // pmul  16b,8b
3703   if (0) test_pmul_16b_16b_16b(TyB);
3704   if (0) test_pmul_8b_8b_8b(TyB);
3705
3706   // pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1q_2d_2d
3707   if (0) test_pmull_8h_8b_8b(TyB);
3708   if (0) test_pmull2_8h_16b_16b(TyB);
3709   //if (0) test_pmull_1q_1d_1d(TyD);
3710   //if (0) test_pmull_1q_2d_2d(TyD);
3711
3712   // rbit    16b,8b
3713   // rev16   16b,8b
3714   // rev32   16b,8b,8h,4h
3715   // rev64   16b,8b,8h,4h,4s,2s
3716   if (0) test_rbit_16b_16b(TyB);
3717   if (0) test_rbit_8b_8b(TyB);
3718   if (0) test_rev16_16b_16b(TyB);
3719   if (0) test_rev16_8b_8b(TyB);
3720   if (0) test_rev32_16b_16b(TyB);
3721   if (0) test_rev32_8b_8b(TyB);
3722   if (0) test_rev32_8h_8h(TyH);
3723   if (0) test_rev32_4h_4h(TyH);
3724   if (0) test_rev64_16b_16b(TyB);
3725   if (0) test_rev64_8b_8b(TyB);
3726   if (0) test_rev64_8h_8h(TyH);
3727   if (0) test_rev64_4h_4h(TyH);
3728   if (0) test_rev64_4s_4s(TyS);
3729   if (0) test_rev64_2s_2s(TyS);
3730
3731   // saba      16b,8b,8h,4h,4s,2s
3732   // uaba      16b,8b,8h,4h,4s,2s
3733   if (0) test_saba_4s_4s_4s(TyS);
3734   if (0) test_saba_2s_2s_2s(TyS);
3735   if (0) test_saba_8h_8h_8h(TyH);
3736   if (0) test_saba_4h_4h_4h(TyH);
3737   if (0) test_saba_16b_16b_16b(TyB);
3738   if (0) test_saba_8b_8b_8b(TyB);
3739   if (0) test_uaba_4s_4s_4s(TyS);
3740   if (0) test_uaba_2s_2s_2s(TyS);
3741   if (0) test_uaba_8h_8h_8h(TyH);
3742   if (0) test_uaba_4h_4h_4h(TyH);
3743   if (0) test_uaba_16b_16b_16b(TyB);
3744   if (0) test_uaba_8b_8b_8b(TyB);
3745
3746   // sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3747   // uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3748   if (0) test_sabal_2d_2s_2s(TyS);
3749   if (0) test_sabal2_2d_4s_4s(TyS);
3750   if (0) test_sabal_4s_4h_4h(TyH);
3751   if (0) test_sabal2_4s_8h_8h(TyH);
3752   if (0) test_sabal_8h_8b_8b(TyB);
3753   if (0) test_sabal2_8h_16b_16b(TyB);
3754   if (0) test_uabal_2d_2s_2s(TyS);
3755   if (0) test_uabal2_2d_4s_4s(TyS);
3756   if (0) test_uabal_4s_4h_4h(TyH);
3757   if (0) test_uabal2_4s_8h_8h(TyH);
3758   if (0) test_uabal_8h_8b_8b(TyB);
3759   if (0) test_uabal2_8h_16b_16b(TyB);
3760
3761   // sabd      16b,8b,8h,4h,4s,2s
3762   // uabd      16b,8b,8h,4h,4s,2s
3763   if (0) test_sabd_4s_4s_4s(TyS);
3764   if (0) test_sabd_2s_2s_2s(TyS);
3765   if (0) test_sabd_8h_8h_8h(TyH);
3766   if (0) test_sabd_4h_4h_4h(TyH);
3767   if (0) test_sabd_16b_16b_16b(TyB);
3768   if (0) test_sabd_8b_8b_8b(TyB);
3769   if (0) test_uabd_4s_4s_4s(TyS);
3770   if (0) test_uabd_2s_2s_2s(TyS);
3771   if (0) test_uabd_8h_8h_8h(TyH);
3772   if (0) test_uabd_4h_4h_4h(TyH);
3773   if (0) test_uabd_16b_16b_16b(TyB);
3774   if (0) test_uabd_8b_8b_8b(TyB);
3775
3776   // sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3777   // uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3778   if (0) test_sabdl_2d_2s_2s(TyS);
3779   if (0) test_sabdl2_2d_4s_4s(TyS);
3780   if (0) test_sabdl_4s_4h_4h(TyH);
3781   if (0) test_sabdl2_4s_8h_8h(TyH);
3782   if (0) test_sabdl_8h_8b_8b(TyB);
3783   if (0) test_sabdl2_8h_16b_16b(TyB);
3784   if (0) test_uabdl_2d_2s_2s(TyS);
3785   if (0) test_uabdl2_2d_4s_4s(TyS);
3786   if (0) test_uabdl_4s_4h_4h(TyH);
3787   if (0) test_uabdl2_4s_8h_8h(TyH);
3788   if (0) test_uabdl_8h_8b_8b(TyB);
3789   if (0) test_uabdl2_8h_16b_16b(TyB);
3790
3791   // sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
3792   // uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
3793   if (0) test_sadalp_1d_2s(TyS);
3794   if (0) test_sadalp_2d_4s(TyS);
3795   if (0) test_sadalp_2s_4h(TyH);
3796   if (0) test_sadalp_4s_8h(TyH);
3797   if (0) test_sadalp_4h_8b(TyB);
3798   if (0) test_sadalp_8h_16b(TyB);
3799   if (0) test_uadalp_1d_2s(TyS);
3800   if (0) test_uadalp_2d_4s(TyS);
3801   if (0) test_uadalp_2s_4h(TyH);
3802   if (0) test_uadalp_4s_8h(TyH);
3803   if (0) test_uadalp_4h_8b(TyB);
3804   if (0) test_uadalp_8h_16b(TyB);
3805
3806   // saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3807   // uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3808   // ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3809   // usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
3810   if (0) test_saddl_2d_2s_2s(TyS);
3811   if (0) test_saddl2_2d_4s_4s(TyS);
3812   if (0) test_saddl_4s_4h_4h(TyH);
3813   if (0) test_saddl2_4s_8h_8h(TyH);
3814   if (0) test_saddl_8h_8b_8b(TyB);
3815   if (0) test_saddl2_8h_16b_16b(TyB);
3816   if (0) test_uaddl_2d_2s_2s(TyS);
3817   if (0) test_uaddl2_2d_4s_4s(TyS);
3818   if (0) test_uaddl_4s_4h_4h(TyH);
3819   if (0) test_uaddl2_4s_8h_8h(TyH);
3820   if (0) test_uaddl_8h_8b_8b(TyB);
3821   if (0) test_uaddl2_8h_16b_16b(TyB);
3822   if (0) test_ssubl_2d_2s_2s(TyS);
3823   if (0) test_ssubl2_2d_4s_4s(TyS);
3824   if (0) test_ssubl_4s_4h_4h(TyH);
3825   if (0) test_ssubl2_4s_8h_8h(TyH);
3826   if (0) test_ssubl_8h_8b_8b(TyB);
3827   if (0) test_ssubl2_8h_16b_16b(TyB);
3828   if (0) test_usubl_2d_2s_2s(TyS);
3829   if (0) test_usubl2_2d_4s_4s(TyS);
3830   if (0) test_usubl_4s_4h_4h(TyH);
3831   if (0) test_usubl2_4s_8h_8h(TyH);
3832   if (0) test_usubl_8h_8b_8b(TyB);
3833   if (0) test_usubl2_8h_16b_16b(TyB);
3834
3835   // saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
3836   // uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
3837   if (0) test_saddlp_1d_2s(TyS);
3838   if (0) test_saddlp_2d_4s(TyS);
3839   if (0) test_saddlp_2s_4h(TyH);
3840   if (0) test_saddlp_4s_8h(TyH);
3841   if (0) test_saddlp_4h_8b(TyB);
3842   if (0) test_saddlp_8h_16b(TyB);
3843   if (0) test_uaddlp_1d_2s(TyS);
3844   if (0) test_uaddlp_2d_4s(TyS);
3845   if (0) test_uaddlp_2s_4h(TyH);
3846   if (0) test_uaddlp_4s_8h(TyH);
3847   if (0) test_uaddlp_4h_8b(TyB);
3848   if (0) test_uaddlp_8h_16b(TyB);
3849
3850   // saddlv    h_16b/8b, s_8h/4h, d_4s
3851   // uaddlv    h_16b/8b, s_8h/4h, d_4s
3852   if (0) test_saddlv_h_16b(TyB);
3853   if (0) test_saddlv_h_8b(TyB);
3854   if (0) test_saddlv_s_8h(TyH);
3855   if (0) test_saddlv_s_4h(TyH);
3856   if (0) test_saddlv_d_4s(TyH);
3857   if (0) test_uaddlv_h_16b(TyB);
3858   if (0) test_uaddlv_h_8b(TyB);
3859   if (0) test_uaddlv_s_8h(TyH);
3860   if (0) test_uaddlv_s_4h(TyH);
3861   if (0) test_uaddlv_d_4s(TyH);
3862
3863   // saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
3864   // uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
3865   // ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
3866   // usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
3867   if (0) test_saddw2_8h_8h_16b(TyB);
3868   if (0) test_saddw_8h_8h_8b(TyB);
3869   if (0) test_saddw2_4s_4s_8h(TyH);
3870   if (0) test_saddw_4s_4s_4h(TyH);
3871   if (0) test_saddw2_2d_2d_4s(TyS);
3872   if (0) test_saddw_2d_2d_2s(TyS);
3873   if (0) test_uaddw2_8h_8h_16b(TyB);
3874   if (0) test_uaddw_8h_8h_8b(TyB);
3875   if (0) test_uaddw2_4s_4s_8h(TyH);
3876   if (0) test_uaddw_4s_4s_4h(TyH);
3877   if (0) test_uaddw2_2d_2d_4s(TyS);
3878   if (0) test_uaddw_2d_2d_2s(TyS);
3879   if (0) test_ssubw2_8h_8h_16b(TyB);
3880   if (0) test_ssubw_8h_8h_8b(TyB);
3881   if (0) test_ssubw2_4s_4s_8h(TyH);
3882   if (0) test_ssubw_4s_4s_4h(TyH);
3883   if (0) test_ssubw2_2d_2d_4s(TyS);
3884   if (0) test_ssubw_2d_2d_2s(TyS);
3885   if (0) test_usubw2_8h_8h_16b(TyB);
3886   if (0) test_usubw_8h_8h_8b(TyB);
3887   if (0) test_usubw2_4s_4s_8h(TyH);
3888   if (0) test_usubw_4s_4s_4h(TyH);
3889   if (0) test_usubw2_2d_2d_4s(TyS);
3890   if (0) test_usubw_2d_2d_2s(TyS);
3891
3892   // shadd        16b,8b,8h,4h,4s,2s
3893   // uhadd        16b,8b,8h,4h,4s,2s
3894   // shsub        16b,8b,8h,4h,4s,2s
3895   // uhsub        16b,8b,8h,4h,4s,2s
3896   if (0) test_shadd_4s_4s_4s(TyS);
3897   if (0) test_shadd_2s_2s_2s(TyS);
3898   if (0) test_shadd_8h_8h_8h(TyH);
3899   if (0) test_shadd_4h_4h_4h(TyH);
3900   if (0) test_shadd_16b_16b_16b(TyB);
3901   if (0) test_shadd_8b_8b_8b(TyB);
3902   if (0) test_uhadd_4s_4s_4s(TyS);
3903   if (0) test_uhadd_2s_2s_2s(TyS);
3904   if (0) test_uhadd_8h_8h_8h(TyH);
3905   if (0) test_uhadd_4h_4h_4h(TyH);
3906   if (0) test_uhadd_16b_16b_16b(TyB);
3907   if (0) test_uhadd_8b_8b_8b(TyB);
3908   if (0) test_shsub_4s_4s_4s(TyS);
3909   if (0) test_shsub_2s_2s_2s(TyS);
3910   if (0) test_shsub_8h_8h_8h(TyH);
3911   if (0) test_shsub_4h_4h_4h(TyH);
3912   if (0) test_shsub_16b_16b_16b(TyB);
3913   if (0) test_shsub_8b_8b_8b(TyB);
3914   if (0) test_uhsub_4s_4s_4s(TyS);
3915   if (0) test_uhsub_2s_2s_2s(TyS);
3916   if (0) test_uhsub_8h_8h_8h(TyH);
3917   if (0) test_uhsub_4h_4h_4h(TyH);
3918   if (0) test_uhsub_16b_16b_16b(TyB);
3919   if (0) test_uhsub_8b_8b_8b(TyB);
3920
3921   // shll{2}      8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
3922   if (0) test_shll_8h_8b_8(TyB);
3923   if (0) test_shll2_8h_16b_8(TyB);
3924   if (0) test_shll_4s_4h_16(TyH);
3925   if (0) test_shll2_4s_8h_16(TyH);
3926   if (0) test_shll_2d_2s_32(TyS);
3927   if (0) test_shll2_2d_4s_32(TyS);
3928
3929   // shrn{2}      2s/4s_2d, 8h/4h_4s, 8b/16b_8h,   #imm in 1 .. elem_bits
3930   // rshrn{2}     2s/4s_2d, 8h/4h_4s, 8b/16b_8h,   #imm in 1 .. elem_bits
3931   if (0) test_shrn_2s_2d_1(TyD);
3932   if (0) test_shrn_2s_2d_32(TyD);
3933   if (0) test_shrn2_4s_2d_1(TyD);
3934   if (0) test_shrn2_4s_2d_32(TyD);
3935   if (0) test_shrn_4h_4s_1(TyS);
3936   if (0) test_shrn_4h_4s_16(TyS);
3937   if (0) test_shrn2_8h_4s_1(TyS);
3938   if (0) test_shrn2_8h_4s_16(TyS);
3939   if (0) test_shrn_8b_8h_1(TyH);
3940   if (0) test_shrn_8b_8h_8(TyH);
3941   if (0) test_shrn2_16b_8h_1(TyH);
3942   if (0) test_shrn2_16b_8h_8(TyH);
3943   if (0) test_rshrn_2s_2d_1(TyD);
3944   if (0) test_rshrn_2s_2d_32(TyD);
3945   if (0) test_rshrn2_4s_2d_1(TyD);
3946   if (0) test_rshrn2_4s_2d_32(TyD);
3947   if (0) test_rshrn_4h_4s_1(TyS);
3948   if (0) test_rshrn_4h_4s_16(TyS);
3949   if (0) test_rshrn2_8h_4s_1(TyS);
3950   if (0) test_rshrn2_8h_4s_16(TyS);
3951   if (0) test_rshrn_8b_8h_1(TyH);
3952   if (0) test_rshrn_8b_8h_8(TyH);
3953   if (0) test_rshrn2_16b_8h_1(TyH);
3954   if (0) test_rshrn2_16b_8h_8(TyH);
3955
3956   // sli          d_#imm
3957   // sri          d_#imm
3958   if (0) test_sli_d_d_0(TyD);
3959   if (0) test_sli_d_d_32(TyD);
3960   if (0) test_sli_d_d_63(TyD);
3961   if (0) test_sri_d_d_1(TyD);
3962   if (0) test_sri_d_d_33(TyD);
3963   if (0) test_sri_d_d_64(TyD);
3964
3965   // sli          2d,4s,2s,8h,4h,16b,8b  _#imm
3966   // sri          2d,4s,2s,8h,4h,16b,8b  _#imm
3967   if (0) test_sli_2d_2d_0(TyD);
3968   if (0) test_sli_2d_2d_32(TyD);
3969   if (0) test_sli_2d_2d_63(TyD);
3970   if (0) test_sli_4s_4s_0(TyS);
3971   if (0) test_sli_4s_4s_16(TyS);
3972   if (0) test_sli_4s_4s_31(TyS);
3973   if (0) test_sli_2s_2s_0(TyS);
3974   if (0) test_sli_2s_2s_16(TyS);
3975   if (0) test_sli_2s_2s_31(TyS);
3976   if (0) test_sli_8h_8h_0(TyH);
3977   if (0) test_sli_8h_8h_8(TyH);
3978   if (0) test_sli_8h_8h_15(TyH);
3979   if (0) test_sli_4h_4h_0(TyH);
3980   if (0) test_sli_4h_4h_8(TyH);
3981   if (0) test_sli_4h_4h_15(TyH);
3982   if (0) test_sli_16b_16b_0(TyB);
3983   if (0) test_sli_16b_16b_3(TyB);
3984   if (0) test_sli_16b_16b_7(TyB);
3985   if (0) test_sli_8b_8b_0(TyB);
3986   if (0) test_sli_8b_8b_3(TyB);
3987   if (0) test_sli_8b_8b_7(TyB);
3988   if (0) test_sri_2d_2d_1(TyD);
3989   if (0) test_sri_2d_2d_33(TyD);
3990   if (0) test_sri_2d_2d_64(TyD);
3991   if (0) test_sri_4s_4s_1(TyS);
3992   if (0) test_sri_4s_4s_17(TyS);
3993   if (0) test_sri_4s_4s_32(TyS);
3994   if (0) test_sri_2s_2s_1(TyS);
3995   if (0) test_sri_2s_2s_17(TyS);
3996   if (0) test_sri_2s_2s_32(TyS);
3997   if (0) test_sri_8h_8h_1(TyH);
3998   if (0) test_sri_8h_8h_8(TyH);
3999   if (0) test_sri_8h_8h_16(TyH);
4000   if (0) test_sri_4h_4h_1(TyH);
4001   if (0) test_sri_4h_4h_8(TyH);
4002   if (0) test_sri_4h_4h_16(TyH);
4003   if (0) test_sri_16b_16b_1(TyB);
4004   if (0) test_sri_16b_16b_4(TyB);
4005   if (0) test_sri_16b_16b_8(TyB);
4006   if (0) test_sri_8b_8b_1(TyB);
4007   if (0) test_sri_8b_8b_4(TyB);
4008   if (0) test_sri_8b_8b_8(TyB);
4009
4010   // smax         4s,2s,8h,4h,16b,8b
4011   // umax         4s,2s,8h,4h,16b,8b
4012   // smin         4s,2s,8h,4h,16b,8b
4013   // umin         4s,2s,8h,4h,16b,8b
4014   if (1) test_smax_4s_4s_4s(TyS);
4015   if (1) test_smax_2s_2s_2s(TyS);
4016   if (1) test_smax_8h_8h_8h(TyH);
4017   if (1) test_smax_4h_4h_4h(TyH);
4018   if (1) test_smax_16b_16b_16b(TyB);
4019   if (1) test_smax_8b_8b_8b(TyB);
4020   if (1) test_umax_4s_4s_4s(TyS);
4021   if (1) test_umax_2s_2s_2s(TyS);
4022   if (1) test_umax_8h_8h_8h(TyH);
4023   if (1) test_umax_4h_4h_4h(TyH);
4024   if (1) test_umax_16b_16b_16b(TyB);
4025   if (1) test_umax_8b_8b_8b(TyB);
4026   if (1) test_smin_4s_4s_4s(TyS);
4027   if (1) test_smin_2s_2s_2s(TyS);
4028   if (1) test_smin_8h_8h_8h(TyH);
4029   if (1) test_smin_4h_4h_4h(TyH);
4030   if (1) test_smin_16b_16b_16b(TyB);
4031   if (1) test_smin_8b_8b_8b(TyB);
4032   if (1) test_umin_4s_4s_4s(TyS);
4033   if (1) test_umin_2s_2s_2s(TyS);
4034   if (1) test_umin_8h_8h_8h(TyH);
4035   if (1) test_umin_4h_4h_4h(TyH);
4036   if (1) test_umin_16b_16b_16b(TyB);
4037   if (1) test_umin_8b_8b_8b(TyB);
4038
4039   // smaxp        4s,2s,8h,4h,16b,8b
4040   // umaxp        4s,2s,8h,4h,16b,8b
4041   // sminp        4s,2s,8h,4h,16b,8b
4042   // uminp        4s,2s,8h,4h,16b,8b
4043   if (0) test_smaxp_4s_4s_4s(TyS);
4044   if (0) test_smaxp_2s_2s_2s(TyS);
4045   if (0) test_smaxp_8h_8h_8h(TyH);
4046   if (0) test_smaxp_4h_4h_4h(TyH);
4047   if (0) test_smaxp_16b_16b_16b(TyB);
4048   if (0) test_smaxp_8b_8b_8b(TyB);
4049   if (0) test_umaxp_4s_4s_4s(TyS);
4050   if (0) test_umaxp_2s_2s_2s(TyS);
4051   if (0) test_umaxp_8h_8h_8h(TyH);
4052   if (0) test_umaxp_4h_4h_4h(TyH);
4053   if (0) test_umaxp_16b_16b_16b(TyB);
4054   if (0) test_umaxp_8b_8b_8b(TyB);
4055   if (0) test_sminp_4s_4s_4s(TyS);
4056   if (0) test_sminp_2s_2s_2s(TyS);
4057   if (0) test_sminp_8h_8h_8h(TyH);
4058   if (0) test_sminp_4h_4h_4h(TyH);
4059   if (0) test_sminp_16b_16b_16b(TyB);
4060   if (0) test_sminp_8b_8b_8b(TyB);
4061   if (0) test_uminp_4s_4s_4s(TyS);
4062   if (0) test_uminp_2s_2s_2s(TyS);
4063   if (0) test_uminp_8h_8h_8h(TyH);
4064   if (0) test_uminp_4h_4h_4h(TyH);
4065   if (0) test_uminp_16b_16b_16b(TyB);
4066   if (0) test_uminp_8b_8b_8b(TyB);
4067
4068   // smaxv        s_4s,h_8h,h_4h,b_16b,b_8b
4069   // umaxv        s_4s,h_8h,h_4h,b_16b,b_8b
4070   // sminv        s_4s,h_8h,h_4h,b_16b,b_8b
4071   // uminv        s_4s,h_8h,h_4h,b_16b,b_8b
4072   if (1) test_SMAXV();
4073   if (1) test_UMAXV();
4074   if (1) test_SMINV();
4075   if (1) test_UMINV();
4076
4077   // smlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
4078   // umlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
4079   // smlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
4080   // umlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
4081   // smull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
4082   // umull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
4083   if (0) test_smlal_2d_2s_s0(TyS);
4084   if (0) test_smlal_2d_2s_s3(TyS);
4085   if (0) test_smlal2_2d_4s_s1(TyS);
4086   if (0) test_smlal2_2d_4s_s2(TyS);
4087   if (0) test_smlal_4s_4h_h0(TyH);
4088   if (0) test_smlal_4s_4h_h7(TyH);
4089   if (0) test_smlal2_4s_8h_h1(TyH);
4090   if (0) test_smlal2_4s_8h_h4(TyH);
4091   if (0) test_umlal_2d_2s_s0(TyS);
4092   if (0) test_umlal_2d_2s_s3(TyS);
4093   if (0) test_umlal2_2d_4s_s1(TyS);
4094   if (0) test_umlal2_2d_4s_s2(TyS);
4095   if (0) test_umlal_4s_4h_h0(TyH);
4096   if (0) test_umlal_4s_4h_h7(TyH);
4097   if (0) test_umlal2_4s_8h_h1(TyH);
4098   if (0) test_umlal2_4s_8h_h4(TyH);
4099   if (0) test_smlsl_2d_2s_s0(TyS);
4100   if (0) test_smlsl_2d_2s_s3(TyS);
4101   if (0) test_smlsl2_2d_4s_s1(TyS);
4102   if (0) test_smlsl2_2d_4s_s2(TyS);
4103   if (0) test_smlsl_4s_4h_h0(TyH);
4104   if (0) test_smlsl_4s_4h_h7(TyH);
4105   if (0) test_smlsl2_4s_8h_h1(TyH);
4106   if (0) test_smlsl2_4s_8h_h4(TyH);
4107   if (0) test_umlsl_2d_2s_s0(TyS);
4108   if (0) test_umlsl_2d_2s_s3(TyS);
4109   if (0) test_umlsl2_2d_4s_s1(TyS);
4110   if (0) test_umlsl2_2d_4s_s2(TyS);
4111   if (0) test_umlsl_4s_4h_h0(TyH);
4112   if (0) test_umlsl_4s_4h_h7(TyH);
4113   if (0) test_umlsl2_4s_8h_h1(TyH);
4114   if (0) test_umlsl2_4s_8h_h4(TyH);
4115   if (0) test_smull_2d_2s_s0(TyS);
4116   if (0) test_smull_2d_2s_s3(TyS);
4117   if (0) test_smull2_2d_4s_s1(TyS);
4118   if (0) test_smull2_2d_4s_s2(TyS);
4119   if (0) test_smull_4s_4h_h0(TyH);
4120   if (0) test_smull_4s_4h_h7(TyH);
4121   if (0) test_smull2_4s_8h_h1(TyH);
4122   if (0) test_smull2_4s_8h_h4(TyH);
4123   if (0) test_umull_2d_2s_s0(TyS);
4124   if (0) test_umull_2d_2s_s3(TyS);
4125   if (0) test_umull2_2d_4s_s1(TyS);
4126   if (0) test_umull2_2d_4s_s2(TyS);
4127   if (0) test_umull_4s_4h_h0(TyH);
4128   if (0) test_umull_4s_4h_h7(TyH);
4129   if (0) test_umull2_4s_8h_h1(TyH);
4130   if (0) test_umull2_4s_8h_h4(TyH);
4131
4132   // smlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4133   // umlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4134   // smlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4135   // umlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4136   // smull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4137   // umull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
4138   if (0) test_smlal_2d_2s_2s(TyS);
4139   if (0) test_smlal2_2d_4s_4s(TyS);
4140   if (0) test_smlal_4s_4h_4h(TyH);
4141   if (0) test_smlal2_4s_8h_8h(TyH);
4142   if (0) test_smlal_8h_8b_8b(TyB);
4143   if (0) test_smlal2_8h_16b_16b(TyB);
4144   if (0) test_umlal_2d_2s_2s(TyS);
4145   if (0) test_umlal2_2d_4s_4s(TyS);
4146   if (0) test_umlal_4s_4h_4h(TyH);
4147   if (0) test_umlal2_4s_8h_8h(TyH);
4148   if (0) test_umlal_8h_8b_8b(TyB);
4149   if (0) test_umlal2_8h_16b_16b(TyB);
4150   if (0) test_smlsl_2d_2s_2s(TyS);
4151   if (0) test_smlsl2_2d_4s_4s(TyS);
4152   if (0) test_smlsl_4s_4h_4h(TyH);
4153   if (0) test_smlsl2_4s_8h_8h(TyH);
4154   if (0) test_smlsl_8h_8b_8b(TyB);
4155   if (0) test_smlsl2_8h_16b_16b(TyB);
4156   if (0) test_umlsl_2d_2s_2s(TyS);
4157   if (0) test_umlsl2_2d_4s_4s(TyS);
4158   if (0) test_umlsl_4s_4h_4h(TyH);
4159   if (0) test_umlsl2_4s_8h_8h(TyH);
4160   if (0) test_umlsl_8h_8b_8b(TyB);
4161   if (0) test_umlsl2_8h_16b_16b(TyB);
4162   if (0) test_smull_2d_2s_2s(TyS);
4163   if (0) test_smull2_2d_4s_4s(TyS);
4164   if (0) test_smull_4s_4h_4h(TyH);
4165   if (0) test_smull2_4s_8h_8h(TyH);
4166   if (0) test_smull_8h_8b_8b(TyB);
4167   if (0) test_smull2_8h_16b_16b(TyB);
4168   if (0) test_umull_2d_2s_2s(TyS);
4169   if (0) test_umull2_2d_4s_4s(TyS);
4170   if (0) test_umull_4s_4h_4h(TyH);
4171   if (0) test_umull2_4s_8h_8h(TyH);
4172   if (0) test_umull_8h_8b_8b(TyB);
4173   if (0) test_umull2_8h_16b_16b(TyB);
4174
4175   // smov         w_b[], w_h[], x_b[], x_h[], x_s[]
4176   // umov         w_b[], w_h[],               w_s[], x_d[]
4177   if (1) test_umov_x_d0(TyD);
4178   if (1) test_umov_x_d1(TyD);
4179   if (1) test_umov_w_s0(TyS);
4180   if (1) test_umov_w_s3(TyS);
4181   if (1) test_umov_w_h0(TyH);
4182   if (1) test_umov_w_h7(TyH);
4183   if (1) test_umov_w_b0(TyB);
4184   if (1) test_umov_w_b15(TyB);
4185   if (1) test_smov_x_s0(TyS);
4186   if (1) test_smov_x_s3(TyS);
4187   if (1) test_smov_x_h0(TyH);
4188   if (1) test_smov_x_h7(TyH);
4189   if (1) test_smov_w_h0(TyH);
4190   if (1) test_smov_w_h7(TyH);
4191   if (1) test_smov_x_b0(TyB);
4192   if (1) test_smov_x_b15(TyB);
4193   if (1) test_smov_w_b0(TyB);
4194   if (1) test_smov_w_b15(TyB);
4195
4196   // sqabs        d,s,h,b
4197   // sqneg        d,s,h,b
4198   if (0) test_sqabs_d_d(TyD);
4199   if (0) test_sqabs_s_s(TyS);
4200   if (0) test_sqabs_h_h(TyH);
4201   if (0) test_sqabs_b_b(TyB);
4202   if (0) test_sqneg_d_d(TyD);
4203   if (0) test_sqneg_s_s(TyS);
4204   if (0) test_sqneg_h_h(TyH);
4205   if (0) test_sqneg_b_b(TyB);
4206
4207   // sqabs        2d,4s,2s,8h,4h,16b,8b
4208   // sqneg        2d,4s,2s,8h,4h,16b,8b
4209   if (0) test_sqabs_2d_2d(TyD);
4210   if (0) test_sqabs_4s_4s(TyS);
4211   if (0) test_sqabs_2s_2s(TyS);
4212   if (0) test_sqabs_8h_8h(TyH);
4213   if (0) test_sqabs_4h_4h(TyH);
4214   if (0) test_sqabs_16b_16b(TyB);
4215   if (0) test_sqabs_8b_8b(TyB);
4216   if (0) test_sqneg_2d_2d(TyD);
4217   if (0) test_sqneg_4s_4s(TyS);
4218   if (0) test_sqneg_2s_2s(TyS);
4219   if (0) test_sqneg_8h_8h(TyH);
4220   if (0) test_sqneg_4h_4h(TyH);
4221   if (0) test_sqneg_16b_16b(TyB);
4222   if (0) test_sqneg_8b_8b(TyB);
4223
4224   // sqadd        d,s,h,b
4225   // uqadd        d,s,h,b
4226   // sqsub        d,s,h,b
4227   // uqsub        d,s,h,b
4228   if (0) test_sqadd_d_d_d(TyD);
4229   if (0) test_sqadd_s_s_s(TyS);
4230   if (0) test_sqadd_h_h_h(TyH);
4231   if (0) test_sqadd_b_b_b(TyB);
4232   if (0) test_uqadd_d_d_d(TyD);
4233   if (0) test_uqadd_s_s_s(TyS);
4234   if (0) test_uqadd_h_h_h(TyH);
4235   if (0) test_uqadd_b_b_b(TyB);
4236   if (0) test_sqsub_d_d_d(TyD);
4237   if (0) test_sqsub_s_s_s(TyS);
4238   if (0) test_sqsub_h_h_h(TyH);
4239   if (0) test_sqsub_b_b_b(TyB);
4240   if (0) test_uqsub_d_d_d(TyD);
4241   if (0) test_uqsub_s_s_s(TyS);
4242   if (0) test_uqsub_h_h_h(TyH);
4243   if (0) test_uqsub_b_b_b(TyB);
4244
4245   // sqadd        2d,4s,2s,8h,4h,16b,8b
4246   // uqadd        2d,4s,2s,8h,4h,16b,8b
4247   // sqsub        2d,4s,2s,8h,4h,16b,8b
4248   // uqsub        2d,4s,2s,8h,4h,16b,8b
4249   if (0) test_sqadd_2d_2d_2d(TyD);
4250   if (0) test_sqadd_4s_4s_4s(TyS);
4251   if (0) test_sqadd_2s_2s_2s(TyS);
4252   if (0) test_sqadd_8h_8h_8h(TyH);
4253   if (0) test_sqadd_4h_4h_4h(TyH);
4254   if (0) test_sqadd_16b_16b_16b(TyB);
4255   if (0) test_sqadd_8b_8b_8b(TyB);
4256   if (0) test_uqadd_2d_2d_2d(TyD);
4257   if (0) test_uqadd_4s_4s_4s(TyS);
4258   if (0) test_uqadd_2s_2s_2s(TyS);
4259   if (0) test_uqadd_8h_8h_8h(TyH);
4260   if (0) test_uqadd_4h_4h_4h(TyH);
4261   if (0) test_uqadd_16b_16b_16b(TyB);
4262   if (0) test_uqadd_8b_8b_8b(TyB);
4263   if (0) test_sqsub_2d_2d_2d(TyD);
4264   if (0) test_sqsub_4s_4s_4s(TyS);
4265   if (0) test_sqsub_2s_2s_2s(TyS);
4266   if (0) test_sqsub_8h_8h_8h(TyH);
4267   if (0) test_sqsub_4h_4h_4h(TyH);
4268   if (0) test_sqsub_16b_16b_16b(TyB);
4269   if (0) test_sqsub_8b_8b_8b(TyB);
4270   if (0) test_uqsub_2d_2d_2d(TyD);
4271   if (0) test_uqsub_4s_4s_4s(TyS);
4272   if (0) test_uqsub_2s_2s_2s(TyS);
4273   if (0) test_uqsub_8h_8h_8h(TyH);
4274   if (0) test_uqsub_4h_4h_4h(TyH);
4275   if (0) test_uqsub_16b_16b_16b(TyB);
4276   if (0) test_uqsub_8b_8b_8b(TyB);
4277
4278   // sqdmlal      d_s_s[], s_h_h[]
4279   // sqdmlsl      d_s_s[], s_h_h[]
4280   // sqdmull      d_s_s[], s_h_h[]
4281   if (0) test_sqdmlal_d_s_s0(TyS);
4282   if (0) test_sqdmlal_d_s_s3(TyS);
4283   if (0) test_sqdmlal_s_h_h1(TyH);
4284   if (0) test_sqdmlal_s_h_h5(TyH);
4285   if (0) test_sqdmlsl_d_s_s0(TyS);
4286   if (0) test_sqdmlsl_d_s_s3(TyS);
4287   if (0) test_sqdmlsl_s_h_h1(TyH);
4288   if (0) test_sqdmlsl_s_h_h5(TyH);
4289   if (0) test_sqdmull_d_s_s0(TyS);
4290   if (0) test_sqdmull_d_s_s3(TyS);
4291   if (0) test_sqdmull_s_h_h1(TyH);
4292   if (0) test_sqdmull_s_h_h5(TyH);
4293
4294   // sqdmlal{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
4295   // sqdmlsl{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
4296   // sqdmull{2}   2d_2s/4s_s[], 4s_4h/2h_h[]
4297   if (0) test_sqdmlal_2d_2s_s0(TyS);
4298   if (0) test_sqdmlal_2d_2s_s3(TyS);
4299   if (0) test_sqdmlal2_2d_4s_s1(TyS);
4300   if (0) test_sqdmlal2_2d_4s_s2(TyS);
4301   if (0) test_sqdmlal_4s_4h_h0(TyH);
4302   if (0) test_sqdmlal_4s_4h_h7(TyH);
4303   if (0) test_sqdmlal2_4s_8h_h1(TyH);
4304   if (0) test_sqdmlal2_4s_8h_h4(TyH);
4305   if (0) test_sqdmlsl_2d_2s_s0(TyS);
4306   if (0) test_sqdmlsl_2d_2s_s3(TyS);
4307   if (0) test_sqdmlsl2_2d_4s_s1(TyS);
4308   if (0) test_sqdmlsl2_2d_4s_s2(TyS);
4309   if (0) test_sqdmlsl_4s_4h_h0(TyH);
4310   if (0) test_sqdmlsl_4s_4h_h7(TyH);
4311   if (0) test_sqdmlsl2_4s_8h_h1(TyH);
4312   if (0) test_sqdmlsl2_4s_8h_h4(TyH);
4313   if (0) test_sqdmull_2d_2s_s0(TyS);
4314   if (0) test_sqdmull_2d_2s_s3(TyS);
4315   if (0) test_sqdmull2_2d_4s_s1(TyS);
4316   if (0) test_sqdmull2_2d_4s_s2(TyS);
4317   if (0) test_sqdmull_4s_4h_h0(TyH);
4318   if (0) test_sqdmull_4s_4h_h7(TyH);
4319   if (0) test_sqdmull2_4s_8h_h1(TyH);
4320   if (0) test_sqdmull2_4s_8h_h4(TyH);
4321
4322   // sqdmlal      d_s_s, s_h_h
4323   // sqdmlsl      d_s_s, s_h_h
4324   // sqdmull      d_s_s, s_h_h
4325   if (0) test_sqdmlal_d_s_s(TyS);
4326   if (0) test_sqdmlal_s_h_h(TyH);
4327   if (0) test_sqdmlsl_d_s_s(TyS);
4328   if (0) test_sqdmlsl_s_h_h(TyH);
4329   if (0) test_sqdmull_d_s_s(TyS);
4330   if (0) test_sqdmull_s_h_h(TyH);
4331
4332   // sqdmlal{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
4333   // sqdmlsl{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
4334   // sqdmull{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
4335   if (0) test_sqdmlal_2d_2s_2s(TyS);
4336   if (0) test_sqdmlal2_2d_4s_4s(TyS);
4337   if (0) test_sqdmlal_4s_4h_4h(TyH);
4338   if (0) test_sqdmlal2_4s_8h_8h(TyH);
4339   if (0) test_sqdmlsl_2d_2s_2s(TyS);
4340   if (0) test_sqdmlsl2_2d_4s_4s(TyS);
4341   if (0) test_sqdmlsl_4s_4h_4h(TyH);
4342   if (0) test_sqdmlsl2_4s_8h_8h(TyH);
4343   if (0) test_sqdmull_2d_2s_2s(TyS);
4344   if (0) test_sqdmull2_2d_4s_4s(TyS);
4345   if (0) test_sqdmull_4s_4h_4h(TyH);
4346   if (0) test_sqdmull2_4s_8h_8h(TyH);
4347
4348   // sqdmulh      s_s_s[], h_h_h[]
4349   // sqrdmulh     s_s_s[], h_h_h[]
4350   if (0) test_sqdmulh_s_s_s1(TyS);
4351   if (0) test_sqdmulh_s_s_s3(TyS);
4352   if (0) test_sqdmulh_h_h_h2(TyH);
4353   if (0) test_sqdmulh_h_h_h7(TyH);
4354   if (0) test_sqrdmulh_s_s_s1(TyS);
4355   if (0) test_sqrdmulh_s_s_s3(TyS);
4356   if (0) test_sqrdmulh_h_h_h2(TyH);
4357   if (0) test_sqrdmulh_h_h_h7(TyH);
4358
4359   // sqdmulh      4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
4360   // sqrdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
4361   if (0) test_sqdmulh_4s_4s_s1(TyS);
4362   if (0) test_sqdmulh_4s_4s_s3(TyS);
4363   if (0) test_sqdmulh_2s_2s_s1(TyS);
4364   if (0) test_sqdmulh_2s_2s_s3(TyS);
4365   if (0) test_sqdmulh_8h_8h_h2(TyH);
4366   if (0) test_sqdmulh_8h_8h_h7(TyH);
4367   if (0) test_sqdmulh_4h_4h_h2(TyH);
4368   if (0) test_sqdmulh_4h_4h_h7(TyH);
4369   if (0) test_sqrdmulh_4s_4s_s1(TyS);
4370   if (0) test_sqrdmulh_4s_4s_s3(TyS);
4371   if (0) test_sqrdmulh_2s_2s_s1(TyS);
4372   if (0) test_sqrdmulh_2s_2s_s3(TyS);
4373   if (0) test_sqrdmulh_8h_8h_h2(TyH);
4374   if (0) test_sqrdmulh_8h_8h_h7(TyH);
4375   if (0) test_sqrdmulh_4h_4h_h2(TyH);
4376   if (0) test_sqrdmulh_4h_4h_h7(TyH);
4377
4378   // sqdmulh      h,s
4379   // sqrdmulh     h,s
4380   if (0) test_sqdmulh_s_s_s(TyS);
4381   if (0) test_sqdmulh_h_h_h(TyH);
4382   if (0) test_sqrdmulh_s_s_s(TyS);
4383   if (0) test_sqrdmulh_h_h_h(TyH);
4384
4385   // sqdmulh      4s,2s,8h,4h
4386   // sqrdmulh     4s,2s,8h,4h
4387   if (0) test_sqdmulh_4s_4s_4s(TyS);
4388   if (0) test_sqdmulh_2s_2s_2s(TyS);
4389   if (0) test_sqdmulh_8h_8h_8h(TyH);
4390   if (0) test_sqdmulh_4h_4h_4h(TyH);
4391   if (0) test_sqrdmulh_4s_4s_4s(TyS);
4392   if (0) test_sqrdmulh_2s_2s_2s(TyS);
4393   if (0) test_sqrdmulh_8h_8h_8h(TyH);
4394   if (0) test_sqrdmulh_4h_4h_4h(TyH);
4395
4396   // sqshl (reg)  d,s,h,b
4397   // uqshl (reg)  d,s,h,b
4398   // sqrshl (reg) d,s,h,b
4399   // uqrshl (reg) d,s,h,b
4400   if (0) test_sqshl_d_d_d(TyD);
4401   if (0) test_sqshl_s_s_s(TyS);
4402   if (0) test_sqshl_h_h_h(TyH);
4403   if (0) test_sqshl_b_b_b(TyB);
4404   if (0) test_uqshl_d_d_d(TyD);
4405   if (0) test_uqshl_s_s_s(TyS);
4406   if (0) test_uqshl_h_h_h(TyH);
4407   if (0) test_uqshl_b_b_b(TyB);
4408   if (0) test_sqrshl_d_d_d(TyD);
4409   if (0) test_sqrshl_s_s_s(TyS);
4410   if (0) test_sqrshl_h_h_h(TyH);
4411   if (0) test_sqrshl_b_b_b(TyB);
4412   if (0) test_uqrshl_d_d_d(TyD);
4413   if (0) test_uqrshl_s_s_s(TyS);
4414   if (0) test_uqrshl_h_h_h(TyH);
4415   if (0) test_uqrshl_b_b_b(TyB);
4416
4417   // sqshl (reg)  2d,4s,2s,8h,4h,16b,8b
4418   // uqshl (reg)  2d,4s,2s,8h,4h,16b,8b
4419   // sqrshl (reg) 2d,4s,2s,8h,4h,16b,8b
4420   // uqrshl (reg) 2d,4s,2s,8h,4h,16b,8b
4421   if (0) test_sqshl_2d_2d_2d(TyD);
4422   if (0) test_sqshl_4s_4s_4s(TyS);
4423   if (0) test_sqshl_2s_2s_2s(TyS);
4424   if (0) test_sqshl_8h_8h_8h(TyH);
4425   if (0) test_sqshl_4h_4h_4h(TyH);
4426   if (0) test_sqshl_16b_16b_16b(TyB);
4427   if (0) test_sqshl_8b_8b_8b(TyB);
4428   if (0) test_uqshl_2d_2d_2d(TyD);
4429   if (0) test_uqshl_4s_4s_4s(TyS);
4430   if (0) test_uqshl_2s_2s_2s(TyS);
4431   if (0) test_uqshl_8h_8h_8h(TyH);
4432   if (0) test_uqshl_4h_4h_4h(TyH);
4433   if (0) test_uqshl_16b_16b_16b(TyB);
4434   if (0) test_uqshl_8b_8b_8b(TyB);
4435   if (0) test_sqrshl_2d_2d_2d(TyD);
4436   if (0) test_sqrshl_4s_4s_4s(TyS);
4437   if (0) test_sqrshl_2s_2s_2s(TyS);
4438   if (0) test_sqrshl_8h_8h_8h(TyH);
4439   if (0) test_sqrshl_4h_4h_4h(TyH);
4440   if (0) test_sqrshl_16b_16b_16b(TyB);
4441   if (0) test_sqrshl_8b_8b_8b(TyB);
4442   if (0) test_uqrshl_2d_2d_2d(TyD);
4443   if (0) test_uqrshl_4s_4s_4s(TyS);
4444   if (0) test_uqrshl_2s_2s_2s(TyS);
4445   if (0) test_uqrshl_8h_8h_8h(TyH);
4446   if (0) test_uqrshl_4h_4h_4h(TyH);
4447   if (0) test_uqrshl_16b_16b_16b(TyB);
4448   if (0) test_uqrshl_8b_8b_8b(TyB);
4449
4450   // sqrshrn      s_d, h_s, b_h   #imm
4451   // uqrshrn      s_d, h_s, b_h   #imm
4452   // sqshrn       s_d, h_s, b_h   #imm
4453   // uqshrn       s_d, h_s, b_h   #imm
4454   // sqrshrun     s_d, h_s, b_h   #imm
4455   // sqshrun      s_d, h_s, b_h   #imm
4456   if (0) test_sqrshrn_s_d_1(TyD);
4457   if (0) test_sqrshrn_s_d_17(TyD);
4458   if (0) test_sqrshrn_s_d_32(TyD);
4459   if (0) test_sqrshrn_h_s_1(TyS);
4460   if (0) test_sqrshrn_h_s_9(TyS);
4461   if (0) test_sqrshrn_h_s_16(TyS);
4462   if (0) test_sqrshrn_b_h_1(TyH);
4463   if (0) test_sqrshrn_b_h_4(TyH);
4464   if (0) test_sqrshrn_b_h_8(TyH);
4465   if (0) test_uqrshrn_s_d_1(TyD);
4466   if (0) test_uqrshrn_s_d_17(TyD);
4467   if (0) test_uqrshrn_s_d_32(TyD);
4468   if (0) test_uqrshrn_h_s_1(TyS);
4469   if (0) test_uqrshrn_h_s_9(TyS);
4470   if (0) test_uqrshrn_h_s_16(TyS);
4471   if (0) test_uqrshrn_b_h_1(TyH);
4472   if (0) test_uqrshrn_b_h_4(TyH);
4473   if (0) test_uqrshrn_b_h_8(TyH);
4474   if (0) test_sqshrn_s_d_1(TyD);
4475   if (0) test_sqshrn_s_d_17(TyD);
4476   if (0) test_sqshrn_s_d_32(TyD);
4477   if (0) test_sqshrn_h_s_1(TyS);
4478   if (0) test_sqshrn_h_s_9(TyS);
4479   if (0) test_sqshrn_h_s_16(TyS);
4480   if (0) test_sqshrn_b_h_1(TyH);
4481   if (0) test_sqshrn_b_h_4(TyH);
4482   if (0) test_sqshrn_b_h_8(TyH);
4483   if (0) test_uqshrn_s_d_1(TyD);
4484   if (0) test_uqshrn_s_d_17(TyD);
4485   if (0) test_uqshrn_s_d_32(TyD);
4486   if (0) test_uqshrn_h_s_1(TyS);
4487   if (0) test_uqshrn_h_s_9(TyS);
4488   if (0) test_uqshrn_h_s_16(TyS);
4489   if (0) test_uqshrn_b_h_1(TyH);
4490   if (0) test_uqshrn_b_h_4(TyH);
4491   if (0) test_uqshrn_b_h_8(TyH);
4492   if (0) test_sqrshrun_s_d_1(TyD);
4493   if (0) test_sqrshrun_s_d_17(TyD);
4494   if (0) test_sqrshrun_s_d_32(TyD);
4495   if (0) test_sqrshrun_h_s_1(TyS);
4496   if (0) test_sqrshrun_h_s_9(TyS);
4497   if (0) test_sqrshrun_h_s_16(TyS);
4498   if (0) test_sqrshrun_b_h_1(TyH);
4499   if (0) test_sqrshrun_b_h_4(TyH);
4500   if (0) test_sqrshrun_b_h_8(TyH);
4501   if (0) test_sqshrun_s_d_1(TyD);
4502   if (0) test_sqshrun_s_d_17(TyD);
4503   if (0) test_sqshrun_s_d_32(TyD);
4504   if (0) test_sqshrun_h_s_1(TyS);
4505   if (0) test_sqshrun_h_s_9(TyS);
4506   if (0) test_sqshrun_h_s_16(TyS);
4507   if (0) test_sqshrun_b_h_1(TyH);
4508   if (0) test_sqshrun_b_h_4(TyH);
4509   if (0) test_sqshrun_b_h_8(TyH);
4510
4511   // sqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4512   // uqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4513   // sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4514   // uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4515   // sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4516   // sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
4517   if (0) test_sqrshrn_2s_2d_1(TyD);
4518   if (0) test_sqrshrn_2s_2d_17(TyD);
4519   if (0) test_sqrshrn_2s_2d_32(TyD);
4520   if (0) test_sqrshrn2_4s_2d_1(TyD);
4521   if (0) test_sqrshrn2_4s_2d_17(TyD);
4522   if (0) test_sqrshrn2_4s_2d_32(TyD);
4523   if (0) test_sqrshrn_4h_4s_1(TyS);
4524   if (0) test_sqrshrn_4h_4s_9(TyS);
4525   if (0) test_sqrshrn_4h_4s_16(TyS);
4526   if (0) test_sqrshrn2_8h_4s_1(TyS);
4527   if (0) test_sqrshrn2_8h_4s_9(TyS);
4528   if (0) test_sqrshrn2_8h_4s_16(TyS);
4529   if (0) test_sqrshrn_8b_8h_1(TyH);
4530   if (0) test_sqrshrn_8b_8h_4(TyH);
4531   if (0) test_sqrshrn_8b_8h_8(TyH);
4532   if (0) test_sqrshrn2_16b_8h_1(TyH);
4533   if (0) test_sqrshrn2_16b_8h_4(TyH);
4534   if (0) test_sqrshrn2_16b_8h_8(TyH);
4535   if (0) test_uqrshrn_2s_2d_1(TyD);
4536   if (0) test_uqrshrn_2s_2d_17(TyD);
4537   if (0) test_uqrshrn_2s_2d_32(TyD);
4538   if (0) test_uqrshrn2_4s_2d_1(TyD);
4539   if (0) test_uqrshrn2_4s_2d_17(TyD);
4540   if (0) test_uqrshrn2_4s_2d_32(TyD);
4541   if (0) test_uqrshrn_4h_4s_1(TyS);
4542   if (0) test_uqrshrn_4h_4s_9(TyS);
4543   if (0) test_uqrshrn_4h_4s_16(TyS);
4544   if (0) test_uqrshrn2_8h_4s_1(TyS);
4545   if (0) test_uqrshrn2_8h_4s_9(TyS);
4546   if (0) test_uqrshrn2_8h_4s_16(TyS);
4547   if (0) test_uqrshrn_8b_8h_1(TyH);
4548   if (0) test_uqrshrn_8b_8h_4(TyH);
4549   if (0) test_uqrshrn_8b_8h_8(TyH);
4550   if (0) test_uqrshrn2_16b_8h_1(TyH);
4551   if (0) test_uqrshrn2_16b_8h_4(TyH);
4552   if (0) test_uqrshrn2_16b_8h_8(TyH);
4553   if (0) test_sqshrn_2s_2d_1(TyD);
4554   if (0) test_sqshrn_2s_2d_17(TyD);
4555   if (0) test_sqshrn_2s_2d_32(TyD);
4556   if (0) test_sqshrn2_4s_2d_1(TyD);
4557   if (0) test_sqshrn2_4s_2d_17(TyD);
4558   if (0) test_sqshrn2_4s_2d_32(TyD);
4559   if (0) test_sqshrn_4h_4s_1(TyS);
4560   if (0) test_sqshrn_4h_4s_9(TyS);
4561   if (0) test_sqshrn_4h_4s_16(TyS);
4562   if (0) test_sqshrn2_8h_4s_1(TyS);
4563   if (0) test_sqshrn2_8h_4s_9(TyS);
4564   if (0) test_sqshrn2_8h_4s_16(TyS);
4565   if (0) test_sqshrn_8b_8h_1(TyH);
4566   if (0) test_sqshrn_8b_8h_4(TyH);
4567   if (0) test_sqshrn_8b_8h_8(TyH);
4568   if (0) test_sqshrn2_16b_8h_1(TyH);
4569   if (0) test_sqshrn2_16b_8h_4(TyH);
4570   if (0) test_sqshrn2_16b_8h_8(TyH);
4571   if (0) test_uqshrn_2s_2d_1(TyD);
4572   if (0) test_uqshrn_2s_2d_17(TyD);
4573   if (0) test_uqshrn_2s_2d_32(TyD);
4574   if (0) test_uqshrn2_4s_2d_1(TyD);
4575   if (0) test_uqshrn2_4s_2d_17(TyD);
4576   if (0) test_uqshrn2_4s_2d_32(TyD);
4577   if (0) test_uqshrn_4h_4s_1(TyS);
4578   if (0) test_uqshrn_4h_4s_9(TyS);
4579   if (0) test_uqshrn_4h_4s_16(TyS);
4580   if (0) test_uqshrn2_8h_4s_1(TyS);
4581   if (0) test_uqshrn2_8h_4s_9(TyS);
4582   if (0) test_uqshrn2_8h_4s_16(TyS);
4583   if (0) test_uqshrn_8b_8h_1(TyH);
4584   if (0) test_uqshrn_8b_8h_4(TyH);
4585   if (0) test_uqshrn_8b_8h_8(TyH);
4586   if (0) test_uqshrn2_16b_8h_1(TyH);
4587   if (0) test_uqshrn2_16b_8h_4(TyH);
4588   if (0) test_uqshrn2_16b_8h_8(TyH);
4589   if (0) test_sqrshrun_2s_2d_1(TyD);
4590   if (0) test_sqrshrun_2s_2d_17(TyD);
4591   if (0) test_sqrshrun_2s_2d_32(TyD);
4592   if (0) test_sqrshrun2_4s_2d_1(TyD);
4593   if (0) test_sqrshrun2_4s_2d_17(TyD);
4594   if (0) test_sqrshrun2_4s_2d_32(TyD);
4595   if (0) test_sqrshrun_4h_4s_1(TyS);
4596   if (0) test_sqrshrun_4h_4s_9(TyS);
4597   if (0) test_sqrshrun_4h_4s_16(TyS);
4598   if (0) test_sqrshrun2_8h_4s_1(TyS);
4599   if (0) test_sqrshrun2_8h_4s_9(TyS);
4600   if (0) test_sqrshrun2_8h_4s_16(TyS);
4601   if (0) test_sqrshrun_8b_8h_1(TyH);
4602   if (0) test_sqrshrun_8b_8h_4(TyH);
4603   if (0) test_sqrshrun_8b_8h_8(TyH);
4604   if (0) test_sqrshrun2_16b_8h_1(TyH);
4605   if (0) test_sqrshrun2_16b_8h_4(TyH);
4606   if (0) test_sqrshrun2_16b_8h_8(TyH);
4607   if (0) test_sqshrun_2s_2d_1(TyD);
4608   if (0) test_sqshrun_2s_2d_17(TyD);
4609   if (0) test_sqshrun_2s_2d_32(TyD);
4610   if (0) test_sqshrun2_4s_2d_1(TyD);
4611   if (0) test_sqshrun2_4s_2d_17(TyD);
4612   if (0) test_sqshrun2_4s_2d_32(TyD);
4613   if (0) test_sqshrun_4h_4s_1(TyS);
4614   if (0) test_sqshrun_4h_4s_9(TyS);
4615   if (0) test_sqshrun_4h_4s_16(TyS);
4616   if (0) test_sqshrun2_8h_4s_1(TyS);
4617   if (0) test_sqshrun2_8h_4s_9(TyS);
4618   if (0) test_sqshrun2_8h_4s_16(TyS);
4619   if (0) test_sqshrun_8b_8h_1(TyH);
4620   if (0) test_sqshrun_8b_8h_4(TyH);
4621   if (0) test_sqshrun_8b_8h_8(TyH);
4622   if (0) test_sqshrun2_16b_8h_1(TyH);
4623   if (0) test_sqshrun2_16b_8h_4(TyH);
4624   if (0) test_sqshrun2_16b_8h_8(TyH);
4625
4626   // sqshl (imm)  d,s,h,b   _#imm
4627   // uqshl (imm)  d,s,h,b   _#imm
4628   // sqshlu (imm) d,s,h,b   _#imm
4629   if (0) test_sqshl_d_d_0(TyD);
4630   if (0) test_sqshl_d_d_32(TyD);
4631   if (0) test_sqshl_d_d_63(TyD);
4632   if (0) test_sqshl_s_s_0(TyS);
4633   if (0) test_sqshl_s_s_16(TyS);
4634   if (0) test_sqshl_s_s_31(TyS);
4635   if (0) test_sqshl_h_h_0(TyH);
4636   if (0) test_sqshl_h_h_8(TyH);
4637   if (0) test_sqshl_h_h_15(TyH);
4638   if (0) test_sqshl_b_b_0(TyB);
4639   if (0) test_sqshl_b_b_4(TyB);
4640   if (0) test_sqshl_b_b_7(TyB);
4641   if (0) test_uqshl_d_d_0(TyD);
4642   if (0) test_uqshl_d_d_32(TyD);
4643   if (0) test_uqshl_d_d_63(TyD);
4644   if (0) test_uqshl_s_s_0(TyS);
4645   if (0) test_uqshl_s_s_16(TyS);
4646   if (0) test_uqshl_s_s_31(TyS);
4647   if (0) test_uqshl_h_h_0(TyH);
4648   if (0) test_uqshl_h_h_8(TyH);
4649   if (0) test_uqshl_h_h_15(TyH);
4650   if (0) test_uqshl_b_b_0(TyB);
4651   if (0) test_uqshl_b_b_4(TyB);
4652   if (0) test_uqshl_b_b_7(TyB);
4653   if (0) test_sqshlu_d_d_0(TyD);
4654   if (0) test_sqshlu_d_d_32(TyD);
4655   if (0) test_sqshlu_d_d_63(TyD);
4656   if (0) test_sqshlu_s_s_0(TyS);
4657   if (0) test_sqshlu_s_s_16(TyS);
4658   if (0) test_sqshlu_s_s_31(TyS);
4659   if (0) test_sqshlu_h_h_0(TyH);
4660   if (0) test_sqshlu_h_h_8(TyH);
4661   if (0) test_sqshlu_h_h_15(TyH);
4662   if (0) test_sqshlu_b_b_0(TyB);
4663   if (0) test_sqshlu_b_b_4(TyB);
4664   if (0) test_sqshlu_b_b_7(TyB);
4665
4666   // sqshl (imm)  2d,4s,2s,8h,4h,16b,8b   _#imm
4667   // uqshl (imm)  2d,4s,2s,8h,4h,16b,8b   _#imm
4668   // sqshlu (imm) 2d,4s,2s,8h,4h,16b,8b   _#imm
4669   if (0) test_sqshl_2d_2d_0(TyD);
4670   if (0) test_sqshl_2d_2d_32(TyD);
4671   if (0) test_sqshl_2d_2d_63(TyD);
4672   if (0) test_sqshl_4s_4s_0(TyS);
4673   if (0) test_sqshl_4s_4s_16(TyS);
4674   if (0) test_sqshl_4s_4s_31(TyS);
4675   if (0) test_sqshl_2s_2s_0(TyS);
4676   if (0) test_sqshl_2s_2s_16(TyS);
4677   if (0) test_sqshl_2s_2s_31(TyS);
4678   if (0) test_sqshl_8h_8h_0(TyH);
4679   if (0) test_sqshl_8h_8h_8(TyH);
4680   if (0) test_sqshl_8h_8h_15(TyH);
4681   if (0) test_sqshl_4h_4h_0(TyH);
4682   if (0) test_sqshl_4h_4h_8(TyH);
4683   if (0) test_sqshl_4h_4h_15(TyH);
4684   if (0) test_sqshl_16b_16b_0(TyB);
4685   if (0) test_sqshl_16b_16b_3(TyB);
4686   if (0) test_sqshl_16b_16b_7(TyB);
4687   if (0) test_sqshl_8b_8b_0(TyB);
4688   if (0) test_sqshl_8b_8b_3(TyB);
4689   if (0) test_sqshl_8b_8b_7(TyB);
4690   if (0) test_uqshl_2d_2d_0(TyD);
4691   if (0) test_uqshl_2d_2d_32(TyD);
4692   if (0) test_uqshl_2d_2d_63(TyD);
4693   if (0) test_uqshl_4s_4s_0(TyS);
4694   if (0) test_uqshl_4s_4s_16(TyS);
4695   if (0) test_uqshl_4s_4s_31(TyS);
4696   if (0) test_uqshl_2s_2s_0(TyS);
4697   if (0) test_uqshl_2s_2s_16(TyS);
4698   if (0) test_uqshl_2s_2s_31(TyS);
4699   if (0) test_uqshl_8h_8h_0(TyH);
4700   if (0) test_uqshl_8h_8h_8(TyH);
4701   if (0) test_uqshl_8h_8h_15(TyH);
4702   if (0) test_uqshl_4h_4h_0(TyH);
4703   if (0) test_uqshl_4h_4h_8(TyH);
4704   if (0) test_uqshl_4h_4h_15(TyH);
4705   if (0) test_uqshl_16b_16b_0(TyB);
4706   if (0) test_uqshl_16b_16b_3(TyB);
4707   if (0) test_uqshl_16b_16b_7(TyB);
4708   if (0) test_uqshl_8b_8b_0(TyB);
4709   if (0) test_uqshl_8b_8b_3(TyB);
4710   if (0) test_uqshl_8b_8b_7(TyB);
4711   if (0) test_sqshlu_2d_2d_0(TyD);
4712   if (0) test_sqshlu_2d_2d_32(TyD);
4713   if (0) test_sqshlu_2d_2d_63(TyD);
4714   if (0) test_sqshlu_4s_4s_0(TyS);
4715   if (0) test_sqshlu_4s_4s_16(TyS);
4716   if (0) test_sqshlu_4s_4s_31(TyS);
4717   if (0) test_sqshlu_2s_2s_0(TyS);
4718   if (0) test_sqshlu_2s_2s_16(TyS);
4719   if (0) test_sqshlu_2s_2s_31(TyS);
4720   if (0) test_sqshlu_8h_8h_0(TyH);
4721   if (0) test_sqshlu_8h_8h_8(TyH);
4722   if (0) test_sqshlu_8h_8h_15(TyH);
4723   if (0) test_sqshlu_4h_4h_0(TyH);
4724   if (0) test_sqshlu_4h_4h_8(TyH);
4725   if (0) test_sqshlu_4h_4h_15(TyH);
4726   if (0) test_sqshlu_16b_16b_0(TyB);
4727   if (0) test_sqshlu_16b_16b_3(TyB);
4728   if (0) test_sqshlu_16b_16b_7(TyB);
4729   if (0) test_sqshlu_8b_8b_0(TyB);
4730   if (0) test_sqshlu_8b_8b_3(TyB);
4731   if (0) test_sqshlu_8b_8b_7(TyB);
4732
4733   // sqxtn        s_d,h_s,b_h
4734   // uqxtn        s_d,h_s,b_h
4735   // sqxtun       s_d,h_s,b_h
4736   if (0) test_sqxtn_s_d(TyD);
4737   if (0) test_sqxtn_h_s(TyS);
4738   if (0) test_sqxtn_b_h(TyH);
4739   if (0) test_uqxtn_s_d(TyD);
4740   if (0) test_uqxtn_h_s(TyS);
4741   if (0) test_uqxtn_b_h(TyH);
4742   if (0) test_sqxtun_s_d(TyD);
4743   if (0) test_sqxtun_h_s(TyS);
4744   if (0) test_sqxtun_b_h(TyH);
4745
4746   // sqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
4747   // uqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
4748   // sqxtun{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
4749   if (0) test_sqxtn_2s_2d(TyD);
4750   if (0) test_sqxtn2_4s_2d(TyD);
4751   if (0) test_sqxtn_4h_4s(TyS);
4752   if (0) test_sqxtn2_8h_4s(TyS);
4753   if (0) test_sqxtn_8b_8h(TyH);
4754   if (0) test_sqxtn2_16b_8h(TyH);
4755   if (0) test_uqxtn_2s_2d(TyD);
4756   if (0) test_uqxtn2_4s_2d(TyD);
4757   if (0) test_uqxtn_4h_4s(TyS);
4758   if (0) test_uqxtn2_8h_4s(TyS);
4759   if (0) test_uqxtn_8b_8h(TyH);
4760   if (0) test_uqxtn2_16b_8h(TyH);
4761   if (0) test_sqxtun_2s_2d(TyD);
4762   if (0) test_sqxtun2_4s_2d(TyD);
4763   if (0) test_sqxtun_4h_4s(TyS);
4764   if (0) test_sqxtun2_8h_4s(TyS);
4765   if (0) test_sqxtun_8b_8h(TyH);
4766   if (0) test_sqxtun2_16b_8h(TyH);
4767
4768   // srhadd       4s,2s,8h,4h,16b,8b
4769   // urhadd       4s,2s,8h,4h,16b,8b
4770   if (0) test_srhadd_4s_4s_4s(TyS);
4771   if (0) test_srhadd_2s_2s_2s(TyS);
4772   if (0) test_srhadd_8h_8h_8h(TyH);
4773   if (0) test_srhadd_4h_4h_4h(TyH);
4774   if (0) test_srhadd_16b_16b_16b(TyB);
4775   if (0) test_srhadd_8b_8b_8b(TyB);
4776   if (0) test_urhadd_4s_4s_4s(TyS);
4777   if (0) test_urhadd_2s_2s_2s(TyS);
4778   if (0) test_urhadd_8h_8h_8h(TyH);
4779   if (0) test_urhadd_4h_4h_4h(TyH);
4780   if (0) test_urhadd_16b_16b_16b(TyB);
4781   if (0) test_urhadd_8b_8b_8b(TyB);
4782
4783   // sshl (reg)   d
4784   // ushl (reg)   d
4785   if (0) test_sshl_d_d_d(TyD);
4786   if (0) test_ushl_d_d_d(TyD);
4787
4788   // sshl (reg)   2d,4s,2s,8h,4h,16b,8b
4789   // ushl (reg)   2d,4s,2s,8h,4h,16b,8b
4790   if (0) test_sshl_2d_2d_2d(TyD);
4791   if (0) test_sshl_4s_4s_4s(TyS);
4792   if (0) test_sshl_2s_2s_2s(TyS);
4793   if (0) test_sshl_8h_8h_8h(TyH);
4794   if (0) test_sshl_4h_4h_4h(TyH);
4795   if (0) test_sshl_16b_16b_16b(TyB);
4796   if (0) test_sshl_8b_8b_8b(TyB);
4797   if (0) test_ushl_2d_2d_2d(TyD);
4798   if (0) test_ushl_4s_4s_4s(TyS);
4799   if (0) test_ushl_2s_2s_2s(TyS);
4800   if (0) test_ushl_8h_8h_8h(TyH);
4801   if (0) test_ushl_4h_4h_4h(TyH);
4802   if (0) test_ushl_16b_16b_16b(TyB);
4803   if (0) test_ushl_8b_8b_8b(TyB);
4804
4805   // shl  (imm)   d
4806   // sshr (imm)   d
4807   // ushr (imm)   d
4808   if (1) test_shl_d_d_0(TyD);
4809   if (1) test_shl_d_d_32(TyD);
4810   if (1) test_shl_d_d_63(TyD);
4811   if (0) test_sshr_d_d_1(TyD);
4812   if (0) test_sshr_d_d_32(TyD);
4813   if (0) test_sshr_d_d_64(TyD);
4814   if (0) test_ushr_d_d_1(TyD);
4815   if (0) test_ushr_d_d_32(TyD);
4816   if (0) test_ushr_d_d_64(TyD);
4817
4818   // shl  (imm)   16b,8b,8h,4h,4s,2s,2d
4819   // sshr (imm)   2d,4s,2s,8h,4h,16b,8b
4820   // ushr (imm)   2d,4s,2s,8h,4h,16b,8b
4821   if (0) test_shl_2d_2d_0(TyD);
4822   if (1) test_shl_2d_2d_13(TyD);
4823   if (1) test_shl_2d_2d_63(TyD);
4824   if (0) test_shl_4s_4s_0(TyS);
4825   if (1) test_shl_4s_4s_13(TyS);
4826   if (1) test_shl_4s_4s_31(TyS);
4827   if (0) test_shl_2s_2s_0(TyS);
4828   if (1) test_shl_2s_2s_13(TyS);
4829   if (1) test_shl_2s_2s_31(TyS);
4830   if (0) test_shl_8h_8h_0(TyH);
4831   if (1) test_shl_8h_8h_13(TyH);
4832   if (1) test_shl_8h_8h_15(TyH);
4833   if (0) test_shl_4h_4h_0(TyH);
4834   if (1) test_shl_4h_4h_13(TyH);
4835   if (1) test_shl_4h_4h_15(TyH);
4836   if (0) test_shl_16b_16b_0(TyB);
4837   if (1) test_shl_16b_16b_7(TyB);
4838   if (0) test_shl_8b_8b_0(TyB);
4839   if (1) test_shl_8b_8b_7(TyB);
4840   if (1) test_sshr_2d_2d_1(TyD);
4841   if (1) test_sshr_2d_2d_13(TyD);
4842   if (0) test_sshr_2d_2d_64(TyD);
4843   if (1) test_sshr_4s_4s_1(TyS);
4844   if (1) test_sshr_4s_4s_13(TyS);
4845   if (0) test_sshr_4s_4s_32(TyS);
4846   if (1) test_sshr_2s_2s_1(TyS);
4847   if (1) test_sshr_2s_2s_13(TyS);
4848   if (0) test_sshr_2s_2s_32(TyS);
4849   if (1) test_sshr_8h_8h_1(TyH);
4850   if (1) test_sshr_8h_8h_13(TyH);
4851   if (0) test_sshr_8h_8h_16(TyH);
4852   if (1) test_sshr_4h_4h_1(TyH);
4853   if (1) test_sshr_4h_4h_13(TyH);
4854   if (0) test_sshr_4h_4h_16(TyH);
4855   if (1) test_sshr_16b_16b_1(TyB);
4856   if (0) test_sshr_16b_16b_8(TyB);
4857   if (1) test_sshr_8b_8b_1(TyB);
4858   if (0) test_sshr_8b_8b_8(TyB);
4859   if (1) test_ushr_2d_2d_1(TyD);
4860   if (1) test_ushr_2d_2d_13(TyD);
4861   if (0) test_ushr_2d_2d_64(TyD);
4862   if (1) test_ushr_4s_4s_1(TyS);
4863   if (1) test_ushr_4s_4s_13(TyS);
4864   if (0) test_ushr_4s_4s_32(TyS);
4865   if (1) test_ushr_2s_2s_1(TyS);
4866   if (1) test_ushr_2s_2s_13(TyS);
4867   if (0) test_ushr_2s_2s_32(TyS);
4868   if (1) test_ushr_8h_8h_1(TyH);
4869   if (1) test_ushr_8h_8h_13(TyH);
4870   if (0) test_ushr_8h_8h_16(TyH);
4871   if (1) test_ushr_4h_4h_1(TyH);
4872   if (1) test_ushr_4h_4h_13(TyH);
4873   if (0) test_ushr_4h_4h_16(TyH);
4874   if (1) test_ushr_16b_16b_1(TyB);
4875   if (0) test_ushr_16b_16b_8(TyB);
4876   if (1) test_ushr_8b_8b_1(TyB);
4877   if (0) test_ushr_8b_8b_8(TyB);
4878
4879   // ssra (imm)   d
4880   // usra (imm)   d
4881   if (0) test_ssra_d_d_1(TyD);
4882   if (0) test_ssra_d_d_32(TyD);
4883   if (0) test_ssra_d_d_64(TyD);
4884   if (0) test_usra_d_d_1(TyD);
4885   if (0) test_usra_d_d_32(TyD);
4886   if (0) test_usra_d_d_64(TyD);
4887
4888   // ssra (imm)   2d,4s,2s,8h,4h,16b,8b
4889   // usra (imm)   2d,4s,2s,8h,4h,16b,8b
4890   if (0) test_ssra_2d_2d_1(TyD);
4891   if (0) test_ssra_2d_2d_32(TyD);
4892   if (0) test_ssra_2d_2d_64(TyD);
4893   if (0) test_ssra_4s_4s_1(TyS);
4894   if (0) test_ssra_4s_4s_16(TyS);
4895   if (0) test_ssra_4s_4s_32(TyS);
4896   if (0) test_ssra_2s_2s_1(TyS);
4897   if (0) test_ssra_2s_2s_16(TyS);
4898   if (0) test_ssra_2s_2s_32(TyS);
4899   if (0) test_ssra_8h_8h_1(TyH);
4900   if (0) test_ssra_8h_8h_8(TyH);
4901   if (0) test_ssra_8h_8h_16(TyH);
4902   if (0) test_ssra_4h_4h_1(TyH);
4903   if (0) test_ssra_4h_4h_8(TyH);
4904   if (0) test_ssra_4h_4h_16(TyH);
4905   if (0) test_ssra_16b_16b_1(TyB);
4906   if (0) test_ssra_16b_16b_3(TyB);
4907   if (0) test_ssra_16b_16b_8(TyB);
4908   if (0) test_ssra_8b_8b_1(TyB);
4909   if (0) test_ssra_8b_8b_3(TyB);
4910   if (0) test_ssra_8b_8b_8(TyB);
4911   if (0) test_usra_2d_2d_1(TyD);
4912   if (0) test_usra_2d_2d_32(TyD);
4913   if (0) test_usra_2d_2d_64(TyD);
4914   if (0) test_usra_4s_4s_1(TyS);
4915   if (0) test_usra_4s_4s_16(TyS);
4916   if (0) test_usra_4s_4s_32(TyS);
4917   if (0) test_usra_2s_2s_1(TyS);
4918   if (0) test_usra_2s_2s_16(TyS);
4919   if (0) test_usra_2s_2s_32(TyS);
4920   if (0) test_usra_8h_8h_1(TyH);
4921   if (0) test_usra_8h_8h_8(TyH);
4922   if (0) test_usra_8h_8h_16(TyH);
4923   if (0) test_usra_4h_4h_1(TyH);
4924   if (0) test_usra_4h_4h_8(TyH);
4925   if (0) test_usra_4h_4h_16(TyH);
4926   if (0) test_usra_16b_16b_1(TyB);
4927   if (0) test_usra_16b_16b_3(TyB);
4928   if (0) test_usra_16b_16b_8(TyB);
4929   if (0) test_usra_8b_8b_1(TyB);
4930   if (0) test_usra_8b_8b_3(TyB);
4931   if (0) test_usra_8b_8b_8(TyB);
4932
4933   // srshl (reg)  d
4934   // urshl (reg)  d
4935   if (0) test_srshl_d_d_d(TyD);
4936   if (0) test_urshl_d_d_d(TyD);
4937
4938   // srshl (reg)  2d,4s,2s,8h,4h,16b,8b
4939   // urshl (reg)  2d,4s,2s,8h,4h,16b,8b
4940   if (0) test_srshl_2d_2d_2d(TyD);
4941   if (0) test_srshl_4s_4s_4s(TyS);
4942   if (0) test_srshl_2s_2s_2s(TyS);
4943   if (0) test_srshl_8h_8h_8h(TyH);
4944   if (0) test_srshl_4h_4h_4h(TyH);
4945   if (0) test_srshl_16b_16b_16b(TyB);
4946   if (0) test_srshl_8b_8b_8b(TyB);
4947   if (0) test_urshl_2d_2d_2d(TyD);
4948   if (0) test_urshl_4s_4s_4s(TyS);
4949   if (0) test_urshl_2s_2s_2s(TyS);
4950   if (0) test_urshl_8h_8h_8h(TyH);
4951   if (0) test_urshl_4h_4h_4h(TyH);
4952   if (0) test_urshl_16b_16b_16b(TyB);
4953   if (0) test_urshl_8b_8b_8b(TyB);
4954
4955   // srshr (imm)  d
4956   // urshr (imm)  d
4957   if (0) test_srshr_d_d_1(TyD);
4958   if (0) test_srshr_d_d_32(TyD);
4959   if (0) test_srshr_d_d_64(TyD);
4960   if (0) test_urshr_d_d_1(TyD);
4961   if (0) test_urshr_d_d_32(TyD);
4962   if (0) test_urshr_d_d_64(TyD);
4963
4964   // srshr (imm)  2d,4s,2s,8h,4h,16b,8b
4965   // urshr (imm)  2d,4s,2s,8h,4h,16b,8b
4966   if (0) test_srshr_2d_2d_1(TyD);
4967   if (0) test_srshr_2d_2d_32(TyD);
4968   if (0) test_srshr_2d_2d_64(TyD);
4969   if (0) test_srshr_4s_4s_1(TyS);
4970   if (0) test_srshr_4s_4s_16(TyS);
4971   if (0) test_srshr_4s_4s_32(TyS);
4972   if (0) test_srshr_2s_2s_1(TyS);
4973   if (0) test_srshr_2s_2s_16(TyS);
4974   if (0) test_srshr_2s_2s_32(TyS);
4975   if (0) test_srshr_8h_8h_1(TyH);
4976   if (0) test_srshr_8h_8h_8(TyH);
4977   if (0) test_srshr_8h_8h_16(TyH);
4978   if (0) test_srshr_4h_4h_1(TyH);
4979   if (0) test_srshr_4h_4h_8(TyH);
4980   if (0) test_srshr_4h_4h_16(TyH);
4981   if (0) test_srshr_16b_16b_1(TyB);
4982   if (0) test_srshr_16b_16b_3(TyB);
4983   if (0) test_srshr_16b_16b_8(TyB);
4984   if (0) test_srshr_8b_8b_1(TyB);
4985   if (0) test_srshr_8b_8b_3(TyB);
4986   if (0) test_srshr_8b_8b_8(TyB);
4987   if (0) test_urshr_2d_2d_1(TyD);
4988   if (0) test_urshr_2d_2d_32(TyD);
4989   if (0) test_urshr_2d_2d_64(TyD);
4990   if (0) test_urshr_4s_4s_1(TyS);
4991   if (0) test_urshr_4s_4s_16(TyS);
4992   if (0) test_urshr_4s_4s_32(TyS);
4993   if (0) test_urshr_2s_2s_1(TyS);
4994   if (0) test_urshr_2s_2s_16(TyS);
4995   if (0) test_urshr_2s_2s_32(TyS);
4996   if (0) test_urshr_8h_8h_1(TyH);
4997   if (0) test_urshr_8h_8h_8(TyH);
4998   if (0) test_urshr_8h_8h_16(TyH);
4999   if (0) test_urshr_4h_4h_1(TyH);
5000   if (0) test_urshr_4h_4h_8(TyH);
5001   if (0) test_urshr_4h_4h_16(TyH);
5002   if (0) test_urshr_16b_16b_1(TyB);
5003   if (0) test_urshr_16b_16b_3(TyB);
5004   if (0) test_urshr_16b_16b_8(TyB);
5005   if (0) test_urshr_8b_8b_1(TyB);
5006   if (0) test_urshr_8b_8b_3(TyB);
5007   if (0) test_urshr_8b_8b_8(TyB);
5008
5009   // srsra (imm)  d
5010   // ursra (imm)  d
5011   if (0) test_srsra_d_d_1(TyD);
5012   if (0) test_srsra_d_d_32(TyD);
5013   if (0) test_srsra_d_d_64(TyD);
5014   if (0) test_ursra_d_d_1(TyD);
5015   if (0) test_ursra_d_d_32(TyD);
5016   if (0) test_ursra_d_d_64(TyD);
5017
5018   // srsra (imm)  2d,4s,2s,8h,4h,16b,8b
5019   // ursra (imm)  2d,4s,2s,8h,4h,16b,8b
5020   if (0) test_srsra_2d_2d_1(TyD);
5021   if (0) test_srsra_2d_2d_32(TyD);
5022   if (0) test_srsra_2d_2d_64(TyD);
5023   if (0) test_srsra_4s_4s_1(TyS);
5024   if (0) test_srsra_4s_4s_16(TyS);
5025   if (0) test_srsra_4s_4s_32(TyS);
5026   if (0) test_srsra_2s_2s_1(TyS);
5027   if (0) test_srsra_2s_2s_16(TyS);
5028   if (0) test_srsra_2s_2s_32(TyS);
5029   if (0) test_srsra_8h_8h_1(TyH);
5030   if (0) test_srsra_8h_8h_8(TyH);
5031   if (0) test_srsra_8h_8h_16(TyH);
5032   if (0) test_srsra_4h_4h_1(TyH);
5033   if (0) test_srsra_4h_4h_8(TyH);
5034   if (0) test_srsra_4h_4h_16(TyH);
5035   if (0) test_srsra_16b_16b_1(TyB);
5036   if (0) test_srsra_16b_16b_3(TyB);
5037   if (0) test_srsra_16b_16b_8(TyB);
5038   if (0) test_srsra_8b_8b_1(TyB);
5039   if (0) test_srsra_8b_8b_3(TyB);
5040   if (0) test_srsra_8b_8b_8(TyB);
5041   if (0) test_ursra_2d_2d_1(TyD);
5042   if (0) test_ursra_2d_2d_32(TyD);
5043   if (0) test_ursra_2d_2d_64(TyD);
5044   if (0) test_ursra_4s_4s_1(TyS);
5045   if (0) test_ursra_4s_4s_16(TyS);
5046   if (0) test_ursra_4s_4s_32(TyS);
5047   if (0) test_ursra_2s_2s_1(TyS);
5048   if (0) test_ursra_2s_2s_16(TyS);
5049   if (0) test_ursra_2s_2s_32(TyS);
5050   if (0) test_ursra_8h_8h_1(TyH);
5051   if (0) test_ursra_8h_8h_8(TyH);
5052   if (0) test_ursra_8h_8h_16(TyH);
5053   if (0) test_ursra_4h_4h_1(TyH);
5054   if (0) test_ursra_4h_4h_8(TyH);
5055   if (0) test_ursra_4h_4h_16(TyH);
5056   if (0) test_ursra_16b_16b_1(TyB);
5057   if (0) test_ursra_16b_16b_3(TyB);
5058   if (0) test_ursra_16b_16b_8(TyB);
5059   if (0) test_ursra_8b_8b_1(TyB);
5060   if (0) test_ursra_8b_8b_3(TyB);
5061   if (0) test_ursra_8b_8b_8(TyB);
5062
5063   // sshll{2} (imm)  2d_2s/4s, 4s_4h/8h, 8h_8b/16b
5064   // ushll{2} (imm)  2d_2s/4s, 4s_4h/8h, 8h_8b/16b
5065   if (1) test_sshll_2d_2s_0(TyS);
5066   if (1) test_sshll_2d_2s_15(TyS);
5067   if (1) test_sshll_2d_2s_31(TyS);
5068   if (1) test_sshll2_2d_4s_0(TyS);
5069   if (1) test_sshll2_2d_4s_15(TyS);
5070   if (1) test_sshll2_2d_4s_31(TyS);
5071   if (1) test_sshll_4s_4h_0(TyH);
5072   if (1) test_sshll_4s_4h_7(TyH);
5073   if (1) test_sshll_4s_4h_15(TyH);
5074   if (1) test_sshll2_4s_8h_0(TyH);
5075   if (1) test_sshll2_4s_8h_7(TyH);
5076   if (1) test_sshll2_4s_8h_15(TyH);
5077   if (1) test_sshll_8h_8b_0(TyB);
5078   if (1) test_sshll_8h_8b_3(TyB);
5079   if (1) test_sshll_8h_8b_7(TyB);
5080   if (1) test_sshll2_8h_16b_0(TyB);
5081   if (1) test_sshll2_8h_16b_3(TyB);
5082   if (1) test_sshll2_8h_16b_7(TyB);
5083   if (1) test_ushll_2d_2s_0(TyS);
5084   if (1) test_ushll_2d_2s_15(TyS);
5085   if (1) test_ushll_2d_2s_31(TyS);
5086   if (1) test_ushll2_2d_4s_0(TyS);
5087   if (1) test_ushll2_2d_4s_15(TyS);
5088   if (1) test_ushll2_2d_4s_31(TyS);
5089   if (1) test_ushll_4s_4h_0(TyH);
5090   if (1) test_ushll_4s_4h_7(TyH);
5091   if (1) test_ushll_4s_4h_15(TyH);
5092   if (1) test_ushll2_4s_8h_0(TyH);
5093   if (1) test_ushll2_4s_8h_7(TyH);
5094   if (1) test_ushll2_4s_8h_15(TyH);
5095   if (1) test_ushll_8h_8b_0(TyB);
5096   if (1) test_ushll_8h_8b_3(TyB);
5097   if (1) test_ushll_8h_8b_7(TyB);
5098   if (1) test_ushll2_8h_16b_0(TyB);
5099   if (1) test_ushll2_8h_16b_3(TyB);
5100   if (1) test_ushll2_8h_16b_7(TyB);
5101
5102   // suqadd  d,s,h,b
5103   // usqadd  d,s,h,b
5104   if (0) test_suqadd_d_d(TyD);
5105   if (0) test_suqadd_s_s(TyS);
5106   if (0) test_suqadd_h_h(TyH);
5107   if (0) test_suqadd_b_b(TyB);
5108   if (0) test_usqadd_d_d(TyD);
5109   if (0) test_usqadd_s_s(TyS);
5110   if (0) test_usqadd_h_h(TyH);
5111   if (0) test_usqadd_b_b(TyB);
5112
5113   // suqadd  2d,4s,2s,8h,4h,16b,8b
5114   // usqadd  2d,4s,2s,8h,4h,16b,8b
5115   if (0) test_suqadd_2d_2d(TyD);
5116   if (0) test_suqadd_4s_4s(TyS);
5117   if (0) test_suqadd_2s_2s(TyS);
5118   if (0) test_suqadd_8h_8h(TyH);
5119   if (0) test_suqadd_4h_4h(TyH);
5120   if (0) test_suqadd_16b_16b(TyB);
5121   if (0) test_suqadd_8b_8b(TyB);
5122   if (0) test_usqadd_2d_2d(TyD);
5123   if (0) test_usqadd_4s_4s(TyS);
5124   if (0) test_usqadd_2s_2s(TyS);
5125   if (0) test_usqadd_8h_8h(TyH);
5126   if (0) test_usqadd_4h_4h(TyH);
5127   if (0) test_usqadd_16b_16b(TyB);
5128   if (0) test_usqadd_8b_8b(TyB);
5129
5130   // tbl     8b_{16b}_8b, 16b_{16b}_16b
5131   // tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
5132   // tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
5133   // tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
5134   if (1) test_tbl_16b_1reg(TyB);
5135   if (1) test_tbl_16b_2reg(TyB);
5136   if (1) test_tbl_16b_3reg(TyB);
5137   if (1) test_tbl_16b_4reg(TyB);
5138   if (1) test_tbl_8b_1reg(TyB);
5139   if (1) test_tbl_8b_2reg(TyB);
5140   if (1) test_tbl_8b_3reg(TyB);
5141   if (1) test_tbl_8b_4reg(TyB);
5142
5143   // tbx     8b_{16b}_8b, 16b_{16b}_16b
5144   // tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
5145   // tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
5146   // tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
5147   if (1) test_tbx_16b_1reg(TyB);
5148   if (1) test_tbx_16b_2reg(TyB);
5149   if (1) test_tbx_16b_3reg(TyB);
5150   if (1) test_tbx_16b_4reg(TyB);
5151   if (1) test_tbx_8b_1reg(TyB);
5152   if (1) test_tbx_8b_2reg(TyB);
5153   if (1) test_tbx_8b_3reg(TyB);
5154   if (1) test_tbx_8b_4reg(TyB);
5155
5156   // trn1    2d,4s,2s,8h,4h,16b,8b
5157   // trn2    2d,4s,2s,8h,4h,16b,8b
5158   if (0) test_trn1_2d_2d_2d(TyD);
5159   if (0) test_trn1_4s_4s_4s(TyS);
5160   if (0) test_trn1_2s_2s_2s(TyS);
5161   if (0) test_trn1_8h_8h_8h(TyH);
5162   if (0) test_trn1_4h_4h_4h(TyH);
5163   if (0) test_trn1_16b_16b_16b(TyB);
5164   if (0) test_trn1_8b_8b_8b(TyB);
5165   if (0) test_trn2_2d_2d_2d(TyD);
5166   if (0) test_trn2_4s_4s_4s(TyS);
5167   if (0) test_trn2_2s_2s_2s(TyS);
5168   if (0) test_trn2_8h_8h_8h(TyH);
5169   if (0) test_trn2_4h_4h_4h(TyH);
5170   if (0) test_trn2_16b_16b_16b(TyB);
5171   if (0) test_trn2_8b_8b_8b(TyB);
5172
5173   // urecpe      4s,2s
5174   // ursqrte     4s,2s
5175   if (0) test_urecpe_4s_4s(TyS);
5176   if (0) test_urecpe_2s_2s(TyS);
5177   if (0) test_ursqrte_4s_4s(TyS);
5178   if (0) test_ursqrte_2s_2s(TyS);
5179
5180   // uzp1      2d,4s,2s,8h,4h,16b,8b
5181   // uzp2      2d,4s,2s,8h,4h,16b,8b
5182   // zip1      2d,4s,2s,8h,4h,16b,8b
5183   // zip2      2d,4s,2s,8h,4h,16b,8b
5184   if (0) test_uzp1_2d_2d_2d(TyD);
5185   if (0) test_uzp1_4s_4s_4s(TyS);
5186   if (0) test_uzp1_2s_2s_2s(TyS);
5187   if (0) test_uzp1_8h_8h_8h(TyH);
5188   if (0) test_uzp1_4h_4h_4h(TyH);
5189   if (0) test_uzp1_16b_16b_16b(TyB);
5190   if (0) test_uzp1_8b_8b_8b(TyB);
5191   if (0) test_uzp2_2d_2d_2d(TyD);
5192   if (0) test_uzp2_4s_4s_4s(TyS);
5193   if (0) test_uzp2_2s_2s_2s(TyS);
5194   if (0) test_uzp2_8h_8h_8h(TyH);
5195   if (0) test_uzp2_4h_4h_4h(TyH);
5196   if (0) test_uzp2_16b_16b_16b(TyB);
5197   if (0) test_uzp2_8b_8b_8b(TyB);
5198   if (0) test_zip1_2d_2d_2d(TyD);
5199   if (0) test_zip1_4s_4s_4s(TyS);
5200   if (0) test_zip1_2s_2s_2s(TyS);
5201   if (0) test_zip1_8h_8h_8h(TyH);
5202   if (0) test_zip1_4h_4h_4h(TyH);
5203   if (0) test_zip1_16b_16b_16b(TyB);
5204   if (0) test_zip1_8b_8b_8b(TyB);
5205   if (0) test_zip2_2d_2d_2d(TyD);
5206   if (0) test_zip2_4s_4s_4s(TyS);
5207   if (0) test_zip2_2s_2s_2s(TyS);
5208   if (0) test_zip2_8h_8h_8h(TyH);
5209   if (0) test_zip2_4h_4h_4h(TyH);
5210   if (0) test_zip2_16b_16b_16b(TyB);
5211   if (0) test_zip2_8b_8b_8b(TyB);
5212
5213   // xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
5214   if (1) test_xtn_2s_2d(TyD);
5215   if (1) test_xtn2_4s_2d(TyD);
5216   if (1) test_xtn_4h_4s(TyS);
5217   if (1) test_xtn2_8h_4s(TyS);
5218   if (1) test_xtn_8b_8h(TyH);
5219   if (1) test_xtn2_16b_8h(TyH);
5220
5221   // ======================== MEM ========================
5222
5223   // ld1  (multiple 1-element structures to 1/2/3/4 regs)
5224   // ld1  (single 1-element structure to one lane of 1 reg)
5225   // ld1r (single 1-element structure and rep to all lanes of 1 reg)
5226
5227   // ld2  (multiple 2-element structures to 2 regs)
5228   // ld2  (single 2-element structure to one lane of 2 regs)
5229   // ld2r (single 2-element structure and rep to all lanes of 2 regs)
5230
5231   // ld3  (multiple 3-element structures to 3 regs)
5232   // ld3  (single 3-element structure to one lane of 3 regs)
5233   // ld3r (single 3-element structure and rep to all lanes of 3 regs)
5234
5235   // ld4  (multiple 4-element structures to 4 regs)
5236   // ld4  (single 4-element structure to one lane of 4 regs)
5237   // ld4r (single 4-element structure and rep to all lanes of 4 regs)
5238
5239   // ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
5240   //       addr = reg + uimm7 * reg_size
5241
5242   // ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
5243   //       addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
5244
5245   // ldr   q,d,s,h,b from addr
5246   //       addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
5247
5248   // ldr   q,d,s from  pc+#imm19
5249
5250   // ldr   q,d,s,h,b from addr
5251   //       addr = [Xn|SP, R <extend> <shift]
5252
5253   // ldur  q,d,s,h,b from addr
5254   //       addr = [Xn|SP,#imm] (unscaled offset)
5255
5256   // st1 (multiple 1-element structures from 1/2/3/4 regs)
5257   // st1 (single 1-element structure for 1 lane of 1 reg)
5258
5259   // st2 (multiple 2-element structures from 2 regs)
5260   // st2 (single 2-element structure from 1 lane of 2 regs)
5261
5262   // st3 (multiple 3-element structures from 3 regs)
5263   // st3 (single 3-element structure from 1 lane of 3 regs)
5264
5265   // st4 (multiple 4-element structures from 4 regs)
5266   // st4 (single 4-element structure from one lane of 4 regs)
5267
5268   // stnp q_q_addr, d_d_addr, s_s_addr
5269   //      addr = [Xn|SP, #imm]
5270
5271   // stp  q_q_addr, d_d_addr, s_s_addr
5272   //      addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
5273
5274   // str  q,d,s,h,b_addr
5275   //      addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
5276
5277   // str   q,d,s,h,b_addr
5278   //       addr = [Xn|SP, R <extend> <shift]
5279
5280   // stur  q,d,s,h,b_addr
5281   //       addr = [Xn|SP,#imm] (unscaled offset)
5282
5283   // ======================== CRYPTO ========================
5284
5285   // aesd       16b (aes single round decryption)
5286   // aese       16b (aes single round encryption)
5287   // aesimc     16b (aes inverse mix columns)
5288   // aesmc      16b (aes mix columns)
5289
5290   // sha1c      q_s_4s
5291   // sha1h      s_s
5292   // sha1m      q_s_4s
5293   // sha1p      q_s_4s
5294   // sha1su0    4s_4s_4s
5295   // sha1su1    4s_4s
5296
5297   // sha256h2   q_q_4s
5298   // sha256h    q_q_4s
5299   // sha256su0  4s_4s
5300   // sha256su1  4s_4s_4s
5301
5302   return 0;
5303}
5304
5305
5306/* ---------------------------------------------------------------- */
5307/* -- Alphabetical list of insns                                 -- */
5308/* ---------------------------------------------------------------- */
5309/*
5310   abs      d
5311   abs      2d,4s,2s,8h,4h,16b,8b
5312   add      d
5313   add      2d,4s,2s,8h,4h,16b,8b
5314   addhn    2s.2d.2d, 4s.2d.2d, h_from_s and b_from_h (add and get high half)
5315   addp     d (add pairs, across)
5316   addp     2d,4s,2s,8h,4h,16b,8b
5317   addv     4s,8h,4h,16b,18b (reduce across vector)
5318   aesd     16b (aes single round decryption)
5319   aese     16b (aes single round encryption)
5320   aesimc   16b (aes inverse mix columns)
5321   aesmc    16b (aes mix columns)
5322   and      16b,8b
5323
5324   bic      4s,2s,8h,4h (vector, imm)
5325   also movi, mvni, orr
5326
5327   bic      16b,8b (vector,reg) (bit clear)
5328   bif      16b,8b (vector) (bit insert if false)
5329   bit      16b,8b (vector) (bit insert if true)
5330   bsl      16b,8b (vector) (bit select)
5331
5332   cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
5333   clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
5334
5335   cmeq     d
5336   cmeq     2d,4s,2s,8h,4h,16b,8b
5337   cmeq_z   d
5338   cmeq_z   2d,4s,2s,8h,4h,16b,8b
5339
5340   cmge     d
5341   cmge     2d,4s,2s,8h,4h,16b,8b
5342   cmge_z   d
5343   cmge_z   2d,4s,2s,8h,4h,16b,8b
5344
5345   cmgt     d
5346   cmgt     2d,4s,2s,8h,4h,16b,8b
5347   cmgt_z   d
5348   cmgt_z   2d,4s,2s,8h,4h,16b,8b
5349
5350   cmhi     d
5351   cmhi     2d,4s,2s,8h,4h,16b,8b
5352
5353   cmhs     d
5354   cmhs     2d,4s,2s,8h,4h,16b,8b
5355
5356   cmle_z   d
5357   cmle_z   2d,4s,2s,8h,4h,16b,8b
5358
5359   cmlt_z   d
5360   cmlt_z   2d,4s,2s,8h,4h,16b,8b
5361
5362   cmtst    d
5363   cmtst    2d,4s,2s,8h,4h,16b,8b
5364
5365   cnt      16b,8b (population count per byte)
5366
5367   dup      d,s,h,b (vec elem to scalar)
5368   dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
5369   dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
5370
5371   eor      16b,8b (vector)
5372   ext      16b,8b,#imm4 (concat 2 vectors, then slice)
5373
5374   fabd     d,s
5375   fabd     2d,4s,2s
5376
5377   fabs     d,s
5378   fabs     2d,4s,2s
5379
5380   facge    s,d  (floating abs compare GE)
5381   facge    2d,4s,2s
5382
5383   facgt    s,d  (floating abs compare GE)
5384   facgt    2d,4s,2s
5385
5386   fadd     d,s
5387   fadd     2d,4s,2s
5388
5389   faddp    d,s (floating add pair)
5390   faddp    2d,4s,2s
5391
5392   fccmp    d,s (floating point conditional quiet compare)
5393   fccmpe   d,s (floating point conditional signaling compare)
5394
5395   fcmeq    d,s
5396   fcmeq    2d,4s,2s
5397   fcmeq_z  d,s
5398   fcmeq_z  2d,4s,2s
5399
5400   fcmge    d,s
5401   fcmge    2d,4s,2s
5402   fcmge_z  d,s
5403   fcmge_z  2d,4s,2s
5404
5405   fcmgt    d,s
5406   fcmgt    2d,4s,2s
5407   fcmgt_z  d,s
5408   fcmgt_z  2d,4s,2s
5409
5410   fcmle_z  d,s
5411   fcmle_z  2d,4s,2s
5412
5413   fcmlt_z  d,s
5414   fcmlt_z  2d,4s,2s
5415
5416   fcmp     d,s (floating point quiet, set flags)
5417   fcmp_z   d,s
5418   fcmpe    d,s (floating point signaling, set flags)
5419   fcmpe_z  d,s
5420
5421   fcsel    d,s (fp cond select)
5422
5423   fcvt     s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
5424
5425   fcvtas   d,s  (fcvt to signed int, nearest, ties away)
5426   fcvtas   2d,4s,2s
5427   fcvtas   w_s,x_s,w_d,x_d
5428
5429   fcvtau   d,s  (fcvt to unsigned int, nearest, ties away)
5430   fcvtau   2d,4s,2s
5431   fcvtau   w_s,x_s,w_d,x_d
5432
5433   fcvtl{2} 4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
5434
5435   fcvtms   d,s  (fcvt to signed int, minus inf)
5436   fcvtms   2d,4s,2s
5437   fcvtms   w_s,x_s,w_d,x_d
5438
5439   fcvtmu   d,s  (fcvt to unsigned int, minus inf)
5440   fcvtmu   2d,4s,2s
5441   fcvtmu   w_s,x_s,w_d,x_d
5442
5443   fcvtn{2} 4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
5444
5445   fcvtns   d,s  (fcvt to signed int, nearest)
5446   fcvtns   2d,4s,2s
5447   fcvtns   w_s,x_s,w_d,x_d
5448
5449   fcvtnu   d,s  (fcvt to unsigned int, nearest)
5450   fcvtnu   2d,4s,2s
5451   fcvtnu   w_s,x_s,w_d,x_d
5452
5453   fcvtps   d,s  (fcvt to signed int, plus inf)
5454   fcvtps   2d,4s,2s
5455   fcvtps   w_s,x_s,w_d,x_d
5456
5457   fcvtpu   d,s  (fcvt to unsigned int, plus inf)
5458   fcvtpu   2d,4s,2s
5459   fcvtpu   w_s,x_s,w_d,x_d
5460
5461   fcvtxn   s_d (fcvt to lower prec narrow, rounding to odd)
5462   fcvtxn   2s_2d,4s_2d
5463
5464   fcvtzs   s,d (fcvt to signed fixedpt, to zero) (w/ #fbits)
5465   fcvtzs   2d,4s,2s
5466
5467   fcvtzs   s,d (fcvt to signed integer, to zero)
5468   fcvtzs   2d,4s,2s
5469
5470   fcvtzs   w_s,x_s,w_d,x_d (fcvt to signed fixedpt, to zero) (w/ #fbits)
5471
5472   fcvtzs   w_s,x_s,w_d,x_d (fcvt to signed integer, to zero)
5473
5474   fcvtzu   s,d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
5475   fcvtzu   2d,4s,2s
5476
5477   fcvtzu   s,d (fcvt to unsigned integer, to zero)
5478   fcvtzu   2d,4s,2s
5479
5480   fcvtzu   w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
5481
5482   fcvtzu   w_s,x_s,w_d,x_d (fcvt to unsigned integer, to zero)
5483
5484   fdiv     d,s
5485   fdiv     2d,4s,2s
5486
5487   fmadd    d,s
5488   fnmadd   d,s
5489   fnmsub   d,s
5490   fnmul    d,s
5491
5492   fmax     d,s
5493   fmin     d,s
5494
5495   fmax     2d,4s,2s
5496   fmin     2d,4s,2s
5497
5498   fmaxnm   d,s ("max number")
5499   fminnm   d,s
5500
5501   fmaxnm   2d,4s,2s
5502   fminnm   2d,4s,2s
5503
5504   fmaxnmp  d_2d,s_2s ("max number pairwise")
5505   fminnmp  d_2d,s_2s
5506
5507   fmaxnmp  2d,4s,2s
5508   fminnmp  2d,4s,2s
5509
5510   fmaxnmv  s_4s (maxnum across vector)
5511   fminnmv  s_4s
5512
5513   fmaxp    d_2d,s_2s (max of a pair)
5514   fminp    d_2d,s_2s (max of a pair)
5515
5516   fmaxp    2d,4s,2s  (max pairwise)
5517   fminp    2d,4s,2s
5518
5519   fmaxv    s_4s (max across vector)
5520   fminv    s_4s
5521
5522   fmla     d_d_d[],s_s_s[] (by element)
5523   fmla     2d_2d_d[],4s_4s_s[],2s_2s_s[]
5524
5525   fmla     2d,4s,2s
5526
5527   fmls     d_d_d[],s_s_s[] (by element)
5528   fmls     2d_2d_d[],4s_4s_s[],2s_2s_s[]
5529
5530   fmls     2d,4s,2s
5531
5532   fmov     2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
5533
5534   fmov     d_d,s_s
5535
5536   fmov     s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
5537
5538   fmov     d,s #imm
5539
5540   fmsub    d,s
5541
5542   fmul     d_d_d[],s_s_s[]
5543   fmul     2d_2d_d[],4s_4s_s[],2s_2s_s[]
5544
5545   fmul     2d,4s,2s
5546   fmul     d,s
5547
5548   fmulx    d_d_d[],s_s_s[]
5549   fmulx    2d_2d_d[],4s_4s_s[],2s_2s_s[]
5550
5551   fmulx    d,s
5552   fmulx    2d,4s,2s
5553
5554   fneg     d,s
5555   fneg     2d,4s,2s
5556
5557   frecpe   d,s (recip estimate)
5558   frecpe   2d,4s,2s
5559
5560   frecps   d,s (recip step)
5561   frecps   2d,4s,2s
5562
5563   frecpx   d,s (recip exponent)
5564
5565   frinta   2d,4s,2s (round to integral, nearest away)
5566   frinta   d,s
5567
5568   frinti   2d,4s,2s (round to integral, per FPCR)
5569   frinti   d,s
5570
5571   frintm   2d,4s,2s (round to integral, minus inf)
5572   frintm   d,s
5573
5574   frintn   2d,4s,2s (round to integral, nearest, to even)
5575   frintn   d,s
5576
5577   frintp   2d,4s,2s (round to integral, plus inf)
5578   frintp   d,s
5579
5580   frintx   2d,4s,2s (round to integral exact, per FPCR)
5581   frintx   d,s
5582
5583   frintz   2d,4s,2s (round to integral, zero)
5584   frintz   d,s
5585
5586   frsqrte  d,s (est)
5587   frsqrte  2d,4s,2s
5588
5589   frsqrts  d,s (step)
5590   frsqrts  2d,4s,2s
5591
5592   fsqrt    d,s
5593   fsqrt    2d,4s,2s
5594
5595   fsub     d,s
5596   fsub     2d,4s,2s
5597
5598   ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
5599
5600   ins      d[]_x, s[]_w, h[]_w, b[]_w
5601
5602   ld1  (multiple 1-element structures to 1/2/3/4 regs)
5603   ld1  (single 1-element structure to one lane of 1 reg)
5604   ld1r (single 1-element structure and rep to all lanes of 1 reg)
5605
5606   ld2  (multiple 2-element structures to 2 regs)
5607   ld2  (single 2-element structure to one lane of 2 regs)
5608   ld2r (single 2-element structure and rep to all lanes of 2 regs)
5609
5610   ld3  (multiple 3-element structures to 3 regs)
5611   ld3  (single 3-element structure to one lane of 3 regs)
5612   ld3r (single 3-element structure and rep to all lanes of 3 regs)
5613
5614   ld4  (multiple 4-element structures to 4 regs)
5615   ld4  (single 4-element structure to one lane of 4 regs)
5616   ld4r (single 4-element structure and rep to all lanes of 4 regs)
5617
5618   ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
5619         addr = reg + uimm7 * reg_size
5620
5621   ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
5622         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
5623
5624   ldr   q,d,s,h,b from addr
5625         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
5626
5627   ldr   q,d,s from  pc+#imm19
5628
5629   ldr   q,d,s,h,b from addr
5630         addr = [Xn|SP, R <extend> <shift]
5631
5632   ldur  q,d,s,h,b from addr
5633         addr = [Xn|SP,#imm] (unscaled offset)
5634
5635   mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5636   mla   4s,2s,8h,4h,16b,8b
5637
5638   mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5639   mls   4s,2s,8h,4h,16b,8b
5640
5641   movi  16b,8b   #imm8, LSL #0
5642   movi  8h,4h    #imm8, LSL #0 or 8
5643   movi  4s,2s    #imm8, LSL #0, 8, 16, 24
5644   movi  4s,2s    #imm8, MSL #8 or 16
5645   movi  d,       #imm64
5646   movi  2d,      #imm64
5647
5648   mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5649   mul   4s,2s,8h,4h,16b,8b
5650
5651   mvni  8h,4h    #imm8, LSL #0 or 8
5652   mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
5653   mvni  4s,2s    #imm8, MSL #8 or 16
5654
5655   neg   d
5656   neg   2d,4s,2s,8h,4h,16b,8b
5657
5658   not   16b,8b
5659
5660   orn   16b,8b
5661
5662   orr   8h,4h   #imm8, LSL #0 or 8
5663   orr   4s,2s   #imm8, LSL #0, 8, 16 or 24
5664
5665   orr   16b,8b
5666
5667   pmul  16b,8b
5668
5669   pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1d_2d_2d
5670
5671   raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5672
5673   rbit    16b,8b
5674   rev16   16b,8b
5675   rev32   16b,8b,8h,4h
5676   rev64   16b,8b,8h,4h,4s,2s
5677
5678   rshrn{2}  2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
5679
5680   rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5681
5682   saba      16b,8b,8h,4h,4s,2s
5683   sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5684
5685   sabd      16b,8b,8h,4h,4s,2s
5686   sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5687
5688   sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5689
5690   saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5691
5692   saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5693
5694   saddlv    h_16b/8b, s_8h/4h, d_4s
5695
5696   saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
5697
5698   scvtf     d,s        _#fbits
5699   scvtf     2d,4s,2s   _#fbits
5700
5701   scvtf     d,s
5702   scvtf     2d,4s,2s
5703
5704   scvtf     s_w, d_w, s_x, d_x,   _#fbits
5705   scvtf     s_w, d_w, s_x, d_x
5706
5707   sha1c       q_s_4s
5708   sha1h       s_s
5709   sha1m       q_s_4s
5710   sha1p       q_s_4s
5711   sha1su0     4s_4s_4s
5712   sha1su1     4s_4s
5713   sha256h2    q_q_4s
5714   sha256h     q_q_4s
5715   sha256su0   4s_4s
5716   sha256su1   4s_4s_4s
5717
5718   shadd       16b,8b,8h,4h,4s,2s
5719
5720   shl         d_#imm
5721   shl         16b,8b,8h,4h,4s,2s,2d  _#imm
5722
5723   shll{2}   8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
5724
5725   shrn{2}  2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
5726
5727   shsub       16b,8b,8h,4h,4s,2s
5728
5729   sli         d_#imm
5730   sli         2d,4s,2s,8h,4h,16b,8b  _#imm
5731
5732   smax        4s,2s,8h,4h,16b,8b
5733
5734   smaxp       4s,2s,8h,4h,16b,8b
5735
5736   smaxv       s_4s,h_8h,h_4h,b_16b,b_8b
5737
5738   smin        4s,2s,8h,4h,16b,8b
5739
5740   sminp       4s,2s,8h,4h,16b,8b
5741
5742   sminv       s_4s,h_8h,h_4h,b_16b,b_8b
5743
5744   smlal{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
5745   smlal{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5746
5747   smlsl{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
5748   smlsl{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5749
5750   smov        w_b[], w_h[], x_b[], x_h[], x_s[]
5751
5752   smull{2}    2d_2s/4s_s[]. 4s_4h/8h_h[]
5753   smull{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5754
5755   sqabs       d,s,h,b
5756   sqabs       2d,4s,2s,8h,4h,16b,8b
5757
5758   sqadd       d,s,h,b
5759   sqadd       2d,4s,2s,8h,4h,16b,8b
5760
5761   sqdmlal     d_s_s[], s_h_h[]
5762   sqdmlal{2}  2d_2s/4s_s[], 4s_4h/8h_h[]
5763
5764   sqdmlal     d_s_s, s_h_h
5765   sqdmlal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
5766
5767   sqdmlsl     d_s_s[], s_h_h[]
5768   sqdmlsl{2}  2d_2s/4s_s[], 4s_4h/8h_h[]
5769
5770   sqdmlsl     d_s_s, s_h_h
5771   sqdmlsl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
5772
5773   sqdmulh     s_s_s[], h_h_h[]
5774   sqdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
5775
5776   sqdmulh     h,s
5777   sqdmulh     4s,2s,8h,4h
5778
5779   sqdmull     d_s_s[], s_h_h[]
5780   sqdmull{2}  2d_2s/4s_s[], 4s_4h/2h_h[]
5781
5782   sqdmull     d_s_s,s_h_h
5783   sqdmull{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
5784
5785   sqneg       d,s,h,b
5786   sqneg       2d,4s,2s,8h,4h,16b,8b
5787
5788   sqrdmulh    s_s_s[], h_h_h[]
5789   sqrdmulh    4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
5790
5791   sqrdmulh    h,s
5792   sqrdmulh    4s,2s,8h,4h
5793
5794   sqrshl      d,s,h,b
5795   sqrshl      2d,4s,2s,8h,4h,16b,8b
5796
5797   sqrshrn     s_d, h_s, b_h   #imm
5798   sqrshrn{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5799
5800   sqrshrun     s_d, h_s, b_h   #imm
5801   sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5802
5803   sqshl        d,s,h,b   _#imm
5804   sqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
5805
5806   sqshl        d,s,h,b
5807   sqshl        2d,4s,2s,8h,4h,16b,8b
5808
5809   sqshlu       d,s,h,b  _#imm
5810   sqshlu       2d,4s,2s,8h,4h,16b,8b  _#imm
5811
5812   sqshrn       s_d, h_s, b_h   #imm
5813   sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5814
5815   sqshrun      s_d, h_s, b_h   #imm
5816   sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5817
5818   sqsub       d,s,h,b
5819   sqsub       2d,4s,2s,8h,4h,16b,8b
5820
5821   sqxtn       s_d,h_s,b_h
5822   sqxtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
5823
5824   sqxtun      s_d,h_s,b_h
5825   sqxtun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h
5826
5827   srhadd      4s,2s,8h,4h,16b,8b
5828
5829   sri         d_#imm
5830   sri         2d,4s,2s,8h,4h,16b,8b  _#imm
5831
5832   srshl (reg) d
5833   srshl       2d,4s,2s,8h,4h,16b,8b
5834
5835   srshr (imm) d
5836   srshr       2d,4s,2s,8h,4h,16b,8b
5837
5838   srsra (imm) d
5839   srsra       2d,4s,2s,8h,4h,16b,8b
5840
5841   sshl (reg)  d
5842   sshl        2d,4s,2s,8h,4h,16b,8b
5843
5844   sshll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
5845
5846   sshr (imm)  d
5847   sshr        2d,4s,2s,8h,4h,16b,8b
5848
5849   ssra (imm)  d
5850   ssra        2d,4s,2s,8h,4h,16b,8b
5851
5852   ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5853
5854   ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
5855
5856   st1 (multiple 1-element structures from 1/2/3/4 regs)
5857   st1 (single 1-element structure for 1 lane of 1 reg)
5858
5859   st2 (multiple 2-element structures from 2 regs)
5860   st2 (single 2-element structure from 1 lane of 2 regs)
5861
5862   st3 (multiple 3-element structures from 3 regs)
5863   st3 (single 3-element structure from 1 lane of 3 regs)
5864
5865   st4 (multiple 4-element structures from 4 regs)
5866   st4 (single 4-element structure from one lane of 4 regs)
5867
5868   stnp q_q_addr, d_d_addr, s_s_addr
5869        addr = [Xn|SP, #imm]
5870
5871   stp  q_q_addr, d_d_addr, s_s_addr
5872        addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
5873
5874   str  q,d,s,h,b_addr
5875        addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
5876
5877   str   q,d,s,h,b_addr
5878         addr = [Xn|SP, R <extend> <shift]
5879
5880   stur  q,d,s,h,b_addr
5881         addr = [Xn|SP,#imm] (unscaled offset)
5882
5883   sub   d
5884   sub   2d,4s,2s,8h,4h,16b,8b
5885
5886   subhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5887
5888   suqadd  d,s,h,b
5889   suqadd  2d,4s,2s,8h,4h,16b,8b
5890
5891   tbl     8b_{16b}_8b, 16b_{16b}_16b
5892   tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
5893   tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
5894   tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
5895
5896   tbx     8b_{16b}_8b, 16b_{16b}_16b
5897   tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
5898   tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
5899   tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
5900
5901   trn1    2d,4s,2s,8h,4h,16b,8b
5902   trn2    2d,4s,2s,8h,4h,16b,8b
5903
5904   uaba      16b,8b,8h,4h,4s,2s
5905   uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5906
5907   uabd      16b,8b,8h,4h,4s,2s
5908   uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5909
5910   uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5911
5912   uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5913
5914   uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5915
5916   uaddlv    h_16b/8b, s_8h/4h, d_4s
5917
5918   uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
5919
5920   ucvtf     d,s        _#fbits
5921   ucvtf     2d,4s,2s   _#fbits
5922
5923   ucvtf     d,s
5924   ucvtf     2d,4s,2s
5925
5926   ucvtf     s_w, d_w, s_x, d_x,   _#fbits
5927   ucvtf     s_w, d_w, s_x, d_x
5928
5929   uhadd       16b,8b,8h,4h,4s,2s
5930
5931   uhsub       16b,8b,8h,4h,4s,2s
5932
5933   umax        4s,2s,8h,4h,16b,8b
5934
5935   umaxp       4s,2s,8h,4h,16b,8b
5936
5937   umaxv       s_4s,h_8h,h_4h,b_16b,b_8b
5938
5939   umin        4s,2s,8h,4h,16b,8b
5940
5941   uminp       4s,2s,8h,4h,16b,8b
5942
5943   uminv       s_4s,h_8h,h_4h,b_16b,b_8b
5944
5945   umlal{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
5946   umlal{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5947
5948   umlsl{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
5949   umlsl{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5950
5951   umov        w_b[], w_h[], x_b[], x_h[], x_s[]
5952
5953   umull{2}    2d_2s/4s_s[]. 4s_4h/8h_h[]
5954   umull{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5955
5956   uqadd       d,s,h,b
5957   uqadd       2d,4s,2s,8h,4h,16b,8b
5958
5959   uqrshl      d,s,h,b
5960   uqrshl      2d,4s,2s,8h,4h,16b,8b
5961
5962   uqrshrn     s_d, h_s, b_h   #imm
5963   uqrshrn{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5964
5965   uqshl        d,s,h,b   _#imm
5966   uqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
5967
5968   uqshl        d,s,h,b
5969   uqshl        2d,4s,2s,8h,4h,16b,8b
5970
5971   uqshrn       s_d, h_s, b_h   #imm
5972   uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
5973
5974   uqsub       d,s,h,b
5975   uqsub       2d,4s,2s,8h,4h,16b,8b
5976
5977   uqxtn       s_d,h_s,b_h
5978   uqxtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
5979
5980   urecpe      4s,2s
5981
5982   urhadd      4s,2s,8h,4h,16b,8b
5983
5984   urshl (reg) d
5985   urshl       2d,4s,2s,8h,4h,16b,8b
5986
5987   urshr (imm) d
5988   urshr       2d,4s,2s,8h,4h,16b,8b
5989
5990   ursqrte     4s,2s
5991
5992   ursra (imm) d
5993   ursra       2d,4s,2s,8h,4h,16b,8b
5994
5995   ushl (reg)  d
5996   ushl        2d,4s,2s,8h,4h,16b,8b
5997
5998   ushll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
5999
6000   ushr (imm)  d
6001   ushr        2d,4s,2s,8h,4h,16b,8b
6002
6003   usqadd      d,s,h,b
6004   usqadd      2d,4s,2s,8h,4h,16b,8b
6005
6006   usra (imm)  d
6007   usra        2d,4s,2s,8h,4h,16b,8b
6008
6009   usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6010
6011   usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
6012
6013   uzp1      2d,4s,2s,8h,4h,16b,8b
6014   uzp2      2d,4s,2s,8h,4h,16b,8b
6015
6016   xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6017
6018   zip1      2d,4s,2s,8h,4h,16b,8b
6019   zip2      2d,4s,2s,8h,4h,16b,8b
6020*/
6021
6022
6023/* ---------------------------------------------------------------- */
6024/* -- List of insns, grouped somewhat by laneage configuration   -- */
6025/* ---------------------------------------------------------------- */
6026/*
6027   ======================== FP ========================
6028
6029   fabs      d,s
6030   fabs      2d,4s,2s
6031
6032   fneg      d,s
6033   fneg      2d,4s,2s
6034
6035   fsqrt     d,s
6036   fsqrt     2d,4s,2s
6037
6038   fadd      d,s
6039   fsub      d,s
6040
6041   fadd      2d,4s,2s
6042   fsub      2d,4s,2s
6043
6044   fabd      d,s
6045   fabd      2d,4s,2s
6046
6047   faddp     d,s (floating add pair)
6048   faddp     2d,4s,2s
6049
6050   fccmp     d,s (floating point conditional quiet compare)
6051   fccmpe    d,s (floating point conditional signaling compare)
6052
6053   fcmeq     d,s
6054   fcmge     d,s
6055   fcmgt     d,s
6056   facgt     d,s  (floating abs compare GE)
6057   facge     d,s  (floating abs compare GE)
6058
6059   fcmeq     2d,4s,2s
6060   fcmge     2d,4s,2s
6061   fcmgt     2d,4s,2s
6062   facge     2d,4s,2s
6063   facgt     2d,4s,2s
6064
6065   fcmeq_z   d,s
6066   fcmge_z   d,s
6067   fcmgt_z   d,s
6068   fcmle_z   d,s
6069   fcmlt_z   d,s
6070
6071   fcmeq_z   2d,4s,2s
6072   fcmge_z   2d,4s,2s
6073   fcmgt_z   2d,4s,2s
6074   fcmle_z   2d,4s,2s
6075   fcmlt_z   2d,4s,2s
6076
6077   fcmp_z    d,s
6078   fcmpe_z   d,s
6079   fcmp      d,s (floating point quiet, set flags)
6080   fcmpe     d,s (floating point signaling, set flags)
6081
6082   fcsel     d,s (fp cond select)
6083
6084   fdiv      d,s
6085   fdiv      2d,4s,2s
6086
6087   fmadd     d,s
6088   fnmadd    d,s
6089   fmsub     d,s
6090   fnmsub    d,s
6091
6092   fnmul     d,s
6093
6094   fmax      d,s
6095   fmin      d,s
6096   fmaxnm    d,s ("max number")
6097   fminnm    d,s
6098
6099   fmax      2d,4s,2s
6100   fmin      2d,4s,2s
6101   fmaxnm    2d,4s,2s
6102   fminnm    2d,4s,2s
6103
6104   fmaxnmp   d_2d,s_2s ("max number pairwise")
6105   fminnmp   d_2d,s_2s
6106
6107   fmaxnmp   2d,4s,2s
6108   fminnmp   2d,4s,2s
6109
6110   fmaxnmv   s_4s (maxnum across vector)
6111   fminnmv   s_4s
6112
6113   fmaxp     d_2d,s_2s (max of a pair)
6114   fminp     d_2d,s_2s (max of a pair)
6115
6116   fmaxp     2d,4s,2s  (max pairwise)
6117   fminp     2d,4s,2s
6118
6119   fmaxv     s_4s (max across vector)
6120   fminv     s_4s
6121
6122   fmla      2d,4s,2s
6123   fmls      2d,4s,2s
6124
6125   fmla      d_d_d[],s_s_s[] (by element)
6126   fmls      d_d_d[],s_s_s[] (by element)
6127
6128   fmla      2d_2d_d[],4s_4s_s[],2s_2s_s[]
6129   fmls      2d_2d_d[],4s_4s_s[],2s_2s_s[]
6130
6131   fmov      2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
6132
6133   fmov      d_d,s_s
6134
6135   fmov      s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
6136
6137   fmov      d,s #imm
6138
6139   fmul      d_d_d[],s_s_s[]
6140   fmul      2d_2d_d[],4s_4s_s[],2s_2s_s[]
6141
6142   fmul      2d,4s,2s
6143   fmul      d,s
6144
6145   fmulx     d_d_d[],s_s_s[]
6146   fmulx     2d_2d_d[],4s_4s_s[],2s_2s_s[]
6147
6148   fmulx     d,s
6149   fmulx     2d,4s,2s
6150
6151   frecpe    d,s (recip estimate)
6152   frecpe    2d,4s,2s
6153
6154   frecps    d,s (recip step)
6155   frecps    2d,4s,2s
6156
6157   frecpx    d,s (recip exponent)
6158
6159   frinta    d,s
6160   frinti    d,s
6161   frintm    d,s
6162   frintn    d,s
6163   frintp    d,s
6164   frintx    d,s
6165   frintz    d,s
6166
6167   frinta    2d,4s,2s (round to integral, nearest away)
6168   frinti    2d,4s,2s (round to integral, per FPCR)
6169   frintm    2d,4s,2s (round to integral, minus inf)
6170   frintn    2d,4s,2s (round to integral, nearest, to even)
6171   frintp    2d,4s,2s (round to integral, plus inf)
6172   frintx    2d,4s,2s (round to integral exact, per FPCR)
6173   frintz    2d,4s,2s (round to integral, zero)
6174
6175   frsqrte   d,s (est)
6176   frsqrte   2d,4s,2s
6177
6178   frsqrts   d,s (step)
6179   frsqrts   2d,4s,2s
6180
6181   ======================== CONV ========================
6182
6183   fcvt      s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
6184
6185   fcvtl{2}  4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
6186
6187   fcvtn{2}  4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
6188
6189   fcvtas    d,s  (fcvt to signed int,   nearest, ties away)
6190   fcvtau    d,s  (fcvt to unsigned int, nearest, ties away)
6191   fcvtas    2d,4s,2s
6192   fcvtau    2d,4s,2s
6193   fcvtas    w_s,x_s,w_d,x_d
6194   fcvtau    w_s,x_s,w_d,x_d
6195
6196   fcvtms    d,s  (fcvt to signed int,   minus inf)
6197   fcvtmu    d,s  (fcvt to unsigned int, minus inf)
6198   fcvtms    2d,4s,2s
6199   fcvtmu    2d,4s,2s
6200   fcvtms    w_s,x_s,w_d,x_d
6201   fcvtmu    w_s,x_s,w_d,x_d
6202
6203   fcvtns    d,s  (fcvt to signed int,   nearest)
6204   fcvtnu    d,s  (fcvt to unsigned int, nearest)
6205   fcvtns    2d,4s,2s
6206   fcvtnu    2d,4s,2s
6207   fcvtns    w_s,x_s,w_d,x_d
6208   fcvtnu    w_s,x_s,w_d,x_d
6209
6210   fcvtps    d,s  (fcvt to signed int,   plus inf)
6211   fcvtpu    d,s  (fcvt to unsigned int, plus inf)
6212   fcvtps    2d,4s,2s
6213   fcvtpu    2d,4s,2s
6214   fcvtps    w_s,x_s,w_d,x_d
6215   fcvtpu    w_s,x_s,w_d,x_d
6216
6217   fcvtzs    d,s (fcvt to signed integer,   to zero)
6218   fcvtzu    d,s (fcvt to unsigned integer, to zero)
6219   fcvtzs    2d,4s,2s
6220   fcvtzu    2d,4s,2s
6221   fcvtzs    w_s,x_s,w_d,x_d
6222   fcvtzu    w_s,x_s,w_d,x_d
6223
6224   fcvtzs    d,s (fcvt to signed fixedpt,   to zero) (w/ #fbits)
6225   fcvtzu    d,s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
6226   fcvtzs    2d,4s,2s
6227   fcvtzu    2d,4s,2s
6228   fcvtzs    w_s,x_s,w_d,x_d (fcvt to signed fixedpt,   to zero) (w/ #fbits)
6229   fcvtzu    w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
6230
6231   fcvtxn    s_d (fcvt to lower prec narrow, rounding to odd)
6232   fcvtxn    2s_2d,4s_2d
6233
6234   scvtf     d,s        _#fbits
6235   ucvtf     d,s        _#fbits
6236
6237   scvtf     2d,4s,2s   _#fbits
6238   ucvtf     2d,4s,2s   _#fbits
6239
6240   scvtf     d,s
6241   ucvtf     d,s
6242
6243   scvtf     2d,4s,2s
6244   ucvtf     2d,4s,2s
6245
6246   scvtf     s_w, d_w, s_x, d_x,   _#fbits
6247   ucvtf     s_w, d_w, s_x, d_x,   _#fbits
6248
6249   scvtf     s_w, d_w, s_x, d_x
6250   ucvtf     s_w, d_w, s_x, d_x
6251
6252   ======================== INT ========================
6253
6254   abs       d
6255   neg       d
6256
6257   abs       2d,4s,2s,8h,4h,16b,8b
6258   neg       2d,4s,2s,8h,4h,16b,8b
6259
6260   add       d
6261   sub       d
6262
6263   add       2d,4s,2s,8h,4h,16b,8b
6264   sub       2d,4s,2s,8h,4h,16b,8b
6265
6266   addhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
6267   subhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
6268   raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
6269   rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
6270
6271   addp     d (add pairs, across)
6272   addp     2d,4s,2s,8h,4h,16b,8b
6273   addv     4s,8h,4h,16b,18b (reduce across vector)
6274
6275   and      16b,8b
6276
6277   orr      8h,4h   #imm8, LSL #0 or 8
6278   orr      4s,2s   #imm8, LSL #0, 8, 16 or 24
6279   bic      8h,4h   #imm8, LSL #0 or 8
6280   bic      4s,2s   #imm8, LSL #0, 8, 16 or 24
6281   also movi, mvni
6282
6283   bic      16b,8b (vector,reg) (bit clear)
6284   bif      16b,8b (vector) (bit insert if false)
6285   bit      16b,8b (vector) (bit insert if true)
6286   bsl      16b,8b (vector) (bit select)
6287
6288   cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
6289   clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
6290
6291   cmeq     d
6292   cmge     d
6293   cmgt     d
6294   cmhi     d
6295   cmhs     d
6296   cmtst    d
6297
6298   cmeq     2d,4s,2s,8h,4h,16b,8b
6299   cmge     2d,4s,2s,8h,4h,16b,8b
6300   cmgt     2d,4s,2s,8h,4h,16b,8b
6301   cmhi     2d,4s,2s,8h,4h,16b,8b
6302   cmhs     2d,4s,2s,8h,4h,16b,8b
6303   cmtst    2d,4s,2s,8h,4h,16b,8b
6304
6305   cmeq_z   d
6306   cmge_z   d
6307   cmgt_z   d
6308   cmle_z   d
6309   cmlt_z   d
6310
6311   cmeq_z   2d,4s,2s,8h,4h,16b,8b
6312   cmge_z   2d,4s,2s,8h,4h,16b,8b
6313   cmgt_z   2d,4s,2s,8h,4h,16b,8b
6314   cmle_z   2d,4s,2s,8h,4h,16b,8b
6315   cmlt_z   2d,4s,2s,8h,4h,16b,8b
6316
6317   cnt      16b,8b (population count per byte)
6318
6319   dup      d,s,h,b (vec elem to scalar)
6320   dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
6321   dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
6322
6323   eor      16b,8b (vector)
6324   ext      16b,8b,#imm4 (concat 2 vectors, then slice)
6325
6326   ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
6327
6328   ins      d[]_x, s[]_w, h[]_w, b[]_w
6329
6330   mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
6331   mla   4s,2s,8h,4h,16b,8b
6332
6333   mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
6334   mls   4s,2s,8h,4h,16b,8b
6335
6336   movi  16b,8b   #imm8, LSL #0
6337   movi  8h,4h    #imm8, LSL #0 or 8
6338   movi  4s,2s    #imm8, LSL #0, 8, 16, 24
6339   movi  4s,2s    #imm8, MSL #8 or 16
6340   movi  d,       #imm64
6341   movi  2d,      #imm64
6342
6343   mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
6344   mul   4s,2s,8h,4h,16b,8b
6345
6346   mvni  8h,4h    #imm8, LSL #0 or 8
6347   mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
6348   mvni  4s,2s    #imm8, MSL #8 or 16
6349
6350   not   16b,8b
6351
6352   orn   16b,8b
6353   orr   16b,8b
6354
6355   pmul  16b,8b
6356
6357   pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1d_2d_2d
6358
6359   rbit    16b,8b
6360   rev16   16b,8b
6361   rev32   16b,8b,8h,4h
6362   rev64   16b,8b,8h,4h,4s,2s
6363
6364   saba      16b,8b,8h,4h,4s,2s
6365   uaba      16b,8b,8h,4h,4s,2s
6366
6367   sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6368   uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6369
6370   sabd      16b,8b,8h,4h,4s,2s
6371   uabd      16b,8b,8h,4h,4s,2s
6372
6373   sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6374   uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6375
6376   sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
6377   uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
6378
6379   saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6380   uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6381   ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6382   usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6383
6384   saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
6385   uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
6386
6387   saddlv    h_16b/8b, s_8h/4h, d_4s
6388   uaddlv    h_16b/8b, s_8h/4h, d_4s
6389
6390   saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
6391   uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
6392   ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
6393   usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
6394
6395   shadd        16b,8b,8h,4h,4s,2s
6396   uhadd        16b,8b,8h,4h,4s,2s
6397   shsub        16b,8b,8h,4h,4s,2s
6398   uhsub        16b,8b,8h,4h,4s,2s
6399
6400   shl          d_#imm
6401   shl          16b,8b,8h,4h,4s,2s,2d  _#imm
6402
6403   shll{2}      8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
6404
6405   shrn{2}      2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
6406   rshrn{2}     2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
6407
6408   sli          d_#imm
6409   sri          d_#imm
6410
6411   sli          2d,4s,2s,8h,4h,16b,8b  _#imm
6412   sri          2d,4s,2s,8h,4h,16b,8b  _#imm
6413
6414   smax         4s,2s,8h,4h,16b,8b
6415   umax         4s,2s,8h,4h,16b,8b
6416   smin         4s,2s,8h,4h,16b,8b
6417   umin         4s,2s,8h,4h,16b,8b
6418
6419   smaxp        4s,2s,8h,4h,16b,8b
6420   umaxp        4s,2s,8h,4h,16b,8b
6421   sminp        4s,2s,8h,4h,16b,8b
6422   uminp        4s,2s,8h,4h,16b,8b
6423
6424   smaxv        s_4s,h_8h,h_4h,b_16b,b_8b
6425   umaxv        s_4s,h_8h,h_4h,b_16b,b_8b
6426   sminv        s_4s,h_8h,h_4h,b_16b,b_8b
6427   uminv        s_4s,h_8h,h_4h,b_16b,b_8b
6428
6429   smlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6430   umlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6431   smlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6432   umlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6433   smull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
6434   umull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
6435
6436   smlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6437   umlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6438   smlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6439   umlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6440   smull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6441   umull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6442
6443   smov         w_b[], w_h[], x_b[], x_h[], x_s[]
6444   umov         w_b[], w_h[], x_b[], x_h[], x_s[]
6445
6446   sqabs        d,s,h,b
6447   sqneg        d,s,h,b
6448
6449   sqabs        2d,4s,2s,8h,4h,16b,8b
6450   sqneg        2d,4s,2s,8h,4h,16b,8b
6451
6452   sqadd        d,s,h,b
6453   uqadd        d,s,h,b
6454   sqsub        d,s,h,b
6455   uqsub        d,s,h,b
6456
6457   sqadd        2d,4s,2s,8h,4h,16b,8b
6458   uqadd        2d,4s,2s,8h,4h,16b,8b
6459   sqsub        2d,4s,2s,8h,4h,16b,8b
6460   uqsub        2d,4s,2s,8h,4h,16b,8b
6461
6462   sqdmlal      d_s_s[], s_h_h[]
6463   sqdmlsl      d_s_s[], s_h_h[]
6464   sqdmull      d_s_s[], s_h_h[]
6465
6466   sqdmlal{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
6467   sqdmlsl{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
6468   sqdmull{2}   2d_2s/4s_s[], 4s_4h/2h_h[]
6469
6470   sqdmlal      d_s_s, s_h_h
6471   sqdmlsl      d_s_s, s_h_h
6472   sqdmull      d_s_s, s_h_h
6473
6474   sqdmlal{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6475   sqdmlsl{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6476   sqdmull{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6477
6478   sqdmulh      s_s_s[], h_h_h[]
6479   sqrdmulh     s_s_s[], h_h_h[]
6480
6481   sqdmulh      4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
6482   sqrdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
6483
6484   sqdmulh      h,s
6485   sqrdmulh     h,s
6486
6487   sqdmulh      4s,2s,8h,4h
6488   sqrdmulh     4s,2s,8h,4h
6489
6490   sqshl        d,s,h,b
6491   uqshl        d,s,h,b
6492   sqrshl       d,s,h,b
6493   uqrshl       d,s,h,b
6494
6495   sqshl        2d,4s,2s,8h,4h,16b,8b
6496   uqshl        2d,4s,2s,8h,4h,16b,8b
6497   sqrshl       2d,4s,2s,8h,4h,16b,8b
6498   uqrshl       2d,4s,2s,8h,4h,16b,8b
6499
6500   sqrshrn      s_d, h_s, b_h   #imm
6501   uqrshrn      s_d, h_s, b_h   #imm
6502   sqshrn       s_d, h_s, b_h   #imm
6503   uqshrn       s_d, h_s, b_h   #imm
6504
6505   sqrshrun     s_d, h_s, b_h   #imm
6506   sqshrun      s_d, h_s, b_h   #imm
6507
6508   sqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6509   uqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6510   sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6511   uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6512
6513   sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6514   sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6515
6516   sqshl        d,s,h,b   _#imm
6517   uqshl        d,s,h,b   _#imm
6518   sqshlu       d,s,h,b   _#imm
6519
6520   sqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
6521   uqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
6522   sqshlu       2d,4s,2s,8h,4h,16b,8b   _#imm
6523
6524   sqxtn        s_d,h_s,b_h
6525   uqxtn        s_d,h_s,b_h
6526   sqxtun       s_d,h_s,b_h
6527
6528   sqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6529   uqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6530   sqxtun{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6531
6532   srhadd       4s,2s,8h,4h,16b,8b
6533   urhadd       4s,2s,8h,4h,16b,8b
6534
6535   sshl (reg)   d
6536   ushl (reg)   d
6537   sshr (imm)   d
6538   ushr (imm)   d
6539   ssra (imm)   d
6540   usra (imm)   d
6541
6542   srshl (reg)  d
6543   urshl (reg)  d
6544   srshr (imm)  d
6545   urshr (imm)  d
6546   srsra (imm)  d
6547   ursra (imm)  d
6548
6549   sshl         2d,4s,2s,8h,4h,16b,8b
6550   ushl         2d,4s,2s,8h,4h,16b,8b
6551   sshr         2d,4s,2s,8h,4h,16b,8b
6552   ushr         2d,4s,2s,8h,4h,16b,8b
6553   ssra         2d,4s,2s,8h,4h,16b,8b
6554   usra         2d,4s,2s,8h,4h,16b,8b
6555
6556   srshl        2d,4s,2s,8h,4h,16b,8b
6557   urshl        2d,4s,2s,8h,4h,16b,8b
6558   srshr        2d,4s,2s,8h,4h,16b,8b
6559   urshr        2d,4s,2s,8h,4h,16b,8b
6560   srsra        2d,4s,2s,8h,4h,16b,8b
6561   ursra        2d,4s,2s,8h,4h,16b,8b
6562
6563   sshll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
6564   ushll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
6565
6566   suqadd  d,s,h,b
6567   suqadd  2d,4s,2s,8h,4h,16b,8b
6568
6569   tbl     8b_{16b}_8b, 16b_{16b}_16b
6570   tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
6571   tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
6572   tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
6573
6574   tbx     8b_{16b}_8b, 16b_{16b}_16b
6575   tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
6576   tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
6577   tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
6578
6579   trn1    2d,4s,2s,8h,4h,16b,8b
6580   trn2    2d,4s,2s,8h,4h,16b,8b
6581
6582   urecpe      4s,2s
6583
6584   ursqrte     4s,2s
6585
6586   usqadd      d,s,h,b
6587   usqadd      2d,4s,2s,8h,4h,16b,8b
6588
6589   uzp1      2d,4s,2s,8h,4h,16b,8b
6590   uzp2      2d,4s,2s,8h,4h,16b,8b
6591
6592   xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6593
6594   zip1      2d,4s,2s,8h,4h,16b,8b
6595   zip2      2d,4s,2s,8h,4h,16b,8b
6596
6597   ======================== MEM ========================
6598
6599   ld1  (multiple 1-element structures to 1/2/3/4 regs)
6600   ld1  (single 1-element structure to one lane of 1 reg)
6601   ld1r (single 1-element structure and rep to all lanes of 1 reg)
6602
6603   ld2  (multiple 2-element structures to 2 regs)
6604   ld2  (single 2-element structure to one lane of 2 regs)
6605   ld2r (single 2-element structure and rep to all lanes of 2 regs)
6606
6607   ld3  (multiple 3-element structures to 3 regs)
6608   ld3  (single 3-element structure to one lane of 3 regs)
6609   ld3r (single 3-element structure and rep to all lanes of 3 regs)
6610
6611   ld4  (multiple 4-element structures to 4 regs)
6612   ld4  (single 4-element structure to one lane of 4 regs)
6613   ld4r (single 4-element structure and rep to all lanes of 4 regs)
6614
6615   ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
6616         addr = reg + uimm7 * reg_size
6617
6618   ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
6619         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
6620
6621   ldr   q,d,s,h,b from addr
6622         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
6623
6624   ldr   q,d,s from  pc+#imm19
6625
6626   ldr   q,d,s,h,b from addr
6627         addr = [Xn|SP, R <extend> <shift]
6628
6629   ldur  q,d,s,h,b from addr
6630         addr = [Xn|SP,#imm] (unscaled offset)
6631
6632   st1 (multiple 1-element structures from 1/2/3/4 regs)
6633   st1 (single 1-element structure for 1 lane of 1 reg)
6634
6635   st2 (multiple 2-element structures from 2 regs)
6636   st2 (single 2-element structure from 1 lane of 2 regs)
6637
6638   st3 (multiple 3-element structures from 3 regs)
6639   st3 (single 3-element structure from 1 lane of 3 regs)
6640
6641   st4 (multiple 4-element structures from 4 regs)
6642   st4 (single 4-element structure from one lane of 4 regs)
6643
6644   stnp q_q_addr, d_d_addr, s_s_addr
6645        addr = [Xn|SP, #imm]
6646
6647   stp  q_q_addr, d_d_addr, s_s_addr
6648        addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
6649
6650   str  q,d,s,h,b_addr
6651        addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
6652
6653   str   q,d,s,h,b_addr
6654         addr = [Xn|SP, R <extend> <shift]
6655
6656   stur  q,d,s,h,b_addr
6657         addr = [Xn|SP,#imm] (unscaled offset)
6658
6659   ======================== CRYPTO ========================
6660
6661   aesd       16b (aes single round decryption)
6662   aese       16b (aes single round encryption)
6663   aesimc     16b (aes inverse mix columns)
6664   aesmc      16b (aes mix columns)
6665
6666   sha1c      q_s_4s
6667   sha1h      s_s
6668   sha1m      q_s_4s
6669   sha1p      q_s_4s
6670   sha1su0    4s_4s_4s
6671   sha1su1    4s_4s
6672
6673   sha256h2   q_q_4s
6674   sha256h    q_q_4s
6675   sha256su0  4s_4s
6676   sha256su1  4s_4s_4s
6677*/
6678