1
2#include <stdio.h>
3#include <assert.h>
4#include <malloc.h>  // memalign
5#include <string.h>  // memset
6#include "tests/malloc.h"
7#include <math.h>    // isnormal
8
9typedef  unsigned char           UChar;
10typedef  unsigned short int      UShort;
11typedef  unsigned int            UInt;
12typedef  signed int              Int;
13typedef  unsigned char           UChar;
14typedef  unsigned long long int  ULong;
15typedef  signed long long int    Long;
16typedef  double                  Double;
17typedef  float                   Float;
18
19typedef  unsigned char           Bool;
20#define False ((Bool)0)
21#define True  ((Bool)1)
22
23
24#define ITERS 1
25
26typedef
27  enum { TyHF=1234, TySF, TyDF, TyB, TyH, TyS, TyD, TyNONE }
28  LaneTy;
29
30union _V128 {
31   UChar  u8[16];
32   UShort u16[8];
33   UInt   u32[4];
34   ULong  u64[2];
35   Float  f32[4];
36   Double f64[2];
37};
38typedef  union _V128   V128;
39
40static inline UChar randUChar ( void )
41{
42   static UInt seed = 80021;
43   seed = 1103515245 * seed + 12345;
44   return (seed >> 17) & 0xFF;
45}
46
47static ULong randULong ( LaneTy ty )
48{
49   Int i;
50   ULong r = 0;
51   for (i = 0; i < 8; i++) {
52      r = (r << 8) | (ULong)(0xFF & randUChar());
53   }
54   return r;
55}
56
57/* Generates a random V128.  Ensures that that it contains normalised
58   FP numbers when viewed as either F32x4 or F64x2, so that it is
59   reasonable to use in FP test cases. */
60static void randV128 ( /*OUT*/V128* v, LaneTy ty )
61{
62   static UInt nCalls = 0, nIters = 0;
63   Int i;
64   nCalls++;
65   while (1) {
66      nIters++;
67      for (i = 0; i < 16; i++) {
68         v->u8[i] = randUChar();
69      }
70      if (isnormal(v->f32[0]) && isnormal(v->f32[1]) && isnormal(v->f32[2])
71          && isnormal(v->f32[3]) && isnormal(v->f64[0]) && isnormal(v->f64[1]))
72        break;
73   }
74   if (0 == (nCalls & 0xFF))
75      printf("randV128: %u calls, %u iters\n", nCalls, nIters);
76}
77
78static void showV128 ( V128* v )
79{
80   Int i;
81   for (i = 15; i >= 0; i--)
82      printf("%02x", (Int)v->u8[i]);
83}
84
85static void showBlock ( const char* msg, V128* block, Int nBlock )
86{
87   Int i;
88   printf("%s\n", msg);
89   for (i = 0; i < nBlock; i++) {
90      printf("  ");
91      showV128(&block[i]);
92      printf("\n");
93   }
94}
95
96static ULong dup4x16 ( UInt x )
97{
98   ULong r = x & 0xF;
99   r |= (r << 4);
100   r |= (r << 8);
101   r |= (r << 16);
102   r |= (r << 32);
103   return r;
104}
105
106// Generate a random double-precision number.  About 1 time in 2,
107// instead return a special value (+/- Inf, +/-Nan, denorm).
108// This ensures that many of the groups of 4 calls here will
109// return a special value.
110
111static Double special_values[10];
112static Bool   special_values_initted = False;
113
114static __attribute__((noinline))
115Double negate ( Double d ) { return -d; }
116static __attribute__((noinline))
117Double divf64 ( Double x, Double y ) { return x/y; }
118
119static __attribute__((noinline))
120Double plusZero  ( void ) { return 0.0; }
121static __attribute__((noinline))
122Double minusZero ( void ) { return negate(plusZero()); }
123
124static __attribute__((noinline))
125Double plusOne  ( void ) { return 1.0; }
126static __attribute__((noinline))
127Double minusOne ( void ) { return negate(plusOne()); }
128
129static __attribute__((noinline))
130Double plusInf   ( void ) { return 1.0 / 0.0; }
131static __attribute__((noinline))
132Double minusInf  ( void ) { return negate(plusInf()); }
133
134static __attribute__((noinline))
135Double plusNaN  ( void ) { return divf64(plusInf(),plusInf()); }
136static __attribute__((noinline))
137Double minusNaN ( void ) { return negate(plusNaN()); }
138
139static __attribute__((noinline))
140Double plusDenorm  ( void ) { return 1.23e-315 / 1e3; }
141static __attribute__((noinline))
142Double minusDenorm ( void ) { return negate(plusDenorm()); }
143
144
145static void ensure_special_values_initted ( void )
146{
147   if (special_values_initted) return;
148   special_values[0] = plusZero();
149   special_values[1] = minusZero();
150   special_values[2] = plusOne();
151   special_values[3] = minusOne();
152   special_values[4] = plusInf();
153   special_values[5] = minusInf();
154   special_values[6] = plusNaN();
155   special_values[7] = minusNaN();
156   special_values[8] = plusDenorm();
157   special_values[9] = minusDenorm();
158   special_values_initted = True;
159   int i;
160   printf("\n");
161   for (i = 0; i < 10; i++) {
162      printf("special value %d = %e\n", i, special_values[i]);
163   }
164   printf("\n");
165}
166
167static Double randDouble ( void )
168{
169   ensure_special_values_initted();
170   UChar c = randUChar();
171   if (c >= 128) {
172      // return a normal number most of the time.
173      // 0 .. 2^63-1
174      ULong u64 = randULong(TyDF);
175      // -2^62 .. 2^62-1
176      Long s64 = (Long)u64;
177      // -2^55 .. 2^55-1
178      s64 >>= (62-55);
179      // and now as a float
180      return (Double)s64;
181   }
182   c = randUChar() % 10;
183   return special_values[c];
184}
185
186static Float randFloat ( void )
187{
188   ensure_special_values_initted();
189   UChar c = randUChar();
190   if (c >= 128) {
191      // return a normal number most of the time.
192      // 0 .. 2^63-1
193      ULong u64 = randULong(TyDF);
194      // -2^62 .. 2^62-1
195      Long s64 = (Long)u64;
196      // -2^25 .. 2^25-1
197      s64 >>= (62-25);
198      // and now as a float
199      return (Float)s64;
200   }
201   c = randUChar() % 10;
202   return special_values[c];
203}
204
205void randBlock_Doubles ( V128* block, Int nBlock )
206{
207   Int i;
208   for (i = 0; i < nBlock; i++) {
209      block[i].f64[0] = randDouble();
210      block[i].f64[1] = randDouble();
211   }
212}
213
214void randBlock_Floats ( V128* block, Int nBlock )
215{
216   Int i;
217   for (i = 0; i < nBlock; i++) {
218      block[i].f32[0] = randFloat();
219      block[i].f32[1] = randFloat();
220      block[i].f32[2] = randFloat();
221      block[i].f32[3] = randFloat();
222   }
223}
224
225
226/* ---------------------------------------------------------------- */
227/* -- Parameterisable test macros                                -- */
228/* ---------------------------------------------------------------- */
229
230#define DO50(_action) \
231   do { \
232      Int _qq; for (_qq = 0; _qq < 50; _qq++) { _action ; } \
233   } while (0)
234
235
236/* Note this also sets the destination register to a known value (0x55..55)
237   since it can sometimes be an input to the instruction too. */
238#define GEN_UNARY_TEST(INSN,SUFFIXD,SUFFIXN) \
239  __attribute__((noinline)) \
240  static void test_##INSN##_##SUFFIXD##_##SUFFIXN ( LaneTy ty ) { \
241     Int i; \
242     for (i = 0; i < ITERS; i++) { \
243        V128 block[2+1]; \
244        memset(block, 0x55, sizeof(block)); \
245        randV128(&block[0], ty); \
246        randV128(&block[1], ty); \
247        __asm__ __volatile__( \
248           "mov   x30, #0 ; msr fpsr, x30 ; " \
249           "ldr   q7, [%0, #0]   ; " \
250           "ldr   q8, [%0, #16]   ; " \
251           #INSN " v8." #SUFFIXD ", v7." #SUFFIXN " ; " \
252           "str   q8, [%0, #16] ; " \
253           "mrs   x30, fpsr ; str x30, [%0, #32] " \
254           : : "r"(&block[0]) : "memory", "v7", "v8", "x30" \
255        ); \
256        printf(#INSN   " v8." #SUFFIXD ", v7." #SUFFIXN); \
257        UInt fpsr = 0xFFFFFF60 & block[2].u32[0]; \
258        showV128(&block[0]); printf("  "); \
259        showV128(&block[1]); printf(" fpsr=%08x\n", fpsr); \
260     } \
261  }
262
263
264/* Note this also sets the destination register to a known value (0x55..55)
265   since it can sometimes be an input to the instruction too. */
266#define GEN_BINARY_TEST(INSN,SUFFIXD,SUFFIXN,SUFFIXM)  \
267  __attribute__((noinline)) \
268  static void test_##INSN##_##SUFFIXD##_##SUFFIXN##_##SUFFIXM ( LaneTy ty ) { \
269     Int i; \
270     for (i = 0; i < ITERS; i++) { \
271        V128 block[3+1]; \
272        memset(block, 0x55, sizeof(block)); \
273        randV128(&block[0], ty); \
274        randV128(&block[1], ty); \
275        randV128(&block[2], ty); \
276        __asm__ __volatile__( \
277           "mov   x30, #0 ; msr fpsr, x30 ; " \
278           "ldr   q7, [%0, #0]   ; " \
279           "ldr   q8, [%0, #16]   ; " \
280           "ldr   q9, [%0, #32]   ; " \
281           #INSN " v9." #SUFFIXD ", v7." #SUFFIXN ", v8." #SUFFIXM " ; " \
282           "str   q9, [%0, #32] ; " \
283           "mrs   x30, fpsr ; str x30, [%0, #48] " \
284           : : "r"(&block[0]) : "memory", "v7", "v8", "v9", "x30" \
285        ); \
286        printf(#INSN   " v9." #SUFFIXD \
287               ", v7." #SUFFIXN ", v8." #SUFFIXM "  ");   \
288        UInt fpsr = 0xFFFFFF60 & block[3].u32[0]; \
289        showV128(&block[0]); printf("  "); \
290        showV128(&block[1]); printf("  "); \
291        showV128(&block[2]); printf(" fpsr=%08x\n", fpsr); \
292     } \
293  }
294
295
296/* Note this also sets the destination register to a known value (0x55..55)
297   since it can sometimes be an input to the instruction too. */
298#define GEN_SHIFT_TEST(INSN,SUFFIXD,SUFFIXN,AMOUNT) \
299  __attribute__((noinline)) \
300  static void test_##INSN##_##SUFFIXD##_##SUFFIXN##_##AMOUNT ( LaneTy ty ) { \
301     Int i; \
302     for (i = 0; i < ITERS; i++) { \
303        V128 block[2+1]; \
304        memset(block, 0x55, sizeof(block)); \
305        randV128(&block[0], ty); \
306        randV128(&block[1], ty); \
307        __asm__ __volatile__( \
308           "mov   x30, #0 ; msr fpsr, x30 ; " \
309           "ldr   q7, [%0, #0]   ; " \
310           "ldr   q8, [%0, #16]   ; " \
311           #INSN " v8." #SUFFIXD ", v7." #SUFFIXN ", #" #AMOUNT " ; " \
312           "str   q8, [%0, #16] ; " \
313           "mrs   x30, fpsr ; str x30, [%0, #32] " \
314           : : "r"(&block[0]) : "memory", "v7", "v8", "x30" \
315        ); \
316        printf(#INSN   " v8." #SUFFIXD ", v7." #SUFFIXN ", #" #AMOUNT "  "); \
317        UInt fpsr = 0xFFFFFF60 & block[2].u32[0]; \
318        showV128(&block[0]); printf("  "); \
319        showV128(&block[1]); printf(" fpsr=%08x\n", fpsr); \
320     } \
321  }
322
323
324/* Generate a test that involves one integer reg and one vector reg,
325   with no bias as towards which is input or output. */
326#define GEN_ONEINT_ONEVEC_TEST(TESTNAME,INSN,INTREGNO,VECREGNO) \
327  __attribute__((noinline)) \
328  static void test_##TESTNAME ( LaneTy ty ) { \
329     Int i; \
330     assert(INTREGNO != 30); \
331     for (i = 0; i < ITERS; i++) { \
332        V128 block[4+1]; \
333        memset(block, 0x55, sizeof(block)); \
334        randV128(&block[0], ty); \
335        randV128(&block[1], ty); \
336        randV128(&block[2], ty); \
337        randV128(&block[3], ty); \
338        __asm__ __volatile__( \
339           "mov   x30, #0 ; msr fpsr, x30 ; " \
340           "ldr   q"#VECREGNO", [%0, #0]  ; " \
341           "ldr   x"#INTREGNO", [%0, #16] ; " \
342           INSN " ; " \
343           "str   q"#VECREGNO", [%0, #32] ; " \
344           "str   x"#INTREGNO", [%0, #48] ; " \
345           "mrs   x30, fpsr ; str x30, [%0, #64] " \
346           : : "r"(&block[0]) : "memory", "v"#VECREGNO, "x"#INTREGNO, "x30" \
347        ); \
348        printf(INSN   "   "); \
349        UInt fpsr = 0xFFFFFF60 & block[4].u32[0]; \
350        showV128(&block[0]); printf("  "); \
351        showV128(&block[1]); printf("  "); \
352        showV128(&block[2]); printf("  "); \
353        showV128(&block[3]); printf(" fpsr=%08x\n", fpsr); \
354     } \
355  }
356
357
358/* Generate a test that involves two vector regs,
359   with no bias as towards which is input or output.
360   It's OK to use x10 as scratch.*/
361#define GEN_TWOVEC_TEST(TESTNAME,INSN,VECREG1NO,VECREG2NO) \
362  __attribute__((noinline)) \
363  static void test_##TESTNAME ( LaneTy ty ) { \
364     Int i; \
365     for (i = 0; i < ITERS; i++) { \
366        V128 block[4+1]; \
367        memset(block, 0x55, sizeof(block)); \
368        randV128(&block[0], ty); \
369        randV128(&block[1], ty); \
370        randV128(&block[2], ty); \
371        randV128(&block[3], ty); \
372        __asm__ __volatile__( \
373           "mov   x30, #0 ; msr fpsr, x30 ; " \
374           "ldr   q"#VECREG1NO", [%0, #0]  ; " \
375           "ldr   q"#VECREG2NO", [%0, #16] ; " \
376           INSN " ; " \
377           "str   q"#VECREG1NO", [%0, #32] ; " \
378           "str   q"#VECREG2NO", [%0, #48] ; " \
379           "mrs   x30, fpsr ; str x30, [%0, #64] " \
380           : : "r"(&block[0]) \
381             : "memory", "v"#VECREG1NO, "v"#VECREG2NO, "x10", "x30" \
382        ); \
383        printf(INSN   "   "); \
384        UInt fpsr = 0xFFFFFF60 & block[4].u32[0]; \
385        showV128(&block[0]); printf("  "); \
386        showV128(&block[1]); printf("  "); \
387        showV128(&block[2]); printf("  "); \
388        showV128(&block[3]); printf(" fpsr=%08x\n", fpsr); \
389     } \
390  }
391
392
393/* Generate a test that involves three vector regs,
394   with no bias as towards which is input or output.  It's also OK
395   to use v16, v17, v18 as scratch. */
396#define GEN_THREEVEC_TEST(TESTNAME,INSN,VECREG1NO,VECREG2NO,VECREG3NO)  \
397  __attribute__((noinline)) \
398  static void test_##TESTNAME ( LaneTy ty ) { \
399     Int i; \
400     for (i = 0; i < ITERS; i++) { \
401        V128 block[6+1]; \
402        memset(block, 0x55, sizeof(block)); \
403        randV128(&block[0], ty); \
404        randV128(&block[1], ty); \
405        randV128(&block[2], ty); \
406        randV128(&block[3], ty); \
407        randV128(&block[4], ty); \
408        randV128(&block[5], ty); \
409        __asm__ __volatile__( \
410           "mov   x30, #0 ; msr fpsr, x30 ; " \
411           "ldr   q"#VECREG1NO", [%0, #0]  ; " \
412           "ldr   q"#VECREG2NO", [%0, #16] ; " \
413           "ldr   q"#VECREG3NO", [%0, #32] ; " \
414           INSN " ; " \
415           "str   q"#VECREG1NO", [%0, #48] ; " \
416           "str   q"#VECREG2NO", [%0, #64] ; " \
417           "str   q"#VECREG3NO", [%0, #80] ; " \
418           "mrs   x30, fpsr ; str x30, [%0, #96] " \
419           : : "r"(&block[0]) \
420           : "memory", "v"#VECREG1NO, "v"#VECREG2NO, "v"#VECREG3NO, \
421             "v16", "v17", "v18", "x30" \
422        ); \
423        printf(INSN   "   "); \
424        UInt fpsr = 0xFFFFFF60 & block[6].u32[0]; \
425        showV128(&block[0]); printf("  "); \
426        showV128(&block[1]); printf("  "); \
427        showV128(&block[2]); printf("  "); \
428        showV128(&block[3]); printf("  "); \
429        showV128(&block[4]); printf("  "); \
430        showV128(&block[5]); printf(" fpsr=%08x\n", fpsr); \
431     } \
432  }
433
434
435/* Generate a test that involves four vector regs,
436   with no bias as towards which is input or output.  It's also OK
437   to use v16, v17, v18 as scratch. */
438#define GEN_FOURVEC_TEST(TESTNAME,INSN,VECREG1NO,VECREG2NO, \
439                                       VECREG3NO,VECREG4NO)  \
440  __attribute__((noinline)) \
441  static void test_##TESTNAME ( LaneTy ty ) { \
442     Int i; \
443     for (i = 0; i < ITERS; i++) { \
444        V128 block[8+1]; \
445        memset(block, 0x55, sizeof(block)); \
446        randV128(&block[0], ty); \
447        randV128(&block[1], ty); \
448        randV128(&block[2], ty); \
449        randV128(&block[3], ty); \
450        randV128(&block[4], ty); \
451        randV128(&block[5], ty); \
452        randV128(&block[6], ty); \
453        randV128(&block[7], ty); \
454        __asm__ __volatile__( \
455           "mov   x30, #0 ; msr fpsr, x30 ; " \
456           "ldr   q"#VECREG1NO", [%0, #0]  ; " \
457           "ldr   q"#VECREG2NO", [%0, #16] ; " \
458           "ldr   q"#VECREG3NO", [%0, #32] ; " \
459           "ldr   q"#VECREG4NO", [%0, #48] ; " \
460           INSN " ; " \
461           "str   q"#VECREG1NO", [%0, #64] ; " \
462           "str   q"#VECREG2NO", [%0, #80] ; " \
463           "str   q"#VECREG3NO", [%0, #96] ; " \
464           "str   q"#VECREG4NO", [%0, #112] ; " \
465           "mrs   x30, fpsr ; str x30, [%0, #128] " \
466           : : "r"(&block[0]) \
467           : "memory", "v"#VECREG1NO, "v"#VECREG2NO, \
468                       "v"#VECREG3NO, "v"#VECREG4NO, \
469             "v16", "v17", "v18", "x30" \
470        ); \
471        printf(INSN   "   "); \
472        UInt fpsr = 0xFFFFFF60 & block[8].u32[0]; \
473        showV128(&block[0]); printf("  "); \
474        showV128(&block[1]); printf("  "); \
475        showV128(&block[2]); printf("  "); \
476        showV128(&block[3]); printf("  "); \
477        showV128(&block[4]); printf("  "); \
478        showV128(&block[5]); printf("  "); \
479        showV128(&block[6]); printf("  "); \
480        showV128(&block[7]); printf(" fpsr=%08x\n", fpsr); \
481     } \
482  }
483
484
485/* ---------------------------------------------------------------- */
486/* -- Test functions and non-parameterisable test macros         -- */
487/* ---------------------------------------------------------------- */
488
489void test_UMINV ( void )
490{
491  int i;
492  V128 block[2];
493
494  /* -- 4s -- */
495
496  for (i = 0; i < 10; i++) {
497    memset(&block, 0x55, sizeof(block));
498    randV128(&block[0], TyS);
499    randV128(&block[1], TyS);
500    __asm__ __volatile__(
501       "ldr   q7, [%0, #0]   ; "
502       "uminv s8, v7.4s   ; "
503       "str   q8, [%0, #16] "
504       : : "r"(&block[0]) : "memory", "v7", "v8"
505                         );
506    printf("UMINV v8, v7.4s  ");
507    showV128(&block[0]); printf("  ");
508    showV128(&block[1]); printf("\n");
509  }
510
511  /* -- 8h -- */
512
513  for (i = 0; i < 10; i++) {
514    memset(&block, 0x55, sizeof(block));
515    randV128(&block[0], TyH);
516    randV128(&block[1], TyH);
517    __asm__ __volatile__(
518       "ldr   q7, [%0, #0]   ; "
519       "uminv h8, v7.8h   ; "
520       "str   q8, [%0, #16] "
521       : : "r"(&block[0]) : "memory", "v7", "v8"
522                         );
523    printf("UMINV h8, v7.8h  ");
524    showV128(&block[0]); printf("  ");
525    showV128(&block[1]); printf("\n");
526  }
527
528  /* -- 4h -- */
529
530  for (i = 0; i < 10; i++) {
531    memset(&block, 0x55, sizeof(block));
532    randV128(&block[0], TyH);
533    randV128(&block[1], TyH);
534    __asm__ __volatile__(
535       "ldr   q7, [%0, #0]   ; "
536       "uminv h8, v7.4h   ; "
537       "str   q8, [%0, #16] "
538       : : "r"(&block[0]) : "memory", "v7", "v8"
539                         );
540    printf("UMINV h8, v7.4h  ");
541    showV128(&block[0]); printf("  ");
542    showV128(&block[1]); printf("\n");
543  }
544
545  /* -- 16b -- */
546
547  for (i = 0; i < 10; i++) {
548    memset(&block, 0x55, sizeof(block));
549    randV128(&block[0], TyB);
550    randV128(&block[1], TyB);
551    __asm__ __volatile__(
552       "ldr   q7, [%0, #0]   ; "
553       "uminv b8, v7.16b   ; "
554       "str   q8, [%0, #16] "
555       : : "r"(&block[0]) : "memory", "v7", "v8"
556                         );
557    printf("UMINV b8, v7.16b  ");
558    showV128(&block[0]); printf("  ");
559    showV128(&block[1]); printf("\n");
560  }
561
562  /* -- 8b -- */
563
564  for (i = 0; i < 10; i++) {
565    memset(&block, 0x55, sizeof(block));
566    randV128(&block[0], TyB);
567    randV128(&block[1], TyB);
568    __asm__ __volatile__(
569       "ldr   q7, [%0, #0]   ; "
570       "uminv b8, v7.8b   ; "
571       "str   q8, [%0, #16] "
572       : : "r"(&block[0]) : "memory", "v7", "v8"
573                         );
574    printf("UMINV b8, v7.8b  ");
575    showV128(&block[0]); printf("  ");
576    showV128(&block[1]); printf("\n");
577  }
578
579}
580
581
582void test_UMAXV ( void )
583{
584  int i;
585  V128 block[2];
586
587  /* -- 4s -- */
588
589  for (i = 0; i < 10; i++) {
590    memset(&block, 0x55, sizeof(block));
591    randV128(&block[0], TyS);
592    randV128(&block[1], TyS);
593    __asm__ __volatile__(
594       "ldr   q7, [%0, #0]   ; "
595       "umaxv s8, v7.4s   ; "
596       "str   q8, [%0, #16] "
597       : : "r"(&block[0]) : "memory", "v7", "v8"
598                         );
599    printf("UMAXV v8, v7.4s  ");
600    showV128(&block[0]); printf("  ");
601    showV128(&block[1]); printf("\n");
602  }
603
604  /* -- 8h -- */
605
606  for (i = 0; i < 10; i++) {
607    memset(&block, 0x55, sizeof(block));
608    randV128(&block[0], TyH);
609    randV128(&block[1], TyH);
610    __asm__ __volatile__(
611       "ldr   q7, [%0, #0]   ; "
612       "umaxv h8, v7.8h   ; "
613       "str   q8, [%0, #16] "
614       : : "r"(&block[0]) : "memory", "v7", "v8"
615                         );
616    printf("UMAXV h8, v7.8h  ");
617    showV128(&block[0]); printf("  ");
618    showV128(&block[1]); printf("\n");
619  }
620
621  /* -- 4h -- */
622
623  for (i = 0; i < 10; i++) {
624    memset(&block, 0x55, sizeof(block));
625    randV128(&block[0], TyH);
626    randV128(&block[1], TyH);
627    __asm__ __volatile__(
628       "ldr   q7, [%0, #0]   ; "
629       "umaxv h8, v7.4h   ; "
630       "str   q8, [%0, #16] "
631       : : "r"(&block[0]) : "memory", "v7", "v8"
632                         );
633    printf("UMAXV h8, v7.4h  ");
634    showV128(&block[0]); printf("  ");
635    showV128(&block[1]); printf("\n");
636  }
637
638  /* -- 16b -- */
639
640  for (i = 0; i < 10; i++) {
641    memset(&block, 0x55, sizeof(block));
642    randV128(&block[0], TyB);
643    randV128(&block[1], TyB);
644    __asm__ __volatile__(
645       "ldr   q7, [%0, #0]   ; "
646       "umaxv b8, v7.16b   ; "
647       "str   q8, [%0, #16] "
648       : : "r"(&block[0]) : "memory", "v7", "v8"
649                         );
650    printf("UMAXV b8, v7.16b  ");
651    showV128(&block[0]); printf("  ");
652    showV128(&block[1]); printf("\n");
653  }
654
655  /* -- 8b -- */
656
657  for (i = 0; i < 10; i++) {
658    memset(&block, 0x55, sizeof(block));
659    randV128(&block[0], TyB);
660    randV128(&block[1], TyB);
661    __asm__ __volatile__(
662       "ldr   q7, [%0, #0]   ; "
663       "umaxv b8, v7.8b   ; "
664       "str   q8, [%0, #16] "
665       : : "r"(&block[0]) : "memory", "v7", "v8"
666                         );
667    printf("UMAXV b8, v7.8b  ");
668    showV128(&block[0]); printf("  ");
669    showV128(&block[1]); printf("\n");
670  }
671
672}
673
674
675void test_INS_general ( void )
676{
677  V128 block[3];
678
679  /* -- D[0..1] -- */
680
681  memset(&block, 0x55, sizeof(block));
682  block[1].u64[0] = randULong(TyD);
683  __asm__ __volatile__(
684     "ldr q7, [%0, #0]   ; "
685     "ldr x19, [%0, #16] ; "
686     "ins v7.d[0], x19   ; "
687     "str q7, [%0, #32] "
688     : : "r"(&block[0]) : "memory", "x19", "v7"
689  );
690  printf("INS v7.u64[0],x19  ");
691  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
692  showV128(&block[2]); printf("\n");
693
694  memset(&block, 0x55, sizeof(block));
695  block[1].u64[0] = randULong(TyD);
696  __asm__ __volatile__(
697     "ldr q7, [%0, #0]   ; "
698     "ldr x19, [%0, #16] ; "
699     "ins v7.d[1], x19   ; "
700     "str q7, [%0, #32] "
701     : : "r"(&block[0]) : "memory", "x19", "v7"
702  );
703  printf("INS v7.d[1],x19  ");
704  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
705  showV128(&block[2]); printf("\n");
706
707  /* -- S[0..3] -- */
708
709  memset(&block, 0x55, sizeof(block));
710  block[1].u64[0] = randULong(TyS);
711  __asm__ __volatile__(
712     "ldr q7, [%0, #0]   ; "
713     "ldr x19, [%0, #16] ; "
714     "ins v7.s[0], w19   ; "
715     "str q7, [%0, #32] "
716     : : "r"(&block[0]) : "memory", "x19", "v7"
717  );
718  printf("INS v7.s[0],x19  ");
719  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
720  showV128(&block[2]); printf("\n");
721
722  memset(&block, 0x55, sizeof(block));
723  block[1].u64[0] = randULong(TyS);
724  __asm__ __volatile__(
725     "ldr q7, [%0, #0]   ; "
726     "ldr x19, [%0, #16] ; "
727     "ins v7.s[1], w19   ; "
728     "str q7, [%0, #32] "
729     : : "r"(&block[0]) : "memory", "x19", "v7"
730  );
731  printf("INS v7.s[1],x19  ");
732  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
733  showV128(&block[2]); printf("\n");
734
735  memset(&block, 0x55, sizeof(block));
736  block[1].u64[0] = randULong(TyS);
737  __asm__ __volatile__(
738     "ldr q7, [%0, #0]   ; "
739     "ldr x19, [%0, #16] ; "
740     "ins v7.s[2], w19   ; "
741     "str q7, [%0, #32] "
742     : : "r"(&block[0]) : "memory", "x19", "v7"
743  );
744  printf("INS v7.s[2],x19  ");
745  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
746  showV128(&block[2]); printf("\n");
747
748  memset(&block, 0x55, sizeof(block));
749  block[1].u64[0] = randULong(TyS);
750  __asm__ __volatile__(
751     "ldr q7, [%0, #0]   ; "
752     "ldr x19, [%0, #16] ; "
753     "ins v7.s[3], w19   ; "
754     "str q7, [%0, #32] "
755     : : "r"(&block[0]) : "memory", "x19", "v7"
756  );
757  printf("INS v7.s[3],x19  ");
758  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
759  showV128(&block[2]); printf("\n");
760
761  /* -- H[0..7] -- */
762
763  memset(&block, 0x55, sizeof(block));
764  block[1].u64[0] = randULong(TyH);
765  __asm__ __volatile__(
766     "ldr q7, [%0, #0]   ; "
767     "ldr x19, [%0, #16] ; "
768     "ins v7.h[0], w19   ; "
769     "str q7, [%0, #32] "
770     : : "r"(&block[0]) : "memory", "x19", "v7"
771  );
772  printf("INS v7.h[0],x19  ");
773  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
774  showV128(&block[2]); printf("\n");
775
776  memset(&block, 0x55, sizeof(block));
777  block[1].u64[0] = randULong(TyH);
778  __asm__ __volatile__(
779     "ldr q7, [%0, #0]   ; "
780     "ldr x19, [%0, #16] ; "
781     "ins v7.h[1], w19   ; "
782     "str q7, [%0, #32] "
783     : : "r"(&block[0]) : "memory", "x19", "v7"
784  );
785  printf("INS v7.h[1],x19  ");
786  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
787  showV128(&block[2]); printf("\n");
788
789  memset(&block, 0x55, sizeof(block));
790  block[1].u64[0] = randULong(TyH);
791  __asm__ __volatile__(
792     "ldr q7, [%0, #0]   ; "
793     "ldr x19, [%0, #16] ; "
794     "ins v7.h[2], w19   ; "
795     "str q7, [%0, #32] "
796     : : "r"(&block[0]) : "memory", "x19", "v7"
797  );
798  printf("INS v7.h[2],x19  ");
799  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
800  showV128(&block[2]); printf("\n");
801
802  memset(&block, 0x55, sizeof(block));
803  block[1].u64[0] = randULong(TyH);
804  __asm__ __volatile__(
805     "ldr q7, [%0, #0]   ; "
806     "ldr x19, [%0, #16] ; "
807     "ins v7.h[3], w19   ; "
808     "str q7, [%0, #32] "
809     : : "r"(&block[0]) : "memory", "x19", "v7"
810  );
811  printf("INS v7.h[3],x19  ");
812  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
813  showV128(&block[2]); printf("\n");
814
815  memset(&block, 0x55, sizeof(block));
816  block[1].u64[0] = randULong(TyH);
817  __asm__ __volatile__(
818     "ldr q7, [%0, #0]   ; "
819     "ldr x19, [%0, #16] ; "
820     "ins v7.h[4], w19   ; "
821     "str q7, [%0, #32] "
822     : : "r"(&block[0]) : "memory", "x19", "v7"
823  );
824  printf("INS v7.h[4],x19  ");
825  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
826  showV128(&block[2]); printf("\n");
827
828  memset(&block, 0x55, sizeof(block));
829  block[1].u64[0] = randULong(TyH);
830  __asm__ __volatile__(
831     "ldr q7, [%0, #0]   ; "
832     "ldr x19, [%0, #16] ; "
833     "ins v7.h[5], w19   ; "
834     "str q7, [%0, #32] "
835     : : "r"(&block[0]) : "memory", "x19", "v7"
836  );
837  printf("INS v7.h[5],x19  ");
838  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
839  showV128(&block[2]); printf("\n");
840
841  memset(&block, 0x55, sizeof(block));
842  block[1].u64[0] = randULong(TyH);
843  __asm__ __volatile__(
844     "ldr q7, [%0, #0]   ; "
845     "ldr x19, [%0, #16] ; "
846     "ins v7.h[6], w19   ; "
847     "str q7, [%0, #32] "
848     : : "r"(&block[0]) : "memory", "x19", "v7"
849  );
850  printf("INS v7.h[6],x19  ");
851  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
852  showV128(&block[2]); printf("\n");
853
854  memset(&block, 0x55, sizeof(block));
855  block[1].u64[0] = randULong(TyH);
856  __asm__ __volatile__(
857     "ldr q7, [%0, #0]   ; "
858     "ldr x19, [%0, #16] ; "
859     "ins v7.h[7], w19   ; "
860     "str q7, [%0, #32] "
861     : : "r"(&block[0]) : "memory", "x19", "v7"
862  );
863  printf("INS v7.h[7],x19  ");
864  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
865  showV128(&block[2]); printf("\n");
866
867  /* -- B[0,15] -- */
868
869  memset(&block, 0x55, sizeof(block));
870  block[1].u64[0] = randULong(TyB);
871  __asm__ __volatile__(
872     "ldr q7, [%0, #0]   ; "
873     "ldr x19, [%0, #16] ; "
874     "ins v7.b[0], w19   ; "
875     "str q7, [%0, #32] "
876     : : "r"(&block[0]) : "memory", "x19", "v7"
877  );
878  printf("INS v7.b[0],x19  ");
879  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
880  showV128(&block[2]); printf("\n");
881
882  memset(&block, 0x55, sizeof(block));
883  block[1].u64[0] = randULong(TyB);
884  __asm__ __volatile__(
885     "ldr q7, [%0, #0]   ; "
886     "ldr x19, [%0, #16] ; "
887     "ins v7.b[15], w19   ; "
888     "str q7, [%0, #32] "
889     : : "r"(&block[0]) : "memory", "x19", "v7"
890  );
891  printf("INS v7.b[15],x19 ");
892  showV128(&block[0]); printf("  %016llx  ", block[1].u64[0]);
893  showV128(&block[2]); printf("\n");
894}
895
896
897
898void test_SMINV ( void )
899{
900  int i;
901  V128 block[2];
902
903  /* -- 4s -- */
904
905  for (i = 0; i < 10; i++) {
906    memset(&block, 0x55, sizeof(block));
907    randV128(&block[0], TyS);
908    randV128(&block[1], TyS);
909    __asm__ __volatile__(
910       "ldr   q7, [%0, #0]   ; "
911       "sminv s8, v7.4s   ; "
912       "str   q8, [%0, #16] "
913       : : "r"(&block[0]) : "memory", "v7", "v8"
914                         );
915    printf("SMINV v8, v7.4s  ");
916    showV128(&block[0]); printf("  ");
917    showV128(&block[1]); printf("\n");
918  }
919
920  /* -- 8h -- */
921
922  for (i = 0; i < 10; i++) {
923    memset(&block, 0x55, sizeof(block));
924    randV128(&block[0], TyH);
925    randV128(&block[1], TyH);
926    __asm__ __volatile__(
927       "ldr   q7, [%0, #0]   ; "
928       "sminv h8, v7.8h   ; "
929       "str   q8, [%0, #16] "
930       : : "r"(&block[0]) : "memory", "v7", "v8"
931                         );
932    printf("SMINV h8, v7.8h  ");
933    showV128(&block[0]); printf("  ");
934    showV128(&block[1]); printf("\n");
935  }
936
937  /* -- 4h -- */
938
939  for (i = 0; i < 10; i++) {
940    memset(&block, 0x55, sizeof(block));
941    randV128(&block[0], TyH);
942    randV128(&block[1], TyH);
943    __asm__ __volatile__(
944       "ldr   q7, [%0, #0]   ; "
945       "sminv h8, v7.4h   ; "
946       "str   q8, [%0, #16] "
947       : : "r"(&block[0]) : "memory", "v7", "v8"
948                         );
949    printf("SMINV h8, v7.4h  ");
950    showV128(&block[0]); printf("  ");
951    showV128(&block[1]); printf("\n");
952  }
953
954  /* -- 16b -- */
955
956  for (i = 0; i < 10; i++) {
957    memset(&block, 0x55, sizeof(block));
958    randV128(&block[0], TyB);
959    randV128(&block[1], TyB);
960    __asm__ __volatile__(
961       "ldr   q7, [%0, #0]   ; "
962       "sminv b8, v7.16b   ; "
963       "str   q8, [%0, #16] "
964       : : "r"(&block[0]) : "memory", "v7", "v8"
965                         );
966    printf("SMINV b8, v7.16b  ");
967    showV128(&block[0]); printf("  ");
968    showV128(&block[1]); printf("\n");
969  }
970
971  /* -- 8b -- */
972
973  for (i = 0; i < 10; i++) {
974    memset(&block, 0x55, sizeof(block));
975    randV128(&block[0], TyB);
976    randV128(&block[1], TyB);
977    __asm__ __volatile__(
978       "ldr   q7, [%0, #0]   ; "
979       "sminv b8, v7.8b   ; "
980       "str   q8, [%0, #16] "
981       : : "r"(&block[0]) : "memory", "v7", "v8"
982                         );
983    printf("SMINV b8, v7.8b  ");
984    showV128(&block[0]); printf("  ");
985    showV128(&block[1]); printf("\n");
986  }
987
988}
989
990
991void test_SMAXV ( void )
992{
993  int i;
994  V128 block[2];
995
996  /* -- 4s -- */
997
998  for (i = 0; i < 10; i++) {
999    memset(&block, 0x55, sizeof(block));
1000    randV128(&block[0], TyS);
1001    randV128(&block[1], TyS);
1002    __asm__ __volatile__(
1003       "ldr   q7, [%0, #0]   ; "
1004       "smaxv s8, v7.4s   ; "
1005       "str   q8, [%0, #16] "
1006       : : "r"(&block[0]) : "memory", "v7", "v8"
1007                         );
1008    printf("SMAXV v8, v7.4s  ");
1009    showV128(&block[0]); printf("  ");
1010    showV128(&block[1]); printf("\n");
1011  }
1012
1013  /* -- 8h -- */
1014
1015  for (i = 0; i < 10; i++) {
1016    memset(&block, 0x55, sizeof(block));
1017    randV128(&block[0], TyH);
1018    randV128(&block[1], TyH);
1019    __asm__ __volatile__(
1020       "ldr   q7, [%0, #0]   ; "
1021       "smaxv h8, v7.8h   ; "
1022       "str   q8, [%0, #16] "
1023       : : "r"(&block[0]) : "memory", "v7", "v8"
1024                         );
1025    printf("SMAXV h8, v7.8h  ");
1026    showV128(&block[0]); printf("  ");
1027    showV128(&block[1]); printf("\n");
1028  }
1029
1030  /* -- 4h -- */
1031
1032  for (i = 0; i < 10; i++) {
1033    memset(&block, 0x55, sizeof(block));
1034    randV128(&block[0], TyH);
1035    randV128(&block[1], TyH);
1036    __asm__ __volatile__(
1037       "ldr   q7, [%0, #0]   ; "
1038       "smaxv h8, v7.4h   ; "
1039       "str   q8, [%0, #16] "
1040       : : "r"(&block[0]) : "memory", "v7", "v8"
1041                         );
1042    printf("SMAXV h8, v7.4h  ");
1043    showV128(&block[0]); printf("  ");
1044    showV128(&block[1]); printf("\n");
1045  }
1046
1047  /* -- 16b -- */
1048
1049  for (i = 0; i < 10; i++) {
1050    memset(&block, 0x55, sizeof(block));
1051    randV128(&block[0], TyB);
1052    randV128(&block[1], TyB);
1053    __asm__ __volatile__(
1054       "ldr   q7, [%0, #0]   ; "
1055       "smaxv b8, v7.16b   ; "
1056       "str   q8, [%0, #16] "
1057       : : "r"(&block[0]) : "memory", "v7", "v8"
1058                         );
1059    printf("SMAXV b8, v7.16b  ");
1060    showV128(&block[0]); printf("  ");
1061    showV128(&block[1]); printf("\n");
1062  }
1063
1064  /* -- 8b -- */
1065
1066  for (i = 0; i < 10; i++) {
1067    memset(&block, 0x55, sizeof(block));
1068    randV128(&block[0], TyB);
1069    randV128(&block[1], TyB);
1070    __asm__ __volatile__(
1071       "ldr   q7, [%0, #0]   ; "
1072       "smaxv b8, v7.8b   ; "
1073       "str   q8, [%0, #16] "
1074       : : "r"(&block[0]) : "memory", "v7", "v8"
1075                         );
1076    printf("SMAXV b8, v7.8b  ");
1077    showV128(&block[0]); printf("  ");
1078    showV128(&block[1]); printf("\n");
1079  }
1080
1081}
1082
1083
1084//======== FCCMP_D ========//
1085
1086#define GEN_test_FCCMP_D_D_0xF_EQ \
1087  __attribute__((noinline)) static void test_FCCMP_D_D_0xF_EQ ( void ) \
1088  { \
1089     V128 block[4]; \
1090     randBlock_Doubles(&block[0], 3); \
1091     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1092     showBlock("FCCMP_D_D_0xF_EQ before", &block[0], 4); \
1093     __asm__ __volatile__( \
1094        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1095        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1096        "fccmp d29, d11, #0xf, eq; " \
1097        "mrs x9, nzcv; str x9, [%0, 48]; " \
1098        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1099        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1100     ); \
1101     showBlock("FCCMP_D_D_0xF_EQ after", &block[0], 4); \
1102     printf("\n"); \
1103  }
1104
1105#define GEN_test_FCCMP_D_D_0xF_NE \
1106  __attribute__((noinline)) static void test_FCCMP_D_D_0xF_NE ( void ) \
1107  { \
1108     V128 block[4]; \
1109     randBlock_Doubles(&block[0], 3); \
1110     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1111     showBlock("FCCMP_D_D_0xF_NE before", &block[0], 4); \
1112     __asm__ __volatile__( \
1113        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1114        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1115        "fccmp d29, d11, #0xf, ne; " \
1116        "mrs x9, nzcv; str x9, [%0, 48]; " \
1117        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1118        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1119     ); \
1120     showBlock("FCCMP_D_D_0xF_NE after", &block[0], 4); \
1121     printf("\n"); \
1122  }
1123
1124#define GEN_test_FCCMP_D_D_0x0_EQ \
1125  __attribute__((noinline)) static void test_FCCMP_D_D_0x0_EQ ( void ) \
1126  { \
1127     V128 block[4]; \
1128     randBlock_Doubles(&block[0], 3); \
1129     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1130     showBlock("FCCMP_D_D_0x0_EQ before", &block[0], 4); \
1131     __asm__ __volatile__( \
1132        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1133        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1134        "fccmp d29, d11, #0x0, eq; " \
1135        "mrs x9, nzcv; str x9, [%0, 48]; " \
1136        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1137        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1138     ); \
1139     showBlock("FCCMP_D_D_0x0_EQ after", &block[0], 4); \
1140     printf("\n"); \
1141  }
1142
1143#define GEN_test_FCCMP_D_D_0x0_NE \
1144  __attribute__((noinline)) static void test_FCCMP_D_D_0x0_NE ( void ) \
1145  { \
1146     V128 block[4]; \
1147     randBlock_Doubles(&block[0], 3); \
1148     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1149     showBlock("FCCMP_D_D_0x0_NE before", &block[0], 4); \
1150     __asm__ __volatile__( \
1151        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1152        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1153        "fccmp d29, d11, #0x0, ne; " \
1154        "mrs x9, nzcv; str x9, [%0, 48]; " \
1155        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1156        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1157     ); \
1158     showBlock("FCCMP_D_D_0x0_NE after", &block[0], 4); \
1159     printf("\n"); \
1160  }
1161
1162//======== FCCMP_S ========//
1163
1164#define GEN_test_FCCMP_S_S_0xF_EQ \
1165  __attribute__((noinline)) static void test_FCCMP_S_S_0xF_EQ ( void ) \
1166  { \
1167     V128 block[4]; \
1168     randBlock_Floats(&block[0], 3); \
1169     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1170     showBlock("FCCMP_S_S_0xF_EQ before", &block[0], 4); \
1171     __asm__ __volatile__( \
1172        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1173        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1174        "fccmp s29, s11, #0xf, eq; " \
1175        "mrs x9, nzcv; str x9, [%0, 48]; " \
1176        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1177        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1178     ); \
1179     showBlock("FCCMP_S_S_0xF_EQ after", &block[0], 4); \
1180     printf("\n"); \
1181  }
1182
1183#define GEN_test_FCCMP_S_S_0xF_NE \
1184  __attribute__((noinline)) static void test_FCCMP_S_S_0xF_NE ( void ) \
1185  { \
1186     V128 block[4]; \
1187     randBlock_Floats(&block[0], 3); \
1188     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1189     showBlock("FCCMP_S_S_0xF_NE before", &block[0], 4); \
1190     __asm__ __volatile__( \
1191        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1192        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1193        "fccmp s29, s11, #0xf, ne; " \
1194        "mrs x9, nzcv; str x9, [%0, 48]; " \
1195        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1196        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1197     ); \
1198     showBlock("FCCMP_S_S_0xF_NE after", &block[0], 4); \
1199     printf("\n"); \
1200  }
1201
1202#define GEN_test_FCCMP_S_S_0x0_EQ \
1203  __attribute__((noinline)) static void test_FCCMP_S_S_0x0_EQ ( void ) \
1204  { \
1205     V128 block[4]; \
1206     randBlock_Floats(&block[0], 3); \
1207     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1208     showBlock("FCCMP_S_S_0x0_EQ before", &block[0], 4); \
1209     __asm__ __volatile__( \
1210        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1211        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1212        "fccmp s29, s11, #0x0, eq; " \
1213        "mrs x9, nzcv; str x9, [%0, 48]; " \
1214        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1215        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1216     ); \
1217     showBlock("FCCMP_S_S_0x0_EQ after", &block[0], 4); \
1218     printf("\n"); \
1219  }
1220
1221#define GEN_test_FCCMP_S_S_0x0_NE \
1222  __attribute__((noinline)) static void test_FCCMP_S_S_0x0_NE ( void ) \
1223  { \
1224     V128 block[4]; \
1225     randBlock_Floats(&block[0], 3); \
1226     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1227     showBlock("FCCMP_S_S_0x0_NE before", &block[0], 4); \
1228     __asm__ __volatile__( \
1229        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1230        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1231        "fccmp s29, s11, #0x0, ne; " \
1232        "mrs x9, nzcv; str x9, [%0, 48]; " \
1233        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1234        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1235     ); \
1236     showBlock("FCCMP_S_S_0x0_NE after", &block[0], 4); \
1237     printf("\n"); \
1238  }
1239
1240//======== FCCMPE_D ========//
1241
1242#define GEN_test_FCCMPE_D_D_0xF_EQ \
1243  __attribute__((noinline)) static void test_FCCMPE_D_D_0xF_EQ ( void ) \
1244  { \
1245     V128 block[4]; \
1246     randBlock_Doubles(&block[0], 3); \
1247     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1248     showBlock("FCCMPE_D_D_0xF_EQ before", &block[0], 4); \
1249     __asm__ __volatile__( \
1250        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1251        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1252        "fccmpe d29, d11, #0xf, eq; " \
1253        "mrs x9, nzcv; str x9, [%0, 48]; " \
1254        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1255        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1256     ); \
1257     showBlock("FCCMPE_D_D_0xF_EQ after", &block[0], 4); \
1258     printf("\n"); \
1259  }
1260
1261#define GEN_test_FCCMPE_D_D_0xF_NE \
1262  __attribute__((noinline)) static void test_FCCMPE_D_D_0xF_NE ( void ) \
1263  { \
1264     V128 block[4]; \
1265     randBlock_Doubles(&block[0], 3); \
1266     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1267     showBlock("FCCMPE_D_D_0xF_NE before", &block[0], 4); \
1268     __asm__ __volatile__( \
1269        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1270        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1271        "fccmpe d29, d11, #0xf, ne; " \
1272        "mrs x9, nzcv; str x9, [%0, 48]; " \
1273        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1274        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1275     ); \
1276     showBlock("FCCMPE_D_D_0xF_NE after", &block[0], 4); \
1277     printf("\n"); \
1278  }
1279
1280#define GEN_test_FCCMPE_D_D_0x0_EQ \
1281  __attribute__((noinline)) static void test_FCCMPE_D_D_0x0_EQ ( void ) \
1282  { \
1283     V128 block[4]; \
1284     randBlock_Doubles(&block[0], 3); \
1285     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1286     showBlock("FCCMPE_D_D_0x0_EQ before", &block[0], 4); \
1287     __asm__ __volatile__( \
1288        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1289        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1290        "fccmpe d29, d11, #0x0, eq; " \
1291        "mrs x9, nzcv; str x9, [%0, 48]; " \
1292        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1293        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1294     ); \
1295     showBlock("FCCMPE_D_D_0x0_EQ after", &block[0], 4); \
1296     printf("\n"); \
1297  }
1298
1299#define GEN_test_FCCMPE_D_D_0x0_NE \
1300  __attribute__((noinline)) static void test_FCCMPE_D_D_0x0_NE ( void ) \
1301  { \
1302     V128 block[4]; \
1303     randBlock_Doubles(&block[0], 3); \
1304     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1305     showBlock("FCCMPE_D_D_0x0_NE before", &block[0], 4); \
1306     __asm__ __volatile__( \
1307        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1308        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1309        "fccmpe d29, d11, #0x0, ne; " \
1310        "mrs x9, nzcv; str x9, [%0, 48]; " \
1311        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1312        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1313     ); \
1314     showBlock("FCCMPE_D_D_0x0_NE after", &block[0], 4); \
1315     printf("\n"); \
1316  }
1317
1318//======== FCCMPE_S ========//
1319
1320#define GEN_test_FCCMPE_S_S_0xF_EQ \
1321  __attribute__((noinline)) static void test_FCCMPE_S_S_0xF_EQ ( void ) \
1322  { \
1323     V128 block[4]; \
1324     randBlock_Floats(&block[0], 3); \
1325     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1326     showBlock("FCCMP_S_S_0xF_EQ before", &block[0], 4); \
1327     __asm__ __volatile__( \
1328        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1329        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1330        "fccmpe s29, s11, #0xf, eq; " \
1331        "mrs x9, nzcv; str x9, [%0, 48]; " \
1332        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1333        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1334     ); \
1335     showBlock("FCCMPE_S_S_0xF_EQ after", &block[0], 4); \
1336     printf("\n"); \
1337  }
1338
1339#define GEN_test_FCCMPE_S_S_0xF_NE \
1340  __attribute__((noinline)) static void test_FCCMPE_S_S_0xF_NE ( void ) \
1341  { \
1342     V128 block[4]; \
1343     randBlock_Floats(&block[0], 3); \
1344     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1345     showBlock("FCCMPE_S_S_0xF_NE before", &block[0], 4); \
1346     __asm__ __volatile__( \
1347        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1348        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1349        "fccmpe s29, s11, #0xf, ne; " \
1350        "mrs x9, nzcv; str x9, [%0, 48]; " \
1351        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1352        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1353     ); \
1354     showBlock("FCCMPE_S_S_0xF_NE after", &block[0], 4); \
1355     printf("\n"); \
1356  }
1357
1358#define GEN_test_FCCMPE_S_S_0x0_EQ \
1359  __attribute__((noinline)) static void test_FCCMPE_S_S_0x0_EQ ( void ) \
1360  { \
1361     V128 block[4]; \
1362     randBlock_Floats(&block[0], 3); \
1363     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1364     showBlock("FCCMP_S_S_0x0_EQ before", &block[0], 4); \
1365     __asm__ __volatile__( \
1366        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1367        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1368        "fccmpe s29, s11, #0x0, eq; " \
1369        "mrs x9, nzcv; str x9, [%0, 48]; " \
1370        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1371        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1372     ); \
1373     showBlock("FCCMPE_S_S_0x0_EQ after", &block[0], 4); \
1374     printf("\n"); \
1375  }
1376
1377#define GEN_test_FCCMPE_S_S_0x0_NE \
1378  __attribute__((noinline)) static void test_FCCMPE_S_S_0x0_NE ( void ) \
1379  { \
1380     V128 block[4]; \
1381     randBlock_Floats(&block[0], 3); \
1382     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1383     showBlock("FCCMP_S_S_0x0_NE before", &block[0], 4); \
1384     __asm__ __volatile__( \
1385        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1386        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1387        "fccmpe s29, s11, #0x0, ne; " \
1388        "mrs x9, nzcv; str x9, [%0, 48]; " \
1389        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1390        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1391     ); \
1392     showBlock("FCCMPE_S_S_0x0_NE after", &block[0], 4); \
1393     printf("\n"); \
1394  }
1395
1396//======== FCMEQ_D_D_D ========//
1397
1398#define GEN_test_FCMEQ_D_D_D \
1399  __attribute__((noinline)) static void test_FCMEQ_D_D_D ( void ) \
1400  { \
1401     V128 block[4]; \
1402     randBlock_Doubles(&block[0], 3); \
1403     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1404     showBlock("FCMEQ_D_D_D before", &block[0], 4); \
1405     __asm__ __volatile__( \
1406        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1407        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1408        "fcmeq d29, d11, d9; " \
1409        "mrs x9, nzcv; str x9, [%0, 48]; " \
1410        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1411        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1412     ); \
1413     showBlock("FCMEQ_D_D_D after", &block[0], 4); \
1414     printf("\n"); \
1415  }
1416
1417//======== FCMEQ_S_S_S ========//
1418
1419#define GEN_test_FCMEQ_S_S_S \
1420  __attribute__((noinline)) static void test_FCMEQ_S_S_S ( void ) \
1421  { \
1422     V128 block[4]; \
1423     randBlock_Floats(&block[0], 3); \
1424     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1425     showBlock("FCMEQ_S_S_S before", &block[0], 4); \
1426     __asm__ __volatile__( \
1427        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1428        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1429        "fcmeq s29, s11, s9; " \
1430        "mrs x9, nzcv; str x9, [%0, 48]; " \
1431        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1432        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1433     ); \
1434     showBlock("FCMEQ_S_S_S after", &block[0], 4); \
1435     printf("\n"); \
1436  }
1437
1438//======== FCMGE_D_D_D ========//
1439
1440#define GEN_test_FCMGE_D_D_D \
1441  __attribute__((noinline)) static void test_FCMGE_D_D_D ( void ) \
1442  { \
1443     V128 block[4]; \
1444     randBlock_Doubles(&block[0], 3); \
1445     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1446     showBlock("FCMGE_D_D_D before", &block[0], 4); \
1447     __asm__ __volatile__( \
1448        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1449        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1450        "fcmge d29, d11, d9; " \
1451        "mrs x9, nzcv; str x9, [%0, 48]; " \
1452        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1453        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1454     ); \
1455     showBlock("FCMGE_D_D_D after", &block[0], 4); \
1456     printf("\n"); \
1457  }
1458
1459//======== FCMGE_S_S_S ========//
1460
1461#define GEN_test_FCMGE_S_S_S \
1462  __attribute__((noinline)) static void test_FCMGE_S_S_S ( void ) \
1463  { \
1464     V128 block[4]; \
1465     randBlock_Floats(&block[0], 3); \
1466     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1467     showBlock("FCMGE_S_S_S before", &block[0], 4); \
1468     __asm__ __volatile__( \
1469        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1470        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1471        "fcmge s29, s11, s9; " \
1472        "mrs x9, nzcv; str x9, [%0, 48]; " \
1473        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1474        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1475     ); \
1476     showBlock("FCMGE_S_S_S after", &block[0], 4); \
1477     printf("\n"); \
1478  }
1479
1480//======== FCMGT_D_D_D ========//
1481
1482#define GEN_test_FCMGT_D_D_D \
1483  __attribute__((noinline)) static void test_FCMGT_D_D_D ( void ) \
1484  { \
1485     V128 block[4]; \
1486     randBlock_Doubles(&block[0], 3); \
1487     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1488     showBlock("FCMGT_D_D_D before", &block[0], 4); \
1489     __asm__ __volatile__( \
1490        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1491        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1492        "fcmgt d29, d11, d9; " \
1493        "mrs x9, nzcv; str x9, [%0, 48]; " \
1494        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1495        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1496     ); \
1497     showBlock("FCMGT_D_D_D after", &block[0], 4); \
1498     printf("\n"); \
1499  }
1500
1501//======== FCMGT_S_S_S ========//
1502
1503#define GEN_test_FCMGT_S_S_S \
1504  __attribute__((noinline)) static void test_FCMGT_S_S_S ( void ) \
1505  { \
1506     V128 block[4]; \
1507     randBlock_Floats(&block[0], 3); \
1508     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1509     showBlock("FCMGT_S_S_S before", &block[0], 4); \
1510     __asm__ __volatile__( \
1511        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1512        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1513        "fcmgt s29, s11, s9; " \
1514        "mrs x9, nzcv; str x9, [%0, 48]; " \
1515        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1516        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1517     ); \
1518     showBlock("FCMGT_S_S_S after", &block[0], 4); \
1519     printf("\n"); \
1520  }
1521
1522//======== FACGT_D_D_D ========//
1523
1524#define GEN_test_FACGT_D_D_D \
1525  __attribute__((noinline)) static void test_FACGT_D_D_D ( void ) \
1526  { \
1527     V128 block[4]; \
1528     randBlock_Doubles(&block[0], 3); \
1529     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1530     showBlock("FACGT_D_D_D before", &block[0], 4); \
1531     __asm__ __volatile__( \
1532        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1533        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1534        "facgt d29, d11, d9; " \
1535        "mrs x9, nzcv; str x9, [%0, 48]; " \
1536        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1537        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1538     ); \
1539     showBlock("FACGT_D_D_D after", &block[0], 4); \
1540     printf("\n"); \
1541  }
1542
1543//======== FACGT_S_S_S ========//
1544
1545#define GEN_test_FACGT_S_S_S \
1546  __attribute__((noinline)) static void test_FACGT_S_S_S ( void ) \
1547  { \
1548     V128 block[4]; \
1549     randBlock_Floats(&block[0], 3); \
1550     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1551     showBlock("FACGT_S_S_S before", &block[0], 4); \
1552     __asm__ __volatile__( \
1553        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1554        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1555        "facgt s29, s11, s9; " \
1556        "mrs x9, nzcv; str x9, [%0, 48]; " \
1557        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1558        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1559     ); \
1560     showBlock("FACGT_S_S_S after", &block[0], 4); \
1561     printf("\n"); \
1562  }
1563
1564//======== FACGE_D_D_D ========//
1565
1566#define GEN_test_FACGE_D_D_D \
1567  __attribute__((noinline)) static void test_FACGE_D_D_D ( void ) \
1568  { \
1569     V128 block[4]; \
1570     randBlock_Doubles(&block[0], 3); \
1571     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1572     showBlock("FACGE_D_D_D before", &block[0], 4); \
1573     __asm__ __volatile__( \
1574        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1575        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1576        "facge d29, d11, d9; " \
1577        "mrs x9, nzcv; str x9, [%0, 48]; " \
1578        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1579        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1580     ); \
1581     showBlock("FACGE_D_D_D after", &block[0], 4); \
1582     printf("\n"); \
1583  }
1584
1585//======== FACGE_S_S_S ========//
1586
1587#define GEN_test_FACGE_S_S_S \
1588  __attribute__((noinline)) static void test_FACGE_S_S_S ( void ) \
1589  { \
1590     V128 block[4]; \
1591     randBlock_Floats(&block[0], 3); \
1592     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1593     showBlock("FACGE_S_S_S before", &block[0], 4); \
1594     __asm__ __volatile__( \
1595        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1596        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1597        "facge s29, s11, s9; " \
1598        "mrs x9, nzcv; str x9, [%0, 48]; " \
1599        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1600        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1601     ); \
1602     showBlock("FACGE_S_S_S after", &block[0], 4); \
1603     printf("\n"); \
1604  }
1605
1606//======== FCMEQ_D_D_Z ========//
1607
1608#define GEN_test_FCMEQ_D_D_Z \
1609  __attribute__((noinline)) static void test_FCMEQ_D_D_Z ( void ) \
1610  { \
1611     V128 block[4]; \
1612     randBlock_Doubles(&block[0], 3); \
1613     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1614     showBlock("FCMEQ_D_D_Z before", &block[0], 4); \
1615     __asm__ __volatile__( \
1616        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1617        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1618        "fcmeq d29, d11, #0; " \
1619        "mrs x9, nzcv; str x9, [%0, 48]; " \
1620        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1621        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1622     ); \
1623     showBlock("FCMEQ_D_D_Z after", &block[0], 4); \
1624     printf("\n"); \
1625  }
1626
1627//======== FCMEQ_S_S_Z ========//
1628
1629#define GEN_test_FCMEQ_S_S_Z \
1630  __attribute__((noinline)) static void test_FCMEQ_S_S_Z ( void ) \
1631  { \
1632     V128 block[4]; \
1633     randBlock_Floats(&block[0], 3); \
1634     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1635     showBlock("FCMEQ_S_S_Z before", &block[0], 4); \
1636     __asm__ __volatile__( \
1637        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1638        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1639        "fcmeq s29, s11, #0; " \
1640        "mrs x9, nzcv; str x9, [%0, 48]; " \
1641        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1642        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1643     ); \
1644     showBlock("FCMEQ_S_S_Z after", &block[0], 4); \
1645     printf("\n"); \
1646  }
1647
1648//======== FCMGE_D_D_Z ========//
1649
1650#define GEN_test_FCMGE_D_D_Z \
1651  __attribute__((noinline)) static void test_FCMGE_D_D_Z ( void ) \
1652  { \
1653     V128 block[4]; \
1654     randBlock_Doubles(&block[0], 3); \
1655     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1656     showBlock("FCMGE_D_D_Z before", &block[0], 4); \
1657     __asm__ __volatile__( \
1658        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1659        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1660        "fcmge d29, d11, #0; " \
1661        "mrs x9, nzcv; str x9, [%0, 48]; " \
1662        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1663        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1664     ); \
1665     showBlock("FCMGE_D_D_Z after", &block[0], 4); \
1666     printf("\n"); \
1667  }
1668
1669//======== FCMGE_S_S_Z ========//
1670
1671#define GEN_test_FCMGE_S_S_Z \
1672  __attribute__((noinline)) static void test_FCMGE_S_S_Z ( void ) \
1673  { \
1674     V128 block[4]; \
1675     randBlock_Floats(&block[0], 3); \
1676     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1677     showBlock("FCMGE_S_S_Z before", &block[0], 4); \
1678     __asm__ __volatile__( \
1679        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1680        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1681        "fcmge s29, s11, #0; " \
1682        "mrs x9, nzcv; str x9, [%0, 48]; " \
1683        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1684        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1685     ); \
1686     showBlock("FCMGE_S_S_Z after", &block[0], 4); \
1687     printf("\n"); \
1688  }
1689
1690//======== FCMGT_D_D_Z ========//
1691
1692#define GEN_test_FCMGT_D_D_Z \
1693  __attribute__((noinline)) static void test_FCMGT_D_D_Z ( void ) \
1694  { \
1695     V128 block[4]; \
1696     randBlock_Doubles(&block[0], 3); \
1697     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1698     showBlock("FCMGT_D_D_Z before", &block[0], 4); \
1699     __asm__ __volatile__( \
1700        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1701        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1702        "fcmgt d29, d11, #0; " \
1703        "mrs x9, nzcv; str x9, [%0, 48]; " \
1704        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1705        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1706     ); \
1707     showBlock("FCMGT_D_D_Z after", &block[0], 4); \
1708     printf("\n"); \
1709  }
1710
1711//======== FCMGT_S_S_Z ========//
1712
1713#define GEN_test_FCMGT_S_S_Z \
1714  __attribute__((noinline)) static void test_FCMGT_S_S_Z ( void ) \
1715  { \
1716     V128 block[4]; \
1717     randBlock_Floats(&block[0], 3); \
1718     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1719     showBlock("FCMGT_S_S_Z before", &block[0], 4); \
1720     __asm__ __volatile__( \
1721        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1722        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1723        "fcmgt s29, s11, #0; " \
1724        "mrs x9, nzcv; str x9, [%0, 48]; " \
1725        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1726        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1727     ); \
1728     showBlock("FCMGT_S_S_Z after", &block[0], 4); \
1729     printf("\n"); \
1730  }
1731
1732//======== FCMLE_D_D_Z ========//
1733
1734#define GEN_test_FCMLE_D_D_Z \
1735  __attribute__((noinline)) static void test_FCMLE_D_D_Z ( void ) \
1736  { \
1737     V128 block[4]; \
1738     randBlock_Doubles(&block[0], 3); \
1739     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1740     showBlock("FCMLE_D_D_Z before", &block[0], 4); \
1741     __asm__ __volatile__( \
1742        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1743        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1744        "fcmle d29, d11, #0; " \
1745        "mrs x9, nzcv; str x9, [%0, 48]; " \
1746        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1747        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1748     ); \
1749     showBlock("FCMLE_D_D_Z after", &block[0], 4); \
1750     printf("\n"); \
1751  }
1752
1753//======== FCMLE_S_S_Z ========//
1754
1755#define GEN_test_FCMLE_S_S_Z \
1756  __attribute__((noinline)) static void test_FCMLE_S_S_Z ( void ) \
1757  { \
1758     V128 block[4]; \
1759     randBlock_Floats(&block[0], 3); \
1760     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1761     showBlock("FCMLE_S_S_Z before", &block[0], 4); \
1762     __asm__ __volatile__( \
1763        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1764        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1765        "fcmle s29, s11, #0; " \
1766        "mrs x9, nzcv; str x9, [%0, 48]; " \
1767        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1768        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1769     ); \
1770     showBlock("FCMLE_S_S_Z after", &block[0], 4); \
1771     printf("\n"); \
1772  }
1773
1774//======== FCMLT_D_D_Z ========//
1775
1776#define GEN_test_FCMLT_D_D_Z \
1777  __attribute__((noinline)) static void test_FCMLT_D_D_Z ( void ) \
1778  { \
1779     V128 block[4]; \
1780     randBlock_Doubles(&block[0], 3); \
1781     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1782     showBlock("FCMLT_D_D_Z before", &block[0], 4); \
1783     __asm__ __volatile__( \
1784        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1785        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1786        "fcmlt d29, d11, #0; " \
1787        "mrs x9, nzcv; str x9, [%0, 48]; " \
1788        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1789        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1790     ); \
1791     showBlock("FCMLT_D_D_Z after", &block[0], 4); \
1792     printf("\n"); \
1793  }
1794
1795//======== FCMLT_S_S_Z ========//
1796
1797#define GEN_test_FCMLT_S_S_Z \
1798  __attribute__((noinline)) static void test_FCMLT_S_S_Z ( void ) \
1799  { \
1800     V128 block[4]; \
1801     randBlock_Floats(&block[0], 3); \
1802     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1803     showBlock("FCMLT_S_S_Z before", &block[0], 4); \
1804     __asm__ __volatile__( \
1805        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1806        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1807        "fcmlt s29, s11, #0; " \
1808        "mrs x9, nzcv; str x9, [%0, 48]; " \
1809        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1810        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1811     ); \
1812     showBlock("FCMLT_S_S_Z after", &block[0], 4); \
1813     printf("\n"); \
1814  }
1815
1816//======== FCMP_D_D ========//
1817
1818#define GEN_test_FCMP_D_D \
1819  __attribute__((noinline)) static void test_FCMP_D_D ( void ) \
1820  { \
1821     V128 block[4]; \
1822     randBlock_Doubles(&block[0], 3); \
1823     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1824     showBlock("FCMP_D_D before", &block[0], 4); \
1825     __asm__ __volatile__( \
1826        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1827        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1828        "fcmp d29, d11; " \
1829        "mrs x9, nzcv; str x9, [%0, 48]; " \
1830        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1831        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1832     ); \
1833     showBlock("FCMP_D_D after", &block[0], 4); \
1834     printf("\n"); \
1835  }
1836
1837//======== FCMP_S_S ========//
1838
1839#define GEN_test_FCMP_S_S \
1840  __attribute__((noinline)) static void test_FCMP_S_S ( void ) \
1841  { \
1842     V128 block[4]; \
1843     randBlock_Floats(&block[0], 3); \
1844     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1845     showBlock("FCMP_S_S before", &block[0], 4); \
1846     __asm__ __volatile__( \
1847        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1848        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1849        "fcmp s29, s11; " \
1850        "mrs x9, nzcv; str x9, [%0, 48]; " \
1851        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1852        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1853     ); \
1854     showBlock("FCMP_S_S after", &block[0], 4); \
1855     printf("\n"); \
1856  }
1857
1858//======== FCMPE_D_D ========//
1859
1860#define GEN_test_FCMPE_D_D \
1861  __attribute__((noinline)) static void test_FCMPE_D_D ( void ) \
1862  { \
1863     V128 block[4]; \
1864     randBlock_Doubles(&block[0], 3); \
1865     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1866     showBlock("FCMPE_D_D before", &block[0], 4); \
1867     __asm__ __volatile__( \
1868        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1869        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1870        "fcmpe d29, d11; " \
1871        "mrs x9, nzcv; str x9, [%0, 48]; " \
1872        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1873        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1874     ); \
1875     showBlock("FCMPE_D_D after", &block[0], 4); \
1876     printf("\n"); \
1877  }
1878
1879//======== FCMPE_S_S ========//
1880
1881#define GEN_test_FCMPE_S_S \
1882  __attribute__((noinline)) static void test_FCMPE_S_S ( void ) \
1883  { \
1884     V128 block[4]; \
1885     randBlock_Floats(&block[0], 3); \
1886     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1887     showBlock("FCMPE_S_S before", &block[0], 4); \
1888     __asm__ __volatile__( \
1889        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1890        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1891        "fcmpe s29, s11; " \
1892        "mrs x9, nzcv; str x9, [%0, 48]; " \
1893        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1894        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1895     ); \
1896     showBlock("FCMPE_S_S after", &block[0], 4); \
1897     printf("\n"); \
1898  }
1899
1900//======== FCMP_D_Z ========//
1901
1902#define GEN_test_FCMP_D_Z \
1903  __attribute__((noinline)) static void test_FCMP_D_Z ( void ) \
1904  { \
1905     V128 block[4]; \
1906     randBlock_Doubles(&block[0], 3); \
1907     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1908     showBlock("FCMP_D_Z before", &block[0], 4); \
1909     __asm__ __volatile__( \
1910        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1911        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1912        "fcmp d29, #0; " \
1913        "mrs x9, nzcv; str x9, [%0, 48]; " \
1914        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1915        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1916     ); \
1917     showBlock("FCMP_D_Z after", &block[0], 4); \
1918     printf("\n"); \
1919  }
1920
1921//======== FCMP_S_Z ========//
1922
1923#define GEN_test_FCMP_S_Z \
1924  __attribute__((noinline)) static void test_FCMP_S_Z ( void ) \
1925  { \
1926     V128 block[4]; \
1927     randBlock_Floats(&block[0], 3); \
1928     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1929     showBlock("FCMP_S_Z before", &block[0], 4); \
1930     __asm__ __volatile__( \
1931        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1932        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1933        "fcmp s29, #0; " \
1934        "mrs x9, nzcv; str x9, [%0, 48]; " \
1935        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1936        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1937     ); \
1938     showBlock("FCMP_S_Z after", &block[0], 4); \
1939     printf("\n"); \
1940  }
1941
1942//======== FCMPE_D_Z ========//
1943
1944#define GEN_test_FCMPE_D_Z \
1945  __attribute__((noinline)) static void test_FCMPE_D_Z ( void ) \
1946  { \
1947     V128 block[4]; \
1948     randBlock_Doubles(&block[0], 3); \
1949     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1950     showBlock("FCMPE_D_Z before", &block[0], 4); \
1951     __asm__ __volatile__( \
1952        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1953        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1954        "fcmpe d29, #0; " \
1955        "mrs x9, nzcv; str x9, [%0, 48]; " \
1956        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1957        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1958     ); \
1959     showBlock("FCMPE_D_Z after", &block[0], 4); \
1960     printf("\n"); \
1961  }
1962
1963//======== FCMPE_S_Z ========//
1964
1965#define GEN_test_FCMPE_S_Z \
1966  __attribute__((noinline)) static void test_FCMPE_S_Z ( void ) \
1967  { \
1968     V128 block[4]; \
1969     randBlock_Floats(&block[0], 3); \
1970     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1971     showBlock("FCMPE_S_Z before", &block[0], 4); \
1972     __asm__ __volatile__( \
1973        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1974        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1975        "fcmpe s29, #0; " \
1976        "mrs x9, nzcv; str x9, [%0, 48]; " \
1977        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1978        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
1979     ); \
1980     showBlock("FCMPE_S_Z after", &block[0], 4); \
1981     printf("\n"); \
1982  }
1983
1984//======== FCSEL_D_D_D_EQ ========//
1985
1986#define GEN_test_FCSEL_D_D_D_EQ \
1987  __attribute__((noinline)) static void test_FCSEL_D_D_D_EQ ( void ) \
1988  { \
1989     V128 block[4]; \
1990     randBlock_Doubles(&block[0], 3); \
1991     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
1992     showBlock("FCSEL_D_D_D_EQ before", &block[0], 4); \
1993     __asm__ __volatile__( \
1994        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
1995        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
1996        "fcsel d29, d11, d9, eq; " \
1997        "mrs x9, nzcv; str x9, [%0, 48]; " \
1998        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
1999        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
2000     ); \
2001     showBlock("FCSEL_D_D_D_EQ after", &block[0], 4); \
2002     printf("\n"); \
2003  }
2004
2005//======== FCSEL_D_D_D_NE ========//
2006
2007#define GEN_test_FCSEL_D_D_D_NE \
2008  __attribute__((noinline)) static void test_FCSEL_D_D_D_NE ( void ) \
2009  { \
2010     V128 block[4]; \
2011     randBlock_Doubles(&block[0], 3); \
2012     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
2013     showBlock("FCSEL_D_D_D_NE before", &block[0], 4); \
2014     __asm__ __volatile__( \
2015        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
2016        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
2017        "fcsel d29, d11, d9, ne; " \
2018        "mrs x9, nzcv; str x9, [%0, 48]; " \
2019        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
2020        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
2021     ); \
2022     showBlock("FCSEL_D_D_D_NE after", &block[0], 4); \
2023     printf("\n"); \
2024  }
2025
2026//======== FCSEL_S_S_S_EQ ========//
2027
2028#define GEN_test_FCSEL_S_S_S_EQ \
2029  __attribute__((noinline)) static void test_FCSEL_S_S_S_EQ ( void ) \
2030  { \
2031     V128 block[4]; \
2032     randBlock_Doubles(&block[0], 3); \
2033     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
2034     showBlock("FCSEL_S_S_S_EQ before", &block[0], 4); \
2035     __asm__ __volatile__( \
2036        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
2037        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
2038        "fcsel s29, s11, s9, eq; " \
2039        "mrs x9, nzcv; str x9, [%0, 48]; " \
2040        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
2041        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
2042     ); \
2043     showBlock("FCSEL_S_S_S_EQ after", &block[0], 4); \
2044     printf("\n"); \
2045  }
2046
2047//======== FCSEL_S_S_S_NE ========//
2048
2049#define GEN_test_FCSEL_S_S_S_NE \
2050  __attribute__((noinline)) static void test_FCSEL_S_S_S_NE ( void ) \
2051  { \
2052     V128 block[4]; \
2053     randBlock_Doubles(&block[0], 3); \
2054     block[3].u64[0] = dup4x16(0x5); block[3].u64[1] = dup4x16(0xA); \
2055     showBlock("FCSEL_S_S_S_NE before", &block[0], 4); \
2056     __asm__ __volatile__( \
2057        "ldr x9,  [%0, 48];  msr nzcv, x9; " \
2058        "ldr q29, [%0, #0];  ldr q11, [%0, #16];  ldr q9, [%0, #32]; " \
2059        "fcsel s29, s11, s9, ne; " \
2060        "mrs x9, nzcv; str x9, [%0, 48]; " \
2061        "str q29, [%0, #0];  str q11, [%0, #16];  str q9, [%0, #32]; " \
2062        ::"r"(&block[0]) : "x9","cc","memory","v9","v11","v29" \
2063     ); \
2064     showBlock("FCSEL_S_S_S_NE after", &block[0], 4); \
2065     printf("\n"); \
2066  }
2067
2068
2069/* ---------------------------------------------------------------- */
2070/* -- Tests, in the same order that they appear in main()        -- */
2071/* ---------------------------------------------------------------- */
2072
2073// ======================== FP ========================
2074
2075GEN_TWOVEC_TEST(fabs_d_d,   "fabs d22,    d23",    22, 23)
2076GEN_TWOVEC_TEST(fabs_s_s,   "fabs s22,    s23",    22, 23)
2077GEN_TWOVEC_TEST(fabs_2d_2d, "fabs v22.2d, v23.2d", 22, 23)
2078GEN_TWOVEC_TEST(fabs_4s_4s, "fabs v22.4s, v23.4s", 22, 23)
2079GEN_TWOVEC_TEST(fabs_2s_2s, "fabs v22.2s, v23.2s", 22, 23)
2080
2081GEN_TWOVEC_TEST(fneg_d_d,   "fneg d22, d23",       22, 23)
2082GEN_TWOVEC_TEST(fneg_s_s,   "fneg s22, s23",       22, 23)
2083GEN_TWOVEC_TEST(fneg_2d_2d, "fneg v22.2d, v23.2d", 22, 23)
2084GEN_TWOVEC_TEST(fneg_4s_4s, "fneg v22.4s, v23.4s", 22, 23)
2085GEN_TWOVEC_TEST(fneg_2s_2s, "fneg v22.2s, v23.2s", 22, 23)
2086
2087GEN_TWOVEC_TEST(fsqrt_d_d,   "fsqrt d22, d23",       22, 23)
2088GEN_TWOVEC_TEST(fsqrt_s_s,   "fsqrt s22, s23",       22, 23)
2089GEN_TWOVEC_TEST(fsqrt_2d_2d, "fsqrt v22.2d, v23.2d", 22, 23)
2090GEN_TWOVEC_TEST(fsqrt_4s_4s, "fsqrt v22.4s, v23.4s", 22, 23)
2091GEN_TWOVEC_TEST(fsqrt_2s_2s, "fsqrt v22.2s, v23.2s", 22, 23)
2092
2093GEN_THREEVEC_TEST(fadd_d_d_d,  "fadd d2, d11, d29", 2, 11, 29)
2094GEN_THREEVEC_TEST(fadd_s_s_s,  "fadd s2, s11, s29", 2, 11, 29)
2095GEN_THREEVEC_TEST(fsub_d_d_d,  "fsub d2, d11, d29", 2, 11, 29)
2096GEN_THREEVEC_TEST(fsub_s_s_s,  "fsub s2, s11, s29", 2, 11, 29)
2097
2098GEN_BINARY_TEST(fadd, 2d, 2d, 2d)
2099GEN_BINARY_TEST(fadd, 4s, 4s, 4s)
2100GEN_BINARY_TEST(fadd, 2s, 2s, 2s)
2101GEN_BINARY_TEST(fsub, 2d, 2d, 2d)
2102GEN_BINARY_TEST(fsub, 4s, 4s, 4s)
2103GEN_BINARY_TEST(fsub, 2s, 2s, 2s)
2104
2105GEN_THREEVEC_TEST(fabd_d_d_d,  "fabd d2, d11, d29", 2, 11, 29)
2106GEN_THREEVEC_TEST(fabd_s_s_s,  "fabd s2, s11, s29", 2, 11, 29)
2107GEN_BINARY_TEST(fabd, 2d, 2d, 2d)
2108GEN_BINARY_TEST(fabd, 4s, 4s, 4s)
2109GEN_BINARY_TEST(fabd, 2s, 2s, 2s)
2110
2111GEN_TWOVEC_TEST(faddp_d_2d,     "faddp d2, v23.2d",    2, 23)
2112GEN_TWOVEC_TEST(faddp_s_2s,     "faddp s2, v23.2s",    2, 23)
2113GEN_THREEVEC_TEST(faddp_2d_2d_2d, "faddp v2.2d, v23.2d, v11.2d", 2, 23, 11)
2114GEN_THREEVEC_TEST(faddp_4s_4s_4s, "faddp v2.4s, v23.4s, v11.4s", 2, 23, 11)
2115GEN_THREEVEC_TEST(faddp_2s_2s_2s, "faddp v2.2s, v23.2s, v11.2s", 2, 23, 11)
2116
2117GEN_test_FCCMP_D_D_0xF_EQ
2118GEN_test_FCCMP_D_D_0xF_NE
2119GEN_test_FCCMP_D_D_0x0_EQ
2120GEN_test_FCCMP_D_D_0x0_NE
2121GEN_test_FCCMP_S_S_0xF_EQ
2122GEN_test_FCCMP_S_S_0xF_NE
2123GEN_test_FCCMP_S_S_0x0_EQ
2124GEN_test_FCCMP_S_S_0x0_NE
2125GEN_test_FCCMPE_D_D_0xF_EQ
2126GEN_test_FCCMPE_D_D_0xF_NE
2127GEN_test_FCCMPE_D_D_0x0_EQ
2128GEN_test_FCCMPE_D_D_0x0_NE
2129GEN_test_FCCMPE_S_S_0xF_EQ
2130GEN_test_FCCMPE_S_S_0xF_NE
2131GEN_test_FCCMPE_S_S_0x0_EQ
2132GEN_test_FCCMPE_S_S_0x0_NE
2133
2134GEN_test_FCMEQ_D_D_D
2135GEN_test_FCMEQ_S_S_S
2136GEN_test_FCMGE_D_D_D
2137GEN_test_FCMGE_S_S_S
2138GEN_test_FCMGT_D_D_D
2139GEN_test_FCMGT_S_S_S
2140GEN_test_FACGT_D_D_D
2141GEN_test_FACGT_S_S_S
2142GEN_test_FACGE_D_D_D
2143GEN_test_FACGE_S_S_S
2144
2145GEN_THREEVEC_TEST(fcmeq_2d_2d_2d, "fcmeq v2.2d, v23.2d, v11.2d", 2, 23, 11)
2146GEN_THREEVEC_TEST(fcmeq_4s_4s_4s, "fcmeq v2.4s, v23.4s, v11.4s", 2, 23, 11)
2147GEN_THREEVEC_TEST(fcmeq_2s_2s_2s, "fcmeq v2.2s, v23.2s, v11.2s", 2, 23, 11)
2148GEN_THREEVEC_TEST(fcmge_2d_2d_2d, "fcmge v2.2d, v23.2d, v11.2d", 2, 23, 11)
2149GEN_THREEVEC_TEST(fcmge_4s_4s_4s, "fcmge v2.4s, v23.4s, v11.4s", 2, 23, 11)
2150GEN_THREEVEC_TEST(fcmge_2s_2s_2s, "fcmge v2.2s, v23.2s, v11.2s", 2, 23, 11)
2151GEN_THREEVEC_TEST(fcmgt_2d_2d_2d, "fcmgt v2.2d, v23.2d, v11.2d", 2, 23, 11)
2152GEN_THREEVEC_TEST(fcmgt_4s_4s_4s, "fcmgt v2.4s, v23.4s, v11.4s", 2, 23, 11)
2153GEN_THREEVEC_TEST(fcmgt_2s_2s_2s, "fcmgt v2.2s, v23.2s, v11.2s", 2, 23, 11)
2154GEN_THREEVEC_TEST(facge_2d_2d_2d, "facge v2.2d, v23.2d, v11.2d", 2, 23, 11)
2155GEN_THREEVEC_TEST(facge_4s_4s_4s, "facge v2.4s, v23.4s, v11.4s", 2, 23, 11)
2156GEN_THREEVEC_TEST(facge_2s_2s_2s, "facge v2.2s, v23.2s, v11.2s", 2, 23, 11)
2157GEN_THREEVEC_TEST(facgt_2d_2d_2d, "facgt v2.2d, v23.2d, v11.2d", 2, 23, 11)
2158GEN_THREEVEC_TEST(facgt_4s_4s_4s, "facgt v2.4s, v23.4s, v11.4s", 2, 23, 11)
2159GEN_THREEVEC_TEST(facgt_2s_2s_2s, "facgt v2.2s, v23.2s, v11.2s", 2, 23, 11)
2160
2161GEN_test_FCMEQ_D_D_Z
2162GEN_test_FCMEQ_S_S_Z
2163GEN_test_FCMGE_D_D_Z
2164GEN_test_FCMGE_S_S_Z
2165GEN_test_FCMGT_D_D_Z
2166GEN_test_FCMGT_S_S_Z
2167GEN_test_FCMLE_D_D_Z
2168GEN_test_FCMLE_S_S_Z
2169GEN_test_FCMLT_D_D_Z
2170GEN_test_FCMLT_S_S_Z
2171
2172GEN_TWOVEC_TEST(fcmeq_z_2d_2d, "fcmeq v2.2d, v23.2d, #0", 2, 23)
2173GEN_TWOVEC_TEST(fcmeq_z_4s_4s, "fcmeq v2.4s, v23.4s, #0", 2, 23)
2174GEN_TWOVEC_TEST(fcmeq_z_2s_2s, "fcmeq v2.2s, v23.2s, #0", 2, 23)
2175GEN_TWOVEC_TEST(fcmge_z_2d_2d, "fcmge v2.2d, v23.2d, #0", 2, 23)
2176GEN_TWOVEC_TEST(fcmge_z_4s_4s, "fcmge v2.4s, v23.4s, #0", 2, 23)
2177GEN_TWOVEC_TEST(fcmge_z_2s_2s, "fcmge v2.2s, v23.2s, #0", 2, 23)
2178GEN_TWOVEC_TEST(fcmgt_z_2d_2d, "fcmgt v2.2d, v23.2d, #0", 2, 23)
2179GEN_TWOVEC_TEST(fcmgt_z_4s_4s, "fcmgt v2.4s, v23.4s, #0", 2, 23)
2180GEN_TWOVEC_TEST(fcmgt_z_2s_2s, "fcmgt v2.2s, v23.2s, #0", 2, 23)
2181GEN_TWOVEC_TEST(fcmle_z_2d_2d, "fcmle v2.2d, v23.2d, #0", 2, 23)
2182GEN_TWOVEC_TEST(fcmle_z_4s_4s, "fcmle v2.4s, v23.4s, #0", 2, 23)
2183GEN_TWOVEC_TEST(fcmle_z_2s_2s, "fcmle v2.2s, v23.2s, #0", 2, 23)
2184GEN_TWOVEC_TEST(fcmlt_z_2d_2d, "fcmlt v2.2d, v23.2d, #0", 2, 23)
2185GEN_TWOVEC_TEST(fcmlt_z_4s_4s, "fcmlt v2.4s, v23.4s, #0", 2, 23)
2186GEN_TWOVEC_TEST(fcmlt_z_2s_2s, "fcmlt v2.2s, v23.2s, #0", 2, 23)
2187
2188GEN_test_FCMP_D_Z
2189GEN_test_FCMP_S_Z
2190GEN_test_FCMPE_D_Z
2191GEN_test_FCMPE_S_Z
2192GEN_test_FCMP_D_D
2193GEN_test_FCMP_S_S
2194GEN_test_FCMPE_D_D
2195GEN_test_FCMPE_S_S
2196
2197GEN_test_FCSEL_D_D_D_EQ
2198GEN_test_FCSEL_D_D_D_NE
2199GEN_test_FCSEL_S_S_S_EQ
2200GEN_test_FCSEL_S_S_S_NE
2201
2202GEN_THREEVEC_TEST(fdiv_d_d_d,  "fdiv d2, d11, d29", 2, 11, 29)
2203GEN_THREEVEC_TEST(fdiv_s_s_s,  "fdiv s2, s11, s29", 2, 11, 29)
2204GEN_BINARY_TEST(fdiv, 2d, 2d, 2d)
2205GEN_BINARY_TEST(fdiv, 4s, 4s, 4s)
2206GEN_BINARY_TEST(fdiv, 2s, 2s, 2s)
2207
2208GEN_FOURVEC_TEST(fmadd_d_d_d_d,  "fmadd  d2, d11, d29, d3", 2, 11, 29, 3)
2209GEN_FOURVEC_TEST(fmadd_s_s_s_s,  "fmadd  s2, s11, s29, s3", 2, 11, 29, 3)
2210GEN_FOURVEC_TEST(fnmadd_d_d_d_d, "fnmadd d2, d11, d29, d3", 2, 11, 29, 3)
2211GEN_FOURVEC_TEST(fnmadd_s_s_s_s, "fnmadd s2, s11, s29, s3", 2, 11, 29, 3)
2212GEN_FOURVEC_TEST(fmsub_d_d_d_d,  "fmsub  d2, d11, d29, d3", 2, 11, 29, 3)
2213GEN_FOURVEC_TEST(fmsub_s_s_s_s,  "fmsub  s2, s11, s29, s3", 2, 11, 29, 3)
2214GEN_FOURVEC_TEST(fnmsub_d_d_d_d, "fnmsub d2, d11, d29, d3", 2, 11, 29, 3)
2215GEN_FOURVEC_TEST(fnmsub_s_s_s_s, "fnmsub s2, s11, s29, s3", 2, 11, 29, 3)
2216
2217GEN_THREEVEC_TEST(fnmul_d_d_d, "fnmul d2, d11, d29", 2, 11, 29)
2218GEN_THREEVEC_TEST(fnmul_s_s_s, "fnmul s2, s11, s29", 2, 11, 29)
2219
2220GEN_THREEVEC_TEST(fmax_d_d_d,  "fmax d2, d11, d29", 2, 11, 29)
2221GEN_THREEVEC_TEST(fmax_s_s_s,  "fmax s2, s11, s29", 2, 11, 29)
2222GEN_THREEVEC_TEST(fmin_d_d_d,  "fmin d2, d11, d29", 2, 11, 29)
2223GEN_THREEVEC_TEST(fmin_s_s_s,  "fmin s2, s11, s29", 2, 11, 29)
2224GEN_THREEVEC_TEST(fmaxnm_d_d_d,  "fmaxnm d2, d11, d29", 2, 11, 29)
2225GEN_THREEVEC_TEST(fmaxnm_s_s_s,  "fmaxnm s2, s11, s29", 2, 11, 29)
2226GEN_THREEVEC_TEST(fminnm_d_d_d,  "fminnm d2, d11, d29", 2, 11, 29)
2227GEN_THREEVEC_TEST(fminnm_s_s_s,  "fminnm s2, s11, s29", 2, 11, 29)
2228
2229GEN_THREEVEC_TEST(fmax_2d_2d_2d, "fmax v2.2d, v23.2d, v11.2d", 2, 23, 11)
2230GEN_THREEVEC_TEST(fmax_4s_4s_4s, "fmax v2.4s, v23.4s, v11.4s", 2, 23, 11)
2231GEN_THREEVEC_TEST(fmax_2s_2s_2s, "fmax v2.2s, v23.2s, v11.2s", 2, 23, 11)
2232GEN_THREEVEC_TEST(fmin_2d_2d_2d, "fmin v2.2d, v23.2d, v11.2d", 2, 23, 11)
2233GEN_THREEVEC_TEST(fmin_4s_4s_4s, "fmin v2.4s, v23.4s, v11.4s", 2, 23, 11)
2234GEN_THREEVEC_TEST(fmin_2s_2s_2s, "fmin v2.2s, v23.2s, v11.2s", 2, 23, 11)
2235GEN_THREEVEC_TEST(fmaxnm_2d_2d_2d, "fmaxnm v2.2d, v23.2d, v11.2d", 2, 23, 11)
2236GEN_THREEVEC_TEST(fmaxnm_4s_4s_4s, "fmaxnm v2.4s, v23.4s, v11.4s", 2, 23, 11)
2237GEN_THREEVEC_TEST(fmaxnm_2s_2s_2s, "fmaxnm v2.2s, v23.2s, v11.2s", 2, 23, 11)
2238GEN_THREEVEC_TEST(fminnm_2d_2d_2d, "fminnm v2.2d, v23.2d, v11.2d", 2, 23, 11)
2239GEN_THREEVEC_TEST(fminnm_4s_4s_4s, "fminnm v2.4s, v23.4s, v11.4s", 2, 23, 11)
2240GEN_THREEVEC_TEST(fminnm_2s_2s_2s, "fminnm v2.2s, v23.2s, v11.2s", 2, 23, 11)
2241
2242GEN_TWOVEC_TEST(fmaxnmp_d_2d, "fmaxnmp d2, v23.2d", 2, 23)
2243GEN_TWOVEC_TEST(fmaxnmp_s_2s, "fmaxnmp s2, v23.2s", 2, 23)
2244GEN_TWOVEC_TEST(fminnmp_d_2d, "fminnmp d2, v23.2d", 2, 23)
2245GEN_TWOVEC_TEST(fminnmp_s_2s, "fminnmp s2, v23.2s", 2, 23)
2246
2247GEN_THREEVEC_TEST(fmaxnmp_2d_2d_2d, "fmaxnmp v2.2d, v23.2d, v11.2d", 2, 23, 11)
2248GEN_THREEVEC_TEST(fmaxnmp_4s_4s_4s, "fmaxnmp v2.4s, v23.4s, v11.4s", 2, 23, 11)
2249GEN_THREEVEC_TEST(fmaxnmp_2s_2s_2s, "fmaxnmp v2.2s, v23.2s, v11.2s", 2, 23, 11)
2250GEN_THREEVEC_TEST(fminnmp_2d_2d_2d, "fminnmp v2.2d, v23.2d, v11.2d", 2, 23, 11)
2251GEN_THREEVEC_TEST(fminnmp_4s_4s_4s, "fminnmp v2.4s, v23.4s, v11.4s", 2, 23, 11)
2252GEN_THREEVEC_TEST(fminnmp_2s_2s_2s, "fminnmp v2.2s, v23.2s, v11.2s", 2, 23, 11)
2253
2254GEN_TWOVEC_TEST(fmaxnmv_s_4s, "fmaxnmv s2, v23.4s", 2, 23)
2255GEN_TWOVEC_TEST(fminnmv_s_4s, "fminnmv s2, v23.4s", 2, 23)
2256
2257GEN_TWOVEC_TEST(fmaxp_d_2d, "fmaxp d2, v23.2d", 2, 23)
2258GEN_TWOVEC_TEST(fmaxp_s_2s, "fmaxp s2, v23.2s", 2, 23)
2259GEN_TWOVEC_TEST(fminp_d_2d, "fminp d2, v23.2d", 2, 23)
2260GEN_TWOVEC_TEST(fminp_s_2s, "fminp s2, v23.2s", 2, 23)
2261
2262GEN_THREEVEC_TEST(fmaxp_2d_2d_2d, "fmaxp v2.2d, v23.2d, v11.2d", 2, 23, 11)
2263GEN_THREEVEC_TEST(fmaxp_4s_4s_4s, "fmaxp v2.4s, v23.4s, v11.4s", 2, 23, 11)
2264GEN_THREEVEC_TEST(fmaxp_2s_2s_2s, "fmaxp v2.2s, v23.2s, v11.2s", 2, 23, 11)
2265GEN_THREEVEC_TEST(fminp_2d_2d_2d, "fminp v2.2d, v23.2d, v11.2d", 2, 23, 11)
2266GEN_THREEVEC_TEST(fminp_4s_4s_4s, "fminp v2.4s, v23.4s, v11.4s", 2, 23, 11)
2267GEN_THREEVEC_TEST(fminp_2s_2s_2s, "fminp v2.2s, v23.2s, v11.2s", 2, 23, 11)
2268
2269GEN_TWOVEC_TEST(fmaxv_s_4s, "fmaxv s2, v23.4s", 2, 23)
2270GEN_TWOVEC_TEST(fminv_s_4s, "fminv s2, v23.4s", 2, 23)
2271
2272GEN_THREEVEC_TEST(fmla_2d_2d_2d, "fmla v2.2d, v23.2d, v11.2d", 2, 23, 11)
2273GEN_THREEVEC_TEST(fmla_4s_4s_4s, "fmla v2.4s, v23.4s, v11.4s", 2, 23, 11)
2274GEN_THREEVEC_TEST(fmla_2s_2s_2s, "fmla v2.2s, v23.2s, v11.2s", 2, 23, 11)
2275GEN_THREEVEC_TEST(fmls_2d_2d_2d, "fmls v2.2d, v23.2d, v11.2d", 2, 23, 11)
2276GEN_THREEVEC_TEST(fmls_4s_4s_4s, "fmls v2.4s, v23.4s, v11.4s", 2, 23, 11)
2277GEN_THREEVEC_TEST(fmls_2s_2s_2s, "fmls v2.2s, v23.2s, v11.2s", 2, 23, 11)
2278
2279GEN_THREEVEC_TEST(fmla_d_d_d0, "fmla d2, d11, v29.d[0]", 2, 11, 29)
2280GEN_THREEVEC_TEST(fmla_d_d_d1, "fmla d2, d11, v29.d[1]", 2, 11, 29)
2281GEN_THREEVEC_TEST(fmla_s_s_s0, "fmla s2, s11, v29.s[0]", 2, 11, 29)
2282GEN_THREEVEC_TEST(fmla_s_s_s3, "fmla s2, s11, v29.s[3]", 2, 11, 29)
2283GEN_THREEVEC_TEST(fmls_d_d_d0, "fmls d2, d11, v29.d[0]", 2, 11, 29)
2284GEN_THREEVEC_TEST(fmls_d_d_d1, "fmls d2, d11, v29.d[1]", 2, 11, 29)
2285GEN_THREEVEC_TEST(fmls_s_s_s0, "fmls s2, s11, v29.s[0]", 2, 11, 29)
2286GEN_THREEVEC_TEST(fmls_s_s_s3, "fmls s2, s11, v29.s[3]", 2, 11, 29)
2287
2288GEN_THREEVEC_TEST(fmla_2d_2d_d0, "fmla v2.2d, v11.2d, v29.d[0]", 2, 11, 29)
2289GEN_THREEVEC_TEST(fmla_2d_2d_d1, "fmla v2.2d, v11.2d, v29.d[1]", 2, 11, 29)
2290GEN_THREEVEC_TEST(fmla_4s_4s_s0, "fmla v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
2291GEN_THREEVEC_TEST(fmla_4s_4s_s3, "fmla v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
2292GEN_THREEVEC_TEST(fmla_2s_2s_s0, "fmla v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
2293GEN_THREEVEC_TEST(fmla_2s_2s_s3, "fmla v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
2294
2295GEN_THREEVEC_TEST(fmls_2d_2d_d0, "fmls v2.2d, v11.2d, v29.d[0]", 2, 11, 29)
2296GEN_THREEVEC_TEST(fmls_2d_2d_d1, "fmls v2.2d, v11.2d, v29.d[1]", 2, 11, 29)
2297GEN_THREEVEC_TEST(fmls_4s_4s_s0, "fmls v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
2298GEN_THREEVEC_TEST(fmls_4s_4s_s3, "fmls v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
2299GEN_THREEVEC_TEST(fmls_2s_2s_s0, "fmls v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
2300GEN_THREEVEC_TEST(fmls_2s_2s_s3, "fmls v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
2301
2302GEN_TWOVEC_TEST(fmov_2d_imm_01, "fmov v22.2d, #0.125", 22, 23)
2303GEN_TWOVEC_TEST(fmov_2d_imm_02, "fmov v22.2d, #-4.0",  22, 23)
2304GEN_TWOVEC_TEST(fmov_2d_imm_03, "fmov v22.2d, #1.0",   22, 23)
2305GEN_TWOVEC_TEST(fmov_4s_imm_01, "fmov v22.4s, #0.125", 22, 23)
2306GEN_TWOVEC_TEST(fmov_4s_imm_02, "fmov v22.4s, #-4.0",  22, 23)
2307GEN_TWOVEC_TEST(fmov_4s_imm_03, "fmov v22.4s, #1.0",   22, 23)
2308GEN_TWOVEC_TEST(fmov_2s_imm_01, "fmov v22.2s, #0.125", 22, 23)
2309GEN_TWOVEC_TEST(fmov_2s_imm_02, "fmov v22.2s, #-4.0",  22, 23)
2310GEN_TWOVEC_TEST(fmov_2s_imm_03, "fmov v22.2s, #1.0",   22, 23)
2311
2312GEN_TWOVEC_TEST(fmov_d_d,  "fmov d22, d23",   22, 23)
2313GEN_TWOVEC_TEST(fmov_s_s,  "fmov s22, s23",   22, 23)
2314
2315GEN_ONEINT_ONEVEC_TEST(fmov_s_w,  "fmov s7,      w15", 15, 7)
2316GEN_ONEINT_ONEVEC_TEST(fmov_d_x,  "fmov d7,      x15", 15, 7)
2317GEN_ONEINT_ONEVEC_TEST(fmov_d1_x, "fmov v7.d[1], x15", 15, 7)
2318GEN_ONEINT_ONEVEC_TEST(fmov_w_s,  "fmov w15,      s7", 15, 7)
2319GEN_ONEINT_ONEVEC_TEST(fmov_x_d,  "fmov x15,      d7", 15, 7)
2320GEN_ONEINT_ONEVEC_TEST(fmov_x_d1, "fmov x15, v7.d[1]", 15, 7)
2321
2322/* overkill -- don't need two vecs, only one */
2323GEN_TWOVEC_TEST(fmov_d_imm_01, "fmov d22, #0.125", 22, 23)
2324GEN_TWOVEC_TEST(fmov_d_imm_02, "fmov d22, #-4.0",  22, 23)
2325GEN_TWOVEC_TEST(fmov_d_imm_03, "fmov d22, #1.0",   22, 23)
2326GEN_TWOVEC_TEST(fmov_s_imm_01, "fmov s22, #0.125", 22, 23)
2327GEN_TWOVEC_TEST(fmov_s_imm_02, "fmov s22, #-4.0",  22, 23)
2328GEN_TWOVEC_TEST(fmov_s_imm_03, "fmov s22, #-1.0",   22, 23)
2329
2330GEN_THREEVEC_TEST(fmul_d_d_d0, "fmul d2, d11, v29.d[0]", 2, 11, 29)
2331GEN_THREEVEC_TEST(fmul_d_d_d1, "fmul d2, d11, v29.d[1]", 2, 11, 29)
2332GEN_THREEVEC_TEST(fmul_s_s_s0, "fmul s2, s11, v29.s[0]", 2, 11, 29)
2333GEN_THREEVEC_TEST(fmul_s_s_s3, "fmul s2, s11, v29.s[3]", 2, 11, 29)
2334
2335GEN_THREEVEC_TEST(fmul_2d_2d_d0, "fmul v2.2d, v11.2d, v29.d[0]", 2, 11, 29)
2336GEN_THREEVEC_TEST(fmul_2d_2d_d1, "fmul v2.2d, v11.2d, v29.d[1]", 2, 11, 29)
2337GEN_THREEVEC_TEST(fmul_4s_4s_s0, "fmul v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
2338GEN_THREEVEC_TEST(fmul_4s_4s_s3, "fmul v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
2339GEN_THREEVEC_TEST(fmul_2s_2s_s0, "fmul v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
2340GEN_THREEVEC_TEST(fmul_2s_2s_s3, "fmul v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
2341
2342GEN_THREEVEC_TEST(fmul_d_d_d,    "fmul d2, d11, d29", 2, 11, 29)
2343GEN_THREEVEC_TEST(fmul_s_s_s,    "fmul s2, s11, s29", 2, 11, 29)
2344GEN_THREEVEC_TEST(fmul_2d_2d_2d, "fmul v2.2d, v11.2d, v29.2d", 2, 11, 29)
2345GEN_THREEVEC_TEST(fmul_4s_4s_4s, "fmul v2.4s, v11.4s, v29.4s", 2, 11, 29)
2346GEN_THREEVEC_TEST(fmul_2s_2s_2s, "fmul v2.2s, v11.2s, v29.2s", 2, 11, 29)
2347
2348GEN_THREEVEC_TEST(fmulx_d_d_d0, "fmulx d2, d11, v29.d[0]", 2, 11, 29)
2349GEN_THREEVEC_TEST(fmulx_d_d_d1, "fmulx d2, d11, v29.d[1]", 2, 11, 29)
2350GEN_THREEVEC_TEST(fmulx_s_s_s0, "fmulx s2, s11, v29.s[0]", 2, 11, 29)
2351GEN_THREEVEC_TEST(fmulx_s_s_s3, "fmulx s2, s11, v29.s[3]", 2, 11, 29)
2352GEN_THREEVEC_TEST(fmulx_2d_2d_d0, "fmulx v2.2d, v11.2d, v29.d[0]", 2, 11, 29)
2353GEN_THREEVEC_TEST(fmulx_2d_2d_d1, "fmulx v2.2d, v11.2d, v29.d[1]", 2, 11, 29)
2354GEN_THREEVEC_TEST(fmulx_4s_4s_s0, "fmulx v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
2355GEN_THREEVEC_TEST(fmulx_4s_4s_s3, "fmulx v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
2356GEN_THREEVEC_TEST(fmulx_2s_2s_s0, "fmulx v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
2357GEN_THREEVEC_TEST(fmulx_2s_2s_s3, "fmulx v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
2358
2359GEN_THREEVEC_TEST(fmulx_d_d_d,    "fmulx d2, d11, d29", 2, 11, 29)
2360GEN_THREEVEC_TEST(fmulx_s_s_s,    "fmulx s2, s11, s29", 2, 11, 29)
2361GEN_THREEVEC_TEST(fmulx_2d_2d_2d, "fmulx v2.2d, v11.2d, v29.2d", 2, 11, 29)
2362GEN_THREEVEC_TEST(fmulx_4s_4s_4s, "fmulx v2.4s, v11.4s, v29.4s", 2, 11, 29)
2363GEN_THREEVEC_TEST(fmulx_2s_2s_2s, "fmulx v2.2s, v11.2s, v29.2s", 2, 11, 29)
2364
2365GEN_TWOVEC_TEST(frecpe_d_d,   "frecpe d22, d23",       22, 23)
2366GEN_TWOVEC_TEST(frecpe_s_s,   "frecpe s22, s23",       22, 23)
2367GEN_TWOVEC_TEST(frecpe_2d_2d, "frecpe v22.2d, v23.2d", 22, 23)
2368GEN_TWOVEC_TEST(frecpe_4s_4s, "frecpe v22.4s, v23.4s", 22, 23)
2369GEN_TWOVEC_TEST(frecpe_2s_2s, "frecpe v22.2s, v23.2s", 22, 23)
2370
2371GEN_THREEVEC_TEST(frecps_d_d_d,    "frecps d2, d11, d29", 2, 11, 29)
2372GEN_THREEVEC_TEST(frecps_s_s_s,    "frecps s2, s11, s29", 2, 11, 29)
2373GEN_THREEVEC_TEST(frecps_2d_2d_2d, "frecps v2.2d, v11.2d, v29.2d", 2, 11, 29)
2374GEN_THREEVEC_TEST(frecps_4s_4s_4s, "frecps v2.4s, v11.4s, v29.4s", 2, 11, 29)
2375GEN_THREEVEC_TEST(frecps_2s_2s_2s, "frecps v2.2s, v11.2s, v29.2s", 2, 11, 29)
2376
2377GEN_TWOVEC_TEST(frecpx_d_d,   "frecpx d22, d23",       22, 23)
2378GEN_TWOVEC_TEST(frecpx_s_s,   "frecpx s22, s23",       22, 23)
2379
2380GEN_TWOVEC_TEST(frinta_d_d,   "frinta d22, d23",       22, 23)
2381GEN_TWOVEC_TEST(frinta_s_s,   "frinta s22, s23",       22, 23)
2382GEN_TWOVEC_TEST(frinti_d_d,   "frinti d22, d23",       22, 23)
2383GEN_TWOVEC_TEST(frinti_s_s,   "frinti s22, s23",       22, 23)
2384GEN_TWOVEC_TEST(frintm_d_d,   "frintm d22, d23",       22, 23)
2385GEN_TWOVEC_TEST(frintm_s_s,   "frintm s22, s23",       22, 23)
2386GEN_TWOVEC_TEST(frintn_d_d,   "frintn d22, d23",       22, 23)
2387GEN_TWOVEC_TEST(frintn_s_s,   "frintn s22, s23",       22, 23)
2388GEN_TWOVEC_TEST(frintp_d_d,   "frintp d22, d23",       22, 23)
2389GEN_TWOVEC_TEST(frintp_s_s,   "frintp s22, s23",       22, 23)
2390GEN_TWOVEC_TEST(frintx_d_d,   "frintx d22, d23",       22, 23)
2391GEN_TWOVEC_TEST(frintx_s_s,   "frintx s22, s23",       22, 23)
2392GEN_TWOVEC_TEST(frintz_d_d,   "frintz d22, d23",       22, 23)
2393GEN_TWOVEC_TEST(frintz_s_s,   "frintz s22, s23",       22, 23)
2394
2395GEN_TWOVEC_TEST(frinta_2d_2d, "frinta v2.2d, v11.2d", 2, 11)
2396GEN_TWOVEC_TEST(frinta_4s_4s, "frinta v2.4s, v11.4s", 2, 11)
2397GEN_TWOVEC_TEST(frinta_2s_2s, "frinta v2.2s, v11.2s", 2, 11)
2398GEN_TWOVEC_TEST(frinti_2d_2d, "frinti v2.2d, v11.2d", 2, 11)
2399GEN_TWOVEC_TEST(frinti_4s_4s, "frinti v2.4s, v11.4s", 2, 11)
2400GEN_TWOVEC_TEST(frinti_2s_2s, "frinti v2.2s, v11.2s", 2, 11)
2401GEN_TWOVEC_TEST(frintm_2d_2d, "frintm v2.2d, v11.2d", 2, 11)
2402GEN_TWOVEC_TEST(frintm_4s_4s, "frintm v2.4s, v11.4s", 2, 11)
2403GEN_TWOVEC_TEST(frintm_2s_2s, "frintm v2.2s, v11.2s", 2, 11)
2404GEN_TWOVEC_TEST(frintn_2d_2d, "frintn v2.2d, v11.2d", 2, 11)
2405GEN_TWOVEC_TEST(frintn_4s_4s, "frintn v2.4s, v11.4s", 2, 11)
2406GEN_TWOVEC_TEST(frintn_2s_2s, "frintn v2.2s, v11.2s", 2, 11)
2407GEN_TWOVEC_TEST(frintp_2d_2d, "frintp v2.2d, v11.2d", 2, 11)
2408GEN_TWOVEC_TEST(frintp_4s_4s, "frintp v2.4s, v11.4s", 2, 11)
2409GEN_TWOVEC_TEST(frintp_2s_2s, "frintp v2.2s, v11.2s", 2, 11)
2410GEN_TWOVEC_TEST(frintx_2d_2d, "frintx v2.2d, v11.2d", 2, 11)
2411GEN_TWOVEC_TEST(frintx_4s_4s, "frintx v2.4s, v11.4s", 2, 11)
2412GEN_TWOVEC_TEST(frintx_2s_2s, "frintx v2.2s, v11.2s", 2, 11)
2413GEN_TWOVEC_TEST(frintz_2d_2d, "frintz v2.2d, v11.2d", 2, 11)
2414GEN_TWOVEC_TEST(frintz_4s_4s, "frintz v2.4s, v11.4s", 2, 11)
2415GEN_TWOVEC_TEST(frintz_2s_2s, "frintz v2.2s, v11.2s", 2, 11)
2416
2417GEN_TWOVEC_TEST(frsqrte_d_d,   "frsqrte d22, d23",       22, 23)
2418GEN_TWOVEC_TEST(frsqrte_s_s,   "frsqrte s22, s23",       22, 23)
2419GEN_TWOVEC_TEST(frsqrte_2d_2d, "frsqrte v22.2d, v23.2d", 22, 23)
2420GEN_TWOVEC_TEST(frsqrte_4s_4s, "frsqrte v22.4s, v23.4s", 22, 23)
2421GEN_TWOVEC_TEST(frsqrte_2s_2s, "frsqrte v22.2s, v23.2s", 22, 23)
2422
2423GEN_THREEVEC_TEST(frsqrts_d_d_d,    "frsqrts d2, d11, d29", 2, 11, 29)
2424GEN_THREEVEC_TEST(frsqrts_s_s_s,    "frsqrts s2, s11, s29", 2, 11, 29)
2425GEN_THREEVEC_TEST(frsqrts_2d_2d_2d, "frsqrts v2.2d, v11.2d, v29.2d", 2, 11, 29)
2426GEN_THREEVEC_TEST(frsqrts_4s_4s_4s, "frsqrts v2.4s, v11.4s, v29.4s", 2, 11, 29)
2427GEN_THREEVEC_TEST(frsqrts_2s_2s_2s, "frsqrts v2.2s, v11.2s, v29.2s", 2, 11, 29)
2428
2429// ======================== CONV ========================
2430
2431GEN_TWOVEC_TEST(fcvt_s_h, "fcvt s7, h16", 7, 16)
2432GEN_TWOVEC_TEST(fcvt_d_h, "fcvt d7, h16", 7, 16)
2433GEN_TWOVEC_TEST(fcvt_h_s, "fcvt h7, s16", 7, 16)
2434GEN_TWOVEC_TEST(fcvt_d_s, "fcvt d7, s16", 7, 16)
2435GEN_TWOVEC_TEST(fcvt_h_d, "fcvt h7, d16", 7, 16)
2436GEN_TWOVEC_TEST(fcvt_s_d, "fcvt s7, d16", 7, 16)
2437
2438GEN_TWOVEC_TEST(fcvtl_4s_4h, "fcvtl  v11.4s, v29.4h", 11, 29)
2439GEN_TWOVEC_TEST(fcvtl_4s_8h, "fcvtl2 v11.4s, v29.8h", 11, 29)
2440GEN_TWOVEC_TEST(fcvtl_2d_2s, "fcvtl  v11.2d, v29.2s", 11, 29)
2441GEN_TWOVEC_TEST(fcvtl_2d_4s, "fcvtl2 v11.2d, v29.4s", 11, 29)
2442
2443GEN_TWOVEC_TEST(fcvtn_4h_4s, "fcvtn  v22.4h, v23.4s", 22, 23)
2444GEN_TWOVEC_TEST(fcvtn_8h_4s, "fcvtn2 v22.8h, v23.4s", 22, 23)
2445GEN_TWOVEC_TEST(fcvtn_2s_2d, "fcvtn  v22.2s, v23.2d", 22, 23)
2446GEN_TWOVEC_TEST(fcvtn_4s_2d, "fcvtn2 v22.4s, v23.2d", 22, 23)
2447
2448GEN_TWOVEC_TEST(fcvtas_d_d,   "fcvtas d10, d21",       10, 21)
2449GEN_TWOVEC_TEST(fcvtau_d_d,   "fcvtau d21, d10",       21, 10)
2450GEN_TWOVEC_TEST(fcvtas_s_s,   "fcvtas s10, s21",       10, 21)
2451GEN_TWOVEC_TEST(fcvtau_s_s,   "fcvtau s21, s10",       21, 10)
2452GEN_TWOVEC_TEST(fcvtas_2d_2d, "fcvtas v10.2d, v21.2d", 10, 21)
2453GEN_TWOVEC_TEST(fcvtau_2d_2d, "fcvtau v10.2d, v21.2d", 10, 21)
2454GEN_TWOVEC_TEST(fcvtas_4s_4s, "fcvtas v10.4s, v21.4s", 10, 21)
2455GEN_TWOVEC_TEST(fcvtau_4s_4s, "fcvtau v10.4s, v21.4s", 10, 21)
2456GEN_TWOVEC_TEST(fcvtas_2s_2s, "fcvtas v10.2s, v21.2s", 10, 21)
2457GEN_TWOVEC_TEST(fcvtau_2s_2s, "fcvtau v10.2s, v21.2s", 10, 21)
2458GEN_ONEINT_ONEVEC_TEST(fcvtas_w_s, "fcvtas w21, s10", 21, 10)
2459GEN_ONEINT_ONEVEC_TEST(fcvtau_w_s, "fcvtau w21, s10", 21, 10)
2460GEN_ONEINT_ONEVEC_TEST(fcvtas_x_s, "fcvtas x21, s10", 21, 10)
2461GEN_ONEINT_ONEVEC_TEST(fcvtau_x_s, "fcvtau x21, s10", 21, 10)
2462GEN_ONEINT_ONEVEC_TEST(fcvtas_w_d, "fcvtas w21, d10", 21, 10)
2463GEN_ONEINT_ONEVEC_TEST(fcvtau_w_d, "fcvtau w21, d10", 21, 10)
2464GEN_ONEINT_ONEVEC_TEST(fcvtas_x_d, "fcvtas x21, d10", 21, 10)
2465GEN_ONEINT_ONEVEC_TEST(fcvtau_x_d, "fcvtau x21, d10", 21, 10)
2466
2467GEN_TWOVEC_TEST(fcvtms_d_d,   "fcvtms d10, d21",       10, 21)
2468GEN_TWOVEC_TEST(fcvtmu_d_d,   "fcvtmu d21, d10",       21, 10)
2469GEN_TWOVEC_TEST(fcvtms_s_s,   "fcvtms s10, s21",       10, 21)
2470GEN_TWOVEC_TEST(fcvtmu_s_s,   "fcvtmu s21, s10",       21, 10)
2471GEN_TWOVEC_TEST(fcvtms_2d_2d, "fcvtms v10.2d, v21.2d", 10, 21)
2472GEN_TWOVEC_TEST(fcvtmu_2d_2d, "fcvtmu v10.2d, v21.2d", 10, 21)
2473GEN_TWOVEC_TEST(fcvtms_4s_4s, "fcvtms v10.4s, v21.4s", 10, 21)
2474GEN_TWOVEC_TEST(fcvtmu_4s_4s, "fcvtmu v10.4s, v21.4s", 10, 21)
2475GEN_TWOVEC_TEST(fcvtms_2s_2s, "fcvtms v10.2s, v21.2s", 10, 21)
2476GEN_TWOVEC_TEST(fcvtmu_2s_2s, "fcvtmu v10.2s, v21.2s", 10, 21)
2477GEN_ONEINT_ONEVEC_TEST(fcvtms_w_s, "fcvtms w21, s10", 21, 10)
2478GEN_ONEINT_ONEVEC_TEST(fcvtmu_w_s, "fcvtmu w21, s10", 21, 10)
2479GEN_ONEINT_ONEVEC_TEST(fcvtms_x_s, "fcvtms x21, s10", 21, 10)
2480GEN_ONEINT_ONEVEC_TEST(fcvtmu_x_s, "fcvtmu x21, s10", 21, 10)
2481GEN_ONEINT_ONEVEC_TEST(fcvtms_w_d, "fcvtms w21, d10", 21, 10)
2482GEN_ONEINT_ONEVEC_TEST(fcvtmu_w_d, "fcvtmu w21, d10", 21, 10)
2483GEN_ONEINT_ONEVEC_TEST(fcvtms_x_d, "fcvtms x21, d10", 21, 10)
2484GEN_ONEINT_ONEVEC_TEST(fcvtmu_x_d, "fcvtmu x21, d10", 21, 10)
2485
2486GEN_TWOVEC_TEST(fcvtns_d_d,   "fcvtns d10, d21",       10, 21)
2487GEN_TWOVEC_TEST(fcvtnu_d_d,   "fcvtnu d21, d10",       21, 10)
2488GEN_TWOVEC_TEST(fcvtns_s_s,   "fcvtns s10, s21",       10, 21)
2489GEN_TWOVEC_TEST(fcvtnu_s_s,   "fcvtnu s21, s10",       21, 10)
2490GEN_TWOVEC_TEST(fcvtns_2d_2d, "fcvtns v10.2d, v21.2d", 10, 21)
2491GEN_TWOVEC_TEST(fcvtnu_2d_2d, "fcvtnu v10.2d, v21.2d", 10, 21)
2492GEN_TWOVEC_TEST(fcvtns_4s_4s, "fcvtns v10.4s, v21.4s", 10, 21)
2493GEN_TWOVEC_TEST(fcvtnu_4s_4s, "fcvtnu v10.4s, v21.4s", 10, 21)
2494GEN_TWOVEC_TEST(fcvtns_2s_2s, "fcvtns v10.2s, v21.2s", 10, 21)
2495GEN_TWOVEC_TEST(fcvtnu_2s_2s, "fcvtnu v10.2s, v21.2s", 10, 21)
2496GEN_ONEINT_ONEVEC_TEST(fcvtns_w_s, "fcvtns w21, s10", 21, 10)
2497GEN_ONEINT_ONEVEC_TEST(fcvtnu_w_s, "fcvtnu w21, s10", 21, 10)
2498GEN_ONEINT_ONEVEC_TEST(fcvtns_x_s, "fcvtns x21, s10", 21, 10)
2499GEN_ONEINT_ONEVEC_TEST(fcvtnu_x_s, "fcvtnu x21, s10", 21, 10)
2500GEN_ONEINT_ONEVEC_TEST(fcvtns_w_d, "fcvtns w21, d10", 21, 10)
2501GEN_ONEINT_ONEVEC_TEST(fcvtnu_w_d, "fcvtnu w21, d10", 21, 10)
2502GEN_ONEINT_ONEVEC_TEST(fcvtns_x_d, "fcvtns x21, d10", 21, 10)
2503GEN_ONEINT_ONEVEC_TEST(fcvtnu_x_d, "fcvtnu x21, d10", 21, 10)
2504
2505GEN_TWOVEC_TEST(fcvtps_d_d,   "fcvtps d10, d21",       10, 21)
2506GEN_TWOVEC_TEST(fcvtpu_d_d,   "fcvtpu d21, d10",       21, 10)
2507GEN_TWOVEC_TEST(fcvtps_s_s,   "fcvtps s10, s21",       10, 21)
2508GEN_TWOVEC_TEST(fcvtpu_s_s,   "fcvtpu s21, s10",       21, 10)
2509GEN_TWOVEC_TEST(fcvtps_2d_2d, "fcvtps v10.2d, v21.2d", 10, 21)
2510GEN_TWOVEC_TEST(fcvtpu_2d_2d, "fcvtpu v10.2d, v21.2d", 10, 21)
2511GEN_TWOVEC_TEST(fcvtps_4s_4s, "fcvtps v10.4s, v21.4s", 10, 21)
2512GEN_TWOVEC_TEST(fcvtpu_4s_4s, "fcvtpu v10.4s, v21.4s", 10, 21)
2513GEN_TWOVEC_TEST(fcvtps_2s_2s, "fcvtps v10.2s, v21.2s", 10, 21)
2514GEN_TWOVEC_TEST(fcvtpu_2s_2s, "fcvtpu v10.2s, v21.2s", 10, 21)
2515GEN_ONEINT_ONEVEC_TEST(fcvtps_w_s, "fcvtps w21, s10", 21, 10)
2516GEN_ONEINT_ONEVEC_TEST(fcvtpu_w_s, "fcvtpu w21, s10", 21, 10)
2517GEN_ONEINT_ONEVEC_TEST(fcvtps_x_s, "fcvtps x21, s10", 21, 10)
2518GEN_ONEINT_ONEVEC_TEST(fcvtpu_x_s, "fcvtpu x21, s10", 21, 10)
2519GEN_ONEINT_ONEVEC_TEST(fcvtps_w_d, "fcvtps w21, d10", 21, 10)
2520GEN_ONEINT_ONEVEC_TEST(fcvtpu_w_d, "fcvtpu w21, d10", 21, 10)
2521GEN_ONEINT_ONEVEC_TEST(fcvtps_x_d, "fcvtps x21, d10", 21, 10)
2522GEN_ONEINT_ONEVEC_TEST(fcvtpu_x_d, "fcvtpu x21, d10", 21, 10)
2523
2524GEN_TWOVEC_TEST(fcvtzs_d_d,   "fcvtzs d10, d21",       10, 21)
2525GEN_TWOVEC_TEST(fcvtzu_d_d,   "fcvtzu d21, d10",       21, 10)
2526GEN_TWOVEC_TEST(fcvtzs_s_s,   "fcvtzs s10, s21",       10, 21)
2527GEN_TWOVEC_TEST(fcvtzu_s_s,   "fcvtzu s21, s10",       21, 10)
2528GEN_TWOVEC_TEST(fcvtzs_2d_2d, "fcvtzs v10.2d, v21.2d", 10, 21)
2529GEN_TWOVEC_TEST(fcvtzu_2d_2d, "fcvtzu v10.2d, v21.2d", 10, 21)
2530GEN_TWOVEC_TEST(fcvtzs_4s_4s, "fcvtzs v10.4s, v21.4s", 10, 21)
2531GEN_TWOVEC_TEST(fcvtzu_4s_4s, "fcvtzu v10.4s, v21.4s", 10, 21)
2532GEN_TWOVEC_TEST(fcvtzs_2s_2s, "fcvtzs v10.2s, v21.2s", 10, 21)
2533GEN_TWOVEC_TEST(fcvtzu_2s_2s, "fcvtzu v10.2s, v21.2s", 10, 21)
2534GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_s, "fcvtzs w21, s10", 21, 10)
2535GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_s, "fcvtzu w21, s10", 21, 10)
2536GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_s, "fcvtzs x21, s10", 21, 10)
2537GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_s, "fcvtzu x21, s10", 21, 10)
2538GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_d, "fcvtzs w21, d10", 21, 10)
2539GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_d, "fcvtzu w21, d10", 21, 10)
2540GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_d, "fcvtzs x21, d10", 21, 10)
2541GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_d, "fcvtzu x21, d10", 21, 10)
2542
2543GEN_TWOVEC_TEST(fcvtzs_d_d_fbits1,    "fcvtzs d10, d21, #1",   10, 21)
2544GEN_TWOVEC_TEST(fcvtzs_d_d_fbits32,   "fcvtzs d10, d21, #32",  10, 21)
2545GEN_TWOVEC_TEST(fcvtzs_d_d_fbits64,   "fcvtzs d10, d21, #64",  10, 21)
2546GEN_TWOVEC_TEST(fcvtzu_d_d_fbits1,    "fcvtzu d10, d21, #1",   10, 21)
2547GEN_TWOVEC_TEST(fcvtzu_d_d_fbits32,   "fcvtzu d10, d21, #32",  10, 21)
2548GEN_TWOVEC_TEST(fcvtzu_d_d_fbits64,   "fcvtzu d10, d21, #64",  10, 21)
2549GEN_TWOVEC_TEST(fcvtzs_s_s_fbits1,    "fcvtzs s10, s21, #1",   10, 21)
2550GEN_TWOVEC_TEST(fcvtzs_s_s_fbits16,   "fcvtzs s10, s21, #16",  10, 21)
2551GEN_TWOVEC_TEST(fcvtzs_s_s_fbits32,   "fcvtzs s10, s21, #32",  10, 21)
2552GEN_TWOVEC_TEST(fcvtzu_s_s_fbits1,    "fcvtzu s10, s21, #1",   10, 21)
2553GEN_TWOVEC_TEST(fcvtzu_s_s_fbits16,   "fcvtzu s10, s21, #16",  10, 21)
2554GEN_TWOVEC_TEST(fcvtzu_s_s_fbits32,   "fcvtzu s10, s21, #32",  10, 21)
2555GEN_TWOVEC_TEST(fcvtzs_2d_2d_fbits1,  "fcvtzs v10.2d, v21.2d, #1",  10, 21)
2556GEN_TWOVEC_TEST(fcvtzs_2d_2d_fbits32, "fcvtzs v10.2d, v21.2d, #32", 10, 21)
2557GEN_TWOVEC_TEST(fcvtzs_2d_2d_fbits64, "fcvtzs v10.2d, v21.2d, #64", 10, 21)
2558GEN_TWOVEC_TEST(fcvtzu_2d_2d_fbits1,  "fcvtzu v10.2d, v21.2d, #1",  10, 21)
2559GEN_TWOVEC_TEST(fcvtzu_2d_2d_fbits32, "fcvtzu v10.2d, v21.2d, #32", 10, 21)
2560GEN_TWOVEC_TEST(fcvtzu_2d_2d_fbits64, "fcvtzu v10.2d, v21.2d, #64", 10, 21)
2561GEN_TWOVEC_TEST(fcvtzs_4s_4s_fbits1,  "fcvtzs v10.4s, v21.4s, #1",  10, 21)
2562GEN_TWOVEC_TEST(fcvtzs_4s_4s_fbits16, "fcvtzs v10.4s, v21.4s, #16", 10, 21)
2563GEN_TWOVEC_TEST(fcvtzs_4s_4s_fbits32, "fcvtzs v10.4s, v21.4s, #32", 10, 21)
2564GEN_TWOVEC_TEST(fcvtzu_4s_4s_fbits1,  "fcvtzu v10.4s, v21.4s, #1",  10, 21)
2565GEN_TWOVEC_TEST(fcvtzu_4s_4s_fbits16, "fcvtzu v10.4s, v21.4s, #16", 10, 21)
2566GEN_TWOVEC_TEST(fcvtzu_4s_4s_fbits32, "fcvtzu v10.4s, v21.4s, #32", 10, 21)
2567GEN_TWOVEC_TEST(fcvtzs_2s_2s_fbits1,  "fcvtzs v10.2s, v21.2s, #1",  10, 21)
2568GEN_TWOVEC_TEST(fcvtzs_2s_2s_fbits16, "fcvtzs v10.2s, v21.2s, #16", 10, 21)
2569GEN_TWOVEC_TEST(fcvtzs_2s_2s_fbits32, "fcvtzs v10.2s, v21.2s, #32", 10, 21)
2570GEN_TWOVEC_TEST(fcvtzu_2s_2s_fbits1,  "fcvtzu v10.2s, v21.2s, #1",  10, 21)
2571GEN_TWOVEC_TEST(fcvtzu_2s_2s_fbits16, "fcvtzu v10.2s, v21.2s, #16", 10, 21)
2572GEN_TWOVEC_TEST(fcvtzu_2s_2s_fbits32, "fcvtzu v10.2s, v21.2s, #32", 10, 21)
2573GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_s_fbits1,  "fcvtzs w21, s10, #1",  21, 10)
2574GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_s_fbits16, "fcvtzs w21, s10, #16", 21, 10)
2575GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_s_fbits32, "fcvtzs w21, s10, #32", 21, 10)
2576GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_s_fbits1,  "fcvtzu w21, s10, #1",  21, 10)
2577GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_s_fbits16, "fcvtzu w21, s10, #16", 21, 10)
2578GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_s_fbits32, "fcvtzu w21, s10, #32", 21, 10)
2579GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_s_fbits1,  "fcvtzs x21, s10, #1",  21, 10)
2580GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_s_fbits32, "fcvtzs x21, s10, #32", 21, 10)
2581GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_s_fbits64, "fcvtzs x21, s10, #64", 21, 10)
2582GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_s_fbits1,  "fcvtzu x21, s10, #1",  21, 10)
2583GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_s_fbits32, "fcvtzu x21, s10, #32", 21, 10)
2584GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_s_fbits64, "fcvtzu x21, s10, #64", 21, 10)
2585GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_d_fbits1,  "fcvtzs w21, d10, #1",  21, 10)
2586GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_d_fbits16, "fcvtzs w21, d10, #16", 21, 10)
2587GEN_ONEINT_ONEVEC_TEST(fcvtzs_w_d_fbits32, "fcvtzs w21, d10, #32", 21, 10)
2588GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_d_fbits1,  "fcvtzu w21, d10, #1",  21, 10)
2589GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_d_fbits16, "fcvtzu w21, d10, #16", 21, 10)
2590GEN_ONEINT_ONEVEC_TEST(fcvtzu_w_d_fbits32, "fcvtzu w21, d10, #32", 21, 10)
2591GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_d_fbits1,  "fcvtzs x21, d10, #1",  21, 10)
2592GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_d_fbits32, "fcvtzs x21, d10, #32", 21, 10)
2593GEN_ONEINT_ONEVEC_TEST(fcvtzs_x_d_fbits64, "fcvtzs x21, d10, #64", 21, 10)
2594GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_d_fbits1,  "fcvtzu x21, d10, #1",  21, 10)
2595GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_d_fbits32, "fcvtzu x21, d10, #32", 21, 10)
2596GEN_ONEINT_ONEVEC_TEST(fcvtzu_x_d_fbits64, "fcvtzu x21, d10, #64", 21, 10)
2597
2598GEN_TWOVEC_TEST(fcvtxn_s_d,   "fcvtxn s10, d21", 10, 21)
2599GEN_TWOVEC_TEST(fcvtxn_2s_2d, "fcvtxn  v10.2s, v21.2d", 10, 21)
2600GEN_TWOVEC_TEST(fcvtxn_4s_2d, "fcvtxn2 v10.4s, v21.2d", 10, 21)
2601
2602GEN_TWOVEC_TEST(scvtf_d_d_fbits1,    "scvtf d10, d21      , #1",  10, 21)
2603GEN_TWOVEC_TEST(scvtf_d_d_fbits32,   "scvtf d10, d21      , #32", 10, 21)
2604GEN_TWOVEC_TEST(scvtf_d_d_fbits64,   "scvtf d10, d21      , #64", 10, 21)
2605GEN_TWOVEC_TEST(ucvtf_d_d_fbits1,    "ucvtf d21, d10      , #1",  21, 10)
2606GEN_TWOVEC_TEST(ucvtf_d_d_fbits32,   "ucvtf d21, d10      , #32", 21, 10)
2607GEN_TWOVEC_TEST(ucvtf_d_d_fbits64,   "ucvtf d21, d10      , #64", 21, 10)
2608GEN_TWOVEC_TEST(scvtf_s_s_fbits1,    "scvtf s10, s21      , #1",  10, 21)
2609GEN_TWOVEC_TEST(scvtf_s_s_fbits16,   "scvtf s10, s21      , #16", 10, 21)
2610GEN_TWOVEC_TEST(scvtf_s_s_fbits32,   "scvtf s10, s21      , #32", 10, 21)
2611GEN_TWOVEC_TEST(ucvtf_s_s_fbits1,    "ucvtf s21, s10      , #1",  21, 10)
2612GEN_TWOVEC_TEST(ucvtf_s_s_fbits16,   "ucvtf s21, s10      , #16", 21, 10)
2613GEN_TWOVEC_TEST(ucvtf_s_s_fbits32,   "ucvtf s21, s10      , #32", 21, 10)
2614GEN_TWOVEC_TEST(scvtf_2d_2d_fbits1,  "scvtf v10.2d, v21.2d, #1",  10, 21)
2615GEN_TWOVEC_TEST(scvtf_2d_2d_fbits32, "scvtf v10.2d, v21.2d, #32", 10, 21)
2616GEN_TWOVEC_TEST(scvtf_2d_2d_fbits64, "scvtf v10.2d, v21.2d, #64", 10, 21)
2617GEN_TWOVEC_TEST(ucvtf_2d_2d_fbits1,  "ucvtf v10.2d, v21.2d, #1",  10, 21)
2618GEN_TWOVEC_TEST(ucvtf_2d_2d_fbits32, "ucvtf v10.2d, v21.2d, #32", 10, 21)
2619GEN_TWOVEC_TEST(ucvtf_2d_2d_fbits64, "ucvtf v10.2d, v21.2d, #64", 10, 21)
2620GEN_TWOVEC_TEST(scvtf_4s_4s_fbits1,  "scvtf v10.4s, v21.4s, #1",  10, 21)
2621GEN_TWOVEC_TEST(scvtf_4s_4s_fbits16, "scvtf v10.4s, v21.4s, #16", 10, 21)
2622GEN_TWOVEC_TEST(scvtf_4s_4s_fbits32, "scvtf v10.4s, v21.4s, #32", 10, 21)
2623GEN_TWOVEC_TEST(ucvtf_4s_4s_fbits1,  "ucvtf v10.4s, v21.4s, #1",  10, 21)
2624GEN_TWOVEC_TEST(ucvtf_4s_4s_fbits16, "ucvtf v10.4s, v21.4s, #16", 10, 21)
2625GEN_TWOVEC_TEST(ucvtf_4s_4s_fbits32, "ucvtf v10.4s, v21.4s, #32", 10, 21)
2626GEN_TWOVEC_TEST(scvtf_2s_2s_fbits1,  "scvtf v10.2s, v21.2s, #1",  10, 21)
2627GEN_TWOVEC_TEST(scvtf_2s_2s_fbits16, "scvtf v10.2s, v21.2s, #16", 10, 21)
2628GEN_TWOVEC_TEST(scvtf_2s_2s_fbits32, "scvtf v10.2s, v21.2s, #32", 10, 21)
2629GEN_TWOVEC_TEST(ucvtf_2s_2s_fbits1,  "ucvtf v10.2s, v21.2s, #1",  10, 21)
2630GEN_TWOVEC_TEST(ucvtf_2s_2s_fbits16, "ucvtf v10.2s, v21.2s, #16", 10, 21)
2631GEN_TWOVEC_TEST(ucvtf_2s_2s_fbits32, "ucvtf v10.2s, v21.2s, #32", 10, 21)
2632
2633GEN_TWOVEC_TEST(scvtf_d_d,   "scvtf d10, d21",       10, 21)
2634GEN_TWOVEC_TEST(ucvtf_d_d,   "ucvtf d21, d10",       21, 10)
2635GEN_TWOVEC_TEST(scvtf_s_s,   "scvtf s10, s21",       10, 21)
2636GEN_TWOVEC_TEST(ucvtf_s_s,   "ucvtf s21, s10",       21, 10)
2637GEN_TWOVEC_TEST(scvtf_2d_2d, "scvtf v10.2d, v21.2d", 10, 21)
2638GEN_TWOVEC_TEST(ucvtf_2d_2d, "ucvtf v10.2d, v21.2d", 10, 21)
2639GEN_TWOVEC_TEST(scvtf_4s_4s, "scvtf v10.4s, v21.4s", 10, 21)
2640GEN_TWOVEC_TEST(ucvtf_4s_4s, "ucvtf v10.4s, v21.4s", 10, 21)
2641GEN_TWOVEC_TEST(scvtf_2s_2s, "scvtf v10.2s, v21.2s", 10, 21)
2642GEN_TWOVEC_TEST(ucvtf_2s_2s, "ucvtf v10.2s, v21.2s", 10, 21)
2643
2644GEN_ONEINT_ONEVEC_TEST(scvtf_s_w_fbits1,  "scvtf s7, w15, #1",  15, 7)
2645GEN_ONEINT_ONEVEC_TEST(scvtf_s_w_fbits16, "scvtf s7, w15, #16", 15, 7)
2646GEN_ONEINT_ONEVEC_TEST(scvtf_s_w_fbits32, "scvtf s7, w15, #32", 15, 7)
2647GEN_ONEINT_ONEVEC_TEST(scvtf_d_w_fbits1,  "scvtf d7, w15, #1",  15, 7)
2648GEN_ONEINT_ONEVEC_TEST(scvtf_d_w_fbits16, "scvtf d7, w15, #16", 15, 7)
2649GEN_ONEINT_ONEVEC_TEST(scvtf_d_w_fbits32, "scvtf d7, w15, #32", 15, 7)
2650GEN_ONEINT_ONEVEC_TEST(scvtf_s_x_fbits1,  "scvtf s7, x15, #1",  15, 7)
2651GEN_ONEINT_ONEVEC_TEST(scvtf_s_x_fbits32, "scvtf s7, x15, #32", 15, 7)
2652GEN_ONEINT_ONEVEC_TEST(scvtf_s_x_fbits64, "scvtf s7, x15, #64", 15, 7)
2653GEN_ONEINT_ONEVEC_TEST(scvtf_d_x_fbits1,  "scvtf d7, x15, #1",  15, 7)
2654GEN_ONEINT_ONEVEC_TEST(scvtf_d_x_fbits32, "scvtf d7, x15, #32", 15, 7)
2655GEN_ONEINT_ONEVEC_TEST(scvtf_d_x_fbits64, "scvtf d7, x15, #64", 15, 7)
2656GEN_ONEINT_ONEVEC_TEST(ucvtf_s_w_fbits1,  "ucvtf s7, w15, #1",  15, 7)
2657GEN_ONEINT_ONEVEC_TEST(ucvtf_s_w_fbits16, "ucvtf s7, w15, #16", 15, 7)
2658GEN_ONEINT_ONEVEC_TEST(ucvtf_s_w_fbits32, "ucvtf s7, w15, #32", 15, 7)
2659GEN_ONEINT_ONEVEC_TEST(ucvtf_d_w_fbits1,  "ucvtf d7, w15, #1",  15, 7)
2660GEN_ONEINT_ONEVEC_TEST(ucvtf_d_w_fbits16, "ucvtf d7, w15, #16", 15, 7)
2661GEN_ONEINT_ONEVEC_TEST(ucvtf_d_w_fbits32, "ucvtf d7, w15, #32", 15, 7)
2662GEN_ONEINT_ONEVEC_TEST(ucvtf_s_x_fbits1,  "ucvtf s7, x15, #1",  15, 7)
2663GEN_ONEINT_ONEVEC_TEST(ucvtf_s_x_fbits32, "ucvtf s7, x15, #32", 15, 7)
2664GEN_ONEINT_ONEVEC_TEST(ucvtf_s_x_fbits64, "ucvtf s7, x15, #64", 15, 7)
2665GEN_ONEINT_ONEVEC_TEST(ucvtf_d_x_fbits1,  "ucvtf d7, x15, #1",  15, 7)
2666GEN_ONEINT_ONEVEC_TEST(ucvtf_d_x_fbits32, "ucvtf d7, x15, #32", 15, 7)
2667GEN_ONEINT_ONEVEC_TEST(ucvtf_d_x_fbits64, "ucvtf d7, x15, #64", 15, 7)
2668
2669GEN_ONEINT_ONEVEC_TEST(scvtf_s_w, "scvtf s7, w15", 15, 7)
2670GEN_ONEINT_ONEVEC_TEST(scvtf_d_w, "scvtf d7, w15", 15, 7)
2671GEN_ONEINT_ONEVEC_TEST(scvtf_s_x, "scvtf s7, x15", 15, 7)
2672GEN_ONEINT_ONEVEC_TEST(scvtf_d_x, "scvtf d7, x15", 15, 7)
2673GEN_ONEINT_ONEVEC_TEST(ucvtf_s_w, "ucvtf s7, w15", 15, 7)
2674GEN_ONEINT_ONEVEC_TEST(ucvtf_d_w, "ucvtf d7, w15", 15, 7)
2675GEN_ONEINT_ONEVEC_TEST(ucvtf_s_x, "ucvtf s7, x15", 15, 7)
2676GEN_ONEINT_ONEVEC_TEST(ucvtf_d_x, "ucvtf d7, x15", 15, 7)
2677
2678// ======================== INT ========================
2679
2680GEN_TWOVEC_TEST(abs_d_d,  "abs d22, d23",   22, 23)
2681GEN_TWOVEC_TEST(neg_d_d,  "neg d22, d23",   22, 23)
2682
2683GEN_UNARY_TEST(abs, 2d, 2d)
2684GEN_UNARY_TEST(abs, 4s, 4s)
2685GEN_UNARY_TEST(abs, 2s, 2s)
2686GEN_UNARY_TEST(abs, 8h, 8h)
2687GEN_UNARY_TEST(abs, 4h, 4h)
2688GEN_UNARY_TEST(abs, 16b, 16b)
2689GEN_UNARY_TEST(abs, 8b, 8b)
2690GEN_UNARY_TEST(neg, 2d, 2d)
2691GEN_UNARY_TEST(neg, 4s, 4s)
2692GEN_UNARY_TEST(neg, 2s, 2s)
2693GEN_UNARY_TEST(neg, 8h, 8h)
2694GEN_UNARY_TEST(neg, 4h, 4h)
2695GEN_UNARY_TEST(neg, 16b, 16b)
2696GEN_UNARY_TEST(neg, 8b,  8b)
2697
2698GEN_THREEVEC_TEST(add_d_d_d, "add d21, d22, d23", 21, 22, 23)
2699GEN_THREEVEC_TEST(sub_d_d_d, "sub d21, d22, d23", 21, 22, 23)
2700
2701GEN_BINARY_TEST(add, 2d, 2d, 2d)
2702GEN_BINARY_TEST(add, 4s, 4s, 4s)
2703GEN_BINARY_TEST(add, 2s, 2s, 2s)
2704GEN_BINARY_TEST(add, 8h, 8h, 8h)
2705GEN_BINARY_TEST(add, 4h, 4h, 4h)
2706GEN_BINARY_TEST(add, 16b, 16b, 16b)
2707GEN_BINARY_TEST(add, 8b, 8b, 8b)
2708GEN_BINARY_TEST(sub, 2d, 2d, 2d)
2709GEN_BINARY_TEST(sub, 4s, 4s, 4s)
2710GEN_BINARY_TEST(sub, 2s, 2s, 2s)
2711GEN_BINARY_TEST(sub, 8h, 8h, 8h)
2712GEN_BINARY_TEST(sub, 4h, 4h, 4h)
2713GEN_BINARY_TEST(sub, 16b, 16b, 16b)
2714GEN_BINARY_TEST(sub, 8b, 8b, 8b)
2715
2716GEN_BINARY_TEST(addhn,   2s, 2d, 2d)
2717GEN_BINARY_TEST(addhn2,  4s, 2d, 2d)
2718GEN_BINARY_TEST(addhn,   4h, 4s, 4s)
2719GEN_BINARY_TEST(addhn2,  8h, 4s, 4s)
2720GEN_BINARY_TEST(addhn,   8b, 8h, 8h)
2721GEN_BINARY_TEST(addhn2,  16b, 8h, 8h)
2722GEN_BINARY_TEST(subhn,   2s, 2d, 2d)
2723GEN_BINARY_TEST(subhn2,  4s, 2d, 2d)
2724GEN_BINARY_TEST(subhn,   4h, 4s, 4s)
2725GEN_BINARY_TEST(subhn2,  8h, 4s, 4s)
2726GEN_BINARY_TEST(subhn,   8b, 8h, 8h)
2727GEN_BINARY_TEST(subhn2,  16b, 8h, 8h)
2728GEN_BINARY_TEST(raddhn,  2s, 2d, 2d)
2729GEN_BINARY_TEST(raddhn2, 4s, 2d, 2d)
2730GEN_BINARY_TEST(raddhn,  4h, 4s, 4s)
2731GEN_BINARY_TEST(raddhn2, 8h, 4s, 4s)
2732GEN_BINARY_TEST(raddhn,  8b, 8h, 8h)
2733GEN_BINARY_TEST(raddhn2, 16b, 8h, 8h)
2734GEN_BINARY_TEST(rsubhn,  2s, 2d, 2d)
2735GEN_BINARY_TEST(rsubhn2, 4s, 2d, 2d)
2736GEN_BINARY_TEST(rsubhn,  4h, 4s, 4s)
2737GEN_BINARY_TEST(rsubhn2, 8h, 4s, 4s)
2738GEN_BINARY_TEST(rsubhn,  8b, 8h, 8h)
2739GEN_BINARY_TEST(rsubhn2, 16b, 8h, 8h)
2740
2741GEN_TWOVEC_TEST(addp_d_2d,  "addp d22, v23.2d",   22, 23)
2742
2743GEN_BINARY_TEST(addp, 2d, 2d, 2d)
2744GEN_BINARY_TEST(addp, 4s, 4s, 4s)
2745GEN_BINARY_TEST(addp, 2s, 2s, 2s)
2746GEN_BINARY_TEST(addp, 8h, 8h, 8h)
2747GEN_BINARY_TEST(addp, 4h, 4h, 4h)
2748GEN_BINARY_TEST(addp, 16b, 16b, 16b)
2749GEN_BINARY_TEST(addp, 8b, 8b, 8b)
2750
2751GEN_TWOVEC_TEST(addv_s_4s,  "addv s22, v23.4s",  22, 23)
2752GEN_TWOVEC_TEST(addv_h_8h,  "addv h22, v23.8h",  22, 23)
2753GEN_TWOVEC_TEST(addv_h_4h,  "addv h22, v23.4h",  22, 23)
2754GEN_TWOVEC_TEST(addv_b_16b, "addv b22, v23.16b", 22, 23)
2755GEN_TWOVEC_TEST(addv_b_8b,  "addv b22, v23.8b",  22, 23)
2756
2757GEN_BINARY_TEST(and, 16b, 16b, 16b)
2758GEN_BINARY_TEST(and, 8b, 8b, 8b)
2759GEN_BINARY_TEST(bic, 16b, 16b, 16b)
2760GEN_BINARY_TEST(bic, 8b, 8b, 8b)
2761GEN_BINARY_TEST(orr, 16b, 16b, 16b)
2762GEN_BINARY_TEST(orr, 8b, 8b, 8b)
2763GEN_BINARY_TEST(orn, 16b, 16b, 16b)
2764GEN_BINARY_TEST(orn, 8b, 8b, 8b)
2765
2766/* overkill -- don't need two vecs, only one */
2767GEN_TWOVEC_TEST(orr_8h_0x5A_lsl0, "orr v22.8h, #0x5A, LSL #0", 22, 23)
2768GEN_TWOVEC_TEST(orr_8h_0xA5_lsl8, "orr v22.8h, #0xA5, LSL #8", 22, 23)
2769GEN_TWOVEC_TEST(orr_4h_0x5A_lsl0, "orr v22.4h, #0x5A, LSL #0", 22, 23)
2770GEN_TWOVEC_TEST(orr_4h_0xA5_lsl8, "orr v22.4h, #0xA5, LSL #8", 22, 23)
2771GEN_TWOVEC_TEST(orr_4s_0x5A_lsl0,  "orr v22.4s, #0x5A, LSL #0",  22, 23)
2772GEN_TWOVEC_TEST(orr_4s_0x6B_lsl8,  "orr v22.4s, #0x6B, LSL #8",  22, 23)
2773GEN_TWOVEC_TEST(orr_4s_0x49_lsl16, "orr v22.4s, #0x49, LSL #16", 22, 23)
2774GEN_TWOVEC_TEST(orr_4s_0x3D_lsl24, "orr v22.4s, #0x3D, LSL #24", 22, 23)
2775GEN_TWOVEC_TEST(orr_2s_0x5A_lsl0,  "orr v22.2s, #0x5A, LSL #0",  22, 23)
2776GEN_TWOVEC_TEST(orr_2s_0x6B_lsl8,  "orr v22.2s, #0x6B, LSL #8",  22, 23)
2777GEN_TWOVEC_TEST(orr_2s_0x49_lsl16, "orr v22.2s, #0x49, LSL #16", 22, 23)
2778GEN_TWOVEC_TEST(orr_2s_0x3D_lsl24, "orr v22.2s, #0x3D, LSL #24", 22, 23)
2779GEN_TWOVEC_TEST(bic_8h_0x5A_lsl0, "bic v22.8h, #0x5A, LSL #0", 22, 23)
2780GEN_TWOVEC_TEST(bic_8h_0xA5_lsl8, "bic v22.8h, #0xA5, LSL #8", 22, 23)
2781GEN_TWOVEC_TEST(bic_4h_0x5A_lsl0, "bic v22.4h, #0x5A, LSL #0", 22, 23)
2782GEN_TWOVEC_TEST(bic_4h_0xA5_lsl8, "bic v22.4h, #0xA5, LSL #8", 22, 23)
2783GEN_TWOVEC_TEST(bic_4s_0x5A_lsl0,  "bic v22.4s, #0x5A, LSL #0",  22, 23)
2784GEN_TWOVEC_TEST(bic_4s_0x6B_lsl8,  "bic v22.4s, #0x6B, LSL #8",  22, 23)
2785GEN_TWOVEC_TEST(bic_4s_0x49_lsl16, "bic v22.4s, #0x49, LSL #16", 22, 23)
2786GEN_TWOVEC_TEST(bic_4s_0x3D_lsl24, "bic v22.4s, #0x3D, LSL #24", 22, 23)
2787GEN_TWOVEC_TEST(bic_2s_0x5A_lsl0,  "bic v22.2s, #0x5A, LSL #0",  22, 23)
2788GEN_TWOVEC_TEST(bic_2s_0x6B_lsl8,  "bic v22.2s, #0x6B, LSL #8",  22, 23)
2789GEN_TWOVEC_TEST(bic_2s_0x49_lsl16, "bic v22.2s, #0x49, LSL #16", 22, 23)
2790GEN_TWOVEC_TEST(bic_2s_0x3D_lsl24, "bic v22.2s, #0x3D, LSL #24", 22, 23)
2791
2792GEN_BINARY_TEST(bif, 16b, 16b, 16b)
2793GEN_BINARY_TEST(bif, 8b, 8b, 8b)
2794GEN_BINARY_TEST(bit, 16b, 16b, 16b)
2795GEN_BINARY_TEST(bit, 8b, 8b, 8b)
2796GEN_BINARY_TEST(bsl, 16b, 16b, 16b)
2797GEN_BINARY_TEST(bsl, 8b, 8b, 8b)
2798GEN_BINARY_TEST(eor, 16b, 16b, 16b)
2799GEN_BINARY_TEST(eor, 8b, 8b, 8b)
2800
2801GEN_UNARY_TEST(cls, 4s, 4s)
2802GEN_UNARY_TEST(cls, 2s, 2s)
2803GEN_UNARY_TEST(cls, 8h, 8h)
2804GEN_UNARY_TEST(cls, 4h, 4h)
2805GEN_UNARY_TEST(cls, 16b, 16b)
2806GEN_UNARY_TEST(cls, 8b, 8b)
2807GEN_UNARY_TEST(clz, 4s, 4s)
2808GEN_UNARY_TEST(clz, 2s, 2s)
2809GEN_UNARY_TEST(clz, 8h, 8h)
2810GEN_UNARY_TEST(clz, 4h, 4h)
2811GEN_UNARY_TEST(clz, 16b, 16b)
2812GEN_UNARY_TEST(clz, 8b, 8b)
2813
2814GEN_THREEVEC_TEST(cmeq_d_d_d,  "cmeq  d2, d11, d29", 2, 11, 29)
2815GEN_THREEVEC_TEST(cmge_d_d_d,  "cmge  d2, d11, d29", 2, 11, 29)
2816GEN_THREEVEC_TEST(cmgt_d_d_d,  "cmgt  d2, d11, d29", 2, 11, 29)
2817GEN_THREEVEC_TEST(cmhi_d_d_d,  "cmhi  d2, d11, d29", 2, 11, 29)
2818GEN_THREEVEC_TEST(cmhs_d_d_d,  "cmhs  d2, d11, d29", 2, 11, 29)
2819GEN_THREEVEC_TEST(cmtst_d_d_d, "cmtst d2, d11, d29", 2, 11, 29)
2820
2821GEN_BINARY_TEST(cmeq, 2d, 2d, 2d)
2822GEN_BINARY_TEST(cmeq, 4s, 4s, 4s)
2823GEN_BINARY_TEST(cmeq, 2s, 2s, 2s)
2824GEN_BINARY_TEST(cmeq, 8h, 8h, 8h)
2825GEN_BINARY_TEST(cmeq, 4h, 4h, 4h)
2826GEN_BINARY_TEST(cmeq, 16b, 16b, 16b)
2827GEN_BINARY_TEST(cmeq, 8b, 8b, 8b)
2828GEN_BINARY_TEST(cmge, 2d, 2d, 2d)
2829GEN_BINARY_TEST(cmge, 4s, 4s, 4s)
2830GEN_BINARY_TEST(cmge, 2s, 2s, 2s)
2831GEN_BINARY_TEST(cmge, 8h, 8h, 8h)
2832GEN_BINARY_TEST(cmge, 4h, 4h, 4h)
2833GEN_BINARY_TEST(cmge, 16b, 16b, 16b)
2834GEN_BINARY_TEST(cmge, 8b, 8b, 8b)
2835GEN_BINARY_TEST(cmgt, 2d, 2d, 2d)
2836GEN_BINARY_TEST(cmgt, 4s, 4s, 4s)
2837GEN_BINARY_TEST(cmgt, 2s, 2s, 2s)
2838GEN_BINARY_TEST(cmgt, 8h, 8h, 8h)
2839GEN_BINARY_TEST(cmgt, 4h, 4h, 4h)
2840GEN_BINARY_TEST(cmgt, 16b, 16b, 16b)
2841GEN_BINARY_TEST(cmgt, 8b, 8b, 8b)
2842GEN_BINARY_TEST(cmhi, 2d, 2d, 2d)
2843GEN_BINARY_TEST(cmhi, 4s, 4s, 4s)
2844GEN_BINARY_TEST(cmhi, 2s, 2s, 2s)
2845GEN_BINARY_TEST(cmhi, 8h, 8h, 8h)
2846GEN_BINARY_TEST(cmhi, 4h, 4h, 4h)
2847GEN_BINARY_TEST(cmhi, 16b, 16b, 16b)
2848GEN_BINARY_TEST(cmhi, 8b, 8b, 8b)
2849GEN_BINARY_TEST(cmhs, 2d, 2d, 2d)
2850GEN_BINARY_TEST(cmhs, 4s, 4s, 4s)
2851GEN_BINARY_TEST(cmhs, 2s, 2s, 2s)
2852GEN_BINARY_TEST(cmhs, 8h, 8h, 8h)
2853GEN_BINARY_TEST(cmhs, 4h, 4h, 4h)
2854GEN_BINARY_TEST(cmhs, 16b, 16b, 16b)
2855GEN_BINARY_TEST(cmhs, 8b, 8b, 8b)
2856GEN_BINARY_TEST(cmtst, 2d, 2d, 2d)
2857GEN_BINARY_TEST(cmtst, 4s, 4s, 4s)
2858GEN_BINARY_TEST(cmtst, 2s, 2s, 2s)
2859GEN_BINARY_TEST(cmtst, 8h, 8h, 8h)
2860GEN_BINARY_TEST(cmtst, 4h, 4h, 4h)
2861GEN_BINARY_TEST(cmtst, 16b, 16b, 16b)
2862GEN_BINARY_TEST(cmtst, 8b, 8b, 8b)
2863
2864GEN_TWOVEC_TEST(cmeq_zero_d_d,  "cmeq  d2, d11, #0", 2, 11)
2865GEN_TWOVEC_TEST(cmge_zero_d_d,  "cmge  d2, d11, #0", 2, 11)
2866GEN_TWOVEC_TEST(cmgt_zero_d_d,  "cmgt  d2, d11, #0", 2, 11)
2867GEN_TWOVEC_TEST(cmle_zero_d_d,  "cmle  d2, d11, #0", 2, 11)
2868GEN_TWOVEC_TEST(cmlt_zero_d_d,  "cmlt  d2, d11, #0", 2, 11)
2869
2870GEN_TWOVEC_TEST(cmeq_zero_2d_2d,   "cmeq v5.2d,  v22.2d,  #0", 5, 22)
2871GEN_TWOVEC_TEST(cmeq_zero_4s_4s,   "cmeq v5.4s,  v22.4s,  #0", 5, 22)
2872GEN_TWOVEC_TEST(cmeq_zero_2s_2s,   "cmeq v5.2s,  v22.2s,  #0", 5, 22)
2873GEN_TWOVEC_TEST(cmeq_zero_8h_8h,   "cmeq v5.8h,  v22.8h,  #0", 5, 22)
2874GEN_TWOVEC_TEST(cmeq_zero_4h_4h,   "cmeq v5.4h,  v22.4h,  #0", 5, 22)
2875GEN_TWOVEC_TEST(cmeq_zero_16b_16b, "cmeq v5.16b, v22.16b, #0", 5, 22)
2876GEN_TWOVEC_TEST(cmeq_zero_8b_8b,   "cmeq v5.8b,  v22.8b,  #0", 5, 22)
2877GEN_TWOVEC_TEST(cmge_zero_2d_2d,   "cmge v5.2d,  v22.2d,  #0", 5, 22)
2878GEN_TWOVEC_TEST(cmge_zero_4s_4s,   "cmge v5.4s,  v22.4s,  #0", 5, 22)
2879GEN_TWOVEC_TEST(cmge_zero_2s_2s,   "cmge v5.2s,  v22.2s,  #0", 5, 22)
2880GEN_TWOVEC_TEST(cmge_zero_8h_8h,   "cmge v5.8h,  v22.8h,  #0", 5, 22)
2881GEN_TWOVEC_TEST(cmge_zero_4h_4h,   "cmge v5.4h,  v22.4h,  #0", 5, 22)
2882GEN_TWOVEC_TEST(cmge_zero_16b_16b, "cmge v5.16b, v22.16b, #0", 5, 22)
2883GEN_TWOVEC_TEST(cmge_zero_8b_8b,   "cmge v5.8b,  v22.8b,  #0", 5, 22)
2884GEN_TWOVEC_TEST(cmgt_zero_2d_2d,   "cmgt v5.2d,  v22.2d,  #0", 5, 22)
2885GEN_TWOVEC_TEST(cmgt_zero_4s_4s,   "cmgt v5.4s,  v22.4s,  #0", 5, 22)
2886GEN_TWOVEC_TEST(cmgt_zero_2s_2s,   "cmgt v5.2s,  v22.2s,  #0", 5, 22)
2887GEN_TWOVEC_TEST(cmgt_zero_8h_8h,   "cmgt v5.8h,  v22.8h,  #0", 5, 22)
2888GEN_TWOVEC_TEST(cmgt_zero_4h_4h,   "cmgt v5.4h,  v22.4h,  #0", 5, 22)
2889GEN_TWOVEC_TEST(cmgt_zero_16b_16b, "cmgt v5.16b, v22.16b, #0", 5, 22)
2890GEN_TWOVEC_TEST(cmgt_zero_8b_8b,   "cmgt v5.8b,  v22.8b,  #0", 5, 22)
2891GEN_TWOVEC_TEST(cmle_zero_2d_2d,   "cmle v5.2d,  v22.2d,  #0", 5, 22)
2892GEN_TWOVEC_TEST(cmle_zero_4s_4s,   "cmle v5.4s,  v22.4s,  #0", 5, 22)
2893GEN_TWOVEC_TEST(cmle_zero_2s_2s,   "cmle v5.2s,  v22.2s,  #0", 5, 22)
2894GEN_TWOVEC_TEST(cmle_zero_8h_8h,   "cmle v5.8h,  v22.8h,  #0", 5, 22)
2895GEN_TWOVEC_TEST(cmle_zero_4h_4h,   "cmle v5.4h,  v22.4h,  #0", 5, 22)
2896GEN_TWOVEC_TEST(cmle_zero_16b_16b, "cmle v5.16b, v22.16b, #0", 5, 22)
2897GEN_TWOVEC_TEST(cmle_zero_8b_8b,   "cmle v5.8b,  v22.8b,  #0", 5, 22)
2898GEN_TWOVEC_TEST(cmlt_zero_2d_2d,   "cmlt v5.2d,  v22.2d,  #0", 5, 22)
2899GEN_TWOVEC_TEST(cmlt_zero_4s_4s,   "cmlt v5.4s,  v22.4s,  #0", 5, 22)
2900GEN_TWOVEC_TEST(cmlt_zero_2s_2s,   "cmlt v5.2s,  v22.2s,  #0", 5, 22)
2901GEN_TWOVEC_TEST(cmlt_zero_8h_8h,   "cmlt v5.8h,  v22.8h,  #0", 5, 22)
2902GEN_TWOVEC_TEST(cmlt_zero_4h_4h,   "cmlt v5.4h,  v22.4h,  #0", 5, 22)
2903GEN_TWOVEC_TEST(cmlt_zero_16b_16b, "cmlt v5.16b, v22.16b, #0", 5, 22)
2904GEN_TWOVEC_TEST(cmlt_zero_8b_8b,   "cmlt v5.8b,  v22.8b,  #0", 5, 22)
2905
2906GEN_UNARY_TEST(cnt, 16b, 16b)
2907GEN_UNARY_TEST(cnt, 8b, 8b)
2908
2909GEN_TWOVEC_TEST(dup_d_d0,  "dup d22, v23.d[0]", 22, 23)
2910GEN_TWOVEC_TEST(dup_d_d1,  "dup d22, v23.d[1]", 22, 23)
2911GEN_TWOVEC_TEST(dup_s_s0,  "dup s22, v23.s[0]", 22, 23)
2912GEN_TWOVEC_TEST(dup_s_s3,  "dup s22, v23.s[3]", 22, 23)
2913GEN_TWOVEC_TEST(dup_h_h0,  "dup h22, v23.h[0]", 22, 23)
2914GEN_TWOVEC_TEST(dup_h_h6,  "dup h22, v23.h[6]", 22, 23)
2915GEN_TWOVEC_TEST(dup_b_b0,  "dup b0,  v23.b[0]",  22, 23)
2916GEN_TWOVEC_TEST(dup_b_b13, "dup b13, v23.b[13]", 22, 23)
2917
2918GEN_TWOVEC_TEST(dup_2d_d0,  "dup v9.2d, v17.d[0]", 9, 17)
2919GEN_TWOVEC_TEST(dup_2d_d1,  "dup v9.2d, v17.d[1]", 9, 17)
2920GEN_TWOVEC_TEST(dup_4s_s0,  "dup v9.4s, v17.s[0]", 9, 17)
2921GEN_TWOVEC_TEST(dup_4s_s3,  "dup v9.4s, v17.s[3]", 9, 17)
2922GEN_TWOVEC_TEST(dup_2s_s0,  "dup v9.2s, v17.s[0]", 9, 17)
2923GEN_TWOVEC_TEST(dup_2s_s2,  "dup v9.2s, v17.s[2]", 9, 17)
2924GEN_TWOVEC_TEST(dup_8h_h0,  "dup v9.8h, v17.h[0]", 9, 17)
2925GEN_TWOVEC_TEST(dup_8h_h6,  "dup v9.8h, v17.h[6]", 9, 17)
2926GEN_TWOVEC_TEST(dup_4h_h1,  "dup v9.4h, v17.h[1]", 9, 17)
2927GEN_TWOVEC_TEST(dup_4h_h5,  "dup v9.4h, v17.h[5]", 9, 17)
2928GEN_TWOVEC_TEST(dup_16b_b2,  "dup v9.16b, v17.b[2]", 9, 17)
2929GEN_TWOVEC_TEST(dup_16b_b12, "dup v9.16b, v17.b[12]", 9, 17)
2930GEN_TWOVEC_TEST(dup_8b_b3,  "dup v9.8b, v17.b[3]", 9, 17)
2931GEN_TWOVEC_TEST(dup_8b_b13, "dup v9.8b, v17.b[13]", 9, 17)
2932
2933GEN_TWOVEC_TEST(dup_2d_x,  "mov x10, v17.d[0];  dup v9.2d,  x10", 9, 17)
2934GEN_TWOVEC_TEST(dup_4s_w,  "mov x10, v17.d[0];  dup v9.4s,  w10", 9, 17)
2935GEN_TWOVEC_TEST(dup_2s_w,  "mov x10, v17.d[0];  dup v9.2s,  w10", 9, 17)
2936GEN_TWOVEC_TEST(dup_8h_w,  "mov x10, v17.d[0];  dup v9.8h,  w10",  9, 17)
2937GEN_TWOVEC_TEST(dup_4h_w,  "mov x10, v17.d[0];  dup v9.4h,  w10",  9, 17)
2938GEN_TWOVEC_TEST(dup_16b_w, "mov x10, v17.d[0];  dup v9.16b, w10", 9, 17)
2939GEN_TWOVEC_TEST(dup_8b_w,  "mov x10, v17.d[0];  dup v9.8b,  w10",  9, 17)
2940
2941GEN_THREEVEC_TEST(ext_16b_16b_16b_0x0,
2942                  "ext  v2.16b, v11.16b, v29.16b, #0", 2, 11, 29)
2943GEN_THREEVEC_TEST(ext_16b_16b_16b_0x1,
2944                  "ext  v2.16b, v11.16b, v29.16b, #1", 2, 11, 29)
2945GEN_THREEVEC_TEST(ext_16b_16b_16b_0x2,
2946                  "ext  v2.16b, v11.16b, v29.16b, #2", 2, 11, 29)
2947GEN_THREEVEC_TEST(ext_16b_16b_16b_0x3,
2948                  "ext  v2.16b, v11.16b, v29.16b, #3", 2, 11, 29)
2949GEN_THREEVEC_TEST(ext_16b_16b_16b_0x4,
2950                  "ext  v2.16b, v11.16b, v29.16b, #4", 2, 11, 29)
2951GEN_THREEVEC_TEST(ext_16b_16b_16b_0x5,
2952                  "ext  v2.16b, v11.16b, v29.16b, #5", 2, 11, 29)
2953GEN_THREEVEC_TEST(ext_16b_16b_16b_0x6,
2954                  "ext  v2.16b, v11.16b, v29.16b, #6", 2, 11, 29)
2955GEN_THREEVEC_TEST(ext_16b_16b_16b_0x7,
2956                  "ext  v2.16b, v11.16b, v29.16b, #7", 2, 11, 29)
2957GEN_THREEVEC_TEST(ext_16b_16b_16b_0x8,
2958                  "ext  v2.16b, v11.16b, v29.16b, #8", 2, 11, 29)
2959GEN_THREEVEC_TEST(ext_16b_16b_16b_0x9,
2960                  "ext  v2.16b, v11.16b, v29.16b, #9", 2, 11, 29)
2961GEN_THREEVEC_TEST(ext_16b_16b_16b_0xA,
2962                  "ext  v2.16b, v11.16b, v29.16b, #10", 2, 11, 29)
2963GEN_THREEVEC_TEST(ext_16b_16b_16b_0xB,
2964                  "ext  v2.16b, v11.16b, v29.16b, #11", 2, 11, 29)
2965GEN_THREEVEC_TEST(ext_16b_16b_16b_0xC,
2966                  "ext  v2.16b, v11.16b, v29.16b, #12", 2, 11, 29)
2967GEN_THREEVEC_TEST(ext_16b_16b_16b_0xD,
2968                  "ext  v2.16b, v11.16b, v29.16b, #13", 2, 11, 29)
2969GEN_THREEVEC_TEST(ext_16b_16b_16b_0xE,
2970                  "ext  v2.16b, v11.16b, v29.16b, #14", 2, 11, 29)
2971GEN_THREEVEC_TEST(ext_16b_16b_16b_0xF,
2972                  "ext  v2.16b, v11.16b, v29.16b, #15", 2, 11, 29)
2973GEN_THREEVEC_TEST(ext_8b_8b_8b_0x0,
2974                  "ext  v2.8b, v11.8b, v29.8b, #0", 2, 11, 29)
2975GEN_THREEVEC_TEST(ext_8b_8b_8b_0x1,
2976                  "ext  v2.8b, v11.8b, v29.8b, #1", 2, 11, 29)
2977GEN_THREEVEC_TEST(ext_8b_8b_8b_0x2,
2978                  "ext  v2.8b, v11.8b, v29.8b, #2", 2, 11, 29)
2979GEN_THREEVEC_TEST(ext_8b_8b_8b_0x3,
2980                  "ext  v2.8b, v11.8b, v29.8b, #3", 2, 11, 29)
2981GEN_THREEVEC_TEST(ext_8b_8b_8b_0x4,
2982                  "ext  v2.8b, v11.8b, v29.8b, #4", 2, 11, 29)
2983GEN_THREEVEC_TEST(ext_8b_8b_8b_0x5,
2984                  "ext  v2.8b, v11.8b, v29.8b, #5", 2, 11, 29)
2985GEN_THREEVEC_TEST(ext_8b_8b_8b_0x6,
2986                  "ext  v2.8b, v11.8b, v29.8b, #6", 2, 11, 29)
2987GEN_THREEVEC_TEST(ext_8b_8b_8b_0x7,
2988                  "ext  v2.8b, v11.8b, v29.8b, #7", 2, 11, 29)
2989
2990GEN_TWOVEC_TEST(ins_d0_d0, "ins v3.d[0], v24.d[0]", 3, 24)
2991GEN_TWOVEC_TEST(ins_d0_d1, "ins v3.d[0], v24.d[1]", 3, 24)
2992GEN_TWOVEC_TEST(ins_d1_d0, "ins v3.d[1], v24.d[0]", 3, 24)
2993GEN_TWOVEC_TEST(ins_d1_d1, "ins v3.d[1], v24.d[1]", 3, 24)
2994GEN_TWOVEC_TEST(ins_s0_s2, "ins v3.s[0], v24.s[2]", 3, 24)
2995GEN_TWOVEC_TEST(ins_s3_s0, "ins v3.s[3], v24.s[0]", 3, 24)
2996GEN_TWOVEC_TEST(ins_s2_s1, "ins v3.s[2], v24.s[1]", 3, 24)
2997GEN_TWOVEC_TEST(ins_s1_s3, "ins v3.s[1], v24.s[3]", 3, 24)
2998GEN_TWOVEC_TEST(ins_h0_h6, "ins v3.h[0], v24.h[6]", 3, 24)
2999GEN_TWOVEC_TEST(ins_h7_h0, "ins v3.h[7], v24.h[0]", 3, 24)
3000GEN_TWOVEC_TEST(ins_h6_h1, "ins v3.h[6], v24.h[1]", 3, 24)
3001GEN_TWOVEC_TEST(ins_h1_h7, "ins v3.h[1], v24.h[7]", 3, 24)
3002GEN_TWOVEC_TEST(ins_b0_b14, "ins v3.b[0],  v24.b[14]", 3, 24)
3003GEN_TWOVEC_TEST(ins_b15_b8, "ins v3.b[15], v24.b[8]",  3, 24)
3004GEN_TWOVEC_TEST(ins_b13_b9, "ins v3.b[13], v24.b[9]",  3, 24)
3005GEN_TWOVEC_TEST(ins_b5_b12, "ins v3.b[5],  v24.b[12]", 3, 24)
3006
3007// test_INS_general is a handwritten function
3008
3009GEN_THREEVEC_TEST(mla_4s_4s_s0, "mla v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
3010GEN_THREEVEC_TEST(mla_4s_4s_s3, "mla v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
3011GEN_THREEVEC_TEST(mla_2s_2s_s0, "mla v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
3012GEN_THREEVEC_TEST(mla_2s_2s_s3, "mla v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
3013// For the 'h' version of these, Rm can only be <= 15 (!)
3014GEN_THREEVEC_TEST(mla_8h_8h_h1, "mla v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
3015GEN_THREEVEC_TEST(mla_8h_8h_h5, "mla v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
3016GEN_THREEVEC_TEST(mla_4h_4h_h2, "mla v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
3017GEN_THREEVEC_TEST(mla_4h_4h_h7, "mla v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
3018GEN_THREEVEC_TEST(mls_4s_4s_s0, "mls v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
3019GEN_THREEVEC_TEST(mls_4s_4s_s3, "mls v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
3020GEN_THREEVEC_TEST(mls_2s_2s_s0, "mls v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
3021GEN_THREEVEC_TEST(mls_2s_2s_s3, "mls v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
3022// For the 'h' version of these, Rm can only be <= 15 (!)
3023GEN_THREEVEC_TEST(mls_8h_8h_h1, "mls v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
3024GEN_THREEVEC_TEST(mls_8h_8h_h5, "mls v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
3025GEN_THREEVEC_TEST(mls_4h_4h_h2, "mls v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
3026GEN_THREEVEC_TEST(mls_4h_4h_h7, "mls v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
3027GEN_THREEVEC_TEST(mul_4s_4s_s0, "mul v2.4s, v11.4s, v29.s[0]", 2, 11, 29)
3028GEN_THREEVEC_TEST(mul_4s_4s_s3, "mul v2.4s, v11.4s, v29.s[3]", 2, 11, 29)
3029GEN_THREEVEC_TEST(mul_2s_2s_s0, "mul v2.2s, v11.2s, v29.s[0]", 2, 11, 29)
3030GEN_THREEVEC_TEST(mul_2s_2s_s3, "mul v2.2s, v11.2s, v29.s[3]", 2, 11, 29)
3031// For the 'h' version of these, Rm can only be <= 15 (!)
3032GEN_THREEVEC_TEST(mul_8h_8h_h1, "mul v2.8h, v11.8h, v2.h[1]", 2, 11, 9)
3033GEN_THREEVEC_TEST(mul_8h_8h_h5, "mul v2.8h, v11.8h, v2.h[5]", 2, 11, 9)
3034GEN_THREEVEC_TEST(mul_4h_4h_h2, "mul v2.4h, v11.4h, v2.h[2]", 2, 11, 9)
3035GEN_THREEVEC_TEST(mul_4h_4h_h7, "mul v2.4h, v11.4h, v2.h[7]", 2, 11, 9)
3036
3037GEN_BINARY_TEST(mla, 4s, 4s, 4s)
3038GEN_BINARY_TEST(mla, 2s, 2s, 2s)
3039GEN_BINARY_TEST(mla, 8h, 8h, 8h)
3040GEN_BINARY_TEST(mla, 4h, 4h, 4h)
3041GEN_BINARY_TEST(mla, 16b, 16b, 16b)
3042GEN_BINARY_TEST(mla, 8b, 8b, 8b)
3043GEN_BINARY_TEST(mls, 4s, 4s, 4s)
3044GEN_BINARY_TEST(mls, 2s, 2s, 2s)
3045GEN_BINARY_TEST(mls, 8h, 8h, 8h)
3046GEN_BINARY_TEST(mls, 4h, 4h, 4h)
3047GEN_BINARY_TEST(mls, 16b, 16b, 16b)
3048GEN_BINARY_TEST(mls, 8b, 8b, 8b)
3049GEN_BINARY_TEST(mul, 4s, 4s, 4s)
3050GEN_BINARY_TEST(mul, 2s, 2s, 2s)
3051GEN_BINARY_TEST(mul, 8h, 8h, 8h)
3052GEN_BINARY_TEST(mul, 4h, 4h, 4h)
3053GEN_BINARY_TEST(mul, 16b, 16b, 16b)
3054GEN_BINARY_TEST(mul, 8b, 8b, 8b)
3055
3056/* overkill -- don't need two vecs, only one */
3057GEN_TWOVEC_TEST(movi_16b_0x9C_lsl0, "movi v22.16b, #0x9C, LSL #0", 22, 23)
3058GEN_TWOVEC_TEST(movi_8b_0x8B_lsl0,  "movi v22.8b,  #0x8B, LSL #0", 22, 23)
3059
3060GEN_TWOVEC_TEST(movi_8h_0x5A_lsl0,  "movi v22.8h,  #0x5A, LSL #0", 22, 23)
3061GEN_TWOVEC_TEST(movi_8h_0xA5_lsl8,  "movi v22.8h,  #0xA5, LSL #8", 22, 23)
3062GEN_TWOVEC_TEST(movi_4h_0x5A_lsl0,  "movi v22.4h,  #0x5A, LSL #0", 22, 23)
3063GEN_TWOVEC_TEST(movi_4h_0xA5_lsl8,  "movi v22.4h,  #0xA5, LSL #8", 22, 23)
3064GEN_TWOVEC_TEST(mvni_8h_0x5A_lsl0,  "mvni v22.8h,  #0x5A, LSL #0", 22, 23)
3065GEN_TWOVEC_TEST(mvni_8h_0xA5_lsl8,  "mvni v22.8h,  #0xA5, LSL #8", 22, 23)
3066GEN_TWOVEC_TEST(mvni_4h_0x5A_lsl0,  "mvni v22.4h,  #0x5A, LSL #0", 22, 23)
3067GEN_TWOVEC_TEST(mvni_4h_0xA5_lsl8,  "mvni v22.4h,  #0xA5, LSL #8", 22, 23)
3068
3069GEN_TWOVEC_TEST(movi_4s_0x5A_lsl0,  "movi v22.4s,  #0x5A, LSL #0",  22, 23)
3070GEN_TWOVEC_TEST(movi_4s_0x6B_lsl8,  "movi v22.4s,  #0x6B, LSL #8",  22, 23)
3071GEN_TWOVEC_TEST(movi_4s_0x49_lsl16, "movi v22.4s,  #0x49, LSL #16", 22, 23)
3072GEN_TWOVEC_TEST(movi_4s_0x3D_lsl24, "movi v22.4s,  #0x3D, LSL #24", 22, 23)
3073GEN_TWOVEC_TEST(movi_2s_0x5A_lsl0,  "movi v22.2s,  #0x5A, LSL #0",  22, 23)
3074GEN_TWOVEC_TEST(movi_2s_0x6B_lsl8,  "movi v22.2s,  #0x6B, LSL #8",  22, 23)
3075GEN_TWOVEC_TEST(movi_2s_0x49_lsl16, "movi v22.2s,  #0x49, LSL #16", 22, 23)
3076GEN_TWOVEC_TEST(movi_2s_0x3D_lsl24, "movi v22.2s,  #0x3D, LSL #24", 22, 23)
3077GEN_TWOVEC_TEST(mvni_4s_0x5A_lsl0,  "mvni v22.4s,  #0x5A, LSL #0",  22, 23)
3078GEN_TWOVEC_TEST(mvni_4s_0x6B_lsl8,  "mvni v22.4s,  #0x6B, LSL #8",  22, 23)
3079GEN_TWOVEC_TEST(mvni_4s_0x49_lsl16, "mvni v22.4s,  #0x49, LSL #16", 22, 23)
3080GEN_TWOVEC_TEST(mvni_4s_0x3D_lsl24, "mvni v22.4s,  #0x3D, LSL #24", 22, 23)
3081GEN_TWOVEC_TEST(mvni_2s_0x5A_lsl0,  "mvni v22.2s,  #0x5A, LSL #0",  22, 23)
3082GEN_TWOVEC_TEST(mvni_2s_0x6B_lsl8,  "mvni v22.2s,  #0x6B, LSL #8",  22, 23)
3083GEN_TWOVEC_TEST(mvni_2s_0x49_lsl16, "mvni v22.2s,  #0x49, LSL #16", 22, 23)
3084GEN_TWOVEC_TEST(mvni_2s_0x3D_lsl24, "mvni v22.2s,  #0x3D, LSL #24", 22, 23)
3085
3086/* overkill -- don't need two vecs, only one */
3087GEN_TWOVEC_TEST(movi_4s_0x6B_msl8,  "movi v22.4s,  #0x6B, MSL #8", 22, 23)
3088GEN_TWOVEC_TEST(movi_4s_0x94_msl16, "movi v22.4s,  #0x94, MSL #16", 22, 23)
3089GEN_TWOVEC_TEST(movi_2s_0x7A_msl8,  "movi v22.2s,  #0x7A, MSL #8", 22, 23)
3090GEN_TWOVEC_TEST(movi_2s_0xA5_msl16, "movi v22.2s,  #0xA5, MSL #16", 22, 23)
3091GEN_TWOVEC_TEST(mvni_4s_0x6B_msl8,  "mvni v22.4s,  #0x6B, MSL #8", 22, 23)
3092GEN_TWOVEC_TEST(mvni_4s_0x94_msl16, "mvni v22.4s,  #0x94, MSL #16", 22, 23)
3093GEN_TWOVEC_TEST(mvni_2s_0x7A_msl8,  "mvni v22.2s,  #0x7A, MSL #8", 22, 23)
3094GEN_TWOVEC_TEST(mvni_2s_0xA5_msl16, "mvni v22.2s,  #0xA5, MSL #16", 22, 23)
3095
3096GEN_TWOVEC_TEST(movi_d_0xA5,  "movi d22,    #0xFF00FF0000FF00FF", 22, 23)
3097GEN_TWOVEC_TEST(movi_2d_0xB4, "movi v22.2d, #0xFF00FFFF00FF0000", 22, 23)
3098
3099GEN_UNARY_TEST(not, 16b, 16b)
3100GEN_UNARY_TEST(not, 8b,  8b)
3101
3102GEN_BINARY_TEST(pmul, 16b, 16b, 16b)
3103GEN_BINARY_TEST(pmul, 8b, 8b, 8b)
3104
3105GEN_BINARY_TEST(pmull,  8h, 8b,  8b)
3106GEN_BINARY_TEST(pmull2, 8h, 16b, 16b)
3107//GEN_BINARY_TEST(pmull,  1q, 1d,  1d)
3108//GEN_BINARY_TEST(pmull,  1q, 2d,  2d)
3109
3110GEN_UNARY_TEST(rbit, 16b, 16b)
3111GEN_UNARY_TEST(rbit, 8b, 8b)
3112GEN_UNARY_TEST(rev16, 16b, 16b)
3113GEN_UNARY_TEST(rev16, 8b, 8b)
3114GEN_UNARY_TEST(rev32, 16b, 16b)
3115GEN_UNARY_TEST(rev32, 8b, 8b)
3116GEN_UNARY_TEST(rev32, 8h, 8h)
3117GEN_UNARY_TEST(rev32, 4h, 4h)
3118GEN_UNARY_TEST(rev64, 16b, 16b)
3119GEN_UNARY_TEST(rev64, 8b, 8b)
3120GEN_UNARY_TEST(rev64, 8h, 8h)
3121GEN_UNARY_TEST(rev64, 4h, 4h)
3122GEN_UNARY_TEST(rev64, 4s, 4s)
3123GEN_UNARY_TEST(rev64, 2s, 2s)
3124
3125GEN_BINARY_TEST(saba, 4s, 4s, 4s)
3126GEN_BINARY_TEST(saba, 2s, 2s, 2s)
3127GEN_BINARY_TEST(saba, 8h, 8h, 8h)
3128GEN_BINARY_TEST(saba, 4h, 4h, 4h)
3129GEN_BINARY_TEST(saba, 16b, 16b, 16b)
3130GEN_BINARY_TEST(saba, 8b, 8b, 8b)
3131GEN_BINARY_TEST(uaba, 4s, 4s, 4s)
3132GEN_BINARY_TEST(uaba, 2s, 2s, 2s)
3133GEN_BINARY_TEST(uaba, 8h, 8h, 8h)
3134GEN_BINARY_TEST(uaba, 4h, 4h, 4h)
3135GEN_BINARY_TEST(uaba, 16b, 16b, 16b)
3136GEN_BINARY_TEST(uaba, 8b, 8b, 8b)
3137
3138GEN_THREEVEC_TEST(sabal_2d_2s_2s,  "sabal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3139GEN_THREEVEC_TEST(sabal2_2d_4s_4s, "sabal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3140GEN_THREEVEC_TEST(sabal_4s_4h_4h,  "sabal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3141GEN_THREEVEC_TEST(sabal2_4s_8h_8h, "sabal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3142GEN_THREEVEC_TEST(sabal_8h_8b_8b,  "sabal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3143GEN_THREEVEC_TEST(sabal2_8h_16b_16b,
3144                                   "sabal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3145GEN_THREEVEC_TEST(uabal_2d_2s_2s,  "uabal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3146GEN_THREEVEC_TEST(uabal2_2d_4s_4s, "uabal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3147GEN_THREEVEC_TEST(uabal_4s_4h_4h,  "uabal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3148GEN_THREEVEC_TEST(uabal2_4s_8h_8h, "uabal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3149GEN_THREEVEC_TEST(uabal_8h_8b_8b,  "uabal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3150GEN_THREEVEC_TEST(uabal2_8h_16b_16b,
3151                                   "uabal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3152
3153GEN_THREEVEC_TEST(sabd_4s_4s_4s,    "sabd v2.4s, v11.4s, v29.4s", 2, 11, 29)
3154GEN_THREEVEC_TEST(sabd_2s_2s_2s,    "sabd v2.2s, v11.2s, v29.2s", 2, 11, 29)
3155GEN_THREEVEC_TEST(sabd_8h_8h_8h,    "sabd v2.8h, v11.8h, v29.8h", 2, 11, 29)
3156GEN_THREEVEC_TEST(sabd_4h_4h_4h,    "sabd v2.4h, v11.4h, v29.4h", 2, 11, 29)
3157GEN_THREEVEC_TEST(sabd_16b_16b_16b, "sabd v2.16b, v11.16b, v29.16b", 2, 11, 29)
3158GEN_THREEVEC_TEST(sabd_8b_8b_8b,    "sabd v2.8b, v11.8b, v29.8b", 2, 11, 29)
3159GEN_THREEVEC_TEST(uabd_4s_4s_4s,    "uabd v2.4s, v11.4s, v29.4s", 2, 11, 29)
3160GEN_THREEVEC_TEST(uabd_2s_2s_2s,    "uabd v2.2s, v11.2s, v29.2s", 2, 11, 29)
3161GEN_THREEVEC_TEST(uabd_8h_8h_8h,    "uabd v2.8h, v11.8h, v29.8h", 2, 11, 29)
3162GEN_THREEVEC_TEST(uabd_4h_4h_4h,    "uabd v2.4h, v11.4h, v29.4h", 2, 11, 29)
3163GEN_THREEVEC_TEST(uabd_16b_16b_16b, "uabd v2.16b, v11.16b, v29.16b", 2, 11, 29)
3164GEN_THREEVEC_TEST(uabd_8b_8b_8b,    "uabd v2.8b, v11.8b, v29.8b", 2, 11, 29)
3165
3166GEN_THREEVEC_TEST(sabdl_2d_2s_2s,  "sabdl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3167GEN_THREEVEC_TEST(sabdl2_2d_4s_4s, "sabdl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3168GEN_THREEVEC_TEST(sabdl_4s_4h_4h,  "sabdl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3169GEN_THREEVEC_TEST(sabdl2_4s_8h_8h, "sabdl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3170GEN_THREEVEC_TEST(sabdl_8h_8b_8b,  "sabdl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3171GEN_THREEVEC_TEST(sabdl2_8h_16b_16b,
3172                                   "sabdl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3173GEN_THREEVEC_TEST(uabdl_2d_2s_2s,  "uabdl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3174GEN_THREEVEC_TEST(uabdl2_2d_4s_4s, "uabdl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3175GEN_THREEVEC_TEST(uabdl_4s_4h_4h,  "uabdl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3176GEN_THREEVEC_TEST(uabdl2_4s_8h_8h, "uabdl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3177GEN_THREEVEC_TEST(uabdl_8h_8b_8b,  "uabdl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3178GEN_THREEVEC_TEST(uabdl2_8h_16b_16b,
3179                                   "uabdl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3180
3181GEN_TWOVEC_TEST(sadalp_4h_8b,  "sadalp v3.4h, v19.8b",  3, 19)
3182GEN_TWOVEC_TEST(sadalp_8h_16b, "sadalp v3.8h, v19.16b", 3, 19)
3183GEN_TWOVEC_TEST(sadalp_2s_4h,  "sadalp v3.2s, v19.4h",  3, 19)
3184GEN_TWOVEC_TEST(sadalp_4s_8h,  "sadalp v3.4s, v19.8h",  3, 19)
3185GEN_TWOVEC_TEST(sadalp_1d_2s,  "sadalp v3.1d, v19.2s",  3, 19)
3186GEN_TWOVEC_TEST(sadalp_2d_4s,  "sadalp v3.2d, v19.4s",  3, 19)
3187GEN_TWOVEC_TEST(uadalp_4h_8b,  "uadalp v3.4h, v19.8b",  3, 19)
3188GEN_TWOVEC_TEST(uadalp_8h_16b, "uadalp v3.8h, v19.16b", 3, 19)
3189GEN_TWOVEC_TEST(uadalp_2s_4h,  "uadalp v3.2s, v19.4h",  3, 19)
3190GEN_TWOVEC_TEST(uadalp_4s_8h,  "uadalp v3.4s, v19.8h",  3, 19)
3191GEN_TWOVEC_TEST(uadalp_1d_2s,  "uadalp v3.1d, v19.2s",  3, 19)
3192GEN_TWOVEC_TEST(uadalp_2d_4s,  "uadalp v3.2d, v19.4s",  3, 19)
3193
3194GEN_THREEVEC_TEST(saddl_2d_2s_2s,  "saddl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3195GEN_THREEVEC_TEST(saddl2_2d_4s_4s, "saddl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3196GEN_THREEVEC_TEST(saddl_4s_4h_4h,  "saddl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3197GEN_THREEVEC_TEST(saddl2_4s_8h_8h, "saddl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3198GEN_THREEVEC_TEST(saddl_8h_8b_8b,  "saddl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3199GEN_THREEVEC_TEST(saddl2_8h_16b_16b,
3200                                   "saddl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3201GEN_THREEVEC_TEST(uaddl_2d_2s_2s,  "uaddl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3202GEN_THREEVEC_TEST(uaddl2_2d_4s_4s, "uaddl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3203GEN_THREEVEC_TEST(uaddl_4s_4h_4h,  "uaddl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3204GEN_THREEVEC_TEST(uaddl2_4s_8h_8h, "uaddl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3205GEN_THREEVEC_TEST(uaddl_8h_8b_8b,  "uaddl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3206GEN_THREEVEC_TEST(uaddl2_8h_16b_16b,
3207                                   "uaddl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3208GEN_THREEVEC_TEST(ssubl_2d_2s_2s,  "ssubl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3209GEN_THREEVEC_TEST(ssubl2_2d_4s_4s, "ssubl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3210GEN_THREEVEC_TEST(ssubl_4s_4h_4h,  "ssubl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3211GEN_THREEVEC_TEST(ssubl2_4s_8h_8h, "ssubl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3212GEN_THREEVEC_TEST(ssubl_8h_8b_8b,  "ssubl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3213GEN_THREEVEC_TEST(ssubl2_8h_16b_16b,
3214                                   "ssubl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3215GEN_THREEVEC_TEST(usubl_2d_2s_2s,  "usubl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3216GEN_THREEVEC_TEST(usubl2_2d_4s_4s, "usubl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3217GEN_THREEVEC_TEST(usubl_4s_4h_4h,  "usubl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3218GEN_THREEVEC_TEST(usubl2_4s_8h_8h, "usubl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3219GEN_THREEVEC_TEST(usubl_8h_8b_8b,  "usubl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3220GEN_THREEVEC_TEST(usubl2_8h_16b_16b,
3221                                   "usubl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3222
3223GEN_TWOVEC_TEST(saddlp_4h_8b,  "saddlp v3.4h, v19.8b",  3, 19)
3224GEN_TWOVEC_TEST(saddlp_8h_16b, "saddlp v3.8h, v19.16b", 3, 19)
3225GEN_TWOVEC_TEST(saddlp_2s_4h,  "saddlp v3.2s, v19.4h",  3, 19)
3226GEN_TWOVEC_TEST(saddlp_4s_8h,  "saddlp v3.4s, v19.8h",  3, 19)
3227GEN_TWOVEC_TEST(saddlp_1d_2s,  "saddlp v3.1d, v19.2s",  3, 19)
3228GEN_TWOVEC_TEST(saddlp_2d_4s,  "saddlp v3.2d, v19.4s",  3, 19)
3229GEN_TWOVEC_TEST(uaddlp_4h_8b,  "uaddlp v3.4h, v19.8b",  3, 19)
3230GEN_TWOVEC_TEST(uaddlp_8h_16b, "uaddlp v3.8h, v19.16b", 3, 19)
3231GEN_TWOVEC_TEST(uaddlp_2s_4h,  "uaddlp v3.2s, v19.4h",  3, 19)
3232GEN_TWOVEC_TEST(uaddlp_4s_8h,  "uaddlp v3.4s, v19.8h",  3, 19)
3233GEN_TWOVEC_TEST(uaddlp_1d_2s,  "uaddlp v3.1d, v19.2s",  3, 19)
3234GEN_TWOVEC_TEST(uaddlp_2d_4s,  "uaddlp v3.2d, v19.4s",  3, 19)
3235
3236GEN_TWOVEC_TEST(saddlv_h_16b, "saddlv h3, v19.16b",  3, 19)
3237GEN_TWOVEC_TEST(saddlv_h_8b,  "saddlv h3, v19.8b",   3, 19)
3238GEN_TWOVEC_TEST(saddlv_s_8h,  "saddlv s3, v19.8h",   3, 19)
3239GEN_TWOVEC_TEST(saddlv_s_4h,  "saddlv s3, v19.4h",   3, 19)
3240GEN_TWOVEC_TEST(saddlv_d_4s,  "saddlv d3, v19.4s",   3, 19)
3241GEN_TWOVEC_TEST(uaddlv_h_16b, "uaddlv h3, v19.16b",  3, 19)
3242GEN_TWOVEC_TEST(uaddlv_h_8b,  "uaddlv h3, v19.8b",   3, 19)
3243GEN_TWOVEC_TEST(uaddlv_s_8h,  "uaddlv s3, v19.8h",   3, 19)
3244GEN_TWOVEC_TEST(uaddlv_s_4h,  "uaddlv s3, v19.4h",   3, 19)
3245GEN_TWOVEC_TEST(uaddlv_d_4s,  "uaddlv d3, v19.4s",   3, 19)
3246
3247GEN_THREEVEC_TEST(saddw2_8h_8h_16b, "saddw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
3248GEN_THREEVEC_TEST(saddw_8h_8h_8b,   "saddw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
3249GEN_THREEVEC_TEST(saddw2_4s_4s_8h,  "saddw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
3250GEN_THREEVEC_TEST(saddw_4s_4s_4h,   "saddw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
3251GEN_THREEVEC_TEST(saddw2_2d_2d_4s,  "saddw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
3252GEN_THREEVEC_TEST(saddw_2d_2d_2s,   "saddw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
3253GEN_THREEVEC_TEST(uaddw2_8h_8h_16b, "uaddw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
3254GEN_THREEVEC_TEST(uaddw_8h_8h_8b,   "uaddw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
3255GEN_THREEVEC_TEST(uaddw2_4s_4s_8h,  "uaddw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
3256GEN_THREEVEC_TEST(uaddw_4s_4s_4h,   "uaddw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
3257GEN_THREEVEC_TEST(uaddw2_2d_2d_4s,  "uaddw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
3258GEN_THREEVEC_TEST(uaddw_2d_2d_2s,   "uaddw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
3259GEN_THREEVEC_TEST(ssubw2_8h_8h_16b, "ssubw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
3260GEN_THREEVEC_TEST(ssubw_8h_8h_8b,   "ssubw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
3261GEN_THREEVEC_TEST(ssubw2_4s_4s_8h,  "ssubw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
3262GEN_THREEVEC_TEST(ssubw_4s_4s_4h,   "ssubw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
3263GEN_THREEVEC_TEST(ssubw2_2d_2d_4s,  "ssubw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
3264GEN_THREEVEC_TEST(ssubw_2d_2d_2s,   "ssubw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
3265GEN_THREEVEC_TEST(usubw2_8h_8h_16b, "usubw2 v5.8h, v13.8h, v31.16b", 5, 13, 31)
3266GEN_THREEVEC_TEST(usubw_8h_8h_8b,   "usubw  v5.8h, v13.8h, v31.8b",  5, 13, 31)
3267GEN_THREEVEC_TEST(usubw2_4s_4s_8h,  "usubw2 v5.4s, v13.4s, v31.8h",  5, 13, 31)
3268GEN_THREEVEC_TEST(usubw_4s_4s_4h,   "usubw  v5.4s, v13.4s, v31.4h",  5, 13, 31)
3269GEN_THREEVEC_TEST(usubw2_2d_2d_4s,  "usubw2 v5.2d, v13.2d, v31.4s",  5, 13, 31)
3270GEN_THREEVEC_TEST(usubw_2d_2d_2s,   "usubw  v5.2d, v13.2d, v31.2s",  5, 13, 31)
3271
3272GEN_THREEVEC_TEST(shadd_4s_4s_4s,   "shadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
3273GEN_THREEVEC_TEST(shadd_2s_2s_2s,   "shadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
3274GEN_THREEVEC_TEST(shadd_8h_8h_8h,   "shadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
3275GEN_THREEVEC_TEST(shadd_4h_4h_4h,   "shadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
3276GEN_THREEVEC_TEST(shadd_16b_16b_16b,"shadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
3277GEN_THREEVEC_TEST(shadd_8b_8b_8b,   "shadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
3278GEN_THREEVEC_TEST(uhadd_4s_4s_4s,   "uhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
3279GEN_THREEVEC_TEST(uhadd_2s_2s_2s,   "uhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
3280GEN_THREEVEC_TEST(uhadd_8h_8h_8h,   "uhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
3281GEN_THREEVEC_TEST(uhadd_4h_4h_4h,   "uhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
3282GEN_THREEVEC_TEST(uhadd_16b_16b_16b,"uhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
3283GEN_THREEVEC_TEST(uhadd_8b_8b_8b,   "uhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
3284GEN_THREEVEC_TEST(shsub_4s_4s_4s,   "shsub v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
3285GEN_THREEVEC_TEST(shsub_2s_2s_2s,   "shsub v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
3286GEN_THREEVEC_TEST(shsub_8h_8h_8h,   "shsub v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
3287GEN_THREEVEC_TEST(shsub_4h_4h_4h,   "shsub v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
3288GEN_THREEVEC_TEST(shsub_16b_16b_16b,"shsub v2.16b, v11.16b, v29.16b", 2, 11, 29)
3289GEN_THREEVEC_TEST(shsub_8b_8b_8b,   "shsub v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
3290GEN_THREEVEC_TEST(uhsub_4s_4s_4s,   "uhsub v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
3291GEN_THREEVEC_TEST(uhsub_2s_2s_2s,   "uhsub v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
3292GEN_THREEVEC_TEST(uhsub_8h_8h_8h,   "uhsub v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
3293GEN_THREEVEC_TEST(uhsub_4h_4h_4h,   "uhsub v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
3294GEN_THREEVEC_TEST(uhsub_16b_16b_16b,"uhsub v2.16b, v11.16b, v29.16b", 2, 11, 29)
3295GEN_THREEVEC_TEST(uhsub_8b_8b_8b,   "uhsub v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
3296
3297GEN_TWOVEC_TEST(shll_8h_8b_8,   "shll  v3.8h, v24.8b,  #8", 3, 24)
3298GEN_TWOVEC_TEST(shll2_8h_16b_8, "shll2 v3.8h, v24.16b, #8", 3, 24)
3299GEN_TWOVEC_TEST(shll_4s_4h_16,  "shll  v3.4s, v24.4h, #16", 3, 24)
3300GEN_TWOVEC_TEST(shll2_4s_8h_16, "shll2 v3.4s, v24.8h, #16", 3, 24)
3301GEN_TWOVEC_TEST(shll_2d_2s_32,  "shll  v3.2d, v24.2s, #32", 3, 24)
3302GEN_TWOVEC_TEST(shll2_2d_4s_32, "shll2 v3.2d, v24.4s, #32", 3, 24)
3303
3304GEN_TWOVEC_TEST(shrn_2s_2d_1,   "shrn  v4.2s,  v29.2d, #1",  4, 29)
3305GEN_TWOVEC_TEST(shrn_2s_2d_32,  "shrn  v4.2s,  v29.2d, #32", 4, 29)
3306GEN_TWOVEC_TEST(shrn2_4s_2d_1,  "shrn2 v4.4s,  v29.2d, #1",  4, 29)
3307GEN_TWOVEC_TEST(shrn2_4s_2d_32, "shrn2 v4.4s,  v29.2d, #32", 4, 29)
3308GEN_TWOVEC_TEST(shrn_4h_4s_1,   "shrn  v4.4h,  v29.4s, #1",  4, 29)
3309GEN_TWOVEC_TEST(shrn_4h_4s_16,  "shrn  v4.4h,  v29.4s, #16", 4, 29)
3310GEN_TWOVEC_TEST(shrn2_8h_4s_1,  "shrn2 v4.8h,  v29.4s, #1",  4, 29)
3311GEN_TWOVEC_TEST(shrn2_8h_4s_16, "shrn2 v4.8h,  v29.4s, #16", 4, 29)
3312GEN_TWOVEC_TEST(shrn_8b_8h_1,   "shrn  v4.8b,  v29.8h, #1",  4, 29)
3313GEN_TWOVEC_TEST(shrn_8b_8h_8,   "shrn  v4.8b,  v29.8h, #8",  4, 29)
3314GEN_TWOVEC_TEST(shrn2_16b_8h_1, "shrn2 v4.16b, v29.8h, #1",  4, 29)
3315GEN_TWOVEC_TEST(shrn2_16b_8h_8, "shrn2 v4.16b, v29.8h, #8",  4, 29)
3316GEN_TWOVEC_TEST(rshrn_2s_2d_1,   "rshrn  v4.2s,  v29.2d, #1",  4, 29)
3317GEN_TWOVEC_TEST(rshrn_2s_2d_32,  "rshrn  v4.2s,  v29.2d, #32", 4, 29)
3318GEN_TWOVEC_TEST(rshrn2_4s_2d_1,  "rshrn2 v4.4s,  v29.2d, #1",  4, 29)
3319GEN_TWOVEC_TEST(rshrn2_4s_2d_32, "rshrn2 v4.4s,  v29.2d, #32", 4, 29)
3320GEN_TWOVEC_TEST(rshrn_4h_4s_1,   "rshrn  v4.4h,  v29.4s, #1",  4, 29)
3321GEN_TWOVEC_TEST(rshrn_4h_4s_16,  "rshrn  v4.4h,  v29.4s, #16", 4, 29)
3322GEN_TWOVEC_TEST(rshrn2_8h_4s_1,  "rshrn2 v4.8h,  v29.4s, #1",  4, 29)
3323GEN_TWOVEC_TEST(rshrn2_8h_4s_16, "rshrn2 v4.8h,  v29.4s, #16", 4, 29)
3324GEN_TWOVEC_TEST(rshrn_8b_8h_1,   "rshrn  v4.8b,  v29.8h, #1",  4, 29)
3325GEN_TWOVEC_TEST(rshrn_8b_8h_8,   "rshrn  v4.8b,  v29.8h, #8",  4, 29)
3326GEN_TWOVEC_TEST(rshrn2_16b_8h_1, "rshrn2 v4.16b, v29.8h, #1",  4, 29)
3327GEN_TWOVEC_TEST(rshrn2_16b_8h_8, "rshrn2 v4.16b, v29.8h, #8",  4, 29)
3328
3329GEN_TWOVEC_TEST(sli_d_d_0,  "sli d5, d28, #0",  5, 28)
3330GEN_TWOVEC_TEST(sli_d_d_32, "sli d5, d28, #32", 5, 28)
3331GEN_TWOVEC_TEST(sli_d_d_63, "sli d5, d28, #63", 5, 28)
3332GEN_TWOVEC_TEST(sri_d_d_1,  "sri d5, d28, #1",  5, 28)
3333GEN_TWOVEC_TEST(sri_d_d_33, "sri d5, d28, #33", 5, 28)
3334GEN_TWOVEC_TEST(sri_d_d_64, "sri d5, d28, #64", 5, 28)
3335
3336GEN_TWOVEC_TEST(sli_2d_2d_0,   "sli v6.2d,  v27.2d, #0",  6, 27)
3337GEN_TWOVEC_TEST(sli_2d_2d_32,  "sli v6.2d,  v27.2d, #32", 6, 27)
3338GEN_TWOVEC_TEST(sli_2d_2d_63,  "sli v6.2d,  v27.2d, #63", 6, 27)
3339GEN_TWOVEC_TEST(sli_4s_4s_0,   "sli v6.4s,  v27.4s, #0",  6, 27)
3340GEN_TWOVEC_TEST(sli_4s_4s_16,  "sli v6.4s,  v27.4s, #16", 6, 27)
3341GEN_TWOVEC_TEST(sli_4s_4s_31,  "sli v6.4s,  v27.4s, #31", 6, 27)
3342GEN_TWOVEC_TEST(sli_2s_2s_0,   "sli v6.2s,  v27.2s, #0",  6, 27)
3343GEN_TWOVEC_TEST(sli_2s_2s_16,  "sli v6.2s,  v27.2s, #16", 6, 27)
3344GEN_TWOVEC_TEST(sli_2s_2s_31,  "sli v6.2s,  v27.2s, #31", 6, 27)
3345GEN_TWOVEC_TEST(sli_8h_8h_0,   "sli v6.8h,  v27.8h, #0",  6, 27)
3346GEN_TWOVEC_TEST(sli_8h_8h_8,   "sli v6.8h,  v27.8h, #8",  6, 27)
3347GEN_TWOVEC_TEST(sli_8h_8h_15,  "sli v6.8h,  v27.8h, #15", 6, 27)
3348GEN_TWOVEC_TEST(sli_4h_4h_0,   "sli v6.4h,  v27.4h, #0",  6, 27)
3349GEN_TWOVEC_TEST(sli_4h_4h_8,   "sli v6.4h,  v27.4h, #8",  6, 27)
3350GEN_TWOVEC_TEST(sli_4h_4h_15,  "sli v6.4h,  v27.4h, #15", 6, 27)
3351GEN_TWOVEC_TEST(sli_16b_16b_0, "sli v6.16b, v27.16b, #0", 6, 27)
3352GEN_TWOVEC_TEST(sli_16b_16b_3, "sli v6.16b, v27.16b, #3", 6, 27)
3353GEN_TWOVEC_TEST(sli_16b_16b_7, "sli v6.16b, v27.16b, #7", 6, 27)
3354GEN_TWOVEC_TEST(sli_8b_8b_0,   "sli v6.8b,  v27.8b, #0",  6, 27)
3355GEN_TWOVEC_TEST(sli_8b_8b_3,   "sli v6.8b,  v27.8b, #3",  6, 27)
3356GEN_TWOVEC_TEST(sli_8b_8b_7,   "sli v6.8b,  v27.8b, #7",  6, 27)
3357GEN_TWOVEC_TEST(sri_2d_2d_1,   "sri v6.2d,  v27.2d,  #1",  6, 27)
3358GEN_TWOVEC_TEST(sri_2d_2d_33,  "sri v6.2d,  v27.2d,  #33", 6, 27)
3359GEN_TWOVEC_TEST(sri_2d_2d_64,  "sri v6.2d,  v27.2d,  #64", 6, 27)
3360GEN_TWOVEC_TEST(sri_4s_4s_1,   "sri v6.4s,  v27.4s,  #1",  6, 27)
3361GEN_TWOVEC_TEST(sri_4s_4s_17,  "sri v6.4s,  v27.4s,  #17", 6, 27)
3362GEN_TWOVEC_TEST(sri_4s_4s_32,  "sri v6.4s,  v27.4s,  #32", 6, 27)
3363GEN_TWOVEC_TEST(sri_2s_2s_1,   "sri v6.2s,  v27.2s,  #1",  6, 27)
3364GEN_TWOVEC_TEST(sri_2s_2s_17,  "sri v6.2s,  v27.2s,  #17", 6, 27)
3365GEN_TWOVEC_TEST(sri_2s_2s_32,  "sri v6.2s,  v27.2s,  #32", 6, 27)
3366GEN_TWOVEC_TEST(sri_8h_8h_1,   "sri v6.8h,  v27.8h,  #1",  6, 27)
3367GEN_TWOVEC_TEST(sri_8h_8h_8,   "sri v6.8h,  v27.8h,  #8",  6, 27)
3368GEN_TWOVEC_TEST(sri_8h_8h_16,  "sri v6.8h,  v27.8h,  #16", 6, 27)
3369GEN_TWOVEC_TEST(sri_4h_4h_1,   "sri v6.4h,  v27.4h,  #1",  6, 27)
3370GEN_TWOVEC_TEST(sri_4h_4h_8,   "sri v6.4h,  v27.4h,  #8",  6, 27)
3371GEN_TWOVEC_TEST(sri_4h_4h_16,  "sri v6.4h,  v27.4h,  #16", 6, 27)
3372GEN_TWOVEC_TEST(sri_16b_16b_1, "sri v6.16b, v27.16b, #1", 6, 27)
3373GEN_TWOVEC_TEST(sri_16b_16b_4, "sri v6.16b, v27.16b, #4", 6, 27)
3374GEN_TWOVEC_TEST(sri_16b_16b_8, "sri v6.16b, v27.16b, #8", 6, 27)
3375GEN_TWOVEC_TEST(sri_8b_8b_1,   "sri v6.8b,  v27.8b,  #1",  6, 27)
3376GEN_TWOVEC_TEST(sri_8b_8b_4,   "sri v6.8b,  v27.8b,  #4",  6, 27)
3377GEN_TWOVEC_TEST(sri_8b_8b_8,   "sri v6.8b,  v27.8b,  #8",  6, 27)
3378
3379GEN_BINARY_TEST(smax, 4s, 4s, 4s)
3380GEN_BINARY_TEST(smax, 2s, 2s, 2s)
3381GEN_BINARY_TEST(smax, 8h, 8h, 8h)
3382GEN_BINARY_TEST(smax, 4h, 4h, 4h)
3383GEN_BINARY_TEST(smax, 16b, 16b, 16b)
3384GEN_BINARY_TEST(smax, 8b, 8b, 8b)
3385GEN_BINARY_TEST(umax, 4s, 4s, 4s)
3386GEN_BINARY_TEST(umax, 2s, 2s, 2s)
3387GEN_BINARY_TEST(umax, 8h, 8h, 8h)
3388GEN_BINARY_TEST(umax, 4h, 4h, 4h)
3389GEN_BINARY_TEST(umax, 16b, 16b, 16b)
3390GEN_BINARY_TEST(umax, 8b, 8b, 8b)
3391GEN_BINARY_TEST(smin, 4s, 4s, 4s)
3392GEN_BINARY_TEST(smin, 2s, 2s, 2s)
3393GEN_BINARY_TEST(smin, 8h, 8h, 8h)
3394GEN_BINARY_TEST(smin, 4h, 4h, 4h)
3395GEN_BINARY_TEST(smin, 16b, 16b, 16b)
3396GEN_BINARY_TEST(smin, 8b, 8b, 8b)
3397GEN_BINARY_TEST(umin, 4s, 4s, 4s)
3398GEN_BINARY_TEST(umin, 2s, 2s, 2s)
3399GEN_BINARY_TEST(umin, 8h, 8h, 8h)
3400GEN_BINARY_TEST(umin, 4h, 4h, 4h)
3401GEN_BINARY_TEST(umin, 16b, 16b, 16b)
3402GEN_BINARY_TEST(umin, 8b, 8b, 8b)
3403
3404GEN_BINARY_TEST(smaxp, 4s, 4s, 4s)
3405GEN_BINARY_TEST(smaxp, 2s, 2s, 2s)
3406GEN_BINARY_TEST(smaxp, 8h, 8h, 8h)
3407GEN_BINARY_TEST(smaxp, 4h, 4h, 4h)
3408GEN_BINARY_TEST(smaxp, 16b, 16b, 16b)
3409GEN_BINARY_TEST(smaxp, 8b, 8b, 8b)
3410GEN_BINARY_TEST(umaxp, 4s, 4s, 4s)
3411GEN_BINARY_TEST(umaxp, 2s, 2s, 2s)
3412GEN_BINARY_TEST(umaxp, 8h, 8h, 8h)
3413GEN_BINARY_TEST(umaxp, 4h, 4h, 4h)
3414GEN_BINARY_TEST(umaxp, 16b, 16b, 16b)
3415GEN_BINARY_TEST(umaxp, 8b, 8b, 8b)
3416GEN_BINARY_TEST(sminp, 4s, 4s, 4s)
3417GEN_BINARY_TEST(sminp, 2s, 2s, 2s)
3418GEN_BINARY_TEST(sminp, 8h, 8h, 8h)
3419GEN_BINARY_TEST(sminp, 4h, 4h, 4h)
3420GEN_BINARY_TEST(sminp, 16b, 16b, 16b)
3421GEN_BINARY_TEST(sminp, 8b, 8b, 8b)
3422GEN_BINARY_TEST(uminp, 4s, 4s, 4s)
3423GEN_BINARY_TEST(uminp, 2s, 2s, 2s)
3424GEN_BINARY_TEST(uminp, 8h, 8h, 8h)
3425GEN_BINARY_TEST(uminp, 4h, 4h, 4h)
3426GEN_BINARY_TEST(uminp, 16b, 16b, 16b)
3427GEN_BINARY_TEST(uminp, 8b, 8b, 8b)
3428
3429// test_SMAXV is a handwritten function
3430// test_UMAXV is a handwritten function
3431// test_SMINV is a handwritten function
3432// test_UMINV is a handwritten function
3433
3434GEN_THREEVEC_TEST(smlal_2d_2s_s0,  "smlal  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3435GEN_THREEVEC_TEST(smlal_2d_2s_s3,  "smlal  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3436GEN_THREEVEC_TEST(smlal2_2d_4s_s1, "smlal2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3437GEN_THREEVEC_TEST(smlal2_2d_4s_s2, "smlal2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3438GEN_THREEVEC_TEST(smlal_4s_4h_h0,  "smlal  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3439GEN_THREEVEC_TEST(smlal_4s_4h_h7,  "smlal  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3440GEN_THREEVEC_TEST(smlal2_4s_8h_h1, "smlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3441GEN_THREEVEC_TEST(smlal2_4s_8h_h4, "smlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3442GEN_THREEVEC_TEST(umlal_2d_2s_s0,  "umlal  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3443GEN_THREEVEC_TEST(umlal_2d_2s_s3,  "umlal  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3444GEN_THREEVEC_TEST(umlal2_2d_4s_s1, "umlal2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3445GEN_THREEVEC_TEST(umlal2_2d_4s_s2, "umlal2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3446GEN_THREEVEC_TEST(umlal_4s_4h_h0,  "umlal  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3447GEN_THREEVEC_TEST(umlal_4s_4h_h7,  "umlal  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3448GEN_THREEVEC_TEST(umlal2_4s_8h_h1, "umlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3449GEN_THREEVEC_TEST(umlal2_4s_8h_h4, "umlal2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3450GEN_THREEVEC_TEST(smlsl_2d_2s_s0,  "smlsl  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3451GEN_THREEVEC_TEST(smlsl_2d_2s_s3,  "smlsl  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3452GEN_THREEVEC_TEST(smlsl2_2d_4s_s1, "smlsl2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3453GEN_THREEVEC_TEST(smlsl2_2d_4s_s2, "smlsl2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3454GEN_THREEVEC_TEST(smlsl_4s_4h_h0,  "smlsl  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3455GEN_THREEVEC_TEST(smlsl_4s_4h_h7,  "smlsl  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3456GEN_THREEVEC_TEST(smlsl2_4s_8h_h1, "smlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3457GEN_THREEVEC_TEST(smlsl2_4s_8h_h4, "smlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3458GEN_THREEVEC_TEST(umlsl_2d_2s_s0,  "umlsl  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3459GEN_THREEVEC_TEST(umlsl_2d_2s_s3,  "umlsl  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3460GEN_THREEVEC_TEST(umlsl2_2d_4s_s1, "umlsl2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3461GEN_THREEVEC_TEST(umlsl2_2d_4s_s2, "umlsl2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3462GEN_THREEVEC_TEST(umlsl_4s_4h_h0,  "umlsl  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3463GEN_THREEVEC_TEST(umlsl_4s_4h_h7,  "umlsl  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3464GEN_THREEVEC_TEST(umlsl2_4s_8h_h1, "umlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3465GEN_THREEVEC_TEST(umlsl2_4s_8h_h4, "umlsl2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3466GEN_THREEVEC_TEST(smull_2d_2s_s0,  "smull  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3467GEN_THREEVEC_TEST(smull_2d_2s_s3,  "smull  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3468GEN_THREEVEC_TEST(smull2_2d_4s_s1, "smull2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3469GEN_THREEVEC_TEST(smull2_2d_4s_s2, "smull2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3470GEN_THREEVEC_TEST(smull_4s_4h_h0,  "smull  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3471GEN_THREEVEC_TEST(smull_4s_4h_h7,  "smull  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3472GEN_THREEVEC_TEST(smull2_4s_8h_h1, "smull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3473GEN_THREEVEC_TEST(smull2_4s_8h_h4, "smull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3474GEN_THREEVEC_TEST(umull_2d_2s_s0,  "umull  v29.2d, v20.2s, v3.s[0]", 29, 20, 3)
3475GEN_THREEVEC_TEST(umull_2d_2s_s3,  "umull  v29.2d, v20.2s, v3.s[3]", 29, 20, 3)
3476GEN_THREEVEC_TEST(umull2_2d_4s_s1, "umull2 v29.2d, v20.4s, v3.s[1]", 29, 20, 3)
3477GEN_THREEVEC_TEST(umull2_2d_4s_s2, "umull2 v29.2d, v20.4s, v3.s[2]", 29, 20, 3)
3478GEN_THREEVEC_TEST(umull_4s_4h_h0,  "umull  v29.4s, v20.4h, v3.h[0]", 29, 20, 3)
3479GEN_THREEVEC_TEST(umull_4s_4h_h7,  "umull  v29.4s, v20.4h, v3.h[7]", 29, 20, 3)
3480GEN_THREEVEC_TEST(umull2_4s_8h_h1, "umull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3481GEN_THREEVEC_TEST(umull2_4s_8h_h4, "umull2 v29.4s, v20.8h, v3.h[1]", 29, 20, 3)
3482
3483GEN_THREEVEC_TEST(smlal_2d_2s_2s,  "smlal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3484GEN_THREEVEC_TEST(smlal2_2d_4s_4s, "smlal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3485GEN_THREEVEC_TEST(smlal_4s_4h_4h,  "smlal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3486GEN_THREEVEC_TEST(smlal2_4s_8h_8h, "smlal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3487GEN_THREEVEC_TEST(smlal_8h_8b_8b,  "smlal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3488GEN_THREEVEC_TEST(smlal2_8h_16b_16b,
3489                                   "smlal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3490GEN_THREEVEC_TEST(umlal_2d_2s_2s,  "umlal  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3491GEN_THREEVEC_TEST(umlal2_2d_4s_4s, "umlal2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3492GEN_THREEVEC_TEST(umlal_4s_4h_4h,  "umlal  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3493GEN_THREEVEC_TEST(umlal2_4s_8h_8h, "umlal2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3494GEN_THREEVEC_TEST(umlal_8h_8b_8b,  "umlal  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3495GEN_THREEVEC_TEST(umlal2_8h_16b_16b,
3496                                   "umlal2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3497GEN_THREEVEC_TEST(smlsl_2d_2s_2s,  "smlsl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3498GEN_THREEVEC_TEST(smlsl2_2d_4s_4s, "smlsl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3499GEN_THREEVEC_TEST(smlsl_4s_4h_4h,  "smlsl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3500GEN_THREEVEC_TEST(smlsl2_4s_8h_8h, "smlsl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3501GEN_THREEVEC_TEST(smlsl_8h_8b_8b,  "smlsl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3502GEN_THREEVEC_TEST(smlsl2_8h_16b_16b,
3503                                   "smlsl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3504GEN_THREEVEC_TEST(umlsl_2d_2s_2s,  "umlsl  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3505GEN_THREEVEC_TEST(umlsl2_2d_4s_4s, "umlsl2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3506GEN_THREEVEC_TEST(umlsl_4s_4h_4h,  "umlsl  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3507GEN_THREEVEC_TEST(umlsl2_4s_8h_8h, "umlsl2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3508GEN_THREEVEC_TEST(umlsl_8h_8b_8b,  "umlsl  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3509GEN_THREEVEC_TEST(umlsl2_8h_16b_16b,
3510                                   "umlsl2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3511GEN_THREEVEC_TEST(smull_2d_2s_2s,  "smull  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3512GEN_THREEVEC_TEST(smull2_2d_4s_4s, "smull2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3513GEN_THREEVEC_TEST(smull_4s_4h_4h,  "smull  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3514GEN_THREEVEC_TEST(smull2_4s_8h_8h, "smull2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3515GEN_THREEVEC_TEST(smull_8h_8b_8b,  "smull  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3516GEN_THREEVEC_TEST(smull2_8h_16b_16b,
3517                                   "smull2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3518GEN_THREEVEC_TEST(umull_2d_2s_2s,  "umull  v2.2d, v11.2s, v29.2s", 2, 11, 29)
3519GEN_THREEVEC_TEST(umull2_2d_4s_4s, "umull2 v2.2d, v11.4s, v29.4s", 2, 11, 29)
3520GEN_THREEVEC_TEST(umull_4s_4h_4h,  "umull  v2.4s, v11.4h, v29.4h", 2, 11, 29)
3521GEN_THREEVEC_TEST(umull2_4s_8h_8h, "umull2 v2.4s, v11.8h, v29.8h", 2, 11, 29)
3522GEN_THREEVEC_TEST(umull_8h_8b_8b,  "umull  v2.8h, v11.8b, v29.8b", 2, 11, 29)
3523GEN_THREEVEC_TEST(umull2_8h_16b_16b,
3524                                   "umull2 v2.8h, v11.16b, v29.16b", 2, 11, 29)
3525
3526GEN_ONEINT_ONEVEC_TEST(umov_x_d0,  "umov x9, v10.d[0]", 9, 10)
3527GEN_ONEINT_ONEVEC_TEST(umov_x_d1,  "umov x9, v10.d[1]", 9, 10)
3528GEN_ONEINT_ONEVEC_TEST(umov_w_s0,  "umov w9, v10.s[0]", 9, 10)
3529GEN_ONEINT_ONEVEC_TEST(umov_w_s3,  "umov w9, v10.s[3]", 9, 10)
3530GEN_ONEINT_ONEVEC_TEST(umov_w_h0,  "umov w9, v10.h[0]", 9, 10)
3531GEN_ONEINT_ONEVEC_TEST(umov_w_h7,  "umov w9, v10.h[7]", 9, 10)
3532GEN_ONEINT_ONEVEC_TEST(umov_w_b0,  "umov w9, v10.b[0]", 9, 10)
3533GEN_ONEINT_ONEVEC_TEST(umov_w_b15, "umov w9, v10.b[15]", 9, 10)
3534GEN_ONEINT_ONEVEC_TEST(smov_x_s0,  "smov x9, v10.s[0]", 9, 10)
3535GEN_ONEINT_ONEVEC_TEST(smov_x_s3,  "smov x9, v10.s[3]", 9, 10)
3536GEN_ONEINT_ONEVEC_TEST(smov_x_h0,  "smov x9, v10.h[0]", 9, 10)
3537GEN_ONEINT_ONEVEC_TEST(smov_x_h7,  "smov x9, v10.h[7]", 9, 10)
3538GEN_ONEINT_ONEVEC_TEST(smov_w_h0,  "smov w9, v10.h[0]", 9, 10)
3539GEN_ONEINT_ONEVEC_TEST(smov_w_h7,  "smov w9, v10.h[7]", 9, 10)
3540GEN_ONEINT_ONEVEC_TEST(smov_x_b0,  "smov x9, v10.b[0]", 9, 10)
3541GEN_ONEINT_ONEVEC_TEST(smov_x_b15, "smov x9, v10.b[15]", 9, 10)
3542GEN_ONEINT_ONEVEC_TEST(smov_w_b0,  "smov w9, v10.b[0]", 9, 10)
3543GEN_ONEINT_ONEVEC_TEST(smov_w_b15, "smov w9, v10.b[15]", 9, 10)
3544
3545GEN_TWOVEC_TEST(sqabs_d_d, "sqabs d7, d30", 7, 30)
3546GEN_TWOVEC_TEST(sqabs_s_s, "sqabs s7, s30", 7, 30)
3547GEN_TWOVEC_TEST(sqabs_h_h, "sqabs h7, h30", 7, 30)
3548GEN_TWOVEC_TEST(sqabs_b_b, "sqabs b7, b30", 7, 30)
3549GEN_TWOVEC_TEST(sqneg_d_d, "sqneg d7, d30", 7, 30)
3550GEN_TWOVEC_TEST(sqneg_s_s, "sqneg s7, s30", 7, 30)
3551GEN_TWOVEC_TEST(sqneg_h_h, "sqneg h7, h30", 7, 30)
3552GEN_TWOVEC_TEST(sqneg_b_b, "sqneg b7, b30", 7, 30)
3553
3554GEN_UNARY_TEST(sqabs, 2d, 2d)
3555GEN_UNARY_TEST(sqabs, 4s, 4s)
3556GEN_UNARY_TEST(sqabs, 2s, 2s)
3557GEN_UNARY_TEST(sqabs, 8h, 8h)
3558GEN_UNARY_TEST(sqabs, 4h, 4h)
3559GEN_UNARY_TEST(sqabs, 16b, 16b)
3560GEN_UNARY_TEST(sqabs, 8b, 8b)
3561GEN_UNARY_TEST(sqneg, 2d, 2d)
3562GEN_UNARY_TEST(sqneg, 4s, 4s)
3563GEN_UNARY_TEST(sqneg, 2s, 2s)
3564GEN_UNARY_TEST(sqneg, 8h, 8h)
3565GEN_UNARY_TEST(sqneg, 4h, 4h)
3566GEN_UNARY_TEST(sqneg, 16b, 16b)
3567GEN_UNARY_TEST(sqneg, 8b, 8b)
3568
3569GEN_THREEVEC_TEST(sqadd_d_d_d, "sqadd d1, d2, d4", 1, 2, 4)
3570GEN_THREEVEC_TEST(sqadd_s_s_s, "sqadd s1, s2, s4", 1, 2, 4)
3571GEN_THREEVEC_TEST(sqadd_h_h_h, "sqadd h1, h2, h4", 1, 2, 4)
3572GEN_THREEVEC_TEST(sqadd_b_b_b, "sqadd b1, b2, b4", 1, 2, 4)
3573GEN_THREEVEC_TEST(uqadd_d_d_d, "uqadd d1, d2, d4", 1, 2, 4)
3574GEN_THREEVEC_TEST(uqadd_s_s_s, "uqadd s1, s2, s4", 1, 2, 4)
3575GEN_THREEVEC_TEST(uqadd_h_h_h, "uqadd h1, h2, h4", 1, 2, 4)
3576GEN_THREEVEC_TEST(uqadd_b_b_b, "uqadd b1, b2, b4", 1, 2, 4)
3577GEN_THREEVEC_TEST(sqsub_d_d_d, "sqsub d1, d2, d4", 1, 2, 4)
3578GEN_THREEVEC_TEST(sqsub_s_s_s, "sqsub s1, s2, s4", 1, 2, 4)
3579GEN_THREEVEC_TEST(sqsub_h_h_h, "sqsub h1, h2, h4", 1, 2, 4)
3580GEN_THREEVEC_TEST(sqsub_b_b_b, "sqsub b1, b2, b4", 1, 2, 4)
3581GEN_THREEVEC_TEST(uqsub_d_d_d, "uqsub d1, d2, d4", 1, 2, 4)
3582GEN_THREEVEC_TEST(uqsub_s_s_s, "uqsub s1, s2, s4", 1, 2, 4)
3583GEN_THREEVEC_TEST(uqsub_h_h_h, "uqsub h1, h2, h4", 1, 2, 4)
3584GEN_THREEVEC_TEST(uqsub_b_b_b, "uqsub b1, b2, b4", 1, 2, 4)
3585
3586GEN_THREEVEC_TEST(sqadd_2d_2d_2d,    "sqadd v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3587GEN_THREEVEC_TEST(sqadd_4s_4s_4s,    "sqadd v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3588GEN_THREEVEC_TEST(sqadd_2s_2s_2s,    "sqadd v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3589GEN_THREEVEC_TEST(sqadd_8h_8h_8h,    "sqadd v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3590GEN_THREEVEC_TEST(sqadd_4h_4h_4h,    "sqadd v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3591GEN_THREEVEC_TEST(sqadd_16b_16b_16b, "sqadd v1.16b, v2.16b, v4.16b", 1, 2, 4)
3592GEN_THREEVEC_TEST(sqadd_8b_8b_8b,    "sqadd v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3593GEN_THREEVEC_TEST(uqadd_2d_2d_2d,    "uqadd v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3594GEN_THREEVEC_TEST(uqadd_4s_4s_4s,    "uqadd v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3595GEN_THREEVEC_TEST(uqadd_2s_2s_2s,    "uqadd v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3596GEN_THREEVEC_TEST(uqadd_8h_8h_8h,    "uqadd v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3597GEN_THREEVEC_TEST(uqadd_4h_4h_4h,    "uqadd v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3598GEN_THREEVEC_TEST(uqadd_16b_16b_16b, "uqadd v1.16b, v2.16b, v4.16b", 1, 2, 4)
3599GEN_THREEVEC_TEST(uqadd_8b_8b_8b,    "uqadd v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3600GEN_THREEVEC_TEST(sqsub_2d_2d_2d,    "sqsub v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3601GEN_THREEVEC_TEST(sqsub_4s_4s_4s,    "sqsub v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3602GEN_THREEVEC_TEST(sqsub_2s_2s_2s,    "sqsub v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3603GEN_THREEVEC_TEST(sqsub_8h_8h_8h,    "sqsub v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3604GEN_THREEVEC_TEST(sqsub_4h_4h_4h,    "sqsub v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3605GEN_THREEVEC_TEST(sqsub_16b_16b_16b, "sqsub v1.16b, v2.16b, v4.16b", 1, 2, 4)
3606GEN_THREEVEC_TEST(sqsub_8b_8b_8b,    "sqsub v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3607GEN_THREEVEC_TEST(uqsub_2d_2d_2d,    "uqsub v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3608GEN_THREEVEC_TEST(uqsub_4s_4s_4s,    "uqsub v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3609GEN_THREEVEC_TEST(uqsub_2s_2s_2s,    "uqsub v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3610GEN_THREEVEC_TEST(uqsub_8h_8h_8h,    "uqsub v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3611GEN_THREEVEC_TEST(uqsub_4h_4h_4h,    "uqsub v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3612GEN_THREEVEC_TEST(uqsub_16b_16b_16b, "uqsub v1.16b, v2.16b, v4.16b", 1, 2, 4)
3613GEN_THREEVEC_TEST(uqsub_8b_8b_8b,    "uqsub v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3614
3615GEN_THREEVEC_TEST(sqdmlal_d_s_s0, "sqdmlal d31, s30, v29.s[0]", 31,30,29)
3616GEN_THREEVEC_TEST(sqdmlal_d_s_s3, "sqdmlal d31, s30, v29.s[3]", 31,30,29)
3617GEN_THREEVEC_TEST(sqdmlal_s_h_h1, "sqdmlal s31, h30, v13.h[1]", 31,30,13)
3618GEN_THREEVEC_TEST(sqdmlal_s_h_h5, "sqdmlal s31, h30, v13.h[5]", 31,30,13)
3619GEN_THREEVEC_TEST(sqdmlsl_d_s_s0, "sqdmlsl d31, s30, v29.s[0]", 31,30,29)
3620GEN_THREEVEC_TEST(sqdmlsl_d_s_s3, "sqdmlsl d31, s30, v29.s[3]", 31,30,29)
3621GEN_THREEVEC_TEST(sqdmlsl_s_h_h1, "sqdmlsl s31, h30, v13.h[1]", 31,30,13)
3622GEN_THREEVEC_TEST(sqdmlsl_s_h_h5, "sqdmlsl s31, h30, v13.h[5]", 31,30,13)
3623GEN_THREEVEC_TEST(sqdmull_d_s_s0, "sqdmull d31, s30, v29.s[0]", 31,30,29)
3624GEN_THREEVEC_TEST(sqdmull_d_s_s3, "sqdmull d31, s30, v29.s[3]", 31,30,29)
3625GEN_THREEVEC_TEST(sqdmull_s_h_h1, "sqdmull s31, h30, v13.h[1]", 31,30,13)
3626GEN_THREEVEC_TEST(sqdmull_s_h_h5, "sqdmull s31, h30, v13.h[5]", 31,30,13)
3627
3628GEN_THREEVEC_TEST(sqdmlal_2d_2s_s0, "sqdmlal  v29.2d, v20.2s, v3.s[0]",29,20,3)
3629GEN_THREEVEC_TEST(sqdmlal_2d_2s_s3, "sqdmlal  v29.2d, v20.2s, v3.s[3]",29,20,3)
3630GEN_THREEVEC_TEST(sqdmlal2_2d_4s_s1,"sqdmlal2 v29.2d, v20.4s, v3.s[1]",29,20,3)
3631GEN_THREEVEC_TEST(sqdmlal2_2d_4s_s2,"sqdmlal2 v29.2d, v20.4s, v3.s[2]",29,20,3)
3632GEN_THREEVEC_TEST(sqdmlal_4s_4h_h0, "sqdmlal  v29.4s, v20.4h, v3.h[0]",29,20,3)
3633GEN_THREEVEC_TEST(sqdmlal_4s_4h_h7, "sqdmlal  v29.4s, v20.4h, v3.h[7]",29,20,3)
3634GEN_THREEVEC_TEST(sqdmlal2_4s_8h_h1,"sqdmlal2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3635GEN_THREEVEC_TEST(sqdmlal2_4s_8h_h4,"sqdmlal2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3636GEN_THREEVEC_TEST(sqdmlsl_2d_2s_s0, "sqdmlsl  v29.2d, v20.2s, v3.s[0]",29,20,3)
3637GEN_THREEVEC_TEST(sqdmlsl_2d_2s_s3, "sqdmlsl  v29.2d, v20.2s, v3.s[3]",29,20,3)
3638GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_s1,"sqdmlsl2 v29.2d, v20.4s, v3.s[1]",29,20,3)
3639GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_s2,"sqdmlsl2 v29.2d, v20.4s, v3.s[2]",29,20,3)
3640GEN_THREEVEC_TEST(sqdmlsl_4s_4h_h0, "sqdmlsl  v29.4s, v20.4h, v3.h[0]",29,20,3)
3641GEN_THREEVEC_TEST(sqdmlsl_4s_4h_h7, "sqdmlsl  v29.4s, v20.4h, v3.h[7]",29,20,3)
3642GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_h1,"sqdmlsl2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3643GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_h4,"sqdmlsl2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3644GEN_THREEVEC_TEST(sqdmull_2d_2s_s0, "sqdmull  v29.2d, v20.2s, v3.s[0]",29,20,3)
3645GEN_THREEVEC_TEST(sqdmull_2d_2s_s3, "sqdmull  v29.2d, v20.2s, v3.s[3]",29,20,3)
3646GEN_THREEVEC_TEST(sqdmull2_2d_4s_s1,"sqdmull2 v29.2d, v20.4s, v3.s[1]",29,20,3)
3647GEN_THREEVEC_TEST(sqdmull2_2d_4s_s2,"sqdmull2 v29.2d, v20.4s, v3.s[2]",29,20,3)
3648GEN_THREEVEC_TEST(sqdmull_4s_4h_h0, "sqdmull  v29.4s, v20.4h, v3.h[0]",29,20,3)
3649GEN_THREEVEC_TEST(sqdmull_4s_4h_h7, "sqdmull  v29.4s, v20.4h, v3.h[7]",29,20,3)
3650GEN_THREEVEC_TEST(sqdmull2_4s_8h_h1,"sqdmull2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3651GEN_THREEVEC_TEST(sqdmull2_4s_8h_h4,"sqdmull2 v29.4s, v20.8h, v3.h[1]",29,20,3)
3652
3653GEN_THREEVEC_TEST(sqdmlal_d_s_s, "sqdmlal d0, s8, s16", 0, 8, 16)
3654GEN_THREEVEC_TEST(sqdmlal_s_h_h, "sqdmlal s0, h8, h16", 0, 8, 16)
3655GEN_THREEVEC_TEST(sqdmlsl_d_s_s, "sqdmlsl d0, s8, s16", 0, 8, 16)
3656GEN_THREEVEC_TEST(sqdmlsl_s_h_h, "sqdmlsl s0, h8, h16", 0, 8, 16)
3657GEN_THREEVEC_TEST(sqdmull_d_s_s, "sqdmull d0, s8, s16", 0, 8, 16)
3658GEN_THREEVEC_TEST(sqdmull_s_h_h, "sqdmull s0, h8, h16", 0, 8, 16)
3659
3660GEN_THREEVEC_TEST(sqdmlal_2d_2s_2s,  "sqdmlal  v2.2d, v11.2s, v29.2s", 2,11,29)
3661GEN_THREEVEC_TEST(sqdmlal2_2d_4s_4s, "sqdmlal2 v2.2d, v11.4s, v29.4s", 2,11,29)
3662GEN_THREEVEC_TEST(sqdmlal_4s_4h_4h,  "sqdmlal  v2.4s, v11.4h, v29.4h", 2,11,29)
3663GEN_THREEVEC_TEST(sqdmlal2_4s_8h_8h, "sqdmlal2 v2.4s, v11.8h, v29.8h", 2,11,29)
3664GEN_THREEVEC_TEST(sqdmlsl_2d_2s_2s,  "sqdmlsl  v2.2d, v11.2s, v29.2s", 2,11,29)
3665GEN_THREEVEC_TEST(sqdmlsl2_2d_4s_4s, "sqdmlsl2 v2.2d, v11.4s, v29.4s", 2,11,29)
3666GEN_THREEVEC_TEST(sqdmlsl_4s_4h_4h,  "sqdmlsl  v2.4s, v11.4h, v29.4h", 2,11,29)
3667GEN_THREEVEC_TEST(sqdmlsl2_4s_8h_8h, "sqdmlsl2 v2.4s, v11.8h, v29.8h", 2,11,29)
3668GEN_THREEVEC_TEST(sqdmull_2d_2s_2s,  "sqdmull  v2.2d, v11.2s, v29.2s", 2,11,29)
3669GEN_THREEVEC_TEST(sqdmull2_2d_4s_4s, "sqdmull2 v2.2d, v11.4s, v29.4s", 2,11,29)
3670GEN_THREEVEC_TEST(sqdmull_4s_4h_4h,  "sqdmull  v2.4s, v11.4h, v29.4h", 2,11,29)
3671GEN_THREEVEC_TEST(sqdmull2_4s_8h_8h, "sqdmull2 v2.4s, v11.8h, v29.8h", 2,11,29)
3672
3673GEN_THREEVEC_TEST(sqdmulh_s_s_s1, "sqdmulh s0, s1, v2.s[1]", 0,1,2)
3674GEN_THREEVEC_TEST(sqdmulh_s_s_s3, "sqdmulh s0, s1, v2.s[3]", 0,1,2)
3675GEN_THREEVEC_TEST(sqdmulh_h_h_h2, "sqdmulh h0, h1, v2.h[2]", 0,1,2)
3676GEN_THREEVEC_TEST(sqdmulh_h_h_h7, "sqdmulh h0, h1, v2.h[7]", 0,1,2)
3677GEN_THREEVEC_TEST(sqrdmulh_s_s_s1, "sqrdmulh s0, s1, v2.s[1]", 0,1,2)
3678GEN_THREEVEC_TEST(sqrdmulh_s_s_s3, "sqrdmulh s0, s1, v2.s[3]", 0,1,2)
3679GEN_THREEVEC_TEST(sqrdmulh_h_h_h2, "sqrdmulh h0, h1, v2.h[2]", 0,1,2)
3680GEN_THREEVEC_TEST(sqrdmulh_h_h_h7, "sqrdmulh h0, h1, v2.h[7]", 0,1,2)
3681
3682GEN_THREEVEC_TEST(sqdmulh_4s_4s_s1, "sqdmulh v0.4s, v1.4s, v2.s[1]", 0,1,2)
3683GEN_THREEVEC_TEST(sqdmulh_4s_4s_s3, "sqdmulh v0.4s, v1.4s, v2.s[3]", 0,1,2)
3684GEN_THREEVEC_TEST(sqdmulh_2s_2s_s1, "sqdmulh v0.2s, v1.2s, v2.s[1]", 0,1,2)
3685GEN_THREEVEC_TEST(sqdmulh_2s_2s_s3, "sqdmulh v0.2s, v1.2s, v2.s[3]", 0,1,2)
3686GEN_THREEVEC_TEST(sqdmulh_8h_8h_h2, "sqdmulh v0.8h, v1.8h, v2.h[2]", 0,1,2)
3687GEN_THREEVEC_TEST(sqdmulh_8h_8h_h7, "sqdmulh v0.8h, v1.8h, v2.h[7]", 0,1,2)
3688GEN_THREEVEC_TEST(sqdmulh_4h_4h_h2, "sqdmulh v0.4h, v1.4h, v2.h[2]", 0,1,2)
3689GEN_THREEVEC_TEST(sqdmulh_4h_4h_h7, "sqdmulh v0.4h, v1.4h, v2.h[7]", 0,1,2)
3690GEN_THREEVEC_TEST(sqrdmulh_4s_4s_s1, "sqrdmulh v0.4s, v1.4s, v2.s[1]", 0,1,2)
3691GEN_THREEVEC_TEST(sqrdmulh_4s_4s_s3, "sqrdmulh v0.4s, v1.4s, v2.s[3]", 0,1,2)
3692GEN_THREEVEC_TEST(sqrdmulh_2s_2s_s1, "sqrdmulh v0.2s, v1.2s, v2.s[1]", 0,1,2)
3693GEN_THREEVEC_TEST(sqrdmulh_2s_2s_s3, "sqrdmulh v0.2s, v1.2s, v2.s[3]", 0,1,2)
3694GEN_THREEVEC_TEST(sqrdmulh_8h_8h_h2, "sqrdmulh v0.8h, v1.8h, v2.h[2]", 0,1,2)
3695GEN_THREEVEC_TEST(sqrdmulh_8h_8h_h7, "sqrdmulh v0.8h, v1.8h, v2.h[7]", 0,1,2)
3696GEN_THREEVEC_TEST(sqrdmulh_4h_4h_h2, "sqrdmulh v0.4h, v1.4h, v2.h[2]", 0,1,2)
3697GEN_THREEVEC_TEST(sqrdmulh_4h_4h_h7, "sqrdmulh v0.4h, v1.4h, v2.h[7]", 0,1,2)
3698
3699GEN_THREEVEC_TEST(sqdmulh_s_s_s,  "sqdmulh  s1, s2, s4", 1, 2, 4)
3700GEN_THREEVEC_TEST(sqdmulh_h_h_h,  "sqdmulh  h1, h2, h4", 1, 2, 4)
3701GEN_THREEVEC_TEST(sqrdmulh_s_s_s, "sqrdmulh s1, s2, s4", 1, 2, 4)
3702GEN_THREEVEC_TEST(sqrdmulh_h_h_h, "sqrdmulh h1, h2, h4", 1, 2, 4)
3703
3704GEN_THREEVEC_TEST(sqdmulh_4s_4s_4s, "sqdmulh v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3705GEN_THREEVEC_TEST(sqdmulh_2s_2s_2s, "sqdmulh v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3706GEN_THREEVEC_TEST(sqdmulh_8h_8h_8h, "sqdmulh v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3707GEN_THREEVEC_TEST(sqdmulh_4h_4h_4h, "sqdmulh v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3708GEN_THREEVEC_TEST(sqrdmulh_4s_4s_4s, "sqrdmulh v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3709GEN_THREEVEC_TEST(sqrdmulh_2s_2s_2s, "sqrdmulh v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3710GEN_THREEVEC_TEST(sqrdmulh_8h_8h_8h, "sqrdmulh v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3711GEN_THREEVEC_TEST(sqrdmulh_4h_4h_4h, "sqrdmulh v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3712
3713GEN_THREEVEC_TEST(sqshl_d_d_d, "sqshl d1, d2, d4", 1, 2, 4)
3714GEN_THREEVEC_TEST(sqshl_s_s_s, "sqshl s1, s2, s4", 1, 2, 4)
3715GEN_THREEVEC_TEST(sqshl_h_h_h, "sqshl h1, h2, h4", 1, 2, 4)
3716GEN_THREEVEC_TEST(sqshl_b_b_b, "sqshl b1, b2, b4", 1, 2, 4)
3717GEN_THREEVEC_TEST(uqshl_d_d_d, "uqshl d1, d2, d4", 1, 2, 4)
3718GEN_THREEVEC_TEST(uqshl_s_s_s, "uqshl s1, s2, s4", 1, 2, 4)
3719GEN_THREEVEC_TEST(uqshl_h_h_h, "uqshl h1, h2, h4", 1, 2, 4)
3720GEN_THREEVEC_TEST(uqshl_b_b_b, "uqshl b1, b2, b4", 1, 2, 4)
3721GEN_THREEVEC_TEST(sqrshl_d_d_d, "sqrshl d1, d2, d4", 1, 2, 4)
3722GEN_THREEVEC_TEST(sqrshl_s_s_s, "sqrshl s1, s2, s4", 1, 2, 4)
3723GEN_THREEVEC_TEST(sqrshl_h_h_h, "sqrshl h1, h2, h4", 1, 2, 4)
3724GEN_THREEVEC_TEST(sqrshl_b_b_b, "sqrshl b1, b2, b4", 1, 2, 4)
3725GEN_THREEVEC_TEST(uqrshl_d_d_d, "uqrshl d1, d2, d4", 1, 2, 4)
3726GEN_THREEVEC_TEST(uqrshl_s_s_s, "uqrshl s1, s2, s4", 1, 2, 4)
3727GEN_THREEVEC_TEST(uqrshl_h_h_h, "uqrshl h1, h2, h4", 1, 2, 4)
3728GEN_THREEVEC_TEST(uqrshl_b_b_b, "uqrshl b1, b2, b4", 1, 2, 4)
3729
3730GEN_THREEVEC_TEST(sqshl_2d_2d_2d,    "sqshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3731GEN_THREEVEC_TEST(sqshl_4s_4s_4s,    "sqshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3732GEN_THREEVEC_TEST(sqshl_2s_2s_2s,    "sqshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3733GEN_THREEVEC_TEST(sqshl_8h_8h_8h,    "sqshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3734GEN_THREEVEC_TEST(sqshl_4h_4h_4h,    "sqshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3735GEN_THREEVEC_TEST(sqshl_16b_16b_16b, "sqshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
3736GEN_THREEVEC_TEST(sqshl_8b_8b_8b,    "sqshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3737GEN_THREEVEC_TEST(uqshl_2d_2d_2d,    "uqshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3738GEN_THREEVEC_TEST(uqshl_4s_4s_4s,    "uqshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3739GEN_THREEVEC_TEST(uqshl_2s_2s_2s,    "uqshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3740GEN_THREEVEC_TEST(uqshl_8h_8h_8h,    "uqshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3741GEN_THREEVEC_TEST(uqshl_4h_4h_4h,    "uqshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3742GEN_THREEVEC_TEST(uqshl_16b_16b_16b, "uqshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
3743GEN_THREEVEC_TEST(uqshl_8b_8b_8b,    "uqshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3744GEN_THREEVEC_TEST(sqrshl_2d_2d_2d,    "sqrshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3745GEN_THREEVEC_TEST(sqrshl_4s_4s_4s,    "sqrshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3746GEN_THREEVEC_TEST(sqrshl_2s_2s_2s,    "sqrshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3747GEN_THREEVEC_TEST(sqrshl_8h_8h_8h,    "sqrshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3748GEN_THREEVEC_TEST(sqrshl_4h_4h_4h,    "sqrshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3749GEN_THREEVEC_TEST(sqrshl_16b_16b_16b, "sqrshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
3750GEN_THREEVEC_TEST(sqrshl_8b_8b_8b,    "sqrshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3751GEN_THREEVEC_TEST(uqrshl_2d_2d_2d,    "uqrshl v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
3752GEN_THREEVEC_TEST(uqrshl_4s_4s_4s,    "uqrshl v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
3753GEN_THREEVEC_TEST(uqrshl_2s_2s_2s,    "uqrshl v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
3754GEN_THREEVEC_TEST(uqrshl_8h_8h_8h,    "uqrshl v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
3755GEN_THREEVEC_TEST(uqrshl_4h_4h_4h,    "uqrshl v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
3756GEN_THREEVEC_TEST(uqrshl_16b_16b_16b, "uqrshl v1.16b, v2.16b, v4.16b", 1, 2, 4)
3757GEN_THREEVEC_TEST(uqrshl_8b_8b_8b,    "uqrshl v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
3758
3759GEN_TWOVEC_TEST(sqrshrn_s_d_1,  "sqrshrn s2, d5, #1",  2, 5)
3760GEN_TWOVEC_TEST(sqrshrn_s_d_17, "sqrshrn s2, d5, #17", 2, 5)
3761GEN_TWOVEC_TEST(sqrshrn_s_d_32, "sqrshrn s2, d5, #32", 2, 5)
3762GEN_TWOVEC_TEST(sqrshrn_h_s_1,  "sqrshrn h2, s5, #1",  2, 5)
3763GEN_TWOVEC_TEST(sqrshrn_h_s_9,  "sqrshrn h2, s5, #9",  2, 5)
3764GEN_TWOVEC_TEST(sqrshrn_h_s_16, "sqrshrn h2, s5, #16", 2, 5)
3765GEN_TWOVEC_TEST(sqrshrn_b_h_1,  "sqrshrn b2, h5, #1",  2, 5)
3766GEN_TWOVEC_TEST(sqrshrn_b_h_4,  "sqrshrn b2, h5, #4",  2, 5)
3767GEN_TWOVEC_TEST(sqrshrn_b_h_8,  "sqrshrn b2, h5, #8",  2, 5)
3768GEN_TWOVEC_TEST(uqrshrn_s_d_1,  "uqrshrn s2, d5, #1",  2, 5)
3769GEN_TWOVEC_TEST(uqrshrn_s_d_17, "uqrshrn s2, d5, #17", 2, 5)
3770GEN_TWOVEC_TEST(uqrshrn_s_d_32, "uqrshrn s2, d5, #32", 2, 5)
3771GEN_TWOVEC_TEST(uqrshrn_h_s_1,  "uqrshrn h2, s5, #1",  2, 5)
3772GEN_TWOVEC_TEST(uqrshrn_h_s_9,  "uqrshrn h2, s5, #9",  2, 5)
3773GEN_TWOVEC_TEST(uqrshrn_h_s_16, "uqrshrn h2, s5, #16", 2, 5)
3774GEN_TWOVEC_TEST(uqrshrn_b_h_1,  "uqrshrn b2, h5, #1",  2, 5)
3775GEN_TWOVEC_TEST(uqrshrn_b_h_4,  "uqrshrn b2, h5, #4",  2, 5)
3776GEN_TWOVEC_TEST(uqrshrn_b_h_8,  "uqrshrn b2, h5, #8",  2, 5)
3777GEN_TWOVEC_TEST(sqshrn_s_d_1,  "sqshrn s2, d5, #1",  2, 5)
3778GEN_TWOVEC_TEST(sqshrn_s_d_17, "sqshrn s2, d5, #17", 2, 5)
3779GEN_TWOVEC_TEST(sqshrn_s_d_32, "sqshrn s2, d5, #32", 2, 5)
3780GEN_TWOVEC_TEST(sqshrn_h_s_1,  "sqshrn h2, s5, #1",  2, 5)
3781GEN_TWOVEC_TEST(sqshrn_h_s_9,  "sqshrn h2, s5, #9",  2, 5)
3782GEN_TWOVEC_TEST(sqshrn_h_s_16, "sqshrn h2, s5, #16", 2, 5)
3783GEN_TWOVEC_TEST(sqshrn_b_h_1,  "sqshrn b2, h5, #1",  2, 5)
3784GEN_TWOVEC_TEST(sqshrn_b_h_4,  "sqshrn b2, h5, #4",  2, 5)
3785GEN_TWOVEC_TEST(sqshrn_b_h_8,  "sqshrn b2, h5, #8",  2, 5)
3786GEN_TWOVEC_TEST(uqshrn_s_d_1,  "uqshrn s2, d5, #1",  2, 5)
3787GEN_TWOVEC_TEST(uqshrn_s_d_17, "uqshrn s2, d5, #17", 2, 5)
3788GEN_TWOVEC_TEST(uqshrn_s_d_32, "uqshrn s2, d5, #32", 2, 5)
3789GEN_TWOVEC_TEST(uqshrn_h_s_1,  "uqshrn h2, s5, #1",  2, 5)
3790GEN_TWOVEC_TEST(uqshrn_h_s_9,  "uqshrn h2, s5, #9",  2, 5)
3791GEN_TWOVEC_TEST(uqshrn_h_s_16, "uqshrn h2, s5, #16", 2, 5)
3792GEN_TWOVEC_TEST(uqshrn_b_h_1,  "uqshrn b2, h5, #1",  2, 5)
3793GEN_TWOVEC_TEST(uqshrn_b_h_4,  "uqshrn b2, h5, #4",  2, 5)
3794GEN_TWOVEC_TEST(uqshrn_b_h_8,  "uqshrn b2, h5, #8",  2, 5)
3795GEN_TWOVEC_TEST(sqrshrun_s_d_1,  "sqrshrun s2, d5, #1",  2, 5)
3796GEN_TWOVEC_TEST(sqrshrun_s_d_17, "sqrshrun s2, d5, #17", 2, 5)
3797GEN_TWOVEC_TEST(sqrshrun_s_d_32, "sqrshrun s2, d5, #32", 2, 5)
3798GEN_TWOVEC_TEST(sqrshrun_h_s_1,  "sqrshrun h2, s5, #1",  2, 5)
3799GEN_TWOVEC_TEST(sqrshrun_h_s_9,  "sqrshrun h2, s5, #9",  2, 5)
3800GEN_TWOVEC_TEST(sqrshrun_h_s_16, "sqrshrun h2, s5, #16", 2, 5)
3801GEN_TWOVEC_TEST(sqrshrun_b_h_1,  "sqrshrun b2, h5, #1",  2, 5)
3802GEN_TWOVEC_TEST(sqrshrun_b_h_4,  "sqrshrun b2, h5, #4",  2, 5)
3803GEN_TWOVEC_TEST(sqrshrun_b_h_8,  "sqrshrun b2, h5, #8",  2, 5)
3804GEN_TWOVEC_TEST(sqshrun_s_d_1,  "sqshrun s2, d5, #1",  2, 5)
3805GEN_TWOVEC_TEST(sqshrun_s_d_17, "sqshrun s2, d5, #17", 2, 5)
3806GEN_TWOVEC_TEST(sqshrun_s_d_32, "sqshrun s2, d5, #32", 2, 5)
3807GEN_TWOVEC_TEST(sqshrun_h_s_1,  "sqshrun h2, s5, #1",  2, 5)
3808GEN_TWOVEC_TEST(sqshrun_h_s_9,  "sqshrun h2, s5, #9",  2, 5)
3809GEN_TWOVEC_TEST(sqshrun_h_s_16, "sqshrun h2, s5, #16", 2, 5)
3810GEN_TWOVEC_TEST(sqshrun_b_h_1,  "sqshrun b2, h5, #1",  2, 5)
3811GEN_TWOVEC_TEST(sqshrun_b_h_4,  "sqshrun b2, h5, #4",  2, 5)
3812GEN_TWOVEC_TEST(sqshrun_b_h_8,  "sqshrun b2, h5, #8",  2, 5)
3813
3814GEN_TWOVEC_TEST(sqrshrn_2s_2d_1,   "sqrshrn  v4.2s,  v29.2d, #1",  4, 29)
3815GEN_TWOVEC_TEST(sqrshrn_2s_2d_17,  "sqrshrn  v4.2s,  v29.2d, #17", 4, 29)
3816GEN_TWOVEC_TEST(sqrshrn_2s_2d_32,  "sqrshrn  v4.2s,  v29.2d, #32", 4, 29)
3817GEN_TWOVEC_TEST(sqrshrn2_4s_2d_1,  "sqrshrn2 v4.4s,  v29.2d, #1",  4, 29)
3818GEN_TWOVEC_TEST(sqrshrn2_4s_2d_17, "sqrshrn2 v4.4s,  v29.2d, #17", 4, 29)
3819GEN_TWOVEC_TEST(sqrshrn2_4s_2d_32, "sqrshrn2 v4.4s,  v29.2d, #32", 4, 29)
3820GEN_TWOVEC_TEST(sqrshrn_4h_4s_1,   "sqrshrn  v4.4h,  v29.4s, #1",  4, 29)
3821GEN_TWOVEC_TEST(sqrshrn_4h_4s_9,   "sqrshrn  v4.4h,  v29.4s, #9",  4, 29)
3822GEN_TWOVEC_TEST(sqrshrn_4h_4s_16,  "sqrshrn  v4.4h,  v29.4s, #16", 4, 29)
3823GEN_TWOVEC_TEST(sqrshrn2_8h_4s_1,  "sqrshrn2 v4.8h,  v29.4s, #1",  4, 29)
3824GEN_TWOVEC_TEST(sqrshrn2_8h_4s_9,  "sqrshrn2 v4.8h,  v29.4s, #9",  4, 29)
3825GEN_TWOVEC_TEST(sqrshrn2_8h_4s_16, "sqrshrn2 v4.8h,  v29.4s, #16", 4, 29)
3826GEN_TWOVEC_TEST(sqrshrn_8b_8h_1,   "sqrshrn  v4.8b,  v29.8h, #1",  4, 29)
3827GEN_TWOVEC_TEST(sqrshrn_8b_8h_4,   "sqrshrn  v4.8b,  v29.8h, #4",  4, 29)
3828GEN_TWOVEC_TEST(sqrshrn_8b_8h_8,   "sqrshrn  v4.8b,  v29.8h, #8",  4, 29)
3829GEN_TWOVEC_TEST(sqrshrn2_16b_8h_1, "sqrshrn2 v4.16b, v29.8h, #1",  4, 29)
3830GEN_TWOVEC_TEST(sqrshrn2_16b_8h_4, "sqrshrn2 v4.16b, v29.8h, #4",  4, 29)
3831GEN_TWOVEC_TEST(sqrshrn2_16b_8h_8, "sqrshrn2 v4.16b, v29.8h, #8",  4, 29)
3832GEN_TWOVEC_TEST(uqrshrn_2s_2d_1,   "uqrshrn  v4.2s,  v29.2d, #1",  4, 29)
3833GEN_TWOVEC_TEST(uqrshrn_2s_2d_17,  "uqrshrn  v4.2s,  v29.2d, #17", 4, 29)
3834GEN_TWOVEC_TEST(uqrshrn_2s_2d_32,  "uqrshrn  v4.2s,  v29.2d, #32", 4, 29)
3835GEN_TWOVEC_TEST(uqrshrn2_4s_2d_1,  "uqrshrn2 v4.4s,  v29.2d, #1",  4, 29)
3836GEN_TWOVEC_TEST(uqrshrn2_4s_2d_17, "uqrshrn2 v4.4s,  v29.2d, #17", 4, 29)
3837GEN_TWOVEC_TEST(uqrshrn2_4s_2d_32, "uqrshrn2 v4.4s,  v29.2d, #32", 4, 29)
3838GEN_TWOVEC_TEST(uqrshrn_4h_4s_1,   "uqrshrn  v4.4h,  v29.4s, #1",  4, 29)
3839GEN_TWOVEC_TEST(uqrshrn_4h_4s_9,   "uqrshrn  v4.4h,  v29.4s, #9",  4, 29)
3840GEN_TWOVEC_TEST(uqrshrn_4h_4s_16,  "uqrshrn  v4.4h,  v29.4s, #16", 4, 29)
3841GEN_TWOVEC_TEST(uqrshrn2_8h_4s_1,  "uqrshrn2 v4.8h,  v29.4s, #1",  4, 29)
3842GEN_TWOVEC_TEST(uqrshrn2_8h_4s_9,  "uqrshrn2 v4.8h,  v29.4s, #9",  4, 29)
3843GEN_TWOVEC_TEST(uqrshrn2_8h_4s_16, "uqrshrn2 v4.8h,  v29.4s, #16", 4, 29)
3844GEN_TWOVEC_TEST(uqrshrn_8b_8h_1,   "uqrshrn  v4.8b,  v29.8h, #1",  4, 29)
3845GEN_TWOVEC_TEST(uqrshrn_8b_8h_4,   "uqrshrn  v4.8b,  v29.8h, #4",  4, 29)
3846GEN_TWOVEC_TEST(uqrshrn_8b_8h_8,   "uqrshrn  v4.8b,  v29.8h, #8",  4, 29)
3847GEN_TWOVEC_TEST(uqrshrn2_16b_8h_1, "uqrshrn2 v4.16b, v29.8h, #1",  4, 29)
3848GEN_TWOVEC_TEST(uqrshrn2_16b_8h_4, "uqrshrn2 v4.16b, v29.8h, #4",  4, 29)
3849GEN_TWOVEC_TEST(uqrshrn2_16b_8h_8, "uqrshrn2 v4.16b, v29.8h, #8",  4, 29)
3850GEN_TWOVEC_TEST(sqshrn_2s_2d_1,   "sqshrn  v4.2s,  v29.2d, #1",  4, 29)
3851GEN_TWOVEC_TEST(sqshrn_2s_2d_17,  "sqshrn  v4.2s,  v29.2d, #17", 4, 29)
3852GEN_TWOVEC_TEST(sqshrn_2s_2d_32,  "sqshrn  v4.2s,  v29.2d, #32", 4, 29)
3853GEN_TWOVEC_TEST(sqshrn2_4s_2d_1,  "sqshrn2 v4.4s,  v29.2d, #1",  4, 29)
3854GEN_TWOVEC_TEST(sqshrn2_4s_2d_17, "sqshrn2 v4.4s,  v29.2d, #17", 4, 29)
3855GEN_TWOVEC_TEST(sqshrn2_4s_2d_32, "sqshrn2 v4.4s,  v29.2d, #32", 4, 29)
3856GEN_TWOVEC_TEST(sqshrn_4h_4s_1,   "sqshrn  v4.4h,  v29.4s, #1",  4, 29)
3857GEN_TWOVEC_TEST(sqshrn_4h_4s_9,   "sqshrn  v4.4h,  v29.4s, #9",  4, 29)
3858GEN_TWOVEC_TEST(sqshrn_4h_4s_16,  "sqshrn  v4.4h,  v29.4s, #16", 4, 29)
3859GEN_TWOVEC_TEST(sqshrn2_8h_4s_1,  "sqshrn2 v4.8h,  v29.4s, #1",  4, 29)
3860GEN_TWOVEC_TEST(sqshrn2_8h_4s_9,  "sqshrn2 v4.8h,  v29.4s, #9",  4, 29)
3861GEN_TWOVEC_TEST(sqshrn2_8h_4s_16, "sqshrn2 v4.8h,  v29.4s, #16", 4, 29)
3862GEN_TWOVEC_TEST(sqshrn_8b_8h_1,   "sqshrn  v4.8b,  v29.8h, #1",  4, 29)
3863GEN_TWOVEC_TEST(sqshrn_8b_8h_4,   "sqshrn  v4.8b,  v29.8h, #4",  4, 29)
3864GEN_TWOVEC_TEST(sqshrn_8b_8h_8,   "sqshrn  v4.8b,  v29.8h, #8",  4, 29)
3865GEN_TWOVEC_TEST(sqshrn2_16b_8h_1, "sqshrn2 v4.16b, v29.8h, #1",  4, 29)
3866GEN_TWOVEC_TEST(sqshrn2_16b_8h_4, "sqshrn2 v4.16b, v29.8h, #4",  4, 29)
3867GEN_TWOVEC_TEST(sqshrn2_16b_8h_8, "sqshrn2 v4.16b, v29.8h, #8",  4, 29)
3868GEN_TWOVEC_TEST(uqshrn_2s_2d_1,   "uqshrn  v4.2s,  v29.2d, #1",  4, 29)
3869GEN_TWOVEC_TEST(uqshrn_2s_2d_17,  "uqshrn  v4.2s,  v29.2d, #17", 4, 29)
3870GEN_TWOVEC_TEST(uqshrn_2s_2d_32,  "uqshrn  v4.2s,  v29.2d, #32", 4, 29)
3871GEN_TWOVEC_TEST(uqshrn2_4s_2d_1,  "uqshrn2 v4.4s,  v29.2d, #1",  4, 29)
3872GEN_TWOVEC_TEST(uqshrn2_4s_2d_17, "uqshrn2 v4.4s,  v29.2d, #17", 4, 29)
3873GEN_TWOVEC_TEST(uqshrn2_4s_2d_32, "uqshrn2 v4.4s,  v29.2d, #32", 4, 29)
3874GEN_TWOVEC_TEST(uqshrn_4h_4s_1,   "uqshrn  v4.4h,  v29.4s, #1",  4, 29)
3875GEN_TWOVEC_TEST(uqshrn_4h_4s_9,   "uqshrn  v4.4h,  v29.4s, #9",  4, 29)
3876GEN_TWOVEC_TEST(uqshrn_4h_4s_16,  "uqshrn  v4.4h,  v29.4s, #16", 4, 29)
3877GEN_TWOVEC_TEST(uqshrn2_8h_4s_1,  "uqshrn2 v4.8h,  v29.4s, #1",  4, 29)
3878GEN_TWOVEC_TEST(uqshrn2_8h_4s_9,  "uqshrn2 v4.8h,  v29.4s, #9",  4, 29)
3879GEN_TWOVEC_TEST(uqshrn2_8h_4s_16, "uqshrn2 v4.8h,  v29.4s, #16", 4, 29)
3880GEN_TWOVEC_TEST(uqshrn_8b_8h_1,   "uqshrn  v4.8b,  v29.8h, #1",  4, 29)
3881GEN_TWOVEC_TEST(uqshrn_8b_8h_4,   "uqshrn  v4.8b,  v29.8h, #4",  4, 29)
3882GEN_TWOVEC_TEST(uqshrn_8b_8h_8,   "uqshrn  v4.8b,  v29.8h, #8",  4, 29)
3883GEN_TWOVEC_TEST(uqshrn2_16b_8h_1, "uqshrn2 v4.16b, v29.8h, #1",  4, 29)
3884GEN_TWOVEC_TEST(uqshrn2_16b_8h_4, "uqshrn2 v4.16b, v29.8h, #4",  4, 29)
3885GEN_TWOVEC_TEST(uqshrn2_16b_8h_8, "uqshrn2 v4.16b, v29.8h, #8",  4, 29)
3886GEN_TWOVEC_TEST(sqrshrun_2s_2d_1,   "sqrshrun  v4.2s,  v29.2d, #1",  4, 29)
3887GEN_TWOVEC_TEST(sqrshrun_2s_2d_17,  "sqrshrun  v4.2s,  v29.2d, #17", 4, 29)
3888GEN_TWOVEC_TEST(sqrshrun_2s_2d_32,  "sqrshrun  v4.2s,  v29.2d, #32", 4, 29)
3889GEN_TWOVEC_TEST(sqrshrun2_4s_2d_1,  "sqrshrun2 v4.4s,  v29.2d, #1",  4, 29)
3890GEN_TWOVEC_TEST(sqrshrun2_4s_2d_17, "sqrshrun2 v4.4s,  v29.2d, #17", 4, 29)
3891GEN_TWOVEC_TEST(sqrshrun2_4s_2d_32, "sqrshrun2 v4.4s,  v29.2d, #32", 4, 29)
3892GEN_TWOVEC_TEST(sqrshrun_4h_4s_1,   "sqrshrun  v4.4h,  v29.4s, #1",  4, 29)
3893GEN_TWOVEC_TEST(sqrshrun_4h_4s_9,   "sqrshrun  v4.4h,  v29.4s, #9",  4, 29)
3894GEN_TWOVEC_TEST(sqrshrun_4h_4s_16,  "sqrshrun  v4.4h,  v29.4s, #16", 4, 29)
3895GEN_TWOVEC_TEST(sqrshrun2_8h_4s_1,  "sqrshrun2 v4.8h,  v29.4s, #1",  4, 29)
3896GEN_TWOVEC_TEST(sqrshrun2_8h_4s_9,  "sqrshrun2 v4.8h,  v29.4s, #9",  4, 29)
3897GEN_TWOVEC_TEST(sqrshrun2_8h_4s_16, "sqrshrun2 v4.8h,  v29.4s, #16", 4, 29)
3898GEN_TWOVEC_TEST(sqrshrun_8b_8h_1,   "sqrshrun  v4.8b,  v29.8h, #1",  4, 29)
3899GEN_TWOVEC_TEST(sqrshrun_8b_8h_4,   "sqrshrun  v4.8b,  v29.8h, #4",  4, 29)
3900GEN_TWOVEC_TEST(sqrshrun_8b_8h_8,   "sqrshrun  v4.8b,  v29.8h, #8",  4, 29)
3901GEN_TWOVEC_TEST(sqrshrun2_16b_8h_1, "sqrshrun2 v4.16b, v29.8h, #1",  4, 29)
3902GEN_TWOVEC_TEST(sqrshrun2_16b_8h_4, "sqrshrun2 v4.16b, v29.8h, #4",  4, 29)
3903GEN_TWOVEC_TEST(sqrshrun2_16b_8h_8, "sqrshrun2 v4.16b, v29.8h, #8",  4, 29)
3904GEN_TWOVEC_TEST(sqshrun_2s_2d_1,   "sqshrun  v4.2s,  v29.2d, #1",  4, 29)
3905GEN_TWOVEC_TEST(sqshrun_2s_2d_17,  "sqshrun  v4.2s,  v29.2d, #17", 4, 29)
3906GEN_TWOVEC_TEST(sqshrun_2s_2d_32,  "sqshrun  v4.2s,  v29.2d, #32", 4, 29)
3907GEN_TWOVEC_TEST(sqshrun2_4s_2d_1,  "sqshrun2 v4.4s,  v29.2d, #1",  4, 29)
3908GEN_TWOVEC_TEST(sqshrun2_4s_2d_17, "sqshrun2 v4.4s,  v29.2d, #17", 4, 29)
3909GEN_TWOVEC_TEST(sqshrun2_4s_2d_32, "sqshrun2 v4.4s,  v29.2d, #32", 4, 29)
3910GEN_TWOVEC_TEST(sqshrun_4h_4s_1,   "sqshrun  v4.4h,  v29.4s, #1",  4, 29)
3911GEN_TWOVEC_TEST(sqshrun_4h_4s_9,   "sqshrun  v4.4h,  v29.4s, #9",  4, 29)
3912GEN_TWOVEC_TEST(sqshrun_4h_4s_16,  "sqshrun  v4.4h,  v29.4s, #16", 4, 29)
3913GEN_TWOVEC_TEST(sqshrun2_8h_4s_1,  "sqshrun2 v4.8h,  v29.4s, #1",  4, 29)
3914GEN_TWOVEC_TEST(sqshrun2_8h_4s_9,  "sqshrun2 v4.8h,  v29.4s, #9",  4, 29)
3915GEN_TWOVEC_TEST(sqshrun2_8h_4s_16, "sqshrun2 v4.8h,  v29.4s, #16", 4, 29)
3916GEN_TWOVEC_TEST(sqshrun_8b_8h_1,   "sqshrun  v4.8b,  v29.8h, #1",  4, 29)
3917GEN_TWOVEC_TEST(sqshrun_8b_8h_4,   "sqshrun  v4.8b,  v29.8h, #4",  4, 29)
3918GEN_TWOVEC_TEST(sqshrun_8b_8h_8,   "sqshrun  v4.8b,  v29.8h, #8",  4, 29)
3919GEN_TWOVEC_TEST(sqshrun2_16b_8h_1, "sqshrun2 v4.16b, v29.8h, #1",  4, 29)
3920GEN_TWOVEC_TEST(sqshrun2_16b_8h_4, "sqshrun2 v4.16b, v29.8h, #4",  4, 29)
3921GEN_TWOVEC_TEST(sqshrun2_16b_8h_8, "sqshrun2 v4.16b, v29.8h, #8",  4, 29)
3922
3923GEN_TWOVEC_TEST(sqshl_d_d_0,  "sqshl d5, d28, #0",  5, 28)
3924GEN_TWOVEC_TEST(sqshl_d_d_32, "sqshl d5, d28, #32", 5, 28)
3925GEN_TWOVEC_TEST(sqshl_d_d_63, "sqshl d5, d28, #63", 5, 28)
3926GEN_TWOVEC_TEST(sqshl_s_s_0,  "sqshl s5, s28, #0",  5, 28)
3927GEN_TWOVEC_TEST(sqshl_s_s_16, "sqshl s5, s28, #16", 5, 28)
3928GEN_TWOVEC_TEST(sqshl_s_s_31, "sqshl s5, s28, #31", 5, 28)
3929GEN_TWOVEC_TEST(sqshl_h_h_0,  "sqshl h5, h28, #0",  5, 28)
3930GEN_TWOVEC_TEST(sqshl_h_h_8,  "sqshl h5, h28, #8",  5, 28)
3931GEN_TWOVEC_TEST(sqshl_h_h_15, "sqshl h5, h28, #15", 5, 28)
3932GEN_TWOVEC_TEST(sqshl_b_b_0,  "sqshl b5, b28, #0",  5, 28)
3933GEN_TWOVEC_TEST(sqshl_b_b_1,  "sqshl b5, b28, #1",  5, 28)
3934GEN_TWOVEC_TEST(sqshl_b_b_4,  "sqshl b5, b28, #4",  5, 28)
3935GEN_TWOVEC_TEST(sqshl_b_b_6,  "sqshl b5, b28, #6",  5, 28)
3936GEN_TWOVEC_TEST(sqshl_b_b_7,  "sqshl b5, b28, #7",  5, 28)
3937GEN_TWOVEC_TEST(uqshl_d_d_0,  "uqshl d5, d28, #0",  5, 28)
3938GEN_TWOVEC_TEST(uqshl_d_d_32, "uqshl d5, d28, #32", 5, 28)
3939GEN_TWOVEC_TEST(uqshl_d_d_63, "uqshl d5, d28, #63", 5, 28)
3940GEN_TWOVEC_TEST(uqshl_s_s_0,  "uqshl s5, s28, #0",  5, 28)
3941GEN_TWOVEC_TEST(uqshl_s_s_16, "uqshl s5, s28, #16", 5, 28)
3942GEN_TWOVEC_TEST(uqshl_s_s_31, "uqshl s5, s28, #31", 5, 28)
3943GEN_TWOVEC_TEST(uqshl_h_h_0,  "uqshl h5, h28, #0",  5, 28)
3944GEN_TWOVEC_TEST(uqshl_h_h_8,  "uqshl h5, h28, #8",  5, 28)
3945GEN_TWOVEC_TEST(uqshl_h_h_15, "uqshl h5, h28, #15", 5, 28)
3946GEN_TWOVEC_TEST(uqshl_b_b_0,  "uqshl b5, b28, #0",  5, 28)
3947GEN_TWOVEC_TEST(uqshl_b_b_1,  "uqshl b5, b28, #1",  5, 28)
3948GEN_TWOVEC_TEST(uqshl_b_b_4,  "uqshl b5, b28, #4",  5, 28)
3949GEN_TWOVEC_TEST(uqshl_b_b_6,  "uqshl b5, b28, #6",  5, 28)
3950GEN_TWOVEC_TEST(uqshl_b_b_7,  "uqshl b5, b28, #7",  5, 28)
3951GEN_TWOVEC_TEST(sqshlu_d_d_0,  "sqshlu d5, d28, #0",  5, 28)
3952GEN_TWOVEC_TEST(sqshlu_d_d_32, "sqshlu d5, d28, #32", 5, 28)
3953GEN_TWOVEC_TEST(sqshlu_d_d_63, "sqshlu d5, d28, #63", 5, 28)
3954GEN_TWOVEC_TEST(sqshlu_s_s_0,  "sqshlu s5, s28, #0",  5, 28)
3955GEN_TWOVEC_TEST(sqshlu_s_s_16, "sqshlu s5, s28, #16", 5, 28)
3956GEN_TWOVEC_TEST(sqshlu_s_s_31, "sqshlu s5, s28, #31", 5, 28)
3957GEN_TWOVEC_TEST(sqshlu_h_h_0,  "sqshlu h5, h28, #0",  5, 28)
3958GEN_TWOVEC_TEST(sqshlu_h_h_8,  "sqshlu h5, h28, #8",  5, 28)
3959GEN_TWOVEC_TEST(sqshlu_h_h_15, "sqshlu h5, h28, #15", 5, 28)
3960GEN_TWOVEC_TEST(sqshlu_b_b_0,  "sqshlu b5, b28, #0",  5, 28)
3961GEN_TWOVEC_TEST(sqshlu_b_b_1,  "sqshlu b5, b28, #1",  5, 28)
3962GEN_TWOVEC_TEST(sqshlu_b_b_2,  "sqshlu b5, b28, #2",  5, 28)
3963GEN_TWOVEC_TEST(sqshlu_b_b_3,  "sqshlu b5, b28, #3",  5, 28)
3964GEN_TWOVEC_TEST(sqshlu_b_b_4,  "sqshlu b5, b28, #4",  5, 28)
3965GEN_TWOVEC_TEST(sqshlu_b_b_5,  "sqshlu b5, b28, #5",  5, 28)
3966GEN_TWOVEC_TEST(sqshlu_b_b_6,  "sqshlu b5, b28, #6",  5, 28)
3967GEN_TWOVEC_TEST(sqshlu_b_b_7,  "sqshlu b5, b28, #7",  5, 28)
3968
3969GEN_TWOVEC_TEST(sqshl_2d_2d_0,   "sqshl v6.2d,  v27.2d, #0",  6, 27)
3970GEN_TWOVEC_TEST(sqshl_2d_2d_32,  "sqshl v6.2d,  v27.2d, #32", 6, 27)
3971GEN_TWOVEC_TEST(sqshl_2d_2d_63,  "sqshl v6.2d,  v27.2d, #63", 6, 27)
3972GEN_TWOVEC_TEST(sqshl_4s_4s_0,   "sqshl v6.4s,  v27.4s, #0",  6, 27)
3973GEN_TWOVEC_TEST(sqshl_4s_4s_16,  "sqshl v6.4s,  v27.4s, #16", 6, 27)
3974GEN_TWOVEC_TEST(sqshl_4s_4s_31,  "sqshl v6.4s,  v27.4s, #31", 6, 27)
3975GEN_TWOVEC_TEST(sqshl_2s_2s_0,   "sqshl v6.2s,  v27.2s, #0",  6, 27)
3976GEN_TWOVEC_TEST(sqshl_2s_2s_16,  "sqshl v6.2s,  v27.2s, #16", 6, 27)
3977GEN_TWOVEC_TEST(sqshl_2s_2s_31,  "sqshl v6.2s,  v27.2s, #31", 6, 27)
3978GEN_TWOVEC_TEST(sqshl_8h_8h_0,   "sqshl v6.8h,  v27.8h, #0",  6, 27)
3979GEN_TWOVEC_TEST(sqshl_8h_8h_8,   "sqshl v6.8h,  v27.8h, #8",  6, 27)
3980GEN_TWOVEC_TEST(sqshl_8h_8h_15,  "sqshl v6.8h,  v27.8h, #15", 6, 27)
3981GEN_TWOVEC_TEST(sqshl_4h_4h_0,   "sqshl v6.4h,  v27.4h, #0",  6, 27)
3982GEN_TWOVEC_TEST(sqshl_4h_4h_8,   "sqshl v6.4h,  v27.4h, #8",  6, 27)
3983GEN_TWOVEC_TEST(sqshl_4h_4h_15,  "sqshl v6.4h,  v27.4h, #15", 6, 27)
3984GEN_TWOVEC_TEST(sqshl_16b_16b_0, "sqshl v6.16b, v27.16b, #0", 6, 27)
3985GEN_TWOVEC_TEST(sqshl_16b_16b_3, "sqshl v6.16b, v27.16b, #3", 6, 27)
3986GEN_TWOVEC_TEST(sqshl_16b_16b_7, "sqshl v6.16b, v27.16b, #7", 6, 27)
3987GEN_TWOVEC_TEST(sqshl_8b_8b_0,   "sqshl v6.8b,  v27.8b, #0",  6, 27)
3988GEN_TWOVEC_TEST(sqshl_8b_8b_3,   "sqshl v6.8b,  v27.8b, #3",  6, 27)
3989GEN_TWOVEC_TEST(sqshl_8b_8b_7,   "sqshl v6.8b,  v27.8b, #7",  6, 27)
3990GEN_TWOVEC_TEST(uqshl_2d_2d_0,   "uqshl v6.2d,  v27.2d, #0",  6, 27)
3991GEN_TWOVEC_TEST(uqshl_2d_2d_32,  "uqshl v6.2d,  v27.2d, #32", 6, 27)
3992GEN_TWOVEC_TEST(uqshl_2d_2d_63,  "uqshl v6.2d,  v27.2d, #63", 6, 27)
3993GEN_TWOVEC_TEST(uqshl_4s_4s_0,   "uqshl v6.4s,  v27.4s, #0",  6, 27)
3994GEN_TWOVEC_TEST(uqshl_4s_4s_16,  "uqshl v6.4s,  v27.4s, #16", 6, 27)
3995GEN_TWOVEC_TEST(uqshl_4s_4s_31,  "uqshl v6.4s,  v27.4s, #31", 6, 27)
3996GEN_TWOVEC_TEST(uqshl_2s_2s_0,   "uqshl v6.2s,  v27.2s, #0",  6, 27)
3997GEN_TWOVEC_TEST(uqshl_2s_2s_16,  "uqshl v6.2s,  v27.2s, #16", 6, 27)
3998GEN_TWOVEC_TEST(uqshl_2s_2s_31,  "uqshl v6.2s,  v27.2s, #31", 6, 27)
3999GEN_TWOVEC_TEST(uqshl_8h_8h_0,   "uqshl v6.8h,  v27.8h, #0",  6, 27)
4000GEN_TWOVEC_TEST(uqshl_8h_8h_8,   "uqshl v6.8h,  v27.8h, #8",  6, 27)
4001GEN_TWOVEC_TEST(uqshl_8h_8h_15,  "uqshl v6.8h,  v27.8h, #15", 6, 27)
4002GEN_TWOVEC_TEST(uqshl_4h_4h_0,   "uqshl v6.4h,  v27.4h, #0",  6, 27)
4003GEN_TWOVEC_TEST(uqshl_4h_4h_8,   "uqshl v6.4h,  v27.4h, #8",  6, 27)
4004GEN_TWOVEC_TEST(uqshl_4h_4h_15,  "uqshl v6.4h,  v27.4h, #15", 6, 27)
4005GEN_TWOVEC_TEST(uqshl_16b_16b_0, "uqshl v6.16b, v27.16b, #0", 6, 27)
4006GEN_TWOVEC_TEST(uqshl_16b_16b_3, "uqshl v6.16b, v27.16b, #3", 6, 27)
4007GEN_TWOVEC_TEST(uqshl_16b_16b_7, "uqshl v6.16b, v27.16b, #7", 6, 27)
4008GEN_TWOVEC_TEST(uqshl_8b_8b_0,   "uqshl v6.8b,  v27.8b, #0",  6, 27)
4009GEN_TWOVEC_TEST(uqshl_8b_8b_3,   "uqshl v6.8b,  v27.8b, #3",  6, 27)
4010GEN_TWOVEC_TEST(uqshl_8b_8b_7,   "uqshl v6.8b,  v27.8b, #7",  6, 27)
4011GEN_TWOVEC_TEST(sqshlu_2d_2d_0,   "sqshlu v6.2d,  v27.2d, #0",  6, 27)
4012GEN_TWOVEC_TEST(sqshlu_2d_2d_32,  "sqshlu v6.2d,  v27.2d, #32", 6, 27)
4013GEN_TWOVEC_TEST(sqshlu_2d_2d_63,  "sqshlu v6.2d,  v27.2d, #63", 6, 27)
4014GEN_TWOVEC_TEST(sqshlu_4s_4s_0,   "sqshlu v6.4s,  v27.4s, #0",  6, 27)
4015GEN_TWOVEC_TEST(sqshlu_4s_4s_16,  "sqshlu v6.4s,  v27.4s, #16", 6, 27)
4016GEN_TWOVEC_TEST(sqshlu_4s_4s_31,  "sqshlu v6.4s,  v27.4s, #31", 6, 27)
4017GEN_TWOVEC_TEST(sqshlu_2s_2s_0,   "sqshlu v6.2s,  v27.2s, #0",  6, 27)
4018GEN_TWOVEC_TEST(sqshlu_2s_2s_16,  "sqshlu v6.2s,  v27.2s, #16", 6, 27)
4019GEN_TWOVEC_TEST(sqshlu_2s_2s_31,  "sqshlu v6.2s,  v27.2s, #31", 6, 27)
4020GEN_TWOVEC_TEST(sqshlu_8h_8h_0,   "sqshlu v6.8h,  v27.8h, #0",  6, 27)
4021GEN_TWOVEC_TEST(sqshlu_8h_8h_8,   "sqshlu v6.8h,  v27.8h, #8",  6, 27)
4022GEN_TWOVEC_TEST(sqshlu_8h_8h_15,  "sqshlu v6.8h,  v27.8h, #15", 6, 27)
4023GEN_TWOVEC_TEST(sqshlu_4h_4h_0,   "sqshlu v6.4h,  v27.4h, #0",  6, 27)
4024GEN_TWOVEC_TEST(sqshlu_4h_4h_8,   "sqshlu v6.4h,  v27.4h, #8",  6, 27)
4025GEN_TWOVEC_TEST(sqshlu_4h_4h_15,  "sqshlu v6.4h,  v27.4h, #15", 6, 27)
4026GEN_TWOVEC_TEST(sqshlu_16b_16b_0, "sqshlu v6.16b, v27.16b, #0", 6, 27)
4027GEN_TWOVEC_TEST(sqshlu_16b_16b_3, "sqshlu v6.16b, v27.16b, #3", 6, 27)
4028GEN_TWOVEC_TEST(sqshlu_16b_16b_7, "sqshlu v6.16b, v27.16b, #7", 6, 27)
4029GEN_TWOVEC_TEST(sqshlu_8b_8b_0,   "sqshlu v6.8b,  v27.8b, #0",  6, 27)
4030GEN_TWOVEC_TEST(sqshlu_8b_8b_3,   "sqshlu v6.8b,  v27.8b, #3",  6, 27)
4031GEN_TWOVEC_TEST(sqshlu_8b_8b_7,   "sqshlu v6.8b,  v27.8b, #7",  6, 27)
4032
4033GEN_TWOVEC_TEST(sqxtn_s_d,  "sqxtn s31,  d0", 31, 0)
4034GEN_TWOVEC_TEST(sqxtn_h_s,  "sqxtn h31,  s0", 31, 0)
4035GEN_TWOVEC_TEST(sqxtn_b_h,  "sqxtn b31,  h0", 31, 0)
4036GEN_TWOVEC_TEST(uqxtn_s_d,  "uqxtn s31,  d0", 31, 0)
4037GEN_TWOVEC_TEST(uqxtn_h_s,  "uqxtn h31,  s0", 31, 0)
4038GEN_TWOVEC_TEST(uqxtn_b_h,  "uqxtn b31,  h0", 31, 0)
4039GEN_TWOVEC_TEST(sqxtun_s_d, "sqxtun s31, d0", 31, 0)
4040GEN_TWOVEC_TEST(sqxtun_h_s, "sqxtun h31, s0", 31, 0)
4041GEN_TWOVEC_TEST(sqxtun_b_h, "sqxtun b31, h0", 31, 0)
4042
4043GEN_UNARY_TEST(sqxtn,   2s, 2d)
4044GEN_UNARY_TEST(sqxtn2,  4s, 2d)
4045GEN_UNARY_TEST(sqxtn,   4h, 4s)
4046GEN_UNARY_TEST(sqxtn2,  8h, 4s)
4047GEN_UNARY_TEST(sqxtn,   8b, 8h)
4048GEN_UNARY_TEST(sqxtn2, 16b, 8h)
4049GEN_UNARY_TEST(uqxtn,   2s, 2d)
4050GEN_UNARY_TEST(uqxtn2,  4s, 2d)
4051GEN_UNARY_TEST(uqxtn,   4h, 4s)
4052GEN_UNARY_TEST(uqxtn2,  8h, 4s)
4053GEN_UNARY_TEST(uqxtn,   8b, 8h)
4054GEN_UNARY_TEST(uqxtn2, 16b, 8h)
4055GEN_UNARY_TEST(sqxtun,   2s, 2d)
4056GEN_UNARY_TEST(sqxtun2,  4s, 2d)
4057GEN_UNARY_TEST(sqxtun,   4h, 4s)
4058GEN_UNARY_TEST(sqxtun2,  8h, 4s)
4059GEN_UNARY_TEST(sqxtun,   8b, 8h)
4060GEN_UNARY_TEST(sqxtun2, 16b, 8h)
4061
4062GEN_THREEVEC_TEST(srhadd_4s_4s_4s,"srhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
4063GEN_THREEVEC_TEST(srhadd_2s_2s_2s,"srhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
4064GEN_THREEVEC_TEST(srhadd_8h_8h_8h,"srhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
4065GEN_THREEVEC_TEST(srhadd_4h_4h_4h,"srhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
4066GEN_THREEVEC_TEST(srhadd_16b_16b_16b,
4067                                  "srhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
4068GEN_THREEVEC_TEST(srhadd_8b_8b_8b,"srhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
4069GEN_THREEVEC_TEST(urhadd_4s_4s_4s,"urhadd v2.4s,  v11.4s,  v29.4s", 2, 11, 29)
4070GEN_THREEVEC_TEST(urhadd_2s_2s_2s,"urhadd v2.2s,  v11.2s,  v29.2s", 2, 11, 29)
4071GEN_THREEVEC_TEST(urhadd_8h_8h_8h,"urhadd v2.8h,  v11.8h,  v29.8h", 2, 11, 29)
4072GEN_THREEVEC_TEST(urhadd_4h_4h_4h,"urhadd v2.4h,  v11.4h,  v29.4h", 2, 11, 29)
4073GEN_THREEVEC_TEST(urhadd_16b_16b_16b,
4074                                  "urhadd v2.16b, v11.16b, v29.16b", 2, 11, 29)
4075GEN_THREEVEC_TEST(urhadd_8b_8b_8b,"urhadd v2.8b,  v11.8b,  v29.8b", 2, 11, 29)
4076
4077GEN_THREEVEC_TEST(sshl_d_d_d, "sshl d29, d28, d27", 29, 28, 27)
4078GEN_THREEVEC_TEST(ushl_d_d_d, "ushl d29, d28, d27", 29, 28, 27)
4079
4080GEN_THREEVEC_TEST(sshl_2d_2d_2d,    "sshl v29.2d, v28.2d, v27.2d", 29,28,27)
4081GEN_THREEVEC_TEST(sshl_4s_4s_4s,    "sshl v29.4s, v28.4s, v27.4s", 29,28,27)
4082GEN_THREEVEC_TEST(sshl_2s_2s_2s,    "sshl v29.2s, v28.2s, v27.2s", 29,28,27)
4083GEN_THREEVEC_TEST(sshl_8h_8h_8h,    "sshl v29.8h, v28.8h, v27.8h", 29,28,27)
4084GEN_THREEVEC_TEST(sshl_4h_4h_4h,    "sshl v29.4h, v28.4h, v27.4h", 29,28,27)
4085GEN_THREEVEC_TEST(sshl_16b_16b_16b, "sshl v29.16b, v28.16b, v27.16b", 29,28,27)
4086GEN_THREEVEC_TEST(sshl_8b_8b_8b,    "sshl v29.8b, v28.8b, v27.8b", 29,28,27)
4087GEN_THREEVEC_TEST(ushl_2d_2d_2d,    "ushl v29.2d, v28.2d, v27.2d", 29,28,27)
4088GEN_THREEVEC_TEST(ushl_4s_4s_4s,    "ushl v29.4s, v28.4s, v27.4s", 29,28,27)
4089GEN_THREEVEC_TEST(ushl_2s_2s_2s,    "ushl v29.2s, v28.2s, v27.2s", 29,28,27)
4090GEN_THREEVEC_TEST(ushl_8h_8h_8h,    "ushl v29.8h, v28.8h, v27.8h", 29,28,27)
4091GEN_THREEVEC_TEST(ushl_4h_4h_4h,    "ushl v29.4h, v28.4h, v27.4h", 29,28,27)
4092GEN_THREEVEC_TEST(ushl_16b_16b_16b, "ushl v29.16b, v28.16b, v27.16b", 29,28,27)
4093GEN_THREEVEC_TEST(ushl_8b_8b_8b,    "ushl v29.8b, v28.8b, v27.8b", 29,28,27)
4094
4095GEN_TWOVEC_TEST(shl_d_d_0,  "shl d5, d28, #0",  5, 28)
4096GEN_TWOVEC_TEST(shl_d_d_32, "shl d5, d28, #32", 5, 28)
4097GEN_TWOVEC_TEST(shl_d_d_63, "shl d5, d28, #63", 5, 28)
4098GEN_TWOVEC_TEST(sshr_d_d_1,  "sshr d5, d28, #1",  5, 28)
4099GEN_TWOVEC_TEST(sshr_d_d_32, "sshr d5, d28, #32", 5, 28)
4100GEN_TWOVEC_TEST(sshr_d_d_64, "sshr d5, d28, #64", 5, 28)
4101GEN_TWOVEC_TEST(ushr_d_d_1,  "ushr d5, d28, #1",  5, 28)
4102GEN_TWOVEC_TEST(ushr_d_d_32, "ushr d5, d28, #32", 5, 28)
4103GEN_TWOVEC_TEST(ushr_d_d_64, "ushr d5, d28, #64", 5, 28)
4104
4105GEN_SHIFT_TEST(shl,  2d, 2d, 0)
4106GEN_SHIFT_TEST(shl,  2d, 2d, 13)
4107GEN_SHIFT_TEST(shl,  2d, 2d, 63)
4108GEN_SHIFT_TEST(shl,  4s, 4s, 0)
4109GEN_SHIFT_TEST(shl,  4s, 4s, 13)
4110GEN_SHIFT_TEST(shl,  4s, 4s, 31)
4111GEN_SHIFT_TEST(shl,  2s, 2s, 0)
4112GEN_SHIFT_TEST(shl,  2s, 2s, 13)
4113GEN_SHIFT_TEST(shl,  2s, 2s, 31)
4114GEN_SHIFT_TEST(shl,  8h, 8h, 0)
4115GEN_SHIFT_TEST(shl,  8h, 8h, 13)
4116GEN_SHIFT_TEST(shl,  8h, 8h, 15)
4117GEN_SHIFT_TEST(shl,  4h, 4h, 0)
4118GEN_SHIFT_TEST(shl,  4h, 4h, 13)
4119GEN_SHIFT_TEST(shl,  4h, 4h, 15)
4120GEN_SHIFT_TEST(shl,  16b, 16b, 0)
4121GEN_SHIFT_TEST(shl,  16b, 16b, 7)
4122GEN_SHIFT_TEST(shl,  8b, 8b, 0)
4123GEN_SHIFT_TEST(shl,  8b, 8b, 7)
4124GEN_SHIFT_TEST(sshr, 2d, 2d, 1)
4125GEN_SHIFT_TEST(sshr, 2d, 2d, 13)
4126GEN_SHIFT_TEST(sshr, 2d, 2d, 64)
4127GEN_SHIFT_TEST(sshr, 4s, 4s, 1)
4128GEN_SHIFT_TEST(sshr, 4s, 4s, 13)
4129GEN_SHIFT_TEST(sshr, 4s, 4s, 32)
4130GEN_SHIFT_TEST(sshr, 2s, 2s, 1)
4131GEN_SHIFT_TEST(sshr, 2s, 2s, 13)
4132GEN_SHIFT_TEST(sshr, 2s, 2s, 32)
4133GEN_SHIFT_TEST(sshr, 8h, 8h, 1)
4134GEN_SHIFT_TEST(sshr, 8h, 8h, 13)
4135GEN_SHIFT_TEST(sshr, 8h, 8h, 16)
4136GEN_SHIFT_TEST(sshr, 4h, 4h, 1)
4137GEN_SHIFT_TEST(sshr, 4h, 4h, 13)
4138GEN_SHIFT_TEST(sshr, 4h, 4h, 16)
4139GEN_SHIFT_TEST(sshr, 16b, 16b, 1)
4140GEN_SHIFT_TEST(sshr, 16b, 16b, 8)
4141GEN_SHIFT_TEST(sshr, 8b, 8b, 1)
4142GEN_SHIFT_TEST(sshr, 8b, 8b, 8)
4143GEN_SHIFT_TEST(ushr, 2d, 2d, 1)
4144GEN_SHIFT_TEST(ushr, 2d, 2d, 13)
4145GEN_SHIFT_TEST(ushr, 2d, 2d, 64)
4146GEN_SHIFT_TEST(ushr, 4s, 4s, 1)
4147GEN_SHIFT_TEST(ushr, 4s, 4s, 13)
4148GEN_SHIFT_TEST(ushr, 4s, 4s, 32)
4149GEN_SHIFT_TEST(ushr, 2s, 2s, 1)
4150GEN_SHIFT_TEST(ushr, 2s, 2s, 13)
4151GEN_SHIFT_TEST(ushr, 2s, 2s, 32)
4152GEN_SHIFT_TEST(ushr, 8h, 8h, 1)
4153GEN_SHIFT_TEST(ushr, 8h, 8h, 13)
4154GEN_SHIFT_TEST(ushr, 8h, 8h, 16)
4155GEN_SHIFT_TEST(ushr, 4h, 4h, 1)
4156GEN_SHIFT_TEST(ushr, 4h, 4h, 13)
4157GEN_SHIFT_TEST(ushr, 4h, 4h, 16)
4158GEN_SHIFT_TEST(ushr, 16b, 16b, 1)
4159GEN_SHIFT_TEST(ushr, 16b, 16b, 8)
4160GEN_SHIFT_TEST(ushr, 8b, 8b, 1)
4161GEN_SHIFT_TEST(ushr, 8b, 8b, 8)
4162
4163GEN_TWOVEC_TEST(ssra_d_d_1,  "ssra d5, d28, #1",  5, 28)
4164GEN_TWOVEC_TEST(ssra_d_d_32, "ssra d5, d28, #32", 5, 28)
4165GEN_TWOVEC_TEST(ssra_d_d_64, "ssra d5, d28, #64", 5, 28)
4166GEN_TWOVEC_TEST(usra_d_d_1,  "usra d5, d28, #1",  5, 28)
4167GEN_TWOVEC_TEST(usra_d_d_32, "usra d5, d28, #32", 5, 28)
4168GEN_TWOVEC_TEST(usra_d_d_64, "usra d5, d28, #64", 5, 28)
4169
4170GEN_TWOVEC_TEST(ssra_2d_2d_1,   "ssra v6.2d,  v27.2d, #1",  6, 27)
4171GEN_TWOVEC_TEST(ssra_2d_2d_32,  "ssra v6.2d,  v27.2d, #32", 6, 27)
4172GEN_TWOVEC_TEST(ssra_2d_2d_64,  "ssra v6.2d,  v27.2d, #64", 6, 27)
4173GEN_TWOVEC_TEST(ssra_4s_4s_1,   "ssra v6.4s,  v27.4s, #1",  6, 27)
4174GEN_TWOVEC_TEST(ssra_4s_4s_16,  "ssra v6.4s,  v27.4s, #16", 6, 27)
4175GEN_TWOVEC_TEST(ssra_4s_4s_32,  "ssra v6.4s,  v27.4s, #32", 6, 27)
4176GEN_TWOVEC_TEST(ssra_2s_2s_1,   "ssra v6.2s,  v27.2s, #1",  6, 27)
4177GEN_TWOVEC_TEST(ssra_2s_2s_16,  "ssra v6.2s,  v27.2s, #16", 6, 27)
4178GEN_TWOVEC_TEST(ssra_2s_2s_32,  "ssra v6.2s,  v27.2s, #32", 6, 27)
4179GEN_TWOVEC_TEST(ssra_8h_8h_1,   "ssra v6.8h,  v27.8h, #1",  6, 27)
4180GEN_TWOVEC_TEST(ssra_8h_8h_8,   "ssra v6.8h,  v27.8h, #8",  6, 27)
4181GEN_TWOVEC_TEST(ssra_8h_8h_16,  "ssra v6.8h,  v27.8h, #16", 6, 27)
4182GEN_TWOVEC_TEST(ssra_4h_4h_1,   "ssra v6.4h,  v27.4h, #1",  6, 27)
4183GEN_TWOVEC_TEST(ssra_4h_4h_8,   "ssra v6.4h,  v27.4h, #8",  6, 27)
4184GEN_TWOVEC_TEST(ssra_4h_4h_16,  "ssra v6.4h,  v27.4h, #16", 6, 27)
4185GEN_TWOVEC_TEST(ssra_16b_16b_1, "ssra v6.16b, v27.16b, #1", 6, 27)
4186GEN_TWOVEC_TEST(ssra_16b_16b_3, "ssra v6.16b, v27.16b, #3", 6, 27)
4187GEN_TWOVEC_TEST(ssra_16b_16b_8, "ssra v6.16b, v27.16b, #8", 6, 27)
4188GEN_TWOVEC_TEST(ssra_8b_8b_1,   "ssra v6.8b,  v27.8b, #1",  6, 27)
4189GEN_TWOVEC_TEST(ssra_8b_8b_3,   "ssra v6.8b,  v27.8b, #3",  6, 27)
4190GEN_TWOVEC_TEST(ssra_8b_8b_8,   "ssra v6.8b,  v27.8b, #8",  6, 27)
4191GEN_TWOVEC_TEST(usra_2d_2d_1,   "usra v6.2d,  v27.2d, #1",  6, 27)
4192GEN_TWOVEC_TEST(usra_2d_2d_32,  "usra v6.2d,  v27.2d, #32", 6, 27)
4193GEN_TWOVEC_TEST(usra_2d_2d_64,  "usra v6.2d,  v27.2d, #64", 6, 27)
4194GEN_TWOVEC_TEST(usra_4s_4s_1,   "usra v6.4s,  v27.4s, #1",  6, 27)
4195GEN_TWOVEC_TEST(usra_4s_4s_16,  "usra v6.4s,  v27.4s, #16", 6, 27)
4196GEN_TWOVEC_TEST(usra_4s_4s_32,  "usra v6.4s,  v27.4s, #32", 6, 27)
4197GEN_TWOVEC_TEST(usra_2s_2s_1,   "usra v6.2s,  v27.2s, #1",  6, 27)
4198GEN_TWOVEC_TEST(usra_2s_2s_16,  "usra v6.2s,  v27.2s, #16", 6, 27)
4199GEN_TWOVEC_TEST(usra_2s_2s_32,  "usra v6.2s,  v27.2s, #32", 6, 27)
4200GEN_TWOVEC_TEST(usra_8h_8h_1,   "usra v6.8h,  v27.8h, #1",  6, 27)
4201GEN_TWOVEC_TEST(usra_8h_8h_8,   "usra v6.8h,  v27.8h, #8",  6, 27)
4202GEN_TWOVEC_TEST(usra_8h_8h_16,  "usra v6.8h,  v27.8h, #16", 6, 27)
4203GEN_TWOVEC_TEST(usra_4h_4h_1,   "usra v6.4h,  v27.4h, #1",  6, 27)
4204GEN_TWOVEC_TEST(usra_4h_4h_8,   "usra v6.4h,  v27.4h, #8",  6, 27)
4205GEN_TWOVEC_TEST(usra_4h_4h_16,  "usra v6.4h,  v27.4h, #16", 6, 27)
4206GEN_TWOVEC_TEST(usra_16b_16b_1, "usra v6.16b, v27.16b, #1", 6, 27)
4207GEN_TWOVEC_TEST(usra_16b_16b_3, "usra v6.16b, v27.16b, #3", 6, 27)
4208GEN_TWOVEC_TEST(usra_16b_16b_8, "usra v6.16b, v27.16b, #8", 6, 27)
4209GEN_TWOVEC_TEST(usra_8b_8b_1,   "usra v6.8b,  v27.8b, #1",  6, 27)
4210GEN_TWOVEC_TEST(usra_8b_8b_3,   "usra v6.8b,  v27.8b, #3",  6, 27)
4211GEN_TWOVEC_TEST(usra_8b_8b_8,   "usra v6.8b,  v27.8b, #8",  6, 27)
4212
4213GEN_THREEVEC_TEST(srshl_d_d_d, "srshl d29, d28, d27", 29, 28, 27)
4214GEN_THREEVEC_TEST(urshl_d_d_d, "urshl d29, d28, d27", 29, 28, 27)
4215
4216GEN_THREEVEC_TEST(srshl_2d_2d_2d,   "srshl v29.2d, v28.2d, v27.2d", 29,28,27)
4217GEN_THREEVEC_TEST(srshl_4s_4s_4s,   "srshl v29.4s, v28.4s, v27.4s", 29,28,27)
4218GEN_THREEVEC_TEST(srshl_2s_2s_2s,   "srshl v29.2s, v28.2s, v27.2s", 29,28,27)
4219GEN_THREEVEC_TEST(srshl_8h_8h_8h,   "srshl v29.8h, v28.8h, v27.8h", 29,28,27)
4220GEN_THREEVEC_TEST(srshl_4h_4h_4h,   "srshl v29.4h, v28.4h, v27.4h", 29,28,27)
4221GEN_THREEVEC_TEST(srshl_16b_16b_16b,"srshl v29.16b, v28.16b, v27.16b", 29,28,27)
4222GEN_THREEVEC_TEST(srshl_8b_8b_8b,   "srshl v29.8b, v28.8b, v27.8b", 29,28,27)
4223GEN_THREEVEC_TEST(urshl_2d_2d_2d,   "urshl v29.2d, v28.2d, v27.2d", 29,28,27)
4224GEN_THREEVEC_TEST(urshl_4s_4s_4s,   "urshl v29.4s, v28.4s, v27.4s", 29,28,27)
4225GEN_THREEVEC_TEST(urshl_2s_2s_2s,   "urshl v29.2s, v28.2s, v27.2s", 29,28,27)
4226GEN_THREEVEC_TEST(urshl_8h_8h_8h,   "urshl v29.8h, v28.8h, v27.8h", 29,28,27)
4227GEN_THREEVEC_TEST(urshl_4h_4h_4h,   "urshl v29.4h, v28.4h, v27.4h", 29,28,27)
4228GEN_THREEVEC_TEST(urshl_16b_16b_16b,"urshl v29.16b, v28.16b, v27.16b", 29,28,27)
4229GEN_THREEVEC_TEST(urshl_8b_8b_8b,   "urshl v29.8b, v28.8b, v27.8b", 29,28,27)
4230
4231GEN_TWOVEC_TEST(srshr_d_d_1,  "srshr d5, d28, #1",  5, 28)
4232GEN_TWOVEC_TEST(srshr_d_d_32, "srshr d5, d28, #32", 5, 28)
4233GEN_TWOVEC_TEST(srshr_d_d_64, "srshr d5, d28, #64", 5, 28)
4234GEN_TWOVEC_TEST(urshr_d_d_1,  "urshr d5, d28, #1",  5, 28)
4235GEN_TWOVEC_TEST(urshr_d_d_32, "urshr d5, d28, #32", 5, 28)
4236GEN_TWOVEC_TEST(urshr_d_d_64, "urshr d5, d28, #64", 5, 28)
4237
4238GEN_TWOVEC_TEST(srshr_2d_2d_1,   "srshr v6.2d,  v27.2d, #1",  6, 27)
4239GEN_TWOVEC_TEST(srshr_2d_2d_32,  "srshr v6.2d,  v27.2d, #32", 6, 27)
4240GEN_TWOVEC_TEST(srshr_2d_2d_64,  "srshr v6.2d,  v27.2d, #64", 6, 27)
4241GEN_TWOVEC_TEST(srshr_4s_4s_1,   "srshr v6.4s,  v27.4s, #1",  6, 27)
4242GEN_TWOVEC_TEST(srshr_4s_4s_16,  "srshr v6.4s,  v27.4s, #16", 6, 27)
4243GEN_TWOVEC_TEST(srshr_4s_4s_32,  "srshr v6.4s,  v27.4s, #32", 6, 27)
4244GEN_TWOVEC_TEST(srshr_2s_2s_1,   "srshr v6.2s,  v27.2s, #1",  6, 27)
4245GEN_TWOVEC_TEST(srshr_2s_2s_16,  "srshr v6.2s,  v27.2s, #16", 6, 27)
4246GEN_TWOVEC_TEST(srshr_2s_2s_32,  "srshr v6.2s,  v27.2s, #32", 6, 27)
4247GEN_TWOVEC_TEST(srshr_8h_8h_1,   "srshr v6.8h,  v27.8h, #1",  6, 27)
4248GEN_TWOVEC_TEST(srshr_8h_8h_8,   "srshr v6.8h,  v27.8h, #8",  6, 27)
4249GEN_TWOVEC_TEST(srshr_8h_8h_16,  "srshr v6.8h,  v27.8h, #16", 6, 27)
4250GEN_TWOVEC_TEST(srshr_4h_4h_1,   "srshr v6.4h,  v27.4h, #1",  6, 27)
4251GEN_TWOVEC_TEST(srshr_4h_4h_8,   "srshr v6.4h,  v27.4h, #8",  6, 27)
4252GEN_TWOVEC_TEST(srshr_4h_4h_16,  "srshr v6.4h,  v27.4h, #16", 6, 27)
4253GEN_TWOVEC_TEST(srshr_16b_16b_1, "srshr v6.16b, v27.16b, #1", 6, 27)
4254GEN_TWOVEC_TEST(srshr_16b_16b_3, "srshr v6.16b, v27.16b, #3", 6, 27)
4255GEN_TWOVEC_TEST(srshr_16b_16b_8, "srshr v6.16b, v27.16b, #8", 6, 27)
4256GEN_TWOVEC_TEST(srshr_8b_8b_1,   "srshr v6.8b,  v27.8b, #1",  6, 27)
4257GEN_TWOVEC_TEST(srshr_8b_8b_3,   "srshr v6.8b,  v27.8b, #3",  6, 27)
4258GEN_TWOVEC_TEST(srshr_8b_8b_8,   "srshr v6.8b,  v27.8b, #8",  6, 27)
4259GEN_TWOVEC_TEST(urshr_2d_2d_1,   "urshr v6.2d,  v27.2d, #1",  6, 27)
4260GEN_TWOVEC_TEST(urshr_2d_2d_32,  "urshr v6.2d,  v27.2d, #32", 6, 27)
4261GEN_TWOVEC_TEST(urshr_2d_2d_64,  "urshr v6.2d,  v27.2d, #64", 6, 27)
4262GEN_TWOVEC_TEST(urshr_4s_4s_1,   "urshr v6.4s,  v27.4s, #1",  6, 27)
4263GEN_TWOVEC_TEST(urshr_4s_4s_16,  "urshr v6.4s,  v27.4s, #16", 6, 27)
4264GEN_TWOVEC_TEST(urshr_4s_4s_32,  "urshr v6.4s,  v27.4s, #32", 6, 27)
4265GEN_TWOVEC_TEST(urshr_2s_2s_1,   "urshr v6.2s,  v27.2s, #1",  6, 27)
4266GEN_TWOVEC_TEST(urshr_2s_2s_16,  "urshr v6.2s,  v27.2s, #16", 6, 27)
4267GEN_TWOVEC_TEST(urshr_2s_2s_32,  "urshr v6.2s,  v27.2s, #32", 6, 27)
4268GEN_TWOVEC_TEST(urshr_8h_8h_1,   "urshr v6.8h,  v27.8h, #1",  6, 27)
4269GEN_TWOVEC_TEST(urshr_8h_8h_8,   "urshr v6.8h,  v27.8h, #8",  6, 27)
4270GEN_TWOVEC_TEST(urshr_8h_8h_16,  "urshr v6.8h,  v27.8h, #16", 6, 27)
4271GEN_TWOVEC_TEST(urshr_4h_4h_1,   "urshr v6.4h,  v27.4h, #1",  6, 27)
4272GEN_TWOVEC_TEST(urshr_4h_4h_8,   "urshr v6.4h,  v27.4h, #8",  6, 27)
4273GEN_TWOVEC_TEST(urshr_4h_4h_16,  "urshr v6.4h,  v27.4h, #16", 6, 27)
4274GEN_TWOVEC_TEST(urshr_16b_16b_1, "urshr v6.16b, v27.16b, #1", 6, 27)
4275GEN_TWOVEC_TEST(urshr_16b_16b_3, "urshr v6.16b, v27.16b, #3", 6, 27)
4276GEN_TWOVEC_TEST(urshr_16b_16b_8, "urshr v6.16b, v27.16b, #8", 6, 27)
4277GEN_TWOVEC_TEST(urshr_8b_8b_1,   "urshr v6.8b,  v27.8b, #1",  6, 27)
4278GEN_TWOVEC_TEST(urshr_8b_8b_3,   "urshr v6.8b,  v27.8b, #3",  6, 27)
4279GEN_TWOVEC_TEST(urshr_8b_8b_8,   "urshr v6.8b,  v27.8b, #8",  6, 27)
4280
4281GEN_TWOVEC_TEST(srsra_d_d_1,  "srsra d5, d28, #1",  5, 28)
4282GEN_TWOVEC_TEST(srsra_d_d_32, "srsra d5, d28, #32", 5, 28)
4283GEN_TWOVEC_TEST(srsra_d_d_64, "srsra d5, d28, #64", 5, 28)
4284GEN_TWOVEC_TEST(ursra_d_d_1,  "ursra d5, d28, #1",  5, 28)
4285GEN_TWOVEC_TEST(ursra_d_d_32, "ursra d5, d28, #32", 5, 28)
4286GEN_TWOVEC_TEST(ursra_d_d_64, "ursra d5, d28, #64", 5, 28)
4287
4288GEN_TWOVEC_TEST(srsra_2d_2d_1,   "srsra v6.2d,  v27.2d, #1",  6, 27)
4289GEN_TWOVEC_TEST(srsra_2d_2d_32,  "srsra v6.2d,  v27.2d, #32", 6, 27)
4290GEN_TWOVEC_TEST(srsra_2d_2d_64,  "srsra v6.2d,  v27.2d, #64", 6, 27)
4291GEN_TWOVEC_TEST(srsra_4s_4s_1,   "srsra v6.4s,  v27.4s, #1",  6, 27)
4292GEN_TWOVEC_TEST(srsra_4s_4s_16,  "srsra v6.4s,  v27.4s, #16", 6, 27)
4293GEN_TWOVEC_TEST(srsra_4s_4s_32,  "srsra v6.4s,  v27.4s, #32", 6, 27)
4294GEN_TWOVEC_TEST(srsra_2s_2s_1,   "srsra v6.2s,  v27.2s, #1",  6, 27)
4295GEN_TWOVEC_TEST(srsra_2s_2s_16,  "srsra v6.2s,  v27.2s, #16", 6, 27)
4296GEN_TWOVEC_TEST(srsra_2s_2s_32,  "srsra v6.2s,  v27.2s, #32", 6, 27)
4297GEN_TWOVEC_TEST(srsra_8h_8h_1,   "srsra v6.8h,  v27.8h, #1",  6, 27)
4298GEN_TWOVEC_TEST(srsra_8h_8h_8,   "srsra v6.8h,  v27.8h, #8",  6, 27)
4299GEN_TWOVEC_TEST(srsra_8h_8h_16,  "srsra v6.8h,  v27.8h, #16", 6, 27)
4300GEN_TWOVEC_TEST(srsra_4h_4h_1,   "srsra v6.4h,  v27.4h, #1",  6, 27)
4301GEN_TWOVEC_TEST(srsra_4h_4h_8,   "srsra v6.4h,  v27.4h, #8",  6, 27)
4302GEN_TWOVEC_TEST(srsra_4h_4h_16,  "srsra v6.4h,  v27.4h, #16", 6, 27)
4303GEN_TWOVEC_TEST(srsra_16b_16b_1, "srsra v6.16b, v27.16b, #1", 6, 27)
4304GEN_TWOVEC_TEST(srsra_16b_16b_3, "srsra v6.16b, v27.16b, #3", 6, 27)
4305GEN_TWOVEC_TEST(srsra_16b_16b_8, "srsra v6.16b, v27.16b, #8", 6, 27)
4306GEN_TWOVEC_TEST(srsra_8b_8b_1,   "srsra v6.8b,  v27.8b, #1",  6, 27)
4307GEN_TWOVEC_TEST(srsra_8b_8b_3,   "srsra v6.8b,  v27.8b, #3",  6, 27)
4308GEN_TWOVEC_TEST(srsra_8b_8b_8,   "srsra v6.8b,  v27.8b, #8",  6, 27)
4309GEN_TWOVEC_TEST(ursra_2d_2d_1,   "ursra v6.2d,  v27.2d, #1",  6, 27)
4310GEN_TWOVEC_TEST(ursra_2d_2d_32,  "ursra v6.2d,  v27.2d, #32", 6, 27)
4311GEN_TWOVEC_TEST(ursra_2d_2d_64,  "ursra v6.2d,  v27.2d, #64", 6, 27)
4312GEN_TWOVEC_TEST(ursra_4s_4s_1,   "ursra v6.4s,  v27.4s, #1",  6, 27)
4313GEN_TWOVEC_TEST(ursra_4s_4s_16,  "ursra v6.4s,  v27.4s, #16", 6, 27)
4314GEN_TWOVEC_TEST(ursra_4s_4s_32,  "ursra v6.4s,  v27.4s, #32", 6, 27)
4315GEN_TWOVEC_TEST(ursra_2s_2s_1,   "ursra v6.2s,  v27.2s, #1",  6, 27)
4316GEN_TWOVEC_TEST(ursra_2s_2s_16,  "ursra v6.2s,  v27.2s, #16", 6, 27)
4317GEN_TWOVEC_TEST(ursra_2s_2s_32,  "ursra v6.2s,  v27.2s, #32", 6, 27)
4318GEN_TWOVEC_TEST(ursra_8h_8h_1,   "ursra v6.8h,  v27.8h, #1",  6, 27)
4319GEN_TWOVEC_TEST(ursra_8h_8h_8,   "ursra v6.8h,  v27.8h, #8",  6, 27)
4320GEN_TWOVEC_TEST(ursra_8h_8h_16,  "ursra v6.8h,  v27.8h, #16", 6, 27)
4321GEN_TWOVEC_TEST(ursra_4h_4h_1,   "ursra v6.4h,  v27.4h, #1",  6, 27)
4322GEN_TWOVEC_TEST(ursra_4h_4h_8,   "ursra v6.4h,  v27.4h, #8",  6, 27)
4323GEN_TWOVEC_TEST(ursra_4h_4h_16,  "ursra v6.4h,  v27.4h, #16", 6, 27)
4324GEN_TWOVEC_TEST(ursra_16b_16b_1, "ursra v6.16b, v27.16b, #1", 6, 27)
4325GEN_TWOVEC_TEST(ursra_16b_16b_3, "ursra v6.16b, v27.16b, #3", 6, 27)
4326GEN_TWOVEC_TEST(ursra_16b_16b_8, "ursra v6.16b, v27.16b, #8", 6, 27)
4327GEN_TWOVEC_TEST(ursra_8b_8b_1,   "ursra v6.8b,  v27.8b, #1",  6, 27)
4328GEN_TWOVEC_TEST(ursra_8b_8b_3,   "ursra v6.8b,  v27.8b, #3",  6, 27)
4329GEN_TWOVEC_TEST(ursra_8b_8b_8,   "ursra v6.8b,  v27.8b, #8",  6, 27)
4330
4331GEN_SHIFT_TEST(sshll,  2d, 2s,  0)
4332GEN_SHIFT_TEST(sshll,  2d, 2s,  15)
4333GEN_SHIFT_TEST(sshll,  2d, 2s,  31)
4334GEN_SHIFT_TEST(sshll2, 2d, 4s,  0)
4335GEN_SHIFT_TEST(sshll2, 2d, 4s,  15)
4336GEN_SHIFT_TEST(sshll2, 2d, 4s,  31)
4337GEN_SHIFT_TEST(sshll,  4s, 4h,  0)
4338GEN_SHIFT_TEST(sshll,  4s, 4h,  7)
4339GEN_SHIFT_TEST(sshll,  4s, 4h,  15)
4340GEN_SHIFT_TEST(sshll2, 4s, 8h,  0)
4341GEN_SHIFT_TEST(sshll2, 4s, 8h,  7)
4342GEN_SHIFT_TEST(sshll2, 4s, 8h,  15)
4343GEN_SHIFT_TEST(sshll,  8h, 8b,  0)
4344GEN_SHIFT_TEST(sshll,  8h, 8b,  3)
4345GEN_SHIFT_TEST(sshll,  8h, 8b,  7)
4346GEN_SHIFT_TEST(sshll2, 8h, 16b, 0)
4347GEN_SHIFT_TEST(sshll2, 8h, 16b, 3)
4348GEN_SHIFT_TEST(sshll2, 8h, 16b, 7)
4349GEN_SHIFT_TEST(ushll,  2d, 2s, 0)
4350GEN_SHIFT_TEST(ushll,  2d, 2s, 15)
4351GEN_SHIFT_TEST(ushll,  2d, 2s, 31)
4352GEN_SHIFT_TEST(ushll2, 2d, 4s, 0)
4353GEN_SHIFT_TEST(ushll2, 2d, 4s, 15)
4354GEN_SHIFT_TEST(ushll2, 2d, 4s, 31)
4355GEN_SHIFT_TEST(ushll,  4s, 4h,  0)
4356GEN_SHIFT_TEST(ushll,  4s, 4h,  7)
4357GEN_SHIFT_TEST(ushll,  4s, 4h,  15)
4358GEN_SHIFT_TEST(ushll2, 4s, 8h,  0)
4359GEN_SHIFT_TEST(ushll2, 4s, 8h,  7)
4360GEN_SHIFT_TEST(ushll2, 4s, 8h,  15)
4361GEN_SHIFT_TEST(ushll,  8h, 8b,  0)
4362GEN_SHIFT_TEST(ushll,  8h, 8b,  3)
4363GEN_SHIFT_TEST(ushll,  8h, 8b,  7)
4364GEN_SHIFT_TEST(ushll2, 8h, 16b, 0)
4365GEN_SHIFT_TEST(ushll2, 8h, 16b, 3)
4366GEN_SHIFT_TEST(ushll2, 8h, 16b, 7)
4367
4368GEN_TWOVEC_TEST(suqadd_d_d,  "suqadd d22, d23",   22, 23)
4369GEN_TWOVEC_TEST(suqadd_s_s,  "suqadd s22, s23",   22, 23)
4370GEN_TWOVEC_TEST(suqadd_h_h,  "suqadd h22, h23",   22, 23)
4371GEN_TWOVEC_TEST(suqadd_b_b,  "suqadd b22, b23",   22, 23)
4372GEN_TWOVEC_TEST(usqadd_d_d,  "usqadd d22, d23",   22, 23)
4373GEN_TWOVEC_TEST(usqadd_s_s,  "usqadd s22, s23",   22, 23)
4374GEN_TWOVEC_TEST(usqadd_h_h,  "usqadd h22, h23",   22, 23)
4375GEN_TWOVEC_TEST(usqadd_b_b,  "usqadd b22, b23",   22, 23)
4376
4377GEN_TWOVEC_TEST(suqadd_2d_2d,   "suqadd v6.2d,  v27.2d",  6, 27)
4378GEN_TWOVEC_TEST(suqadd_4s_4s,   "suqadd v6.4s,  v27.4s",  6, 27)
4379GEN_TWOVEC_TEST(suqadd_2s_2s,   "suqadd v6.2s,  v27.2s",  6, 27)
4380GEN_TWOVEC_TEST(suqadd_8h_8h,   "suqadd v6.8h,  v27.8h",  6, 27)
4381GEN_TWOVEC_TEST(suqadd_4h_4h,   "suqadd v6.4h,  v27.4h",  6, 27)
4382GEN_TWOVEC_TEST(suqadd_16b_16b, "suqadd v6.16b, v27.16b", 6, 27)
4383GEN_TWOVEC_TEST(suqadd_8b_8b,   "suqadd v6.8b,  v27.8b",  6, 27)
4384GEN_TWOVEC_TEST(usqadd_2d_2d,   "usqadd v6.2d,  v27.2d",  6, 27)
4385GEN_TWOVEC_TEST(usqadd_4s_4s,   "usqadd v6.4s,  v27.4s",  6, 27)
4386GEN_TWOVEC_TEST(usqadd_2s_2s,   "usqadd v6.2s,  v27.2s",  6, 27)
4387GEN_TWOVEC_TEST(usqadd_8h_8h,   "usqadd v6.8h,  v27.8h",  6, 27)
4388GEN_TWOVEC_TEST(usqadd_4h_4h,   "usqadd v6.4h,  v27.4h",  6, 27)
4389GEN_TWOVEC_TEST(usqadd_16b_16b, "usqadd v6.16b, v27.16b", 6, 27)
4390GEN_TWOVEC_TEST(usqadd_8b_8b,   "usqadd v6.8b,  v27.8b",  6, 27)
4391
4392// Uses v15 as the first table entry
4393GEN_THREEVEC_TEST(
4394   tbl_16b_1reg, "tbl v21.16b, {v15.16b}, v23.16b", 21, 15, 23)
4395// and v15 ^ v21 as the second table entry
4396GEN_THREEVEC_TEST(
4397   tbl_16b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
4398                 "tbl v21.16b, {v15.16b, v16.16b}, v23.16b", 21, 15, 23)
4399// and v15 ^ v23 as the third table entry
4400GEN_THREEVEC_TEST(
4401   tbl_16b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
4402                 "eor v17.16b, v15.16b, v23.16b ; "
4403                 "tbl v21.16b, {v15.16b, v16.16b, v17.16b}, v23.16b",
4404                 21, 15, 23)
4405// and v21 ^ v23 as the fourth table entry
4406GEN_THREEVEC_TEST(
4407   tbl_16b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
4408                 "eor v17.16b, v15.16b, v23.16b ; "
4409                 "eor v18.16b, v21.16b, v23.16b ; "
4410                 "tbl v21.16b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.16b",
4411                 21, 15, 23)
4412// Same register scheme for tbl .8b, tbx .16b, tbx.8b
4413GEN_THREEVEC_TEST(
4414   tbl_8b_1reg, "tbl v21.8b, {v15.16b}, v23.8b", 21, 15, 23)
4415GEN_THREEVEC_TEST(
4416   tbl_8b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
4417                "tbl v21.8b, {v15.16b, v16.16b}, v23.8b", 21, 15, 23)
4418GEN_THREEVEC_TEST(
4419   tbl_8b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
4420                "eor v17.16b, v15.16b, v23.16b ; "
4421                "tbl v21.8b, {v15.16b, v16.16b, v17.16b}, v23.8b",
4422                21, 15, 23)
4423GEN_THREEVEC_TEST(
4424   tbl_8b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
4425                "eor v17.16b, v15.16b, v23.16b ; "
4426                "eor v18.16b, v21.16b, v23.16b ; "
4427                "tbl v21.8b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.8b",
4428                21, 15, 23)
4429
4430GEN_THREEVEC_TEST(
4431   tbx_16b_1reg, "tbx v21.16b, {v15.16b}, v23.16b", 21, 15, 23)
4432GEN_THREEVEC_TEST(
4433   tbx_16b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
4434                 "tbx v21.16b, {v15.16b, v16.16b}, v23.16b", 21, 15, 23)
4435GEN_THREEVEC_TEST(
4436   tbx_16b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
4437                 "eor v17.16b, v15.16b, v23.16b ; "
4438                 "tbx v21.16b, {v15.16b, v16.16b, v17.16b}, v23.16b",
4439                 21, 15, 23)
4440GEN_THREEVEC_TEST(
4441   tbx_16b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
4442                 "eor v17.16b, v15.16b, v23.16b ; "
4443                 "eor v18.16b, v21.16b, v23.16b ; "
4444                 "tbx v21.16b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.16b",
4445                 21, 15, 23)
4446// Same register scheme for tbx .8b, tbx .16b, tbx.8b
4447GEN_THREEVEC_TEST(
4448   tbx_8b_1reg, "tbx v21.8b, {v15.16b}, v23.8b", 21, 15, 23)
4449GEN_THREEVEC_TEST(
4450   tbx_8b_2reg, "eor v16.16b, v15.16b, v21.16b ; "
4451                "tbx v21.8b, {v15.16b, v16.16b}, v23.8b", 21, 15, 23)
4452GEN_THREEVEC_TEST(
4453   tbx_8b_3reg, "eor v16.16b, v15.16b, v21.16b ; "
4454                "eor v17.16b, v15.16b, v23.16b ; "
4455                "tbx v21.8b, {v15.16b, v16.16b, v17.16b}, v23.8b",
4456                21, 15, 23)
4457GEN_THREEVEC_TEST(
4458   tbx_8b_4reg, "eor v16.16b, v15.16b, v21.16b ; "
4459                "eor v17.16b, v15.16b, v23.16b ; "
4460                "eor v18.16b, v21.16b, v23.16b ; "
4461                "tbx v21.8b, {v15.16b, v16.16b, v17.16b, v18.16b}, v23.8b",
4462                21, 15, 23)
4463
4464GEN_THREEVEC_TEST(trn1_2d_2d_2d,    "trn1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4465GEN_THREEVEC_TEST(trn1_4s_4s_4s,    "trn1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4466GEN_THREEVEC_TEST(trn1_2s_2s_2s,    "trn1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4467GEN_THREEVEC_TEST(trn1_8h_8h_8h,    "trn1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4468GEN_THREEVEC_TEST(trn1_4h_4h_4h,    "trn1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4469GEN_THREEVEC_TEST(trn1_16b_16b_16b, "trn1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4470GEN_THREEVEC_TEST(trn1_8b_8b_8b,    "trn1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4471GEN_THREEVEC_TEST(trn2_2d_2d_2d,    "trn2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4472GEN_THREEVEC_TEST(trn2_4s_4s_4s,    "trn2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4473GEN_THREEVEC_TEST(trn2_2s_2s_2s,    "trn2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4474GEN_THREEVEC_TEST(trn2_8h_8h_8h,    "trn2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4475GEN_THREEVEC_TEST(trn2_4h_4h_4h,    "trn2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4476GEN_THREEVEC_TEST(trn2_16b_16b_16b, "trn2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4477GEN_THREEVEC_TEST(trn2_8b_8b_8b,    "trn2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4478
4479GEN_TWOVEC_TEST(urecpe_4s_4s,   "urecpe v6.4s,  v27.4s",  6, 27)
4480GEN_TWOVEC_TEST(urecpe_2s_2s,   "urecpe v6.2s,  v27.2s",  6, 27)
4481GEN_TWOVEC_TEST(ursqrte_4s_4s,   "ursqrte v6.4s,  v27.4s",  6, 27)
4482GEN_TWOVEC_TEST(ursqrte_2s_2s,   "ursqrte v6.2s,  v27.2s",  6, 27)
4483
4484GEN_THREEVEC_TEST(uzp1_2d_2d_2d,    "uzp1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4485GEN_THREEVEC_TEST(uzp1_4s_4s_4s,    "uzp1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4486GEN_THREEVEC_TEST(uzp1_2s_2s_2s,    "uzp1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4487GEN_THREEVEC_TEST(uzp1_8h_8h_8h,    "uzp1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4488GEN_THREEVEC_TEST(uzp1_4h_4h_4h,    "uzp1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4489GEN_THREEVEC_TEST(uzp1_16b_16b_16b, "uzp1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4490GEN_THREEVEC_TEST(uzp1_8b_8b_8b,    "uzp1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4491GEN_THREEVEC_TEST(uzp2_2d_2d_2d,    "uzp2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4492GEN_THREEVEC_TEST(uzp2_4s_4s_4s,    "uzp2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4493GEN_THREEVEC_TEST(uzp2_2s_2s_2s,    "uzp2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4494GEN_THREEVEC_TEST(uzp2_8h_8h_8h,    "uzp2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4495GEN_THREEVEC_TEST(uzp2_4h_4h_4h,    "uzp2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4496GEN_THREEVEC_TEST(uzp2_16b_16b_16b, "uzp2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4497GEN_THREEVEC_TEST(uzp2_8b_8b_8b,    "uzp2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4498GEN_THREEVEC_TEST(zip1_2d_2d_2d,    "zip1 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4499GEN_THREEVEC_TEST(zip1_4s_4s_4s,    "zip1 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4500GEN_THREEVEC_TEST(zip1_2s_2s_2s,    "zip1 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4501GEN_THREEVEC_TEST(zip1_8h_8h_8h,    "zip1 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4502GEN_THREEVEC_TEST(zip1_4h_4h_4h,    "zip1 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4503GEN_THREEVEC_TEST(zip1_16b_16b_16b, "zip1 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4504GEN_THREEVEC_TEST(zip1_8b_8b_8b,    "zip1 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4505GEN_THREEVEC_TEST(zip2_2d_2d_2d,    "zip2 v1.2d,  v2.2d,  v4.2d",  1, 2, 4)
4506GEN_THREEVEC_TEST(zip2_4s_4s_4s,    "zip2 v1.4s,  v2.4s,  v4.4s",  1, 2, 4)
4507GEN_THREEVEC_TEST(zip2_2s_2s_2s,    "zip2 v1.2s,  v2.2s,  v4.2s",  1, 2, 4)
4508GEN_THREEVEC_TEST(zip2_8h_8h_8h,    "zip2 v1.8h,  v2.8h,  v4.8h",  1, 2, 4)
4509GEN_THREEVEC_TEST(zip2_4h_4h_4h,    "zip2 v1.4h,  v2.4h,  v4.4h",  1, 2, 4)
4510GEN_THREEVEC_TEST(zip2_16b_16b_16b, "zip2 v1.16b, v2.16b, v4.16b", 1, 2, 4)
4511GEN_THREEVEC_TEST(zip2_8b_8b_8b,    "zip2 v1.8b,  v2.8b,  v4.8b",  1, 2, 4)
4512
4513GEN_UNARY_TEST(xtn,  2s, 2d)
4514GEN_UNARY_TEST(xtn2, 4s, 2d)
4515GEN_UNARY_TEST(xtn,  4h, 4s)
4516GEN_UNARY_TEST(xtn2, 8h, 4s)
4517GEN_UNARY_TEST(xtn,  8b, 8h)
4518GEN_UNARY_TEST(xtn2, 16b, 8h)
4519
4520// ======================== MEM ========================
4521
4522// All the SIMD and FP memory tests are in none/tests/arm64/memory.c.
4523
4524// ======================== CRYPTO ========================
4525
4526// These tests are believed to be correct but are disabled because
4527// GNU assembler (GNU Binutils) 2.24.0.20140311 Linaro 2014.03
4528// cannot be persuaded to accept those instructions (AFAICT).
4529
4530GEN_TWOVEC_TEST(aesd_16b_16b,    "aesd v6.16b,  v27.16b",  6, 27)
4531GEN_TWOVEC_TEST(aese_16b_16b,    "aese v6.16b,  v27.16b",  6, 27)
4532GEN_TWOVEC_TEST(aesimc_16b_16b,  "aesimc v6.16b,  v27.16b",  6, 27)
4533GEN_TWOVEC_TEST(aesmc_16b_16b,   "aesmc v6.16b,  v27.16b",  6, 27)
4534
4535GEN_THREEVEC_TEST(sha1c_q_s_4s,     "sha1c q29, s28, v27.4s", 29,28,27)
4536GEN_TWOVEC_TEST(sha1h_s_s,          "sha1h s6,  s27",  6, 27)
4537GEN_THREEVEC_TEST(sha1m_q_s_4s,     "sha1m q29, s28, v27.4s", 29,28,27)
4538GEN_THREEVEC_TEST(sha1p_q_s_4s,     "sha1p q29, s28, v27.4s", 29,28,27)
4539GEN_THREEVEC_TEST(sha1su0_4s_4s_4s, "sha1su0 v29.4s, v28.4s, v27.4s", 29,28,27)
4540GEN_TWOVEC_TEST(sha1su1_4s_4s,      "sha1su1 v6.4s,  v27.4s",  6, 27)
4541
4542GEN_THREEVEC_TEST(sha256h2_q_q_4s,  "sha256h2 q29, q28, v27.4s", 29,28,27)
4543GEN_THREEVEC_TEST(sha256h_q_q_4s,   "sha256h q29, q28, v27.4s", 29,28,27)
4544GEN_TWOVEC_TEST(sha256su0_4s_4s,    "sha256su0 v6.4s,  v27.4s",  6, 27)
4545GEN_THREEVEC_TEST(sha256su1_4s_4s_4s, "sha256su1 v29.4s, v28.4s, v27.4s",
4546                                      29,28,27)
4547
4548
4549/* ---------------------------------------------------------------- */
4550/* -- main()                                                     -- */
4551/* ---------------------------------------------------------------- */
4552
4553int main ( void )
4554{
4555   assert(sizeof(V128) == 16);
4556
4557   // ======================== FP ========================
4558
4559   // fabs      d,s
4560   // fabs      2d,4s,2s
4561   if (1) test_fabs_d_d(TyDF);
4562   if (1) test_fabs_s_s(TySF);
4563   if (1) test_fabs_2d_2d(TyDF);
4564   if (1) test_fabs_4s_4s(TySF);
4565   if (1) test_fabs_2s_2s(TyDF);
4566
4567   // fneg      d,s
4568   // fneg      2d,4s,2s
4569   if (1) test_fneg_d_d(TyDF);
4570   if (1) test_fneg_s_s(TySF);
4571   if (1) test_fneg_2d_2d(TySF);
4572   if (1) test_fneg_4s_4s(TyDF);
4573   if (1) test_fneg_2s_2s(TySF);
4574
4575   // fsqrt     d,s
4576   // fsqrt     2d,4s,2s
4577   if (1) test_fsqrt_d_d(TyDF);
4578   if (1) test_fsqrt_s_s(TySF);
4579   if (1) test_fsqrt_2d_2d(TySF);
4580   if (1) test_fsqrt_4s_4s(TyDF);
4581   if (1) test_fsqrt_2s_2s(TySF);
4582
4583   // fadd      d,s
4584   // fsub      d,s
4585   if (1) test_fadd_d_d_d(TyDF);
4586   if (1) test_fadd_s_s_s(TySF);
4587   if (1) test_fsub_d_d_d(TyDF);
4588   if (1) test_fsub_s_s_s(TySF);
4589
4590   // fadd      2d,4s,2s
4591   // fsub      2d,4s,2s
4592   if (1) test_fadd_2d_2d_2d(TyDF);
4593   if (1) test_fadd_4s_4s_4s(TySF);
4594   if (1) test_fadd_2s_2s_2s(TySF);
4595   if (1) test_fsub_2d_2d_2d(TyDF);
4596   if (1) test_fsub_4s_4s_4s(TySF);
4597   if (1) test_fsub_2s_2s_2s(TySF);
4598
4599   // fabd      d,s
4600   // fabd      2d,4s,2s
4601   if (1) test_fabd_d_d_d(TyDF);
4602   if (1) test_fabd_s_s_s(TySF);
4603   if (1) test_fabd_2d_2d_2d(TyDF);
4604   if (1) test_fabd_4s_4s_4s(TySF);
4605   if (1) test_fabd_2s_2s_2s(TySF);
4606
4607   // faddp     d,s (floating add pair)
4608   // faddp     2d,4s,2s
4609   if (1) test_faddp_d_2d(TyDF);
4610   if (1) test_faddp_s_2s(TySF);
4611   if (1) test_faddp_2d_2d_2d(TySF);
4612   if (1) test_faddp_4s_4s_4s(TyDF);
4613   if (1) test_faddp_2s_2s_2s(TySF);
4614
4615   // fccmp     d,s (floating point conditional quiet compare)
4616   // fccmpe    d,s (floating point conditional signaling compare)
4617   if (1) DO50( test_FCCMP_D_D_0xF_EQ() );
4618   if (1) DO50( test_FCCMP_D_D_0xF_NE() );
4619   if (1) DO50( test_FCCMP_D_D_0x0_EQ() );
4620   if (1) DO50( test_FCCMP_D_D_0x0_NE() );
4621   if (1) DO50( test_FCCMP_S_S_0xF_EQ() );
4622   if (1) DO50( test_FCCMP_S_S_0xF_NE() );
4623   if (1) DO50( test_FCCMP_S_S_0x0_EQ() );
4624   if (1) DO50( test_FCCMP_S_S_0x0_NE() );
4625   if (1) DO50( test_FCCMPE_D_D_0xF_EQ() );
4626   if (1) DO50( test_FCCMPE_D_D_0xF_NE() );
4627   if (1) DO50( test_FCCMPE_D_D_0x0_EQ() );
4628   if (1) DO50( test_FCCMPE_D_D_0x0_NE() );
4629   if (1) DO50( test_FCCMPE_S_S_0xF_EQ() );
4630   if (1) DO50( test_FCCMPE_S_S_0xF_NE() );
4631   if (1) DO50( test_FCCMPE_S_S_0x0_EQ() );
4632   if (1) DO50( test_FCCMPE_S_S_0x0_NE() );
4633
4634   // fcmeq     d,s
4635   // fcmge     d,s
4636   // fcmgt     d,s
4637   // facgt     d,s  (floating abs compare GE)
4638   // facge     d,s  (floating abs compare GE)
4639   if (1) DO50( test_FCMEQ_D_D_D() );
4640   if (1) DO50( test_FCMEQ_S_S_S() );
4641   if (1) DO50( test_FCMGE_D_D_D() );
4642   if (1) DO50( test_FCMGE_S_S_S() );
4643   if (1) DO50( test_FCMGT_D_D_D() );
4644   if (1) DO50( test_FCMGT_S_S_S() );
4645   if (1) DO50( test_FACGT_D_D_D() );
4646   if (1) DO50( test_FACGT_S_S_S() );
4647   if (1) DO50( test_FACGE_D_D_D() );
4648   if (1) DO50( test_FACGE_S_S_S() );
4649
4650   // fcmeq     2d,4s,2s
4651   // fcmge     2d,4s,2s
4652   // fcmgt     2d,4s,2s
4653   // facge     2d,4s,2s
4654   // facgt     2d,4s,2s
4655   if (1) test_fcmeq_2d_2d_2d(TyDF);
4656   if (1) test_fcmeq_4s_4s_4s(TySF);
4657   if (1) test_fcmeq_2s_2s_2s(TySF);
4658   if (1) test_fcmge_2d_2d_2d(TyDF);
4659   if (1) test_fcmge_4s_4s_4s(TySF);
4660   if (1) test_fcmge_2s_2s_2s(TySF);
4661   if (1) test_fcmgt_2d_2d_2d(TyDF);
4662   if (1) test_fcmgt_4s_4s_4s(TySF);
4663   if (1) test_fcmgt_2s_2s_2s(TySF);
4664   if (1) test_facge_2d_2d_2d(TyDF);
4665   if (1) test_facge_4s_4s_4s(TySF);
4666   if (1) test_facge_2s_2s_2s(TySF);
4667   if (1) test_facgt_2d_2d_2d(TyDF);
4668   if (1) test_facgt_4s_4s_4s(TySF);
4669   if (1) test_facgt_2s_2s_2s(TySF);
4670
4671   // fcmeq_z   d,s
4672   // fcmge_z   d,s
4673   // fcmgt_z   d,s
4674   // fcmle_z   d,s
4675   // fcmlt_z   d,s
4676   if (1) DO50( test_FCMEQ_D_D_Z() );
4677   if (1) DO50( test_FCMEQ_S_S_Z() );
4678   if (1) DO50( test_FCMGE_D_D_Z() );
4679   if (1) DO50( test_FCMGE_S_S_Z() );
4680   if (1) DO50( test_FCMGT_D_D_Z() );
4681   if (1) DO50( test_FCMGT_S_S_Z() );
4682   if (1) DO50( test_FCMLE_D_D_Z() );
4683   if (1) DO50( test_FCMLE_S_S_Z() );
4684   if (1) DO50( test_FCMLT_D_D_Z() );
4685   if (1) DO50( test_FCMLT_S_S_Z() );
4686
4687   // fcmeq_z   2d,4s,2s
4688   // fcmge_z   2d,4s,2s
4689   // fcmgt_z   2d,4s,2s
4690   // fcmle_z   2d,4s,2s
4691   // fcmlt_z   2d,4s,2s
4692   if (1) test_fcmeq_z_2d_2d(TyDF);
4693   if (1) test_fcmeq_z_4s_4s(TySF);
4694   if (1) test_fcmeq_z_2s_2s(TySF);
4695   if (1) test_fcmge_z_2d_2d(TyDF);
4696   if (1) test_fcmge_z_4s_4s(TySF);
4697   if (1) test_fcmge_z_2s_2s(TySF);
4698   if (1) test_fcmgt_z_2d_2d(TyDF);
4699   if (1) test_fcmgt_z_4s_4s(TySF);
4700   if (1) test_fcmgt_z_2s_2s(TySF);
4701   if (1) test_fcmle_z_2d_2d(TyDF);
4702   if (1) test_fcmle_z_4s_4s(TySF);
4703   if (1) test_fcmle_z_2s_2s(TySF);
4704   if (1) test_fcmlt_z_2d_2d(TyDF);
4705   if (1) test_fcmlt_z_4s_4s(TySF);
4706   if (1) test_fcmlt_z_2s_2s(TySF);
4707
4708   // fcmp_z    d,s
4709   // fcmpe_z   d,s
4710   // fcmp      d,s (floating point quiet, set flags)
4711   // fcmpe     d,s (floating point signaling, set flags)
4712   if (1) DO50( test_FCMP_D_Z() );
4713   if (1) DO50( test_FCMP_S_Z() );
4714   if (1) DO50( test_FCMPE_D_Z() );
4715   if (1) DO50( test_FCMPE_S_Z() );
4716   if (1) DO50( test_FCMP_D_D() );
4717   if (1) DO50( test_FCMP_S_S() );
4718   if (1) DO50( test_FCMPE_D_D() );
4719   if (1) DO50( test_FCMPE_S_S() );
4720
4721   // fcsel     d,s (fp cond select)
4722   if (1) DO50( test_FCSEL_D_D_D_EQ() );
4723   if (1) DO50( test_FCSEL_D_D_D_NE() );
4724   if (1) DO50( test_FCSEL_S_S_S_EQ() );
4725   if (1) DO50( test_FCSEL_S_S_S_NE() );
4726
4727   // fdiv      d,s
4728   // fdiv      2d,4s,2s
4729   if (1) test_fdiv_d_d_d(TyDF);
4730   if (1) test_fdiv_s_s_s(TySF);
4731   if (1) test_fdiv_2d_2d_2d(TyDF);
4732   if (1) test_fdiv_4s_4s_4s(TySF);
4733   if (1) test_fdiv_2s_2s_2s(TySF);
4734
4735   // fmadd     d,s
4736   // fnmadd    d,s
4737   // fmsub     d,s
4738   // fnmsub    d,s
4739   if (1) test_fmadd_d_d_d_d(TyDF);
4740   if (1) test_fmadd_s_s_s_s(TySF);
4741   if (1) test_fnmadd_d_d_d_d(TyDF);
4742   if (1) test_fnmadd_s_s_s_s(TySF);
4743   if (1) test_fmsub_d_d_d_d(TyDF);
4744   if (1) test_fmsub_s_s_s_s(TySF);
4745   if (1) test_fnmsub_d_d_d_d(TyDF);
4746   if (1) test_fnmsub_s_s_s_s(TySF);
4747
4748   // fnmul     d,s
4749   if (1) test_fnmul_d_d_d(TyDF);
4750   if (1) test_fnmul_s_s_s(TySF);
4751
4752   // fmax      d,s
4753   // fmin      d,s
4754   // fmaxnm    d,s ("max number")
4755   // fminnm    d,s
4756   if (1) test_fmax_d_d_d(TyDF);
4757   if (1) test_fmax_s_s_s(TySF);
4758   if (1) test_fmin_d_d_d(TyDF);
4759   if (1) test_fmin_s_s_s(TySF);
4760   if (1) test_fmaxnm_d_d_d(TyDF);
4761   if (1) test_fmaxnm_s_s_s(TySF);
4762   if (1) test_fminnm_d_d_d(TyDF);
4763   if (1) test_fminnm_s_s_s(TySF);
4764
4765   // fmax      2d,4s,2s
4766   // fmin      2d,4s,2s
4767   // fmaxnm    2d,4s,2s
4768   // fminnm    2d,4s,2s
4769   if (1) test_fmax_2d_2d_2d(TyDF);
4770   if (1) test_fmax_4s_4s_4s(TySF);
4771   if (1) test_fmax_2s_2s_2s(TySF);
4772   if (1) test_fmin_2d_2d_2d(TyDF);
4773   if (1) test_fmin_4s_4s_4s(TySF);
4774   if (1) test_fmin_2s_2s_2s(TySF);
4775   if (1) test_fmaxnm_2d_2d_2d(TyDF);
4776   if (1) test_fmaxnm_4s_4s_4s(TySF);
4777   if (1) test_fmaxnm_2s_2s_2s(TySF);
4778   if (1) test_fminnm_2d_2d_2d(TyDF);
4779   if (1) test_fminnm_4s_4s_4s(TySF);
4780   if (1) test_fminnm_2s_2s_2s(TySF);
4781
4782   // fmaxnmp   d_2d,s_2s ("max number pairwise")
4783   // fminnmp   d_2d,s_2s
4784   if (1) test_fmaxnmp_d_2d(TyDF);
4785   if (1) test_fmaxnmp_s_2s(TySF);
4786   if (1) test_fminnmp_d_2d(TyDF);
4787   if (1) test_fminnmp_s_2s(TySF);
4788
4789   // fmaxnmp   2d,4s,2s
4790   // fminnmp   2d,4s,2s
4791   if (1) test_fmaxnmp_2d_2d_2d(TyDF);
4792   if (1) test_fmaxnmp_4s_4s_4s(TySF);
4793   if (1) test_fmaxnmp_2s_2s_2s(TySF);
4794   if (1) test_fminnmp_2d_2d_2d(TyDF);
4795   if (1) test_fminnmp_4s_4s_4s(TySF);
4796   if (1) test_fminnmp_2s_2s_2s(TySF);
4797
4798   // fmaxnmv   s_4s (maxnum across vector)
4799   // fminnmv   s_4s
4800   if (1) test_fmaxnmv_s_4s(TySF);
4801   if (1) test_fminnmv_s_4s(TySF);
4802
4803   // fmaxp     d_2d,s_2s (max of a pair)
4804   // fminp     d_2d,s_2s (max of a pair)
4805   if (1) test_fmaxp_d_2d(TyDF);
4806   if (1) test_fmaxp_s_2s(TySF);
4807   if (1) test_fminp_d_2d(TyDF);
4808   if (1) test_fminp_s_2s(TySF);
4809
4810   // fmaxp     2d,4s,2s  (max pairwise)
4811   // fminp     2d,4s,2s
4812   if (1) test_fmaxp_2d_2d_2d(TyDF);
4813   if (1) test_fmaxp_4s_4s_4s(TySF);
4814   if (1) test_fmaxp_2s_2s_2s(TySF);
4815   if (1) test_fminp_2d_2d_2d(TyDF);
4816   if (1) test_fminp_4s_4s_4s(TySF);
4817   if (1) test_fminp_2s_2s_2s(TySF);
4818
4819   // fmaxv     s_4s (max across vector)
4820   // fminv     s_4s
4821   if (1) test_fmaxv_s_4s(TySF);
4822   if (1) test_fminv_s_4s(TySF);
4823
4824   // fmla      2d,4s,2s
4825   // fmls      2d,4s,2s
4826   if (1) test_fmla_2d_2d_2d(TyDF);
4827   if (1) test_fmla_4s_4s_4s(TySF);
4828   if (1) test_fmla_2s_2s_2s(TySF);
4829   if (1) test_fmls_2d_2d_2d(TyDF);
4830   if (1) test_fmls_4s_4s_4s(TySF);
4831   if (1) test_fmls_2s_2s_2s(TySF);
4832
4833   // fmla      d_d_d[],s_s_s[] (by element)
4834   // fmls      d_d_d[],s_s_s[] (by element)
4835   if (1) test_fmla_d_d_d0(TyDF);
4836   if (1) test_fmla_d_d_d1(TyDF);
4837   if (1) test_fmla_s_s_s0(TySF);
4838   if (1) test_fmla_s_s_s3(TySF);
4839   if (1) test_fmls_d_d_d0(TyDF);
4840   if (1) test_fmls_d_d_d1(TyDF);
4841   if (1) test_fmls_s_s_s0(TySF);
4842   if (1) test_fmls_s_s_s3(TySF);
4843
4844   // fmla      2d_2d_d[],4s_4s_s[],2s_2s_s[]
4845   // fmls      2d_2d_d[],4s_4s_s[],2s_2s_s[]
4846   if (1) test_fmla_2d_2d_d0(TyDF);
4847   if (1) test_fmla_2d_2d_d1(TyDF);
4848   if (1) test_fmla_4s_4s_s0(TySF);
4849   if (1) test_fmla_4s_4s_s3(TySF);
4850   if (1) test_fmla_2s_2s_s0(TySF);
4851   if (1) test_fmla_2s_2s_s3(TySF);
4852   if (1) test_fmls_2d_2d_d0(TyDF);
4853   if (1) test_fmls_2d_2d_d1(TyDF);
4854   if (1) test_fmls_4s_4s_s0(TySF);
4855   if (1) test_fmls_4s_4s_s3(TySF);
4856   if (1) test_fmls_2s_2s_s0(TySF);
4857   if (1) test_fmls_2s_2s_s3(TySF);
4858
4859   // fmov      2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
4860   if (1) test_fmov_2d_imm_01(TyD);
4861   if (1) test_fmov_2d_imm_02(TyD);
4862   if (1) test_fmov_2d_imm_03(TyD);
4863   if (1) test_fmov_4s_imm_01(TyS);
4864   if (1) test_fmov_4s_imm_02(TyS);
4865   if (1) test_fmov_4s_imm_03(TyS);
4866   if (1) test_fmov_2s_imm_01(TyS);
4867   if (1) test_fmov_2s_imm_02(TyS);
4868   if (1) test_fmov_2s_imm_03(TyS);
4869
4870   // fmov      d_d,s_s
4871   if (1) test_fmov_d_d(TyDF);
4872   if (1) test_fmov_s_s(TySF);
4873
4874   // fmov      s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
4875   if (1) test_fmov_s_w(TyS);
4876   if (1) test_fmov_d_x(TyD);
4877   if (1) test_fmov_d1_x(TyD);
4878   if (1) test_fmov_w_s(TyS);
4879   if (1) test_fmov_x_d(TyD);
4880   if (1) test_fmov_x_d1(TyD);
4881
4882   // fmov      d,s #imm
4883   if (1) test_fmov_d_imm_01(TyNONE);
4884   if (1) test_fmov_d_imm_02(TyNONE);
4885   if (1) test_fmov_d_imm_03(TyNONE);
4886   if (1) test_fmov_s_imm_01(TyNONE);
4887   if (1) test_fmov_s_imm_02(TyNONE);
4888   if (1) test_fmov_s_imm_03(TyNONE);
4889
4890   // fmul      d_d_d[],s_s_s[]
4891   if (1) test_fmul_d_d_d0(TyDF);
4892   if (1) test_fmul_d_d_d1(TyDF);
4893   if (1) test_fmul_s_s_s0(TySF);
4894   if (1) test_fmul_s_s_s3(TySF);
4895
4896   // fmul      2d_2d_d[],4s_4s_s[],2s_2s_s[]
4897   if (1) test_fmul_2d_2d_d0(TyDF);
4898   if (1) test_fmul_2d_2d_d1(TyDF);
4899   if (1) test_fmul_4s_4s_s0(TySF);
4900   if (1) test_fmul_4s_4s_s3(TySF);
4901   if (1) test_fmul_2s_2s_s0(TySF);
4902   if (1) test_fmul_2s_2s_s3(TySF);
4903
4904   // fmul      d,s
4905   // fmul      2d,4s,2s
4906   if (1) test_fmul_d_d_d(TyDF);
4907   if (1) test_fmul_s_s_s(TySF);
4908   if (1) test_fmul_2d_2d_2d(TyDF);
4909   if (1) test_fmul_4s_4s_4s(TySF);
4910   if (1) test_fmul_2s_2s_2s(TySF);
4911
4912   // fmulx     d_d_d[],s_s_s[]
4913   // fmulx     2d_2d_d[],4s_4s_s[],2s_2s_s[]
4914   if (1) test_fmulx_d_d_d0(TyDF);
4915   if (1) test_fmulx_d_d_d1(TyDF);
4916   if (1) test_fmulx_s_s_s0(TySF);
4917   if (1) test_fmulx_s_s_s3(TySF);
4918   if (1) test_fmulx_2d_2d_d0(TyDF);
4919   if (1) test_fmulx_2d_2d_d1(TyDF);
4920   if (1) test_fmulx_4s_4s_s0(TySF);
4921   if (1) test_fmulx_4s_4s_s3(TySF);
4922   if (1) test_fmulx_2s_2s_s0(TySF);
4923   if (1) test_fmulx_2s_2s_s3(TySF);
4924
4925   // fmulx     d,s
4926   // fmulx     2d,4s,2s
4927   if (1) test_fmulx_d_d_d(TyDF);
4928   if (1) test_fmulx_s_s_s(TySF);
4929   if (1) test_fmulx_2d_2d_2d(TyDF);
4930   if (1) test_fmulx_4s_4s_4s(TySF);
4931   if (1) test_fmulx_2s_2s_2s(TySF);
4932
4933   // frecpe    d,s (recip estimate)
4934   // frecpe    2d,4s,2s
4935   if (1) test_frecpe_d_d(TyDF);
4936   if (1) test_frecpe_s_s(TySF);
4937   if (1) test_frecpe_2d_2d(TyDF);
4938   if (1) test_frecpe_4s_4s(TySF);
4939   if (1) test_frecpe_2s_2s(TySF);
4940
4941   // frecps    d,s (recip step)
4942   // frecps    2d,4s,2s
4943   if (1) test_frecps_d_d_d(TyDF);
4944   if (1) test_frecps_s_s_s(TySF);
4945   if (1) test_frecps_2d_2d_2d(TyDF);
4946   if (1) test_frecps_4s_4s_4s(TySF);
4947   if (1) test_frecps_2s_2s_2s(TySF);
4948
4949   // frecpx    d,s (recip exponent)
4950   if (1) test_frecpx_d_d(TyDF);
4951   if (1) test_frecpx_s_s(TySF);
4952
4953   // frinta    d,s
4954   // frinti    d,s
4955   // frintm    d,s
4956   // frintn    d,s
4957   // frintp    d,s
4958   // frintx    d,s
4959   // frintz    d,s
4960   if (1) test_frinta_d_d(TyDF);
4961   if (1) test_frinta_s_s(TySF);
4962   if (1) test_frinti_d_d(TyDF);
4963   if (1) test_frinti_s_s(TySF);
4964   if (1) test_frintm_d_d(TyDF);
4965   if (1) test_frintm_s_s(TySF);
4966   if (1) test_frintn_d_d(TyDF);
4967   if (1) test_frintn_s_s(TySF);
4968   if (1) test_frintp_d_d(TyDF);
4969   if (1) test_frintp_s_s(TySF);
4970   if (1) test_frintx_d_d(TyDF);
4971   if (1) test_frintx_s_s(TySF);
4972   if (1) test_frintz_d_d(TyDF);
4973   if (1) test_frintz_s_s(TySF);
4974
4975   // frinta    2d,4s,2s (round to integral, nearest away)
4976   // frinti    2d,4s,2s (round to integral, per FPCR)
4977   // frintm    2d,4s,2s (round to integral, minus inf)
4978   // frintn    2d,4s,2s (round to integral, nearest, to even)
4979   // frintp    2d,4s,2s (round to integral, plus inf)
4980   // frintx    2d,4s,2s (round to integral exact, per FPCR)
4981   // frintz    2d,4s,2s (round to integral, zero)
4982   if (1) test_frinta_2d_2d(TyDF);
4983   if (1) test_frinta_4s_4s(TySF);
4984   if (1) test_frinta_2s_2s(TySF);
4985   if (1) test_frinti_2d_2d(TyDF);
4986   if (1) test_frinti_4s_4s(TySF);
4987   if (1) test_frinti_2s_2s(TySF);
4988   if (1) test_frintm_2d_2d(TyDF);
4989   if (1) test_frintm_4s_4s(TySF);
4990   if (1) test_frintm_2s_2s(TySF);
4991   if (1) test_frintn_2d_2d(TyDF);
4992   if (1) test_frintn_4s_4s(TySF);
4993   if (1) test_frintn_2s_2s(TySF);
4994   if (1) test_frintp_2d_2d(TyDF);
4995   if (1) test_frintp_4s_4s(TySF);
4996   if (1) test_frintp_2s_2s(TySF);
4997   if (1) test_frintx_2d_2d(TyDF);
4998   if (1) test_frintx_4s_4s(TySF);
4999   if (1) test_frintx_2s_2s(TySF);
5000   if (1) test_frintz_2d_2d(TyDF);
5001   if (1) test_frintz_4s_4s(TySF);
5002   if (1) test_frintz_2s_2s(TySF);
5003
5004   // frsqrte   d,s (est)
5005   // frsqrte   2d,4s,2s
5006   if (1) test_frsqrte_d_d(TyDF);
5007   if (1) test_frsqrte_s_s(TySF);
5008   if (1) test_frsqrte_2d_2d(TyDF);
5009   if (1) test_frsqrte_4s_4s(TySF);
5010   if (1) test_frsqrte_2s_2s(TySF);
5011
5012   // frsqrts   d,s (step)
5013   // frsqrts   2d,4s,2s
5014   if (1) test_frsqrts_d_d_d(TyDF);
5015   if (1) test_frsqrts_s_s_s(TySF);
5016   if (1) test_frsqrts_2d_2d_2d(TyDF);
5017   if (1) test_frsqrts_4s_4s_4s(TySF);
5018   if (1) test_frsqrts_2s_2s_2s(TySF);
5019
5020   // ======================== CONV ========================
5021
5022   // fcvt      s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
5023   if (1) test_fcvt_s_h(TyHF);
5024   if (1) test_fcvt_d_h(TyHF);
5025   if (1) test_fcvt_h_s(TySF);
5026   if (1) test_fcvt_d_s(TySF);
5027   if (1) test_fcvt_h_d(TyDF);
5028   if (1) test_fcvt_s_d(TyDF);
5029
5030   // fcvtl{2}  4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
5031   if (1) test_fcvtl_4s_4h(TyHF);
5032   if (1) test_fcvtl_4s_8h(TyHF);
5033   if (1) test_fcvtl_2d_2s(TySF);
5034   if (1) test_fcvtl_2d_4s(TySF);
5035
5036   // fcvtn{2}  4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
5037   if (1) test_fcvtn_4h_4s(TySF);
5038   if (1) test_fcvtn_8h_4s(TySF);
5039   if (1) test_fcvtn_2s_2d(TyDF);
5040   if (1) test_fcvtn_4s_2d(TyDF);
5041
5042   // fcvtas    d,s  (fcvt to signed int,   nearest, ties away)
5043   // fcvtau    d,s  (fcvt to unsigned int, nearest, ties away)
5044   // fcvtas    2d,4s,2s
5045   // fcvtau    2d,4s,2s
5046   // fcvtas    w_s,x_s,w_d,x_d
5047   // fcvtau    w_s,x_s,w_d,x_d
5048   if (1) test_fcvtas_d_d(TyDF);
5049   if (1) test_fcvtau_d_d(TyDF);
5050   if (1) test_fcvtas_s_s(TySF);
5051   if (1) test_fcvtau_s_s(TySF);
5052   if (1) test_fcvtas_2d_2d(TyDF);
5053   if (1) test_fcvtau_2d_2d(TyDF);
5054   if (1) test_fcvtas_4s_4s(TySF);
5055   if (1) test_fcvtau_4s_4s(TySF);
5056   if (1) test_fcvtas_2s_2s(TySF);
5057   if (1) test_fcvtau_2s_2s(TySF);
5058   if (1) test_fcvtas_w_s(TySF);
5059   if (1) test_fcvtau_w_s(TySF);
5060   if (1) test_fcvtas_x_s(TySF);
5061   if (1) test_fcvtau_x_s(TySF);
5062   if (1) test_fcvtas_w_d(TyDF);
5063   if (1) test_fcvtau_w_d(TyDF);
5064   if (1) test_fcvtas_x_d(TyDF);
5065   if (1) test_fcvtau_x_d(TyDF);
5066
5067   // fcvtms    d,s  (fcvt to signed int,   minus inf)
5068   // fcvtmu    d,s  (fcvt to unsigned int, minus inf)
5069   // fcvtms    2d,4s,2s
5070   // fcvtmu    2d,4s,2s
5071   // fcvtms    w_s,x_s,w_d,x_d
5072   // fcvtmu    w_s,x_s,w_d,x_d
5073   if (1) test_fcvtms_d_d(TyDF);
5074   if (1) test_fcvtmu_d_d(TyDF);
5075   if (1) test_fcvtms_s_s(TySF);
5076   if (1) test_fcvtmu_s_s(TySF);
5077   if (1) test_fcvtms_2d_2d(TyDF);
5078   if (1) test_fcvtmu_2d_2d(TyDF);
5079   if (1) test_fcvtms_4s_4s(TySF);
5080   if (1) test_fcvtmu_4s_4s(TySF);
5081   if (1) test_fcvtms_2s_2s(TySF);
5082   if (1) test_fcvtmu_2s_2s(TySF);
5083   if (1) test_fcvtms_w_s(TySF);
5084   if (1) test_fcvtmu_w_s(TySF);
5085   if (1) test_fcvtms_x_s(TySF);
5086   if (1) test_fcvtmu_x_s(TySF);
5087   if (1) test_fcvtms_w_d(TyDF);
5088   if (1) test_fcvtmu_w_d(TyDF);
5089   if (1) test_fcvtms_x_d(TyDF);
5090   if (1) test_fcvtmu_x_d(TyDF);
5091
5092   // fcvtns    d,s  (fcvt to signed int,   nearest)
5093   // fcvtnu    d,s  (fcvt to unsigned int, nearest)
5094   // fcvtns    2d,4s,2s
5095   // fcvtnu    2d,4s,2s
5096   // fcvtns    w_s,x_s,w_d,x_d
5097   // fcvtnu    w_s,x_s,w_d,x_d
5098   if (1) test_fcvtns_d_d(TyDF);
5099   if (1) test_fcvtnu_d_d(TyDF);
5100   if (1) test_fcvtns_s_s(TySF);
5101   if (1) test_fcvtnu_s_s(TySF);
5102   if (1) test_fcvtns_2d_2d(TyDF);
5103   if (1) test_fcvtnu_2d_2d(TyDF);
5104   if (1) test_fcvtns_4s_4s(TySF);
5105   if (1) test_fcvtnu_4s_4s(TySF);
5106   if (1) test_fcvtns_2s_2s(TySF);
5107   if (1) test_fcvtnu_2s_2s(TySF);
5108   if (1) test_fcvtns_w_s(TySF);
5109   if (1) test_fcvtnu_w_s(TySF);
5110   if (1) test_fcvtns_x_s(TySF);
5111   if (1) test_fcvtnu_x_s(TySF);
5112   if (1) test_fcvtns_w_d(TyDF);
5113   if (1) test_fcvtnu_w_d(TyDF);
5114   if (1) test_fcvtns_x_d(TyDF);
5115   if (1) test_fcvtnu_x_d(TyDF);
5116
5117   // fcvtps    d,s  (fcvt to signed int,   plus inf)
5118   // fcvtpu    d,s  (fcvt to unsigned int, plus inf)
5119   // fcvtps    2d,4s,2s
5120   // fcvtpu    2d,4s,2s
5121   // fcvtps    w_s,x_s,w_d,x_d
5122   // fcvtpu    w_s,x_s,w_d,x_d
5123   if (1) test_fcvtps_d_d(TyDF);
5124   if (1) test_fcvtpu_d_d(TyDF);
5125   if (1) test_fcvtps_s_s(TySF);
5126   if (1) test_fcvtpu_s_s(TySF);
5127   if (1) test_fcvtps_2d_2d(TyDF);
5128   if (1) test_fcvtpu_2d_2d(TyDF);
5129   if (1) test_fcvtps_4s_4s(TySF);
5130   if (1) test_fcvtpu_4s_4s(TySF);
5131   if (1) test_fcvtps_2s_2s(TySF);
5132   if (1) test_fcvtpu_2s_2s(TySF);
5133   if (1) test_fcvtps_w_s(TySF);
5134   if (1) test_fcvtpu_w_s(TySF);
5135   if (1) test_fcvtps_x_s(TySF);
5136   if (1) test_fcvtpu_x_s(TySF);
5137   if (1) test_fcvtps_w_d(TyDF);
5138   if (1) test_fcvtpu_w_d(TyDF);
5139   if (1) test_fcvtps_x_d(TyDF);
5140   if (1) test_fcvtpu_x_d(TyDF);
5141
5142   // fcvtzs    d,s (fcvt to signed integer,   to zero)
5143   // fcvtzu    d,s (fcvt to unsigned integer, to zero)
5144   // fcvtzs    2d,4s,2s
5145   // fcvtzu    2d,4s,2s
5146   // fcvtzs    w_s,x_s,w_d,x_d
5147   // fcvtzu    w_s,x_s,w_d,x_d
5148   if (1) test_fcvtzs_d_d(TyDF);
5149   if (1) test_fcvtzu_d_d(TyDF);
5150   if (1) test_fcvtzs_s_s(TySF);
5151   if (1) test_fcvtzu_s_s(TySF);
5152   if (1) test_fcvtzs_2d_2d(TyDF);
5153   if (1) test_fcvtzu_2d_2d(TyDF);
5154   if (1) test_fcvtzs_4s_4s(TySF);
5155   if (1) test_fcvtzu_4s_4s(TySF);
5156   if (1) test_fcvtzs_2s_2s(TySF);
5157   if (1) test_fcvtzu_2s_2s(TySF);
5158   if (1) test_fcvtzs_w_s(TySF);
5159   if (1) test_fcvtzu_w_s(TySF);
5160   if (1) test_fcvtzs_x_s(TySF);
5161   if (1) test_fcvtzu_x_s(TySF);
5162   if (1) test_fcvtzs_w_d(TyDF);
5163   if (1) test_fcvtzu_w_d(TyDF);
5164   if (1) test_fcvtzs_x_d(TyDF);
5165   if (1) test_fcvtzu_x_d(TyDF);
5166
5167   // fcvtzs    d,s (fcvt to signed fixedpt,   to zero) (w/ #fbits)
5168   // fcvtzu    d,s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
5169   // fcvtzs    2d,4s,2s (fcvt to signed fixedpt,   to zero) (w/ #fbits)
5170   // fcvtzu    2d,4s,2s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
5171   // fcvtzs    w_s,x_s,w_d,x_d (fcvt to signed fixedpt,   to zero) (w/ #fbits)
5172   // fcvtzu    w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
5173   if (1) test_fcvtzs_d_d_fbits1(TyDF);
5174   if (1) test_fcvtzs_d_d_fbits32(TyDF);
5175   if (1) test_fcvtzs_d_d_fbits64(TyDF);
5176   if (1) test_fcvtzu_d_d_fbits1(TyDF);
5177   if (1) test_fcvtzu_d_d_fbits32(TyDF);
5178   if (1) test_fcvtzu_d_d_fbits64(TyDF);
5179   if (1) test_fcvtzs_s_s_fbits1(TySF);
5180   if (1) test_fcvtzs_s_s_fbits16(TySF);
5181   if (1) test_fcvtzs_s_s_fbits32(TySF);
5182   if (1) test_fcvtzu_s_s_fbits1(TySF);
5183   if (1) test_fcvtzu_s_s_fbits16(TySF);
5184   if (1) test_fcvtzu_s_s_fbits32(TySF);
5185   if (1) test_fcvtzs_2d_2d_fbits1(TyDF);
5186   if (1) test_fcvtzs_2d_2d_fbits32(TyDF);
5187   if (1) test_fcvtzs_2d_2d_fbits64(TyDF);
5188   if (1) test_fcvtzu_2d_2d_fbits1(TyDF);
5189   if (1) test_fcvtzu_2d_2d_fbits32(TyDF);
5190   if (1) test_fcvtzu_2d_2d_fbits64(TyDF);
5191   if (1) test_fcvtzs_4s_4s_fbits1(TySF);
5192   if (1) test_fcvtzs_4s_4s_fbits16(TySF);
5193   if (1) test_fcvtzs_4s_4s_fbits32(TySF);
5194   if (1) test_fcvtzu_4s_4s_fbits1(TySF);
5195   if (1) test_fcvtzu_4s_4s_fbits16(TySF);
5196   if (1) test_fcvtzu_4s_4s_fbits32(TySF);
5197   if (1) test_fcvtzs_2s_2s_fbits1(TySF);
5198   if (1) test_fcvtzs_2s_2s_fbits16(TySF);
5199   if (1) test_fcvtzs_2s_2s_fbits32(TySF);
5200   if (1) test_fcvtzu_2s_2s_fbits1(TySF);
5201   if (1) test_fcvtzu_2s_2s_fbits16(TySF);
5202   if (1) test_fcvtzu_2s_2s_fbits32(TySF);
5203   if (1) test_fcvtzs_w_s_fbits1(TySF);
5204   if (1) test_fcvtzs_w_s_fbits16(TySF);
5205   if (1) test_fcvtzs_w_s_fbits32(TySF);
5206   if (1) test_fcvtzu_w_s_fbits1(TySF);
5207   if (1) test_fcvtzu_w_s_fbits16(TySF);
5208   if (1) test_fcvtzu_w_s_fbits32(TySF);
5209   if (1) test_fcvtzs_x_s_fbits1(TySF);
5210   if (1) test_fcvtzs_x_s_fbits32(TySF);
5211   if (1) test_fcvtzs_x_s_fbits64(TySF);
5212   if (1) test_fcvtzu_x_s_fbits1(TySF);
5213   if (1) test_fcvtzu_x_s_fbits32(TySF);
5214   if (1) test_fcvtzu_x_s_fbits64(TySF);
5215   if (1) test_fcvtzs_w_d_fbits1(TyDF);
5216   if (1) test_fcvtzs_w_d_fbits16(TyDF);
5217   if (1) test_fcvtzs_w_d_fbits32(TyDF);
5218   if (1) test_fcvtzu_w_d_fbits1(TyDF);
5219   if (1) test_fcvtzu_w_d_fbits16(TyDF);
5220   if (1) test_fcvtzu_w_d_fbits32(TyDF);
5221   if (1) test_fcvtzs_x_d_fbits1(TyDF);
5222   if (1) test_fcvtzs_x_d_fbits32(TyDF);
5223   if (1) test_fcvtzs_x_d_fbits64(TyDF);
5224   if (1) test_fcvtzu_x_d_fbits1(TyDF);
5225   if (1) test_fcvtzu_x_d_fbits32(TyDF);
5226   if (1) test_fcvtzu_x_d_fbits64(TyDF);
5227
5228   // fcvtxn    s_d (fcvt to lower prec narrow, rounding to odd)
5229   // fcvtxn    2s_2d,4s_2d
5230   if (1) test_fcvtxn_s_d(TyDF);
5231   if (1) test_fcvtxn_2s_2d(TyDF);
5232   if (1) test_fcvtxn_4s_2d(TyDF);
5233
5234   // scvtf     d,s        _#fbits
5235   // ucvtf     d,s        _#fbits
5236   // scvtf     2d,4s,2s   _#fbits
5237   // ucvtf     2d,4s,2s   _#fbits
5238   if (1) test_scvtf_d_d_fbits1(TyD);
5239   if (1) test_scvtf_d_d_fbits32(TyD);
5240   if (1) test_scvtf_d_d_fbits64(TyD);
5241   if (1) test_ucvtf_d_d_fbits1(TyD);
5242   if (1) test_ucvtf_d_d_fbits32(TyD);
5243   if (1) test_ucvtf_d_d_fbits64(TyD);
5244   if (1) test_scvtf_s_s_fbits1(TyS);
5245   if (1) test_scvtf_s_s_fbits16(TyS);
5246   if (1) test_scvtf_s_s_fbits32(TyS);
5247   if (1) test_ucvtf_s_s_fbits1(TyS);
5248   if (1) test_ucvtf_s_s_fbits16(TyS);
5249   if (1) test_ucvtf_s_s_fbits32(TyS);
5250   if (1) test_scvtf_2d_2d_fbits1(TyD);
5251   if (1) test_scvtf_2d_2d_fbits32(TyD);
5252   if (1) test_scvtf_2d_2d_fbits64(TyD);
5253   if (1) test_ucvtf_2d_2d_fbits1(TyD);
5254   if (1) test_ucvtf_2d_2d_fbits32(TyD);
5255   if (1) test_ucvtf_2d_2d_fbits64(TyD);
5256   if (1) test_scvtf_4s_4s_fbits1(TyS);
5257   if (1) test_scvtf_4s_4s_fbits16(TyS);
5258   if (1) test_scvtf_4s_4s_fbits32(TyS);
5259   if (1) test_ucvtf_4s_4s_fbits1(TyS);
5260   if (1) test_ucvtf_4s_4s_fbits16(TyS);
5261   if (1) test_ucvtf_4s_4s_fbits32(TyS);
5262   if (1) test_scvtf_2s_2s_fbits1(TyS);
5263   if (1) test_scvtf_2s_2s_fbits16(TyS);
5264   if (1) test_scvtf_2s_2s_fbits32(TyS);
5265   if (1) test_ucvtf_2s_2s_fbits1(TyS);
5266   if (1) test_ucvtf_2s_2s_fbits16(TyS);
5267   if (1) test_ucvtf_2s_2s_fbits32(TyS);
5268
5269   // scvtf     d,s
5270   // ucvtf     d,s
5271   // scvtf     2d,4s,2s
5272   // ucvtf     2d,4s,2s
5273   if (1) test_scvtf_d_d(TyD);
5274   if (1) test_ucvtf_d_d(TyD);
5275   if (1) test_scvtf_s_s(TyS);
5276   if (1) test_ucvtf_s_s(TyS);
5277   if (1) test_scvtf_2d_2d(TyD);
5278   if (1) test_ucvtf_2d_2d(TyD);
5279   if (1) test_scvtf_4s_4s(TyS);
5280   if (1) test_ucvtf_4s_4s(TyS);
5281   if (1) test_scvtf_2s_2s(TyS);
5282   if (1) test_ucvtf_2s_2s(TyS);
5283
5284   // scvtf     s_w, d_w, s_x, d_x,   _#fbits
5285   // ucvtf     s_w, d_w, s_x, d_x,   _#fbits
5286   if (1) test_scvtf_s_w_fbits1(TyS);
5287   if (1) test_scvtf_s_w_fbits16(TyS);
5288   if (1) test_scvtf_s_w_fbits32(TyS);
5289   if (1) test_scvtf_d_w_fbits1(TyS);
5290   if (1) test_scvtf_d_w_fbits16(TyS);
5291   if (1) test_scvtf_d_w_fbits32(TyS);
5292   if (1) test_scvtf_s_x_fbits1(TyD);
5293   if (1) test_scvtf_s_x_fbits32(TyD);
5294   if (1) test_scvtf_s_x_fbits64(TyD);
5295   if (1) test_scvtf_d_x_fbits1(TyD);
5296   if (1) test_scvtf_d_x_fbits32(TyD);
5297   if (1) test_scvtf_d_x_fbits64(TyD);
5298   if (1) test_ucvtf_s_w_fbits1(TyS);
5299   if (1) test_ucvtf_s_w_fbits16(TyS);
5300   if (1) test_ucvtf_s_w_fbits32(TyS);
5301   if (1) test_ucvtf_d_w_fbits1(TyS);
5302   if (1) test_ucvtf_d_w_fbits16(TyS);
5303   if (1) test_ucvtf_d_w_fbits32(TyS);
5304   if (1) test_ucvtf_s_x_fbits1(TyD);
5305   if (1) test_ucvtf_s_x_fbits32(TyD);
5306   if (1) test_ucvtf_s_x_fbits64(TyD);
5307   if (1) test_ucvtf_d_x_fbits1(TyD);
5308   if (1) test_ucvtf_d_x_fbits32(TyD);
5309   if (1) test_ucvtf_d_x_fbits64(TyD);
5310
5311   // scvtf     s_w, d_w, s_x, d_x
5312   // ucvtf     s_w, d_w, s_x, d_x
5313   if (1) test_scvtf_s_w(TyS);
5314   if (1) test_scvtf_d_w(TyS);
5315   if (1) test_scvtf_s_x(TyD);
5316   if (1) test_scvtf_d_x(TyD);
5317   if (1) test_ucvtf_s_w(TyS);
5318   if (1) test_ucvtf_d_w(TyS);
5319   if (1) test_ucvtf_s_x(TyD);
5320   if (1) test_ucvtf_d_x(TyD);
5321
5322   // ======================== INT ========================
5323
5324   // abs       d
5325   // neg       d
5326   if (1) test_abs_d_d(TyD);
5327   if (1) test_neg_d_d(TyD);
5328
5329   // abs       2d,4s,2s,8h,4h,16b,8b
5330   // neg       2d,4s,2s,8h,4h,16b,8b
5331   if (1) test_abs_2d_2d(TyD);
5332   if (1) test_abs_4s_4s(TyS);
5333   if (1) test_abs_2s_2s(TyS);
5334   if (1) test_abs_8h_8h(TyH);
5335   if (1) test_abs_4h_4h(TyH);
5336   if (1) test_abs_16b_16b(TyB);
5337   if (1) test_abs_8b_8b(TyB);
5338   if (1) test_neg_2d_2d(TyD);
5339   if (1) test_neg_4s_4s(TyS);
5340   if (1) test_neg_2s_2s(TyS);
5341   if (1) test_neg_8h_8h(TyH);
5342   if (1) test_neg_4h_4h(TyH);
5343   if (1) test_neg_16b_16b(TyB);
5344   if (1) test_neg_8b_8b(TyB);
5345
5346   // add       d
5347   // sub       d
5348   if (1) test_add_d_d_d(TyD);
5349   if (1) test_sub_d_d_d(TyD);
5350
5351   // add       2d,4s,2s,8h,4h,16b,8b
5352   // sub       2d,4s,2s,8h,4h,16b,8b
5353   if (1) test_add_2d_2d_2d(TyD);
5354   if (1) test_add_4s_4s_4s(TyS);
5355   if (1) test_add_2s_2s_2s(TyS);
5356   if (1) test_add_8h_8h_8h(TyH);
5357   if (1) test_add_4h_4h_4h(TyH);
5358   if (1) test_add_16b_16b_16b(TyB);
5359   if (1) test_add_8b_8b_8b(TyB);
5360   if (1) test_sub_2d_2d_2d(TyD);
5361   if (1) test_sub_4s_4s_4s(TyS);
5362   if (1) test_sub_2s_2s_2s(TyS);
5363   if (1) test_sub_8h_8h_8h(TyH);
5364   if (1) test_sub_4h_4h_4h(TyH);
5365   if (1) test_sub_16b_16b_16b(TyB);
5366   if (1) test_sub_8b_8b_8b(TyB);
5367
5368   // addhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5369   // subhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5370   // raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5371   // rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
5372   if (1) test_addhn_2s_2d_2d(TyD);
5373   if (1) test_addhn2_4s_2d_2d(TyD);
5374   if (1) test_addhn_4h_4s_4s(TyS);
5375   if (1) test_addhn2_8h_4s_4s(TyS);
5376   if (1) test_addhn_8b_8h_8h(TyH);
5377   if (1) test_addhn2_16b_8h_8h(TyH);
5378   if (1) test_subhn_2s_2d_2d(TyD);
5379   if (1) test_subhn2_4s_2d_2d(TyD);
5380   if (1) test_subhn_4h_4s_4s(TyS);
5381   if (1) test_subhn2_8h_4s_4s(TyS);
5382   if (1) test_subhn_8b_8h_8h(TyH);
5383   if (1) test_subhn2_16b_8h_8h(TyH);
5384   if (1) test_raddhn_2s_2d_2d(TyD);
5385   if (1) test_raddhn2_4s_2d_2d(TyD);
5386   if (1) test_raddhn_4h_4s_4s(TyS);
5387   if (1) test_raddhn2_8h_4s_4s(TyS);
5388   if (1) test_raddhn_8b_8h_8h(TyH);
5389   if (1) test_raddhn2_16b_8h_8h(TyH);
5390   if (1) test_rsubhn_2s_2d_2d(TyD);
5391   if (1) test_rsubhn2_4s_2d_2d(TyD);
5392   if (1) test_rsubhn_4h_4s_4s(TyS);
5393   if (1) test_rsubhn2_8h_4s_4s(TyS);
5394   if (1) test_rsubhn_8b_8h_8h(TyH);
5395   if (1) test_rsubhn2_16b_8h_8h(TyH);
5396
5397   // addp     d (add pairs, across)
5398   if (1) test_addp_d_2d(TyD);
5399
5400   // addp     2d,4s,2s,8h,4h,16b,8b
5401   if (1) test_addp_2d_2d_2d(TyD);
5402   if (1) test_addp_4s_4s_4s(TyS);
5403   if (1) test_addp_2s_2s_2s(TyS);
5404   if (1) test_addp_8h_8h_8h(TyH);
5405   if (1) test_addp_4h_4h_4h(TyH);
5406   if (1) test_addp_16b_16b_16b(TyB);
5407   if (1) test_addp_8b_8b_8b(TyB);
5408
5409   // addv     4s,8h,4h,16b,18b (reduce across vector)
5410   if (1) test_addv_s_4s(TyS);
5411   if (1) test_addv_h_8h(TyH);
5412   if (1) test_addv_h_4h(TyH);
5413   if (1) test_addv_b_16b(TyB);
5414   if (1) test_addv_b_8b(TyB);
5415
5416   // and      16b,8b
5417   // bic      16b,8b
5418   // orn      16b,8b
5419   // orr      16b,8b
5420   if (1) test_and_16b_16b_16b(TyB);
5421   if (1) test_and_8b_8b_8b(TyB);
5422   if (1) test_bic_16b_16b_16b(TyB);
5423   if (1) test_bic_8b_8b_8b(TyB);
5424   if (1) test_orr_16b_16b_16b(TyB);
5425   if (1) test_orr_8b_8b_8b(TyB);
5426   if (1) test_orn_16b_16b_16b(TyB);
5427   if (1) test_orn_8b_8b_8b(TyB);
5428
5429   // orr      8h,4h   #imm8, LSL #0 or 8
5430   // orr      4s,2s   #imm8, LSL #0, 8, 16 or 24
5431   // bic      8h,4h   #imm8, LSL #0 or 8
5432   // bic      4s,2s   #imm8, LSL #0, 8, 16 or 24
5433   // movi and mvni are very similar, a superset of these.
5434   // Cases are below.
5435   if (1) test_orr_8h_0x5A_lsl0(TyH);
5436   if (1) test_orr_8h_0xA5_lsl8(TyH);
5437   if (1) test_orr_4h_0x5A_lsl0(TyH);
5438   if (1) test_orr_4h_0xA5_lsl8(TyH);
5439   if (1) test_orr_4s_0x5A_lsl0(TyS);
5440   if (1) test_orr_4s_0x6B_lsl8(TyS);
5441   if (1) test_orr_4s_0x49_lsl16(TyS);
5442   if (1) test_orr_4s_0x3D_lsl24(TyS);
5443   if (1) test_orr_2s_0x5A_lsl0(TyS);
5444   if (1) test_orr_2s_0x6B_lsl8(TyS);
5445   if (1) test_orr_2s_0x49_lsl16(TyS);
5446   if (1) test_orr_2s_0x3D_lsl24(TyS);
5447   if (1) test_bic_8h_0x5A_lsl0(TyH);
5448   if (1) test_bic_8h_0xA5_lsl8(TyH);
5449   if (1) test_bic_4h_0x5A_lsl0(TyH);
5450   if (1) test_bic_4h_0xA5_lsl8(TyH);
5451   if (1) test_bic_4s_0x5A_lsl0(TyS);
5452   if (1) test_bic_4s_0x6B_lsl8(TyS);
5453   if (1) test_bic_4s_0x49_lsl16(TyS);
5454   if (1) test_bic_4s_0x3D_lsl24(TyS);
5455   if (1) test_bic_2s_0x5A_lsl0(TyS);
5456   if (1) test_bic_2s_0x6B_lsl8(TyS);
5457   if (1) test_bic_2s_0x49_lsl16(TyS);
5458   if (1) test_bic_2s_0x3D_lsl24(TyS);
5459
5460   // bif      16b,8b (vector) (bit insert if false)
5461   // bit      16b,8b (vector) (bit insert if true)
5462   // bsl      16b,8b (vector) (bit select)
5463   // eor      16b,8b (vector)
5464   if (1) test_bif_16b_16b_16b(TyB);
5465   if (1) test_bif_8b_8b_8b(TyB);
5466   if (1) test_bit_16b_16b_16b(TyB);
5467   if (1) test_bit_8b_8b_8b(TyB);
5468   if (1) test_bsl_16b_16b_16b(TyB);
5469   if (1) test_bsl_8b_8b_8b(TyB);
5470   if (1) test_eor_16b_16b_16b(TyB);
5471   if (1) test_eor_8b_8b_8b(TyB);
5472
5473   // cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
5474   // clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
5475   if (1) test_cls_4s_4s(TyS);
5476   if (1) test_cls_2s_2s(TyS);
5477   if (1) test_cls_8h_8h(TyH);
5478   if (1) test_cls_4h_4h(TyH);
5479   if (1) test_cls_16b_16b(TyB);
5480   if (1) test_cls_8b_8b(TyB);
5481   if (1) test_clz_4s_4s(TyS);
5482   if (1) test_clz_2s_2s(TyS);
5483   if (1) test_clz_8h_8h(TyH);
5484   if (1) test_clz_4h_4h(TyH);
5485   if (1) test_clz_16b_16b(TyB);
5486   if (1) test_clz_8b_8b(TyB);
5487
5488   // cmeq     d
5489   // cmge     d
5490   // cmgt     d
5491   // cmhi     d
5492   // cmhs     d
5493   // cmtst    d
5494   if (1) test_cmeq_d_d_d(TyD);
5495   if (1) test_cmge_d_d_d(TyD);
5496   if (1) test_cmgt_d_d_d(TyD);
5497   if (1) test_cmhi_d_d_d(TyD);
5498   if (1) test_cmhs_d_d_d(TyD);
5499   if (1) test_cmtst_d_d_d(TyD);
5500
5501   // cmeq     2d,4s,2s,8h,4h,16b,8b
5502   // cmge     2d,4s,2s,8h,4h,16b,8b
5503   // cmgt     2d,4s,2s,8h,4h,16b,8b
5504   // cmhi     2d,4s,2s,8h,4h,16b,8b
5505   // cmhs     2d,4s,2s,8h,4h,16b,8b
5506   // cmtst    2d,4s,2s,8h,4h,16b,8b
5507   if (1) test_cmeq_2d_2d_2d(TyD);
5508   if (1) test_cmeq_4s_4s_4s(TyS);
5509   if (1) test_cmeq_2s_2s_2s(TyS);
5510   if (1) test_cmeq_8h_8h_8h(TyH);
5511   if (1) test_cmeq_4h_4h_4h(TyH);
5512   if (1) test_cmeq_16b_16b_16b(TyB);
5513   if (1) test_cmeq_8b_8b_8b(TyB);
5514   if (1) test_cmge_2d_2d_2d(TyD);
5515   if (1) test_cmge_4s_4s_4s(TyS);
5516   if (1) test_cmge_2s_2s_2s(TyS);
5517   if (1) test_cmge_8h_8h_8h(TyH);
5518   if (1) test_cmge_4h_4h_4h(TyH);
5519   if (1) test_cmge_16b_16b_16b(TyB);
5520   if (1) test_cmge_8b_8b_8b(TyB);
5521   if (1) test_cmgt_2d_2d_2d(TyD);
5522   if (1) test_cmgt_4s_4s_4s(TyS);
5523   if (1) test_cmgt_2s_2s_2s(TyS);
5524   if (1) test_cmgt_8h_8h_8h(TyH);
5525   if (1) test_cmgt_4h_4h_4h(TyH);
5526   if (1) test_cmgt_16b_16b_16b(TyB);
5527   if (1) test_cmgt_8b_8b_8b(TyB);
5528   if (1) test_cmhi_2d_2d_2d(TyD);
5529   if (1) test_cmhi_4s_4s_4s(TyS);
5530   if (1) test_cmhi_2s_2s_2s(TyS);
5531   if (1) test_cmhi_8h_8h_8h(TyH);
5532   if (1) test_cmhi_4h_4h_4h(TyH);
5533   if (1) test_cmhi_16b_16b_16b(TyB);
5534   if (1) test_cmhi_8b_8b_8b(TyB);
5535   if (1) test_cmhs_2d_2d_2d(TyD);
5536   if (1) test_cmhs_4s_4s_4s(TyS);
5537   if (1) test_cmhs_2s_2s_2s(TyS);
5538   if (1) test_cmhs_8h_8h_8h(TyH);
5539   if (1) test_cmhs_4h_4h_4h(TyH);
5540   if (1) test_cmhs_16b_16b_16b(TyB);
5541   if (1) test_cmhs_8b_8b_8b(TyB);
5542   if (1) test_cmtst_2d_2d_2d(TyD);
5543   if (1) test_cmtst_4s_4s_4s(TyS);
5544   if (1) test_cmtst_2s_2s_2s(TyS);
5545   if (1) test_cmtst_8h_8h_8h(TyH);
5546   if (1) test_cmtst_4h_4h_4h(TyH);
5547   if (1) test_cmtst_16b_16b_16b(TyB);
5548   if (1) test_cmtst_8b_8b_8b(TyB);
5549
5550   // cmeq_z   d
5551   // cmge_z   d
5552   // cmgt_z   d
5553   // cmle_z   d
5554   // cmlt_z   d
5555   if (1) test_cmeq_zero_d_d(TyD);
5556   if (1) test_cmge_zero_d_d(TyD);
5557   if (1) test_cmgt_zero_d_d(TyD);
5558   if (1) test_cmle_zero_d_d(TyD);
5559   if (1) test_cmlt_zero_d_d(TyD);
5560
5561   // cmeq_z   2d,4s,2s,8h,4h,16b,8b
5562   // cmge_z   2d,4s,2s,8h,4h,16b,8b
5563   // cmgt_z   2d,4s,2s,8h,4h,16b,8b
5564   // cmle_z   2d,4s,2s,8h,4h,16b,8b
5565   // cmlt_z   2d,4s,2s,8h,4h,16b,8b
5566   if (1) test_cmeq_zero_2d_2d(TyD);
5567   if (1) test_cmeq_zero_4s_4s(TyS);
5568   if (1) test_cmeq_zero_2s_2s(TyS);
5569   if (1) test_cmeq_zero_8h_8h(TyH);
5570   if (1) test_cmeq_zero_4h_4h(TyH);
5571   if (1) test_cmeq_zero_16b_16b(TyB);
5572   if (1) test_cmeq_zero_8b_8b(TyB);
5573   if (1) test_cmge_zero_2d_2d(TyD);
5574   if (1) test_cmge_zero_4s_4s(TyS);
5575   if (1) test_cmge_zero_2s_2s(TyS);
5576   if (1) test_cmge_zero_8h_8h(TyH);
5577   if (1) test_cmge_zero_4h_4h(TyH);
5578   if (1) test_cmge_zero_16b_16b(TyB);
5579   if (1) test_cmge_zero_8b_8b(TyB);
5580   if (1) test_cmgt_zero_2d_2d(TyD);
5581   if (1) test_cmgt_zero_4s_4s(TyS);
5582   if (1) test_cmgt_zero_2s_2s(TyS);
5583   if (1) test_cmgt_zero_8h_8h(TyH);
5584   if (1) test_cmgt_zero_4h_4h(TyH);
5585   if (1) test_cmgt_zero_16b_16b(TyB);
5586   if (1) test_cmgt_zero_8b_8b(TyB);
5587   if (1) test_cmle_zero_2d_2d(TyD);
5588   if (1) test_cmle_zero_4s_4s(TyS);
5589   if (1) test_cmle_zero_2s_2s(TyS);
5590   if (1) test_cmle_zero_8h_8h(TyH);
5591   if (1) test_cmle_zero_4h_4h(TyH);
5592   if (1) test_cmle_zero_16b_16b(TyB);
5593   if (1) test_cmle_zero_8b_8b(TyB);
5594   if (1) test_cmlt_zero_2d_2d(TyD);
5595   if (1) test_cmlt_zero_4s_4s(TyS);
5596   if (1) test_cmlt_zero_2s_2s(TyS);
5597   if (1) test_cmlt_zero_8h_8h(TyH);
5598   if (1) test_cmlt_zero_4h_4h(TyH);
5599   if (1) test_cmlt_zero_16b_16b(TyB);
5600   if (1) test_cmlt_zero_8b_8b(TyB);
5601
5602   // cnt      16b,8b (population count per byte)
5603   if (1) test_cnt_16b_16b(TyB);
5604   if (1) test_cnt_8b_8b(TyB);
5605
5606   // dup      d,s,h,b (vec elem to scalar)
5607   if (1) test_dup_d_d0(TyD);
5608   if (1) test_dup_d_d1(TyD);
5609   if (1) test_dup_s_s0(TyS);
5610   if (1) test_dup_s_s3(TyS);
5611   if (1) test_dup_h_h0(TyH);
5612   if (1) test_dup_h_h6(TyH);
5613   if (1) test_dup_b_b0(TyB);
5614   if (1) test_dup_b_b13(TyB);
5615
5616   // dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
5617   if (1) test_dup_2d_d0(TyD);
5618   if (1) test_dup_2d_d1(TyD);
5619   if (1) test_dup_4s_s0(TyS);
5620   if (1) test_dup_4s_s3(TyS);
5621   if (1) test_dup_2s_s0(TyS);
5622   if (1) test_dup_2s_s2(TyS);
5623   if (1) test_dup_8h_h0(TyH);
5624   if (1) test_dup_8h_h6(TyH);
5625   if (1) test_dup_4h_h1(TyH);
5626   if (1) test_dup_4h_h5(TyH);
5627   if (1) test_dup_16b_b2(TyB);
5628   if (1) test_dup_16b_b12(TyB);
5629   if (1) test_dup_8b_b3(TyB);
5630   if (1) test_dup_8b_b13(TyB);
5631
5632   // dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
5633   if (1) test_dup_2d_x(TyD);
5634   if (1) test_dup_4s_w(TyS);
5635   if (1) test_dup_2s_w(TyS);
5636   if (1) test_dup_8h_w(TyH);
5637   if (1) test_dup_4h_w(TyH);
5638   if (1) test_dup_16b_w(TyB);
5639   if (1) test_dup_8b_w(TyB);
5640
5641   // ext      16b,8b,#imm4 (concat 2 vectors, then slice)
5642   if (1) test_ext_16b_16b_16b_0x0(TyB);
5643   if (1) test_ext_16b_16b_16b_0x1(TyB);
5644   if (1) test_ext_16b_16b_16b_0x2(TyB);
5645   if (1) test_ext_16b_16b_16b_0x3(TyB);
5646   if (1) test_ext_16b_16b_16b_0x4(TyB);
5647   if (1) test_ext_16b_16b_16b_0x5(TyB);
5648   if (1) test_ext_16b_16b_16b_0x6(TyB);
5649   if (1) test_ext_16b_16b_16b_0x7(TyB);
5650   if (1) test_ext_16b_16b_16b_0x8(TyB);
5651   if (1) test_ext_16b_16b_16b_0x9(TyB);
5652   if (1) test_ext_16b_16b_16b_0xA(TyB);
5653   if (1) test_ext_16b_16b_16b_0xB(TyB);
5654   if (1) test_ext_16b_16b_16b_0xC(TyB);
5655   if (1) test_ext_16b_16b_16b_0xD(TyB);
5656   if (1) test_ext_16b_16b_16b_0xE(TyB);
5657   if (1) test_ext_16b_16b_16b_0xF(TyB);
5658   if (1) test_ext_8b_8b_8b_0x0(TyB);
5659   if (1) test_ext_8b_8b_8b_0x1(TyB);
5660   if (1) test_ext_8b_8b_8b_0x2(TyB);
5661   if (1) test_ext_8b_8b_8b_0x3(TyB);
5662   if (1) test_ext_8b_8b_8b_0x4(TyB);
5663   if (1) test_ext_8b_8b_8b_0x5(TyB);
5664   if (1) test_ext_8b_8b_8b_0x6(TyB);
5665   if (1) test_ext_8b_8b_8b_0x7(TyB);
5666
5667   // ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
5668   if (1) test_ins_d0_d0(TyD);
5669   if (1) test_ins_d0_d1(TyD);
5670   if (1) test_ins_d1_d0(TyD);
5671   if (1) test_ins_d1_d1(TyD);
5672   if (1) test_ins_s0_s2(TyS);
5673   if (1) test_ins_s3_s0(TyS);
5674   if (1) test_ins_s2_s1(TyS);
5675   if (1) test_ins_s1_s3(TyS);
5676   if (1) test_ins_h0_h6(TyH);
5677   if (1) test_ins_h7_h0(TyH);
5678   if (1) test_ins_h6_h1(TyH);
5679   if (1) test_ins_h1_h7(TyH);
5680   if (1) test_ins_b0_b14(TyB);
5681   if (1) test_ins_b15_b8(TyB);
5682   if (1) test_ins_b13_b9(TyB);
5683   if (1) test_ins_b5_b12(TyB);
5684
5685   // ins      d[]_x, s[]_w, h[]_w, b[]_w
5686   if (1) test_INS_general();
5687
5688   // mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5689   // mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5690   // mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
5691   if (1) test_mla_4s_4s_s0(TyS);
5692   if (1) test_mla_4s_4s_s3(TyS);
5693   if (1) test_mla_2s_2s_s0(TyS);
5694   if (1) test_mla_2s_2s_s3(TyS);
5695   if (1) test_mla_8h_8h_h1(TyH);
5696   if (1) test_mla_8h_8h_h5(TyH);
5697   if (1) test_mla_4h_4h_h2(TyH);
5698   if (1) test_mla_4h_4h_h7(TyH);
5699   if (1) test_mls_4s_4s_s0(TyS);
5700   if (1) test_mls_4s_4s_s3(TyS);
5701   if (1) test_mls_2s_2s_s0(TyS);
5702   if (1) test_mls_2s_2s_s3(TyS);
5703   if (1) test_mls_8h_8h_h1(TyH);
5704   if (1) test_mls_8h_8h_h5(TyH);
5705   if (1) test_mls_4h_4h_h2(TyH);
5706   if (1) test_mls_4h_4h_h7(TyH);
5707   if (1) test_mul_4s_4s_s0(TyS);
5708   if (1) test_mul_4s_4s_s3(TyS);
5709   if (1) test_mul_2s_2s_s0(TyS);
5710   if (1) test_mul_2s_2s_s3(TyS);
5711   if (1) test_mul_8h_8h_h1(TyH);
5712   if (1) test_mul_8h_8h_h5(TyH);
5713   if (1) test_mul_4h_4h_h2(TyH);
5714   if (1) test_mul_4h_4h_h7(TyH);
5715
5716   // mla   4s,2s,8h,4h,16b,8b
5717   // mls   4s,2s,8h,4h,16b,8b
5718   // mul   4s,2s,8h,4h,16b,8b
5719   if (1) test_mla_4s_4s_4s(TyS);
5720   if (1) test_mla_2s_2s_2s(TyS);
5721   if (1) test_mla_8h_8h_8h(TyH);
5722   if (1) test_mla_4h_4h_4h(TyH);
5723   if (1) test_mla_16b_16b_16b(TyB);
5724   if (1) test_mla_8b_8b_8b(TyB);
5725   if (1) test_mls_4s_4s_4s(TyS);
5726   if (1) test_mls_2s_2s_2s(TyS);
5727   if (1) test_mls_8h_8h_8h(TyH);
5728   if (1) test_mls_4h_4h_4h(TyH);
5729   if (1) test_mls_16b_16b_16b(TyB);
5730   if (1) test_mls_8b_8b_8b(TyB);
5731   if (1) test_mul_4s_4s_4s(TyS);
5732   if (1) test_mul_2s_2s_2s(TyS);
5733   if (1) test_mul_8h_8h_8h(TyH);
5734   if (1) test_mul_4h_4h_4h(TyH);
5735   if (1) test_mul_16b_16b_16b(TyB);
5736   if (1) test_mul_8b_8b_8b(TyB);
5737
5738   // Some of these movi and mvni cases are similar to orr and bic
5739   // cases with immediates.  Maybe they should be moved together.
5740   // movi  16b,8b   #imm8, LSL #0
5741   if (1) test_movi_16b_0x9C_lsl0(TyB);
5742   if (1) test_movi_8b_0x8B_lsl0(TyB);
5743
5744   // movi  8h,4h    #imm8, LSL #0 or 8
5745   // mvni  8h,4h    #imm8, LSL #0 or 8
5746   if (1) test_movi_8h_0x5A_lsl0(TyH);
5747   if (1) test_movi_8h_0xA5_lsl8(TyH);
5748   if (1) test_movi_4h_0x5A_lsl0(TyH);
5749   if (1) test_movi_4h_0xA5_lsl8(TyH);
5750   if (1) test_mvni_8h_0x5A_lsl0(TyH);
5751   if (1) test_mvni_8h_0xA5_lsl8(TyH);
5752   if (1) test_mvni_4h_0x5A_lsl0(TyH);
5753   if (1) test_mvni_4h_0xA5_lsl8(TyH);
5754
5755   // movi  4s,2s    #imm8, LSL #0, 8, 16, 24
5756   // mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
5757   if (1) test_movi_4s_0x5A_lsl0(TyS);
5758   if (1) test_movi_4s_0x6B_lsl8(TyS);
5759   if (1) test_movi_4s_0x49_lsl16(TyS);
5760   if (1) test_movi_4s_0x3D_lsl24(TyS);
5761   if (1) test_movi_2s_0x5A_lsl0(TyS);
5762   if (1) test_movi_2s_0x6B_lsl8(TyS);
5763   if (1) test_movi_2s_0x49_lsl16(TyS);
5764   if (1) test_movi_2s_0x3D_lsl24(TyS);
5765   if (1) test_mvni_4s_0x5A_lsl0(TyS);
5766   if (1) test_mvni_4s_0x6B_lsl8(TyS);
5767   if (1) test_mvni_4s_0x49_lsl16(TyS);
5768   if (1) test_mvni_4s_0x3D_lsl24(TyS);
5769   if (1) test_mvni_2s_0x5A_lsl0(TyS);
5770   if (1) test_mvni_2s_0x6B_lsl8(TyS);
5771   if (1) test_mvni_2s_0x49_lsl16(TyS);
5772   if (1) test_mvni_2s_0x3D_lsl24(TyS);
5773
5774   // movi  4s,2s    #imm8, MSL #8 or 16
5775   // mvni  4s,2s    #imm8, MSL #8 or 16
5776   if (1) test_movi_4s_0x6B_msl8(TyS);
5777   if (1) test_movi_4s_0x94_msl16(TyS);
5778   if (1) test_movi_2s_0x7A_msl8(TyS);
5779   if (1) test_movi_2s_0xA5_msl16(TyS);
5780   if (1) test_mvni_4s_0x6B_msl8(TyS);
5781   if (1) test_mvni_4s_0x94_msl16(TyS);
5782   if (1) test_mvni_2s_0x7A_msl8(TyS);
5783   if (1) test_mvni_2s_0xA5_msl16(TyS);
5784
5785   // movi  d,       #imm64
5786   // movi  2d,      #imm64
5787   if (1) test_movi_d_0xA5(TyD);
5788   if (1) test_movi_2d_0xB4(TyD);
5789
5790   // not   16b,8b
5791   if (1) test_not_16b_16b(TyB);
5792   if (1) test_not_8b_8b(TyB);
5793
5794   // pmul  16b,8b
5795   if (1) test_pmul_16b_16b_16b(TyB);
5796   if (1) test_pmul_8b_8b_8b(TyB);
5797
5798   // pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1q_2d_2d
5799   if (1) test_pmull_8h_8b_8b(TyB);
5800   if (1) test_pmull2_8h_16b_16b(TyB);
5801   //if (0) test_pmull_1q_1d_1d(TyD);
5802   //if (0) test_pmull_1q_2d_2d(TyD);
5803
5804   // rbit    16b,8b
5805   // rev16   16b,8b
5806   // rev32   16b,8b,8h,4h
5807   // rev64   16b,8b,8h,4h,4s,2s
5808   if (1) test_rbit_16b_16b(TyB);
5809   if (1) test_rbit_8b_8b(TyB);
5810   if (1) test_rev16_16b_16b(TyB);
5811   if (1) test_rev16_8b_8b(TyB);
5812   if (1) test_rev32_16b_16b(TyB);
5813   if (1) test_rev32_8b_8b(TyB);
5814   if (1) test_rev32_8h_8h(TyH);
5815   if (1) test_rev32_4h_4h(TyH);
5816   if (1) test_rev64_16b_16b(TyB);
5817   if (1) test_rev64_8b_8b(TyB);
5818   if (1) test_rev64_8h_8h(TyH);
5819   if (1) test_rev64_4h_4h(TyH);
5820   if (1) test_rev64_4s_4s(TyS);
5821   if (1) test_rev64_2s_2s(TyS);
5822
5823   // saba      16b,8b,8h,4h,4s,2s
5824   // uaba      16b,8b,8h,4h,4s,2s
5825   if (1) test_saba_4s_4s_4s(TyS);
5826   if (1) test_saba_2s_2s_2s(TyS);
5827   if (1) test_saba_8h_8h_8h(TyH);
5828   if (1) test_saba_4h_4h_4h(TyH);
5829   if (1) test_saba_16b_16b_16b(TyB);
5830   if (1) test_saba_8b_8b_8b(TyB);
5831   if (1) test_uaba_4s_4s_4s(TyS);
5832   if (1) test_uaba_2s_2s_2s(TyS);
5833   if (1) test_uaba_8h_8h_8h(TyH);
5834   if (1) test_uaba_4h_4h_4h(TyH);
5835   if (1) test_uaba_16b_16b_16b(TyB);
5836   if (1) test_uaba_8b_8b_8b(TyB);
5837
5838   // sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5839   // uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5840   if (1) test_sabal_2d_2s_2s(TyS);
5841   if (1) test_sabal2_2d_4s_4s(TyS);
5842   if (1) test_sabal_4s_4h_4h(TyH);
5843   if (1) test_sabal2_4s_8h_8h(TyH);
5844   if (1) test_sabal_8h_8b_8b(TyB);
5845   if (1) test_sabal2_8h_16b_16b(TyB);
5846   if (1) test_uabal_2d_2s_2s(TyS);
5847   if (1) test_uabal2_2d_4s_4s(TyS);
5848   if (1) test_uabal_4s_4h_4h(TyH);
5849   if (1) test_uabal2_4s_8h_8h(TyH);
5850   if (1) test_uabal_8h_8b_8b(TyB);
5851   if (1) test_uabal2_8h_16b_16b(TyB);
5852
5853   // sabd      16b,8b,8h,4h,4s,2s
5854   // uabd      16b,8b,8h,4h,4s,2s
5855   if (1) test_sabd_4s_4s_4s(TyS);
5856   if (1) test_sabd_2s_2s_2s(TyS);
5857   if (1) test_sabd_8h_8h_8h(TyH);
5858   if (1) test_sabd_4h_4h_4h(TyH);
5859   if (1) test_sabd_16b_16b_16b(TyB);
5860   if (1) test_sabd_8b_8b_8b(TyB);
5861   if (1) test_uabd_4s_4s_4s(TyS);
5862   if (1) test_uabd_2s_2s_2s(TyS);
5863   if (1) test_uabd_8h_8h_8h(TyH);
5864   if (1) test_uabd_4h_4h_4h(TyH);
5865   if (1) test_uabd_16b_16b_16b(TyB);
5866   if (1) test_uabd_8b_8b_8b(TyB);
5867
5868   // sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5869   // uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5870   if (1) test_sabdl_2d_2s_2s(TyS);
5871   if (1) test_sabdl2_2d_4s_4s(TyS);
5872   if (1) test_sabdl_4s_4h_4h(TyH);
5873   if (1) test_sabdl2_4s_8h_8h(TyH);
5874   if (1) test_sabdl_8h_8b_8b(TyB);
5875   if (1) test_sabdl2_8h_16b_16b(TyB);
5876   if (1) test_uabdl_2d_2s_2s(TyS);
5877   if (1) test_uabdl2_2d_4s_4s(TyS);
5878   if (1) test_uabdl_4s_4h_4h(TyH);
5879   if (1) test_uabdl2_4s_8h_8h(TyH);
5880   if (1) test_uabdl_8h_8b_8b(TyB);
5881   if (1) test_uabdl2_8h_16b_16b(TyB);
5882
5883   // sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5884   // uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5885   if (1) test_sadalp_1d_2s(TyS);
5886   if (1) test_sadalp_2d_4s(TyS);
5887   if (1) test_sadalp_2s_4h(TyH);
5888   if (1) test_sadalp_4s_8h(TyH);
5889   if (1) test_sadalp_4h_8b(TyB);
5890   if (1) test_sadalp_8h_16b(TyB);
5891   if (1) test_uadalp_1d_2s(TyS);
5892   if (1) test_uadalp_2d_4s(TyS);
5893   if (1) test_uadalp_2s_4h(TyH);
5894   if (1) test_uadalp_4s_8h(TyH);
5895   if (1) test_uadalp_4h_8b(TyB);
5896   if (1) test_uadalp_8h_16b(TyB);
5897
5898   // saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5899   // uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5900   // ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5901   // usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
5902   if (1) test_saddl_2d_2s_2s(TyS);
5903   if (1) test_saddl2_2d_4s_4s(TyS);
5904   if (1) test_saddl_4s_4h_4h(TyH);
5905   if (1) test_saddl2_4s_8h_8h(TyH);
5906   if (1) test_saddl_8h_8b_8b(TyB);
5907   if (1) test_saddl2_8h_16b_16b(TyB);
5908   if (1) test_uaddl_2d_2s_2s(TyS);
5909   if (1) test_uaddl2_2d_4s_4s(TyS);
5910   if (1) test_uaddl_4s_4h_4h(TyH);
5911   if (1) test_uaddl2_4s_8h_8h(TyH);
5912   if (1) test_uaddl_8h_8b_8b(TyB);
5913   if (1) test_uaddl2_8h_16b_16b(TyB);
5914   if (1) test_ssubl_2d_2s_2s(TyS);
5915   if (1) test_ssubl2_2d_4s_4s(TyS);
5916   if (1) test_ssubl_4s_4h_4h(TyH);
5917   if (1) test_ssubl2_4s_8h_8h(TyH);
5918   if (1) test_ssubl_8h_8b_8b(TyB);
5919   if (1) test_ssubl2_8h_16b_16b(TyB);
5920   if (1) test_usubl_2d_2s_2s(TyS);
5921   if (1) test_usubl2_2d_4s_4s(TyS);
5922   if (1) test_usubl_4s_4h_4h(TyH);
5923   if (1) test_usubl2_4s_8h_8h(TyH);
5924   if (1) test_usubl_8h_8b_8b(TyB);
5925   if (1) test_usubl2_8h_16b_16b(TyB);
5926
5927   // saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5928   // uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
5929   if (1) test_saddlp_1d_2s(TyS);
5930   if (1) test_saddlp_2d_4s(TyS);
5931   if (1) test_saddlp_2s_4h(TyH);
5932   if (1) test_saddlp_4s_8h(TyH);
5933   if (1) test_saddlp_4h_8b(TyB);
5934   if (1) test_saddlp_8h_16b(TyB);
5935   if (1) test_uaddlp_1d_2s(TyS);
5936   if (1) test_uaddlp_2d_4s(TyS);
5937   if (1) test_uaddlp_2s_4h(TyH);
5938   if (1) test_uaddlp_4s_8h(TyH);
5939   if (1) test_uaddlp_4h_8b(TyB);
5940   if (1) test_uaddlp_8h_16b(TyB);
5941
5942   // saddlv    h_16b/8b, s_8h/4h, d_4s
5943   // uaddlv    h_16b/8b, s_8h/4h, d_4s
5944   if (1) test_saddlv_h_16b(TyB);
5945   if (1) test_saddlv_h_8b(TyB);
5946   if (1) test_saddlv_s_8h(TyH);
5947   if (1) test_saddlv_s_4h(TyH);
5948   if (1) test_saddlv_d_4s(TyH);
5949   if (1) test_uaddlv_h_16b(TyB);
5950   if (1) test_uaddlv_h_8b(TyB);
5951   if (1) test_uaddlv_s_8h(TyH);
5952   if (1) test_uaddlv_s_4h(TyH);
5953   if (1) test_uaddlv_d_4s(TyH);
5954
5955   // saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
5956   // uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
5957   // ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
5958   // usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_4s/2s
5959   if (1) test_saddw2_8h_8h_16b(TyB);
5960   if (1) test_saddw_8h_8h_8b(TyB);
5961   if (1) test_saddw2_4s_4s_8h(TyH);
5962   if (1) test_saddw_4s_4s_4h(TyH);
5963   if (1) test_saddw2_2d_2d_4s(TyS);
5964   if (1) test_saddw_2d_2d_2s(TyS);
5965   if (1) test_uaddw2_8h_8h_16b(TyB);
5966   if (1) test_uaddw_8h_8h_8b(TyB);
5967   if (1) test_uaddw2_4s_4s_8h(TyH);
5968   if (1) test_uaddw_4s_4s_4h(TyH);
5969   if (1) test_uaddw2_2d_2d_4s(TyS);
5970   if (1) test_uaddw_2d_2d_2s(TyS);
5971   if (1) test_ssubw2_8h_8h_16b(TyB);
5972   if (1) test_ssubw_8h_8h_8b(TyB);
5973   if (1) test_ssubw2_4s_4s_8h(TyH);
5974   if (1) test_ssubw_4s_4s_4h(TyH);
5975   if (1) test_ssubw2_2d_2d_4s(TyS);
5976   if (1) test_ssubw_2d_2d_2s(TyS);
5977   if (1) test_usubw2_8h_8h_16b(TyB);
5978   if (1) test_usubw_8h_8h_8b(TyB);
5979   if (1) test_usubw2_4s_4s_8h(TyH);
5980   if (1) test_usubw_4s_4s_4h(TyH);
5981   if (1) test_usubw2_2d_2d_4s(TyS);
5982   if (1) test_usubw_2d_2d_2s(TyS);
5983
5984   // shadd        16b,8b,8h,4h,4s,2s
5985   // uhadd        16b,8b,8h,4h,4s,2s
5986   // shsub        16b,8b,8h,4h,4s,2s
5987   // uhsub        16b,8b,8h,4h,4s,2s
5988   if (1) test_shadd_4s_4s_4s(TyS);
5989   if (1) test_shadd_2s_2s_2s(TyS);
5990   if (1) test_shadd_8h_8h_8h(TyH);
5991   if (1) test_shadd_4h_4h_4h(TyH);
5992   if (1) test_shadd_16b_16b_16b(TyB);
5993   if (1) test_shadd_8b_8b_8b(TyB);
5994   if (1) test_uhadd_4s_4s_4s(TyS);
5995   if (1) test_uhadd_2s_2s_2s(TyS);
5996   if (1) test_uhadd_8h_8h_8h(TyH);
5997   if (1) test_uhadd_4h_4h_4h(TyH);
5998   if (1) test_uhadd_16b_16b_16b(TyB);
5999   if (1) test_uhadd_8b_8b_8b(TyB);
6000   if (1) test_shsub_4s_4s_4s(TyS);
6001   if (1) test_shsub_2s_2s_2s(TyS);
6002   if (1) test_shsub_8h_8h_8h(TyH);
6003   if (1) test_shsub_4h_4h_4h(TyH);
6004   if (1) test_shsub_16b_16b_16b(TyB);
6005   if (1) test_shsub_8b_8b_8b(TyB);
6006   if (1) test_uhsub_4s_4s_4s(TyS);
6007   if (1) test_uhsub_2s_2s_2s(TyS);
6008   if (1) test_uhsub_8h_8h_8h(TyH);
6009   if (1) test_uhsub_4h_4h_4h(TyH);
6010   if (1) test_uhsub_16b_16b_16b(TyB);
6011   if (1) test_uhsub_8b_8b_8b(TyB);
6012
6013   // shll{2}      8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
6014   if (1) test_shll_8h_8b_8(TyB);
6015   if (1) test_shll2_8h_16b_8(TyB);
6016   if (1) test_shll_4s_4h_16(TyH);
6017   if (1) test_shll2_4s_8h_16(TyH);
6018   if (1) test_shll_2d_2s_32(TyS);
6019   if (1) test_shll2_2d_4s_32(TyS);
6020
6021   // shrn{2}      2s/4s_2d, 8h/4h_4s, 8b/16b_8h,   #imm in 1 .. elem_bits
6022   // rshrn{2}     2s/4s_2d, 8h/4h_4s, 8b/16b_8h,   #imm in 1 .. elem_bits
6023   if (1) test_shrn_2s_2d_1(TyD);
6024   if (1) test_shrn_2s_2d_32(TyD);
6025   if (1) test_shrn2_4s_2d_1(TyD);
6026   if (1) test_shrn2_4s_2d_32(TyD);
6027   if (1) test_shrn_4h_4s_1(TyS);
6028   if (1) test_shrn_4h_4s_16(TyS);
6029   if (1) test_shrn2_8h_4s_1(TyS);
6030   if (1) test_shrn2_8h_4s_16(TyS);
6031   if (1) test_shrn_8b_8h_1(TyH);
6032   if (1) test_shrn_8b_8h_8(TyH);
6033   if (1) test_shrn2_16b_8h_1(TyH);
6034   if (1) test_shrn2_16b_8h_8(TyH);
6035   if (1) test_rshrn_2s_2d_1(TyD);
6036   if (1) test_rshrn_2s_2d_32(TyD);
6037   if (1) test_rshrn2_4s_2d_1(TyD);
6038   if (1) test_rshrn2_4s_2d_32(TyD);
6039   if (1) test_rshrn_4h_4s_1(TyS);
6040   if (1) test_rshrn_4h_4s_16(TyS);
6041   if (1) test_rshrn2_8h_4s_1(TyS);
6042   if (1) test_rshrn2_8h_4s_16(TyS);
6043   if (1) test_rshrn_8b_8h_1(TyH);
6044   if (1) test_rshrn_8b_8h_8(TyH);
6045   if (1) test_rshrn2_16b_8h_1(TyH);
6046   if (1) test_rshrn2_16b_8h_8(TyH);
6047
6048   // sli          d_#imm
6049   // sri          d_#imm
6050   if (1) test_sli_d_d_0(TyD);
6051   if (1) test_sli_d_d_32(TyD);
6052   if (1) test_sli_d_d_63(TyD);
6053   if (1) test_sri_d_d_1(TyD);
6054   if (1) test_sri_d_d_33(TyD);
6055   if (1) test_sri_d_d_64(TyD);
6056
6057   // sli          2d,4s,2s,8h,4h,16b,8b  _#imm
6058   // sri          2d,4s,2s,8h,4h,16b,8b  _#imm
6059   if (1) test_sli_2d_2d_0(TyD);
6060   if (1) test_sli_2d_2d_32(TyD);
6061   if (1) test_sli_2d_2d_63(TyD);
6062   if (1) test_sli_4s_4s_0(TyS);
6063   if (1) test_sli_4s_4s_16(TyS);
6064   if (1) test_sli_4s_4s_31(TyS);
6065   if (1) test_sli_2s_2s_0(TyS);
6066   if (1) test_sli_2s_2s_16(TyS);
6067   if (1) test_sli_2s_2s_31(TyS);
6068   if (1) test_sli_8h_8h_0(TyH);
6069   if (1) test_sli_8h_8h_8(TyH);
6070   if (1) test_sli_8h_8h_15(TyH);
6071   if (1) test_sli_4h_4h_0(TyH);
6072   if (1) test_sli_4h_4h_8(TyH);
6073   if (1) test_sli_4h_4h_15(TyH);
6074   if (1) test_sli_16b_16b_0(TyB);
6075   if (1) test_sli_16b_16b_3(TyB);
6076   if (1) test_sli_16b_16b_7(TyB);
6077   if (1) test_sli_8b_8b_0(TyB);
6078   if (1) test_sli_8b_8b_3(TyB);
6079   if (1) test_sli_8b_8b_7(TyB);
6080   if (1) test_sri_2d_2d_1(TyD);
6081   if (1) test_sri_2d_2d_33(TyD);
6082   if (1) test_sri_2d_2d_64(TyD);
6083   if (1) test_sri_4s_4s_1(TyS);
6084   if (1) test_sri_4s_4s_17(TyS);
6085   if (1) test_sri_4s_4s_32(TyS);
6086   if (1) test_sri_2s_2s_1(TyS);
6087   if (1) test_sri_2s_2s_17(TyS);
6088   if (1) test_sri_2s_2s_32(TyS);
6089   if (1) test_sri_8h_8h_1(TyH);
6090   if (1) test_sri_8h_8h_8(TyH);
6091   if (1) test_sri_8h_8h_16(TyH);
6092   if (1) test_sri_4h_4h_1(TyH);
6093   if (1) test_sri_4h_4h_8(TyH);
6094   if (1) test_sri_4h_4h_16(TyH);
6095   if (1) test_sri_16b_16b_1(TyB);
6096   if (1) test_sri_16b_16b_4(TyB);
6097   if (1) test_sri_16b_16b_8(TyB);
6098   if (1) test_sri_8b_8b_1(TyB);
6099   if (1) test_sri_8b_8b_4(TyB);
6100   if (1) test_sri_8b_8b_8(TyB);
6101
6102   // smax         4s,2s,8h,4h,16b,8b
6103   // umax         4s,2s,8h,4h,16b,8b
6104   // smin         4s,2s,8h,4h,16b,8b
6105   // umin         4s,2s,8h,4h,16b,8b
6106   if (1) test_smax_4s_4s_4s(TyS);
6107   if (1) test_smax_2s_2s_2s(TyS);
6108   if (1) test_smax_8h_8h_8h(TyH);
6109   if (1) test_smax_4h_4h_4h(TyH);
6110   if (1) test_smax_16b_16b_16b(TyB);
6111   if (1) test_smax_8b_8b_8b(TyB);
6112   if (1) test_umax_4s_4s_4s(TyS);
6113   if (1) test_umax_2s_2s_2s(TyS);
6114   if (1) test_umax_8h_8h_8h(TyH);
6115   if (1) test_umax_4h_4h_4h(TyH);
6116   if (1) test_umax_16b_16b_16b(TyB);
6117   if (1) test_umax_8b_8b_8b(TyB);
6118   if (1) test_smin_4s_4s_4s(TyS);
6119   if (1) test_smin_2s_2s_2s(TyS);
6120   if (1) test_smin_8h_8h_8h(TyH);
6121   if (1) test_smin_4h_4h_4h(TyH);
6122   if (1) test_smin_16b_16b_16b(TyB);
6123   if (1) test_smin_8b_8b_8b(TyB);
6124   if (1) test_umin_4s_4s_4s(TyS);
6125   if (1) test_umin_2s_2s_2s(TyS);
6126   if (1) test_umin_8h_8h_8h(TyH);
6127   if (1) test_umin_4h_4h_4h(TyH);
6128   if (1) test_umin_16b_16b_16b(TyB);
6129   if (1) test_umin_8b_8b_8b(TyB);
6130
6131   // smaxp        4s,2s,8h,4h,16b,8b
6132   // umaxp        4s,2s,8h,4h,16b,8b
6133   // sminp        4s,2s,8h,4h,16b,8b
6134   // uminp        4s,2s,8h,4h,16b,8b
6135   if (1) test_smaxp_4s_4s_4s(TyS);
6136   if (1) test_smaxp_2s_2s_2s(TyS);
6137   if (1) test_smaxp_8h_8h_8h(TyH);
6138   if (1) test_smaxp_4h_4h_4h(TyH);
6139   if (1) test_smaxp_16b_16b_16b(TyB);
6140   if (1) test_smaxp_8b_8b_8b(TyB);
6141   if (1) test_umaxp_4s_4s_4s(TyS);
6142   if (1) test_umaxp_2s_2s_2s(TyS);
6143   if (1) test_umaxp_8h_8h_8h(TyH);
6144   if (1) test_umaxp_4h_4h_4h(TyH);
6145   if (1) test_umaxp_16b_16b_16b(TyB);
6146   if (1) test_umaxp_8b_8b_8b(TyB);
6147   if (1) test_sminp_4s_4s_4s(TyS);
6148   if (1) test_sminp_2s_2s_2s(TyS);
6149   if (1) test_sminp_8h_8h_8h(TyH);
6150   if (1) test_sminp_4h_4h_4h(TyH);
6151   if (1) test_sminp_16b_16b_16b(TyB);
6152   if (1) test_sminp_8b_8b_8b(TyB);
6153   if (1) test_uminp_4s_4s_4s(TyS);
6154   if (1) test_uminp_2s_2s_2s(TyS);
6155   if (1) test_uminp_8h_8h_8h(TyH);
6156   if (1) test_uminp_4h_4h_4h(TyH);
6157   if (1) test_uminp_16b_16b_16b(TyB);
6158   if (1) test_uminp_8b_8b_8b(TyB);
6159
6160   // smaxv        s_4s,h_8h,h_4h,b_16b,b_8b
6161   // umaxv        s_4s,h_8h,h_4h,b_16b,b_8b
6162   // sminv        s_4s,h_8h,h_4h,b_16b,b_8b
6163   // uminv        s_4s,h_8h,h_4h,b_16b,b_8b
6164   if (1) test_SMAXV();
6165   if (1) test_UMAXV();
6166   if (1) test_SMINV();
6167   if (1) test_UMINV();
6168
6169   // smlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6170   // umlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6171   // smlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6172   // umlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6173   // smull{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6174   // umull{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
6175   if (1) test_smlal_2d_2s_s0(TyS);
6176   if (1) test_smlal_2d_2s_s3(TyS);
6177   if (1) test_smlal2_2d_4s_s1(TyS);
6178   if (1) test_smlal2_2d_4s_s2(TyS);
6179   if (1) test_smlal_4s_4h_h0(TyH);
6180   if (1) test_smlal_4s_4h_h7(TyH);
6181   if (1) test_smlal2_4s_8h_h1(TyH);
6182   if (1) test_smlal2_4s_8h_h4(TyH);
6183   if (1) test_umlal_2d_2s_s0(TyS);
6184   if (1) test_umlal_2d_2s_s3(TyS);
6185   if (1) test_umlal2_2d_4s_s1(TyS);
6186   if (1) test_umlal2_2d_4s_s2(TyS);
6187   if (1) test_umlal_4s_4h_h0(TyH);
6188   if (1) test_umlal_4s_4h_h7(TyH);
6189   if (1) test_umlal2_4s_8h_h1(TyH);
6190   if (1) test_umlal2_4s_8h_h4(TyH);
6191   if (1) test_smlsl_2d_2s_s0(TyS);
6192   if (1) test_smlsl_2d_2s_s3(TyS);
6193   if (1) test_smlsl2_2d_4s_s1(TyS);
6194   if (1) test_smlsl2_2d_4s_s2(TyS);
6195   if (1) test_smlsl_4s_4h_h0(TyH);
6196   if (1) test_smlsl_4s_4h_h7(TyH);
6197   if (1) test_smlsl2_4s_8h_h1(TyH);
6198   if (1) test_smlsl2_4s_8h_h4(TyH);
6199   if (1) test_umlsl_2d_2s_s0(TyS);
6200   if (1) test_umlsl_2d_2s_s3(TyS);
6201   if (1) test_umlsl2_2d_4s_s1(TyS);
6202   if (1) test_umlsl2_2d_4s_s2(TyS);
6203   if (1) test_umlsl_4s_4h_h0(TyH);
6204   if (1) test_umlsl_4s_4h_h7(TyH);
6205   if (1) test_umlsl2_4s_8h_h1(TyH);
6206   if (1) test_umlsl2_4s_8h_h4(TyH);
6207   if (1) test_smull_2d_2s_s0(TyS);
6208   if (1) test_smull_2d_2s_s3(TyS);
6209   if (1) test_smull2_2d_4s_s1(TyS);
6210   if (1) test_smull2_2d_4s_s2(TyS);
6211   if (1) test_smull_4s_4h_h0(TyH);
6212   if (1) test_smull_4s_4h_h7(TyH);
6213   if (1) test_smull2_4s_8h_h1(TyH);
6214   if (1) test_smull2_4s_8h_h4(TyH);
6215   if (1) test_umull_2d_2s_s0(TyS);
6216   if (1) test_umull_2d_2s_s3(TyS);
6217   if (1) test_umull2_2d_4s_s1(TyS);
6218   if (1) test_umull2_2d_4s_s2(TyS);
6219   if (1) test_umull_4s_4h_h0(TyH);
6220   if (1) test_umull_4s_4h_h7(TyH);
6221   if (1) test_umull2_4s_8h_h1(TyH);
6222   if (1) test_umull2_4s_8h_h4(TyH);
6223
6224   // smlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6225   // umlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6226   // smlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6227   // umlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6228   // smull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6229   // umull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
6230   if (1) test_smlal_2d_2s_2s(TyS);
6231   if (1) test_smlal2_2d_4s_4s(TyS);
6232   if (1) test_smlal_4s_4h_4h(TyH);
6233   if (1) test_smlal2_4s_8h_8h(TyH);
6234   if (1) test_smlal_8h_8b_8b(TyB);
6235   if (1) test_smlal2_8h_16b_16b(TyB);
6236   if (1) test_umlal_2d_2s_2s(TyS);
6237   if (1) test_umlal2_2d_4s_4s(TyS);
6238   if (1) test_umlal_4s_4h_4h(TyH);
6239   if (1) test_umlal2_4s_8h_8h(TyH);
6240   if (1) test_umlal_8h_8b_8b(TyB);
6241   if (1) test_umlal2_8h_16b_16b(TyB);
6242   if (1) test_smlsl_2d_2s_2s(TyS);
6243   if (1) test_smlsl2_2d_4s_4s(TyS);
6244   if (1) test_smlsl_4s_4h_4h(TyH);
6245   if (1) test_smlsl2_4s_8h_8h(TyH);
6246   if (1) test_smlsl_8h_8b_8b(TyB);
6247   if (1) test_smlsl2_8h_16b_16b(TyB);
6248   if (1) test_umlsl_2d_2s_2s(TyS);
6249   if (1) test_umlsl2_2d_4s_4s(TyS);
6250   if (1) test_umlsl_4s_4h_4h(TyH);
6251   if (1) test_umlsl2_4s_8h_8h(TyH);
6252   if (1) test_umlsl_8h_8b_8b(TyB);
6253   if (1) test_umlsl2_8h_16b_16b(TyB);
6254   if (1) test_smull_2d_2s_2s(TyS);
6255   if (1) test_smull2_2d_4s_4s(TyS);
6256   if (1) test_smull_4s_4h_4h(TyH);
6257   if (1) test_smull2_4s_8h_8h(TyH);
6258   if (1) test_smull_8h_8b_8b(TyB);
6259   if (1) test_smull2_8h_16b_16b(TyB);
6260   if (1) test_umull_2d_2s_2s(TyS);
6261   if (1) test_umull2_2d_4s_4s(TyS);
6262   if (1) test_umull_4s_4h_4h(TyH);
6263   if (1) test_umull2_4s_8h_8h(TyH);
6264   if (1) test_umull_8h_8b_8b(TyB);
6265   if (1) test_umull2_8h_16b_16b(TyB);
6266
6267   // smov         w_b[], w_h[], x_b[], x_h[], x_s[]
6268   // umov         w_b[], w_h[],               w_s[], x_d[]
6269   if (1) test_umov_x_d0(TyD);
6270   if (1) test_umov_x_d1(TyD);
6271   if (1) test_umov_w_s0(TyS);
6272   if (1) test_umov_w_s3(TyS);
6273   if (1) test_umov_w_h0(TyH);
6274   if (1) test_umov_w_h7(TyH);
6275   if (1) test_umov_w_b0(TyB);
6276   if (1) test_umov_w_b15(TyB);
6277   if (1) test_smov_x_s0(TyS);
6278   if (1) test_smov_x_s3(TyS);
6279   if (1) test_smov_x_h0(TyH);
6280   if (1) test_smov_x_h7(TyH);
6281   if (1) test_smov_w_h0(TyH);
6282   if (1) test_smov_w_h7(TyH);
6283   if (1) test_smov_x_b0(TyB);
6284   if (1) test_smov_x_b15(TyB);
6285   if (1) test_smov_w_b0(TyB);
6286   if (1) test_smov_w_b15(TyB);
6287
6288   // sqabs        d,s,h,b
6289   // sqneg        d,s,h,b
6290   if (1) test_sqabs_d_d(TyD);
6291   if (1) test_sqabs_s_s(TyS);
6292   if (1) test_sqabs_h_h(TyH);
6293   if (1) test_sqabs_b_b(TyB);
6294   if (1) test_sqneg_d_d(TyD);
6295   if (1) test_sqneg_s_s(TyS);
6296   if (1) test_sqneg_h_h(TyH);
6297   if (1) test_sqneg_b_b(TyB);
6298
6299   // sqabs        2d,4s,2s,8h,4h,16b,8b
6300   // sqneg        2d,4s,2s,8h,4h,16b,8b
6301   if (1) test_sqabs_2d_2d(TyD);
6302   if (1) test_sqabs_4s_4s(TyS);
6303   if (1) test_sqabs_2s_2s(TyS);
6304   if (1) test_sqabs_8h_8h(TyH);
6305   if (1) test_sqabs_4h_4h(TyH);
6306   if (1) test_sqabs_16b_16b(TyB);
6307   if (1) test_sqabs_8b_8b(TyB);
6308   if (1) test_sqneg_2d_2d(TyD);
6309   if (1) test_sqneg_4s_4s(TyS);
6310   if (1) test_sqneg_2s_2s(TyS);
6311   if (1) test_sqneg_8h_8h(TyH);
6312   if (1) test_sqneg_4h_4h(TyH);
6313   if (1) test_sqneg_16b_16b(TyB);
6314   if (1) test_sqneg_8b_8b(TyB);
6315
6316   // sqadd        d,s,h,b
6317   // uqadd        d,s,h,b
6318   // sqsub        d,s,h,b
6319   // uqsub        d,s,h,b
6320   if (1) test_sqadd_d_d_d(TyD);
6321   if (1) test_sqadd_s_s_s(TyS);
6322   if (1) test_sqadd_h_h_h(TyH);
6323   if (1) test_sqadd_b_b_b(TyB);
6324   if (1) test_uqadd_d_d_d(TyD);
6325   if (1) test_uqadd_s_s_s(TyS);
6326   if (1) test_uqadd_h_h_h(TyH);
6327   if (1) test_uqadd_b_b_b(TyB);
6328   if (1) test_sqsub_d_d_d(TyD);
6329   if (1) test_sqsub_s_s_s(TyS);
6330   if (1) test_sqsub_h_h_h(TyH);
6331   if (1) test_sqsub_b_b_b(TyB);
6332   if (1) test_uqsub_d_d_d(TyD);
6333   if (1) test_uqsub_s_s_s(TyS);
6334   if (1) test_uqsub_h_h_h(TyH);
6335   if (1) test_uqsub_b_b_b(TyB);
6336
6337   // sqadd        2d,4s,2s,8h,4h,16b,8b
6338   // uqadd        2d,4s,2s,8h,4h,16b,8b
6339   // sqsub        2d,4s,2s,8h,4h,16b,8b
6340   // uqsub        2d,4s,2s,8h,4h,16b,8b
6341   if (1) test_sqadd_2d_2d_2d(TyD);
6342   if (1) test_sqadd_4s_4s_4s(TyS);
6343   if (1) test_sqadd_2s_2s_2s(TyS);
6344   if (1) test_sqadd_8h_8h_8h(TyH);
6345   if (1) test_sqadd_4h_4h_4h(TyH);
6346   if (1) test_sqadd_16b_16b_16b(TyB);
6347   if (1) test_sqadd_8b_8b_8b(TyB);
6348   if (1) test_uqadd_2d_2d_2d(TyD);
6349   if (1) test_uqadd_4s_4s_4s(TyS);
6350   if (1) test_uqadd_2s_2s_2s(TyS);
6351   if (1) test_uqadd_8h_8h_8h(TyH);
6352   if (1) test_uqadd_4h_4h_4h(TyH);
6353   if (1) test_uqadd_16b_16b_16b(TyB);
6354   if (1) test_uqadd_8b_8b_8b(TyB);
6355   if (1) test_sqsub_2d_2d_2d(TyD);
6356   if (1) test_sqsub_4s_4s_4s(TyS);
6357   if (1) test_sqsub_2s_2s_2s(TyS);
6358   if (1) test_sqsub_8h_8h_8h(TyH);
6359   if (1) test_sqsub_4h_4h_4h(TyH);
6360   if (1) test_sqsub_16b_16b_16b(TyB);
6361   if (1) test_sqsub_8b_8b_8b(TyB);
6362   if (1) test_uqsub_2d_2d_2d(TyD);
6363   if (1) test_uqsub_4s_4s_4s(TyS);
6364   if (1) test_uqsub_2s_2s_2s(TyS);
6365   if (1) test_uqsub_8h_8h_8h(TyH);
6366   if (1) test_uqsub_4h_4h_4h(TyH);
6367   if (1) test_uqsub_16b_16b_16b(TyB);
6368   if (1) test_uqsub_8b_8b_8b(TyB);
6369
6370   // sqdmlal      d_s_s[], s_h_h[]
6371   // sqdmlsl      d_s_s[], s_h_h[]
6372   // sqdmull      d_s_s[], s_h_h[]
6373   if (1) test_sqdmlal_d_s_s0(TyS);
6374   if (1) test_sqdmlal_d_s_s3(TyS);
6375   if (1) test_sqdmlal_s_h_h1(TyH);
6376   if (1) test_sqdmlal_s_h_h5(TyH);
6377   if (1) test_sqdmlsl_d_s_s0(TyS);
6378   if (1) test_sqdmlsl_d_s_s3(TyS);
6379   if (1) test_sqdmlsl_s_h_h1(TyH);
6380   if (1) test_sqdmlsl_s_h_h5(TyH);
6381   if (1) test_sqdmull_d_s_s0(TyS);
6382   if (1) test_sqdmull_d_s_s3(TyS);
6383   if (1) test_sqdmull_s_h_h1(TyH);
6384   if (1) test_sqdmull_s_h_h5(TyH);
6385
6386   // sqdmlal{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
6387   // sqdmlsl{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
6388   // sqdmull{2}   2d_2s/4s_s[], 4s_4h/2h_h[]
6389   if (1) test_sqdmlal_2d_2s_s0(TyS);
6390   if (1) test_sqdmlal_2d_2s_s3(TyS);
6391   if (1) test_sqdmlal2_2d_4s_s1(TyS);
6392   if (1) test_sqdmlal2_2d_4s_s2(TyS);
6393   if (1) test_sqdmlal_4s_4h_h0(TyH);
6394   if (1) test_sqdmlal_4s_4h_h7(TyH);
6395   if (1) test_sqdmlal2_4s_8h_h1(TyH);
6396   if (1) test_sqdmlal2_4s_8h_h4(TyH);
6397   if (1) test_sqdmlsl_2d_2s_s0(TyS);
6398   if (1) test_sqdmlsl_2d_2s_s3(TyS);
6399   if (1) test_sqdmlsl2_2d_4s_s1(TyS);
6400   if (1) test_sqdmlsl2_2d_4s_s2(TyS);
6401   if (1) test_sqdmlsl_4s_4h_h0(TyH);
6402   if (1) test_sqdmlsl_4s_4h_h7(TyH);
6403   if (1) test_sqdmlsl2_4s_8h_h1(TyH);
6404   if (1) test_sqdmlsl2_4s_8h_h4(TyH);
6405   if (1) test_sqdmull_2d_2s_s0(TyS);
6406   if (1) test_sqdmull_2d_2s_s3(TyS);
6407   if (1) test_sqdmull2_2d_4s_s1(TyS);
6408   if (1) test_sqdmull2_2d_4s_s2(TyS);
6409   if (1) test_sqdmull_4s_4h_h0(TyH);
6410   if (1) test_sqdmull_4s_4h_h7(TyH);
6411   if (1) test_sqdmull2_4s_8h_h1(TyH);
6412   if (1) test_sqdmull2_4s_8h_h4(TyH);
6413
6414   // sqdmlal      d_s_s, s_h_h
6415   // sqdmlsl      d_s_s, s_h_h
6416   // sqdmull      d_s_s, s_h_h
6417   if (1) test_sqdmlal_d_s_s(TyS);
6418   if (1) test_sqdmlal_s_h_h(TyH);
6419   if (1) test_sqdmlsl_d_s_s(TyS);
6420   if (1) test_sqdmlsl_s_h_h(TyH);
6421   if (1) test_sqdmull_d_s_s(TyS);
6422   if (1) test_sqdmull_s_h_h(TyH);
6423
6424   // sqdmlal{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6425   // sqdmlsl{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6426   // sqdmull{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
6427   if (1) test_sqdmlal_2d_2s_2s(TyS);
6428   if (1) test_sqdmlal2_2d_4s_4s(TyS);
6429   if (1) test_sqdmlal_4s_4h_4h(TyH);
6430   if (1) test_sqdmlal2_4s_8h_8h(TyH);
6431   if (1) test_sqdmlsl_2d_2s_2s(TyS);
6432   if (1) test_sqdmlsl2_2d_4s_4s(TyS);
6433   if (1) test_sqdmlsl_4s_4h_4h(TyH);
6434   if (1) test_sqdmlsl2_4s_8h_8h(TyH);
6435   if (1) test_sqdmull_2d_2s_2s(TyS);
6436   if (1) test_sqdmull2_2d_4s_4s(TyS);
6437   if (1) test_sqdmull_4s_4h_4h(TyH);
6438   if (1) test_sqdmull2_4s_8h_8h(TyH);
6439
6440   // sqdmulh      s_s_s[], h_h_h[]
6441   // sqrdmulh     s_s_s[], h_h_h[]
6442   if (1) test_sqdmulh_s_s_s1(TyS);
6443   if (1) test_sqdmulh_s_s_s3(TyS);
6444   if (1) test_sqdmulh_h_h_h2(TyH);
6445   if (1) test_sqdmulh_h_h_h7(TyH);
6446   if (1) test_sqrdmulh_s_s_s1(TyS);
6447   if (1) test_sqrdmulh_s_s_s3(TyS);
6448   if (1) test_sqrdmulh_h_h_h2(TyH);
6449   if (1) test_sqrdmulh_h_h_h7(TyH);
6450
6451   // sqdmulh      4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
6452   // sqrdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
6453   if (1) test_sqdmulh_4s_4s_s1(TyS);
6454   if (1) test_sqdmulh_4s_4s_s3(TyS);
6455   if (1) test_sqdmulh_2s_2s_s1(TyS);
6456   if (1) test_sqdmulh_2s_2s_s3(TyS);
6457   if (1) test_sqdmulh_8h_8h_h2(TyH);
6458   if (1) test_sqdmulh_8h_8h_h7(TyH);
6459   if (1) test_sqdmulh_4h_4h_h2(TyH);
6460   if (1) test_sqdmulh_4h_4h_h7(TyH);
6461   if (1) test_sqrdmulh_4s_4s_s1(TyS);
6462   if (1) test_sqrdmulh_4s_4s_s3(TyS);
6463   if (1) test_sqrdmulh_2s_2s_s1(TyS);
6464   if (1) test_sqrdmulh_2s_2s_s3(TyS);
6465   if (1) test_sqrdmulh_8h_8h_h2(TyH);
6466   if (1) test_sqrdmulh_8h_8h_h7(TyH);
6467   if (1) test_sqrdmulh_4h_4h_h2(TyH);
6468   if (1) test_sqrdmulh_4h_4h_h7(TyH);
6469
6470   // sqdmulh      h,s
6471   // sqrdmulh     h,s
6472   if (1) test_sqdmulh_s_s_s(TyS);
6473   if (1) test_sqdmulh_h_h_h(TyH);
6474   if (1) test_sqrdmulh_s_s_s(TyS);
6475   if (1) test_sqrdmulh_h_h_h(TyH);
6476
6477   // sqdmulh      4s,2s,8h,4h
6478   // sqrdmulh     4s,2s,8h,4h
6479   if (1) test_sqdmulh_4s_4s_4s(TyS);
6480   if (1) test_sqdmulh_2s_2s_2s(TyS);
6481   if (1) test_sqdmulh_8h_8h_8h(TyH);
6482   if (1) test_sqdmulh_4h_4h_4h(TyH);
6483   if (1) test_sqrdmulh_4s_4s_4s(TyS);
6484   if (1) test_sqrdmulh_2s_2s_2s(TyS);
6485   if (1) test_sqrdmulh_8h_8h_8h(TyH);
6486   if (1) test_sqrdmulh_4h_4h_4h(TyH);
6487
6488   // sqshl (reg)  d,s,h,b
6489   // uqshl (reg)  d,s,h,b
6490   // sqrshl (reg) d,s,h,b
6491   // uqrshl (reg) d,s,h,b
6492   if (1) test_sqshl_d_d_d(TyD);
6493   if (1) test_sqshl_s_s_s(TyS);
6494   if (1) test_sqshl_h_h_h(TyH);
6495   if (1) test_sqshl_b_b_b(TyB);
6496   if (1) test_uqshl_d_d_d(TyD);
6497   if (1) test_uqshl_s_s_s(TyS);
6498   if (1) test_uqshl_h_h_h(TyH);
6499   if (1) test_uqshl_b_b_b(TyB);
6500   if (1) test_sqrshl_d_d_d(TyD);
6501   if (1) test_sqrshl_s_s_s(TyS);
6502   if (1) test_sqrshl_h_h_h(TyH);
6503   if (1) test_sqrshl_b_b_b(TyB);
6504   if (1) test_uqrshl_d_d_d(TyD);
6505   if (1) test_uqrshl_s_s_s(TyS);
6506   if (1) test_uqrshl_h_h_h(TyH);
6507   if (1) test_uqrshl_b_b_b(TyB);
6508
6509   // sqshl (reg)  2d,4s,2s,8h,4h,16b,8b
6510   // uqshl (reg)  2d,4s,2s,8h,4h,16b,8b
6511   // sqrshl (reg) 2d,4s,2s,8h,4h,16b,8b
6512   // uqrshl (reg) 2d,4s,2s,8h,4h,16b,8b
6513   if (1) test_sqshl_2d_2d_2d(TyD);
6514   if (1) test_sqshl_4s_4s_4s(TyS);
6515   if (1) test_sqshl_2s_2s_2s(TyS);
6516   if (1) test_sqshl_8h_8h_8h(TyH);
6517   if (1) test_sqshl_4h_4h_4h(TyH);
6518   if (1) test_sqshl_16b_16b_16b(TyB);
6519   if (1) test_sqshl_8b_8b_8b(TyB);
6520   if (1) test_uqshl_2d_2d_2d(TyD);
6521   if (1) test_uqshl_4s_4s_4s(TyS);
6522   if (1) test_uqshl_2s_2s_2s(TyS);
6523   if (1) test_uqshl_8h_8h_8h(TyH);
6524   if (1) test_uqshl_4h_4h_4h(TyH);
6525   if (1) test_uqshl_16b_16b_16b(TyB);
6526   if (1) test_uqshl_8b_8b_8b(TyB);
6527   if (1) test_sqrshl_2d_2d_2d(TyD);
6528   if (1) test_sqrshl_4s_4s_4s(TyS);
6529   if (1) test_sqrshl_2s_2s_2s(TyS);
6530   if (1) test_sqrshl_8h_8h_8h(TyH);
6531   if (1) test_sqrshl_4h_4h_4h(TyH);
6532   if (1) test_sqrshl_16b_16b_16b(TyB);
6533   if (1) test_sqrshl_8b_8b_8b(TyB);
6534   if (1) test_uqrshl_2d_2d_2d(TyD);
6535   if (1) test_uqrshl_4s_4s_4s(TyS);
6536   if (1) test_uqrshl_2s_2s_2s(TyS);
6537   if (1) test_uqrshl_8h_8h_8h(TyH);
6538   if (1) test_uqrshl_4h_4h_4h(TyH);
6539   if (1) test_uqrshl_16b_16b_16b(TyB);
6540   if (1) test_uqrshl_8b_8b_8b(TyB);
6541
6542   // sqrshrn      s_d, h_s, b_h   #imm
6543   // uqrshrn      s_d, h_s, b_h   #imm
6544   // sqshrn       s_d, h_s, b_h   #imm
6545   // uqshrn       s_d, h_s, b_h   #imm
6546   // sqrshrun     s_d, h_s, b_h   #imm
6547   // sqshrun      s_d, h_s, b_h   #imm
6548   if (1) test_sqrshrn_s_d_1(TyD);
6549   if (1) test_sqrshrn_s_d_17(TyD);
6550   if (1) test_sqrshrn_s_d_32(TyD);
6551   if (1) test_sqrshrn_h_s_1(TyS);
6552   if (1) test_sqrshrn_h_s_9(TyS);
6553   if (1) test_sqrshrn_h_s_16(TyS);
6554   if (1) test_sqrshrn_b_h_1(TyH);
6555   if (1) test_sqrshrn_b_h_4(TyH);
6556   if (1) test_sqrshrn_b_h_8(TyH);
6557   if (1) test_uqrshrn_s_d_1(TyD);
6558   if (1) test_uqrshrn_s_d_17(TyD);
6559   if (1) test_uqrshrn_s_d_32(TyD);
6560   if (1) test_uqrshrn_h_s_1(TyS);
6561   if (1) test_uqrshrn_h_s_9(TyS);
6562   if (1) test_uqrshrn_h_s_16(TyS);
6563   if (1) test_uqrshrn_b_h_1(TyH);
6564   if (1) test_uqrshrn_b_h_4(TyH);
6565   if (1) test_uqrshrn_b_h_8(TyH);
6566   if (1) test_sqshrn_s_d_1(TyD);
6567   if (1) test_sqshrn_s_d_17(TyD);
6568   if (1) test_sqshrn_s_d_32(TyD);
6569   if (1) test_sqshrn_h_s_1(TyS);
6570   if (1) test_sqshrn_h_s_9(TyS);
6571   if (1) test_sqshrn_h_s_16(TyS);
6572   if (1) test_sqshrn_b_h_1(TyH);
6573   if (1) test_sqshrn_b_h_4(TyH);
6574   if (1) test_sqshrn_b_h_8(TyH);
6575   if (1) test_uqshrn_s_d_1(TyD);
6576   if (1) test_uqshrn_s_d_17(TyD);
6577   if (1) test_uqshrn_s_d_32(TyD);
6578   if (1) test_uqshrn_h_s_1(TyS);
6579   if (1) test_uqshrn_h_s_9(TyS);
6580   if (1) test_uqshrn_h_s_16(TyS);
6581   if (1) test_uqshrn_b_h_1(TyH);
6582   if (1) test_uqshrn_b_h_4(TyH);
6583   if (1) test_uqshrn_b_h_8(TyH);
6584   if (1) test_sqrshrun_s_d_1(TyD);
6585   if (1) test_sqrshrun_s_d_17(TyD);
6586   if (1) test_sqrshrun_s_d_32(TyD);
6587   if (1) test_sqrshrun_h_s_1(TyS);
6588   if (1) test_sqrshrun_h_s_9(TyS);
6589   if (1) test_sqrshrun_h_s_16(TyS);
6590   if (1) test_sqrshrun_b_h_1(TyH);
6591   if (1) test_sqrshrun_b_h_4(TyH);
6592   if (1) test_sqrshrun_b_h_8(TyH);
6593   if (1) test_sqshrun_s_d_1(TyD);
6594   if (1) test_sqshrun_s_d_17(TyD);
6595   if (1) test_sqshrun_s_d_32(TyD);
6596   if (1) test_sqshrun_h_s_1(TyS);
6597   if (1) test_sqshrun_h_s_9(TyS);
6598   if (1) test_sqshrun_h_s_16(TyS);
6599   if (1) test_sqshrun_b_h_1(TyH);
6600   if (1) test_sqshrun_b_h_4(TyH);
6601   if (1) test_sqshrun_b_h_8(TyH);
6602
6603   // sqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6604   // uqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6605   // sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6606   // uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6607   // sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6608   // sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
6609   if (1) test_sqrshrn_2s_2d_1(TyD);
6610   if (1) test_sqrshrn_2s_2d_17(TyD);
6611   if (1) test_sqrshrn_2s_2d_32(TyD);
6612   if (1) test_sqrshrn2_4s_2d_1(TyD);
6613   if (1) test_sqrshrn2_4s_2d_17(TyD);
6614   if (1) test_sqrshrn2_4s_2d_32(TyD);
6615   if (1) test_sqrshrn_4h_4s_1(TyS);
6616   if (1) test_sqrshrn_4h_4s_9(TyS);
6617   if (1) test_sqrshrn_4h_4s_16(TyS);
6618   if (1) test_sqrshrn2_8h_4s_1(TyS);
6619   if (1) test_sqrshrn2_8h_4s_9(TyS);
6620   if (1) test_sqrshrn2_8h_4s_16(TyS);
6621   if (1) test_sqrshrn_8b_8h_1(TyH);
6622   if (1) test_sqrshrn_8b_8h_4(TyH);
6623   if (1) test_sqrshrn_8b_8h_8(TyH);
6624   if (1) test_sqrshrn2_16b_8h_1(TyH);
6625   if (1) test_sqrshrn2_16b_8h_4(TyH);
6626   if (1) test_sqrshrn2_16b_8h_8(TyH);
6627   if (1) test_uqrshrn_2s_2d_1(TyD);
6628   if (1) test_uqrshrn_2s_2d_17(TyD);
6629   if (1) test_uqrshrn_2s_2d_32(TyD);
6630   if (1) test_uqrshrn2_4s_2d_1(TyD);
6631   if (1) test_uqrshrn2_4s_2d_17(TyD);
6632   if (1) test_uqrshrn2_4s_2d_32(TyD);
6633   if (1) test_uqrshrn_4h_4s_1(TyS);
6634   if (1) test_uqrshrn_4h_4s_9(TyS);
6635   if (1) test_uqrshrn_4h_4s_16(TyS);
6636   if (1) test_uqrshrn2_8h_4s_1(TyS);
6637   if (1) test_uqrshrn2_8h_4s_9(TyS);
6638   if (1) test_uqrshrn2_8h_4s_16(TyS);
6639   if (1) test_uqrshrn_8b_8h_1(TyH);
6640   if (1) test_uqrshrn_8b_8h_4(TyH);
6641   if (1) test_uqrshrn_8b_8h_8(TyH);
6642   if (1) test_uqrshrn2_16b_8h_1(TyH);
6643   if (1) test_uqrshrn2_16b_8h_4(TyH);
6644   if (1) test_uqrshrn2_16b_8h_8(TyH);
6645   if (1) test_sqshrn_2s_2d_1(TyD);
6646   if (1) test_sqshrn_2s_2d_17(TyD);
6647   if (1) test_sqshrn_2s_2d_32(TyD);
6648   if (1) test_sqshrn2_4s_2d_1(TyD);
6649   if (1) test_sqshrn2_4s_2d_17(TyD);
6650   if (1) test_sqshrn2_4s_2d_32(TyD);
6651   if (1) test_sqshrn_4h_4s_1(TyS);
6652   if (1) test_sqshrn_4h_4s_9(TyS);
6653   if (1) test_sqshrn_4h_4s_16(TyS);
6654   if (1) test_sqshrn2_8h_4s_1(TyS);
6655   if (1) test_sqshrn2_8h_4s_9(TyS);
6656   if (1) test_sqshrn2_8h_4s_16(TyS);
6657   if (1) test_sqshrn_8b_8h_1(TyH);
6658   if (1) test_sqshrn_8b_8h_4(TyH);
6659   if (1) test_sqshrn_8b_8h_8(TyH);
6660   if (1) test_sqshrn2_16b_8h_1(TyH);
6661   if (1) test_sqshrn2_16b_8h_4(TyH);
6662   if (1) test_sqshrn2_16b_8h_8(TyH);
6663   if (1) test_uqshrn_2s_2d_1(TyD);
6664   if (1) test_uqshrn_2s_2d_17(TyD);
6665   if (1) test_uqshrn_2s_2d_32(TyD);
6666   if (1) test_uqshrn2_4s_2d_1(TyD);
6667   if (1) test_uqshrn2_4s_2d_17(TyD);
6668   if (1) test_uqshrn2_4s_2d_32(TyD);
6669   if (1) test_uqshrn_4h_4s_1(TyS);
6670   if (1) test_uqshrn_4h_4s_9(TyS);
6671   if (1) test_uqshrn_4h_4s_16(TyS);
6672   if (1) test_uqshrn2_8h_4s_1(TyS);
6673   if (1) test_uqshrn2_8h_4s_9(TyS);
6674   if (1) test_uqshrn2_8h_4s_16(TyS);
6675   if (1) test_uqshrn_8b_8h_1(TyH);
6676   if (1) test_uqshrn_8b_8h_4(TyH);
6677   if (1) test_uqshrn_8b_8h_8(TyH);
6678   if (1) test_uqshrn2_16b_8h_1(TyH);
6679   if (1) test_uqshrn2_16b_8h_4(TyH);
6680   if (1) test_uqshrn2_16b_8h_8(TyH);
6681   if (1) test_sqrshrun_2s_2d_1(TyD);
6682   if (1) test_sqrshrun_2s_2d_17(TyD);
6683   if (1) test_sqrshrun_2s_2d_32(TyD);
6684   if (1) test_sqrshrun2_4s_2d_1(TyD);
6685   if (1) test_sqrshrun2_4s_2d_17(TyD);
6686   if (1) test_sqrshrun2_4s_2d_32(TyD);
6687   if (1) test_sqrshrun_4h_4s_1(TyS);
6688   if (1) test_sqrshrun_4h_4s_9(TyS);
6689   if (1) test_sqrshrun_4h_4s_16(TyS);
6690   if (1) test_sqrshrun2_8h_4s_1(TyS);
6691   if (1) test_sqrshrun2_8h_4s_9(TyS);
6692   if (1) test_sqrshrun2_8h_4s_16(TyS);
6693   if (1) test_sqrshrun_8b_8h_1(TyH);
6694   if (1) test_sqrshrun_8b_8h_4(TyH);
6695   if (1) test_sqrshrun_8b_8h_8(TyH);
6696   if (1) test_sqrshrun2_16b_8h_1(TyH);
6697   if (1) test_sqrshrun2_16b_8h_4(TyH);
6698   if (1) test_sqrshrun2_16b_8h_8(TyH);
6699   if (1) test_sqshrun_2s_2d_1(TyD);
6700   if (1) test_sqshrun_2s_2d_17(TyD);
6701   if (1) test_sqshrun_2s_2d_32(TyD);
6702   if (1) test_sqshrun2_4s_2d_1(TyD);
6703   if (1) test_sqshrun2_4s_2d_17(TyD);
6704   if (1) test_sqshrun2_4s_2d_32(TyD);
6705   if (1) test_sqshrun_4h_4s_1(TyS);
6706   if (1) test_sqshrun_4h_4s_9(TyS);
6707   if (1) test_sqshrun_4h_4s_16(TyS);
6708   if (1) test_sqshrun2_8h_4s_1(TyS);
6709   if (1) test_sqshrun2_8h_4s_9(TyS);
6710   if (1) test_sqshrun2_8h_4s_16(TyS);
6711   if (1) test_sqshrun_8b_8h_1(TyH);
6712   if (1) test_sqshrun_8b_8h_4(TyH);
6713   if (1) test_sqshrun_8b_8h_8(TyH);
6714   if (1) test_sqshrun2_16b_8h_1(TyH);
6715   if (1) test_sqshrun2_16b_8h_4(TyH);
6716   if (1) test_sqshrun2_16b_8h_8(TyH);
6717
6718   // sqshl (imm)  d,s,h,b   _#imm
6719   // uqshl (imm)  d,s,h,b   _#imm
6720   // sqshlu (imm) d,s,h,b   _#imm
6721   if (1) test_sqshl_d_d_0(TyD);
6722   if (1) test_sqshl_d_d_32(TyD);
6723   if (1) test_sqshl_d_d_63(TyD);
6724   if (1) test_sqshl_s_s_0(TyS);
6725   if (1) test_sqshl_s_s_16(TyS);
6726   if (1) test_sqshl_s_s_31(TyS);
6727   if (1) test_sqshl_h_h_0(TyH);
6728   if (1) test_sqshl_h_h_8(TyH);
6729   if (1) test_sqshl_h_h_15(TyH);
6730   if (1) test_sqshl_b_b_0(TyB);
6731   if (1) test_sqshl_b_b_1(TyB);
6732   if (1) test_sqshl_b_b_4(TyB);
6733   if (1) test_sqshl_b_b_6(TyB);
6734   if (1) test_sqshl_b_b_7(TyB);
6735   if (1) test_uqshl_d_d_0(TyD);
6736   if (1) test_uqshl_d_d_32(TyD);
6737   if (1) test_uqshl_d_d_63(TyD);
6738   if (1) test_uqshl_s_s_0(TyS);
6739   if (1) test_uqshl_s_s_16(TyS);
6740   if (1) test_uqshl_s_s_31(TyS);
6741   if (1) test_uqshl_h_h_0(TyH);
6742   if (1) test_uqshl_h_h_8(TyH);
6743   if (1) test_uqshl_h_h_15(TyH);
6744   if (1) test_uqshl_b_b_0(TyB);
6745   if (1) test_uqshl_b_b_1(TyB);
6746   if (1) test_uqshl_b_b_4(TyB);
6747   if (1) test_uqshl_b_b_6(TyB);
6748   if (1) test_uqshl_b_b_7(TyB);
6749   if (1) test_sqshlu_d_d_0(TyD);
6750   if (1) test_sqshlu_d_d_32(TyD);
6751   if (1) test_sqshlu_d_d_63(TyD);
6752   if (1) test_sqshlu_s_s_0(TyS);
6753   if (1) test_sqshlu_s_s_16(TyS);
6754   if (1) test_sqshlu_s_s_31(TyS);
6755   if (1) test_sqshlu_h_h_0(TyH);
6756   if (1) test_sqshlu_h_h_8(TyH);
6757   if (1) test_sqshlu_h_h_15(TyH);
6758   if (1) test_sqshlu_b_b_0(TyB);
6759   if (1) test_sqshlu_b_b_1(TyB);
6760   if (1) test_sqshlu_b_b_2(TyB);
6761   if (1) test_sqshlu_b_b_3(TyB);
6762   if (1) test_sqshlu_b_b_4(TyB);
6763   if (1) test_sqshlu_b_b_5(TyB);
6764   if (1) test_sqshlu_b_b_6(TyB);
6765   if (1) test_sqshlu_b_b_7(TyB);
6766
6767   // sqshl (imm)  2d,4s,2s,8h,4h,16b,8b   _#imm
6768   // uqshl (imm)  2d,4s,2s,8h,4h,16b,8b   _#imm
6769   // sqshlu (imm) 2d,4s,2s,8h,4h,16b,8b   _#imm
6770   if (1) test_sqshl_2d_2d_0(TyD);
6771   if (1) test_sqshl_2d_2d_32(TyD);
6772   if (1) test_sqshl_2d_2d_63(TyD);
6773   if (1) test_sqshl_4s_4s_0(TyS);
6774   if (1) test_sqshl_4s_4s_16(TyS);
6775   if (1) test_sqshl_4s_4s_31(TyS);
6776   if (1) test_sqshl_2s_2s_0(TyS);
6777   if (1) test_sqshl_2s_2s_16(TyS);
6778   if (1) test_sqshl_2s_2s_31(TyS);
6779   if (1) test_sqshl_8h_8h_0(TyH);
6780   if (1) test_sqshl_8h_8h_8(TyH);
6781   if (1) test_sqshl_8h_8h_15(TyH);
6782   if (1) test_sqshl_4h_4h_0(TyH);
6783   if (1) test_sqshl_4h_4h_8(TyH);
6784   if (1) test_sqshl_4h_4h_15(TyH);
6785   if (1) test_sqshl_16b_16b_0(TyB);
6786   if (1) test_sqshl_16b_16b_3(TyB);
6787   if (1) test_sqshl_16b_16b_7(TyB);
6788   if (1) test_sqshl_8b_8b_0(TyB);
6789   if (1) test_sqshl_8b_8b_3(TyB);
6790   if (1) test_sqshl_8b_8b_7(TyB);
6791   if (1) test_uqshl_2d_2d_0(TyD);
6792   if (1) test_uqshl_2d_2d_32(TyD);
6793   if (1) test_uqshl_2d_2d_63(TyD);
6794   if (1) test_uqshl_4s_4s_0(TyS);
6795   if (1) test_uqshl_4s_4s_16(TyS);
6796   if (1) test_uqshl_4s_4s_31(TyS);
6797   if (1) test_uqshl_2s_2s_0(TyS);
6798   if (1) test_uqshl_2s_2s_16(TyS);
6799   if (1) test_uqshl_2s_2s_31(TyS);
6800   if (1) test_uqshl_8h_8h_0(TyH);
6801   if (1) test_uqshl_8h_8h_8(TyH);
6802   if (1) test_uqshl_8h_8h_15(TyH);
6803   if (1) test_uqshl_4h_4h_0(TyH);
6804   if (1) test_uqshl_4h_4h_8(TyH);
6805   if (1) test_uqshl_4h_4h_15(TyH);
6806   if (1) test_uqshl_16b_16b_0(TyB);
6807   if (1) test_uqshl_16b_16b_3(TyB);
6808   if (1) test_uqshl_16b_16b_7(TyB);
6809   if (1) test_uqshl_8b_8b_0(TyB);
6810   if (1) test_uqshl_8b_8b_3(TyB);
6811   if (1) test_uqshl_8b_8b_7(TyB);
6812   if (1) test_sqshlu_2d_2d_0(TyD);
6813   if (1) test_sqshlu_2d_2d_32(TyD);
6814   if (1) test_sqshlu_2d_2d_63(TyD);
6815   if (1) test_sqshlu_4s_4s_0(TyS);
6816   if (1) test_sqshlu_4s_4s_16(TyS);
6817   if (1) test_sqshlu_4s_4s_31(TyS);
6818   if (1) test_sqshlu_2s_2s_0(TyS);
6819   if (1) test_sqshlu_2s_2s_16(TyS);
6820   if (1) test_sqshlu_2s_2s_31(TyS);
6821   if (1) test_sqshlu_8h_8h_0(TyH);
6822   if (1) test_sqshlu_8h_8h_8(TyH);
6823   if (1) test_sqshlu_8h_8h_15(TyH);
6824   if (1) test_sqshlu_4h_4h_0(TyH);
6825   if (1) test_sqshlu_4h_4h_8(TyH);
6826   if (1) test_sqshlu_4h_4h_15(TyH);
6827   if (1) test_sqshlu_16b_16b_0(TyB);
6828   if (1) test_sqshlu_16b_16b_3(TyB);
6829   if (1) test_sqshlu_16b_16b_7(TyB);
6830   if (1) test_sqshlu_8b_8b_0(TyB);
6831   if (1) test_sqshlu_8b_8b_3(TyB);
6832   if (1) test_sqshlu_8b_8b_7(TyB);
6833
6834   // sqxtn        s_d,h_s,b_h
6835   // uqxtn        s_d,h_s,b_h
6836   // sqxtun       s_d,h_s,b_h
6837   if (1) test_sqxtn_s_d(TyD);
6838   if (1) test_sqxtn_h_s(TyS);
6839   if (1) test_sqxtn_b_h(TyH);
6840   if (1) test_uqxtn_s_d(TyD);
6841   if (1) test_uqxtn_h_s(TyS);
6842   if (1) test_uqxtn_b_h(TyH);
6843   if (1) test_sqxtun_s_d(TyD);
6844   if (1) test_sqxtun_h_s(TyS);
6845   if (1) test_sqxtun_b_h(TyH);
6846
6847   // sqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6848   // uqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6849   // sqxtun{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
6850   if (1) test_sqxtn_2s_2d(TyD);
6851   if (1) test_sqxtn2_4s_2d(TyD);
6852   if (1) test_sqxtn_4h_4s(TyS);
6853   if (1) test_sqxtn2_8h_4s(TyS);
6854   if (1) test_sqxtn_8b_8h(TyH);
6855   if (1) test_sqxtn2_16b_8h(TyH);
6856   if (1) test_uqxtn_2s_2d(TyD);
6857   if (1) test_uqxtn2_4s_2d(TyD);
6858   if (1) test_uqxtn_4h_4s(TyS);
6859   if (1) test_uqxtn2_8h_4s(TyS);
6860   if (1) test_uqxtn_8b_8h(TyH);
6861   if (1) test_uqxtn2_16b_8h(TyH);
6862   if (1) test_sqxtun_2s_2d(TyD);
6863   if (1) test_sqxtun2_4s_2d(TyD);
6864   if (1) test_sqxtun_4h_4s(TyS);
6865   if (1) test_sqxtun2_8h_4s(TyS);
6866   if (1) test_sqxtun_8b_8h(TyH);
6867   if (1) test_sqxtun2_16b_8h(TyH);
6868
6869   // srhadd       4s,2s,8h,4h,16b,8b
6870   // urhadd       4s,2s,8h,4h,16b,8b
6871   if (1) test_srhadd_4s_4s_4s(TyS);
6872   if (1) test_srhadd_2s_2s_2s(TyS);
6873   if (1) test_srhadd_8h_8h_8h(TyH);
6874   if (1) test_srhadd_4h_4h_4h(TyH);
6875   if (1) test_srhadd_16b_16b_16b(TyB);
6876   if (1) test_srhadd_8b_8b_8b(TyB);
6877   if (1) test_urhadd_4s_4s_4s(TyS);
6878   if (1) test_urhadd_2s_2s_2s(TyS);
6879   if (1) test_urhadd_8h_8h_8h(TyH);
6880   if (1) test_urhadd_4h_4h_4h(TyH);
6881   if (1) test_urhadd_16b_16b_16b(TyB);
6882   if (1) test_urhadd_8b_8b_8b(TyB);
6883
6884   // sshl (reg)   d
6885   // ushl (reg)   d
6886   if (1) test_sshl_d_d_d(TyD);
6887   if (1) test_ushl_d_d_d(TyD);
6888
6889   // sshl (reg)   2d,4s,2s,8h,4h,16b,8b
6890   // ushl (reg)   2d,4s,2s,8h,4h,16b,8b
6891   if (1) test_sshl_2d_2d_2d(TyD);
6892   if (1) test_sshl_4s_4s_4s(TyS);
6893   if (1) test_sshl_2s_2s_2s(TyS);
6894   if (1) test_sshl_8h_8h_8h(TyH);
6895   if (1) test_sshl_4h_4h_4h(TyH);
6896   if (1) test_sshl_16b_16b_16b(TyB);
6897   if (1) test_sshl_8b_8b_8b(TyB);
6898   if (1) test_ushl_2d_2d_2d(TyD);
6899   if (1) test_ushl_4s_4s_4s(TyS);
6900   if (1) test_ushl_2s_2s_2s(TyS);
6901   if (1) test_ushl_8h_8h_8h(TyH);
6902   if (1) test_ushl_4h_4h_4h(TyH);
6903   if (1) test_ushl_16b_16b_16b(TyB);
6904   if (1) test_ushl_8b_8b_8b(TyB);
6905
6906   // shl  (imm)   d
6907   // sshr (imm)   d
6908   // ushr (imm)   d
6909   if (1) test_shl_d_d_0(TyD);
6910   if (1) test_shl_d_d_32(TyD);
6911   if (1) test_shl_d_d_63(TyD);
6912   if (1) test_sshr_d_d_1(TyD);
6913   if (1) test_sshr_d_d_32(TyD);
6914   if (1) test_sshr_d_d_64(TyD);
6915   if (1) test_ushr_d_d_1(TyD);
6916   if (1) test_ushr_d_d_32(TyD);
6917   if (1) test_ushr_d_d_64(TyD);
6918
6919   // shl  (imm)   16b,8b,8h,4h,4s,2s,2d
6920   // sshr (imm)   2d,4s,2s,8h,4h,16b,8b
6921   // ushr (imm)   2d,4s,2s,8h,4h,16b,8b
6922   if (1) test_shl_2d_2d_0(TyD);
6923   if (1) test_shl_2d_2d_13(TyD);
6924   if (1) test_shl_2d_2d_63(TyD);
6925   if (1) test_shl_4s_4s_0(TyS);
6926   if (1) test_shl_4s_4s_13(TyS);
6927   if (1) test_shl_4s_4s_31(TyS);
6928   if (1) test_shl_2s_2s_0(TyS);
6929   if (1) test_shl_2s_2s_13(TyS);
6930   if (1) test_shl_2s_2s_31(TyS);
6931   if (1) test_shl_8h_8h_0(TyH);
6932   if (1) test_shl_8h_8h_13(TyH);
6933   if (1) test_shl_8h_8h_15(TyH);
6934   if (1) test_shl_4h_4h_0(TyH);
6935   if (1) test_shl_4h_4h_13(TyH);
6936   if (1) test_shl_4h_4h_15(TyH);
6937   if (1) test_shl_16b_16b_0(TyB);
6938   if (1) test_shl_16b_16b_7(TyB);
6939   if (1) test_shl_8b_8b_0(TyB);
6940   if (1) test_shl_8b_8b_7(TyB);
6941   if (1) test_sshr_2d_2d_1(TyD);
6942   if (1) test_sshr_2d_2d_13(TyD);
6943   if (1) test_sshr_2d_2d_64(TyD);
6944   if (1) test_sshr_4s_4s_1(TyS);
6945   if (1) test_sshr_4s_4s_13(TyS);
6946   if (1) test_sshr_4s_4s_32(TyS);
6947   if (1) test_sshr_2s_2s_1(TyS);
6948   if (1) test_sshr_2s_2s_13(TyS);
6949   if (1) test_sshr_2s_2s_32(TyS);
6950   if (1) test_sshr_8h_8h_1(TyH);
6951   if (1) test_sshr_8h_8h_13(TyH);
6952   if (1) test_sshr_8h_8h_16(TyH);
6953   if (1) test_sshr_4h_4h_1(TyH);
6954   if (1) test_sshr_4h_4h_13(TyH);
6955   if (1) test_sshr_4h_4h_16(TyH);
6956   if (1) test_sshr_16b_16b_1(TyB);
6957   if (1) test_sshr_16b_16b_8(TyB);
6958   if (1) test_sshr_8b_8b_1(TyB);
6959   if (1) test_sshr_8b_8b_8(TyB);
6960   if (1) test_ushr_2d_2d_1(TyD);
6961   if (1) test_ushr_2d_2d_13(TyD);
6962   if (1) test_ushr_2d_2d_64(TyD);
6963   if (1) test_ushr_4s_4s_1(TyS);
6964   if (1) test_ushr_4s_4s_13(TyS);
6965   if (1) test_ushr_4s_4s_32(TyS);
6966   if (1) test_ushr_2s_2s_1(TyS);
6967   if (1) test_ushr_2s_2s_13(TyS);
6968   if (1) test_ushr_2s_2s_32(TyS);
6969   if (1) test_ushr_8h_8h_1(TyH);
6970   if (1) test_ushr_8h_8h_13(TyH);
6971   if (1) test_ushr_8h_8h_16(TyH);
6972   if (1) test_ushr_4h_4h_1(TyH);
6973   if (1) test_ushr_4h_4h_13(TyH);
6974   if (1) test_ushr_4h_4h_16(TyH);
6975   if (1) test_ushr_16b_16b_1(TyB);
6976   if (1) test_ushr_16b_16b_8(TyB);
6977   if (1) test_ushr_8b_8b_1(TyB);
6978   if (1) test_ushr_8b_8b_8(TyB);
6979
6980   // ssra (imm)   d
6981   // usra (imm)   d
6982   if (1) test_ssra_d_d_1(TyD);
6983   if (1) test_ssra_d_d_32(TyD);
6984   if (1) test_ssra_d_d_64(TyD);
6985   if (1) test_usra_d_d_1(TyD);
6986   if (1) test_usra_d_d_32(TyD);
6987   if (1) test_usra_d_d_64(TyD);
6988
6989   // ssra (imm)   2d,4s,2s,8h,4h,16b,8b
6990   // usra (imm)   2d,4s,2s,8h,4h,16b,8b
6991   if (1) test_ssra_2d_2d_1(TyD);
6992   if (1) test_ssra_2d_2d_32(TyD);
6993   if (1) test_ssra_2d_2d_64(TyD);
6994   if (1) test_ssra_4s_4s_1(TyS);
6995   if (1) test_ssra_4s_4s_16(TyS);
6996   if (1) test_ssra_4s_4s_32(TyS);
6997   if (1) test_ssra_2s_2s_1(TyS);
6998   if (1) test_ssra_2s_2s_16(TyS);
6999   if (1) test_ssra_2s_2s_32(TyS);
7000   if (1) test_ssra_8h_8h_1(TyH);
7001   if (1) test_ssra_8h_8h_8(TyH);
7002   if (1) test_ssra_8h_8h_16(TyH);
7003   if (1) test_ssra_4h_4h_1(TyH);
7004   if (1) test_ssra_4h_4h_8(TyH);
7005   if (1) test_ssra_4h_4h_16(TyH);
7006   if (1) test_ssra_16b_16b_1(TyB);
7007   if (1) test_ssra_16b_16b_3(TyB);
7008   if (1) test_ssra_16b_16b_8(TyB);
7009   if (1) test_ssra_8b_8b_1(TyB);
7010   if (1) test_ssra_8b_8b_3(TyB);
7011   if (1) test_ssra_8b_8b_8(TyB);
7012   if (1) test_usra_2d_2d_1(TyD);
7013   if (1) test_usra_2d_2d_32(TyD);
7014   if (1) test_usra_2d_2d_64(TyD);
7015   if (1) test_usra_4s_4s_1(TyS);
7016   if (1) test_usra_4s_4s_16(TyS);
7017   if (1) test_usra_4s_4s_32(TyS);
7018   if (1) test_usra_2s_2s_1(TyS);
7019   if (1) test_usra_2s_2s_16(TyS);
7020   if (1) test_usra_2s_2s_32(TyS);
7021   if (1) test_usra_8h_8h_1(TyH);
7022   if (1) test_usra_8h_8h_8(TyH);
7023   if (1) test_usra_8h_8h_16(TyH);
7024   if (1) test_usra_4h_4h_1(TyH);
7025   if (1) test_usra_4h_4h_8(TyH);
7026   if (1) test_usra_4h_4h_16(TyH);
7027   if (1) test_usra_16b_16b_1(TyB);
7028   if (1) test_usra_16b_16b_3(TyB);
7029   if (1) test_usra_16b_16b_8(TyB);
7030   if (1) test_usra_8b_8b_1(TyB);
7031   if (1) test_usra_8b_8b_3(TyB);
7032   if (1) test_usra_8b_8b_8(TyB);
7033
7034   // srshl (reg)  d
7035   // urshl (reg)  d
7036   if (1) test_srshl_d_d_d(TyD);
7037   if (1) test_urshl_d_d_d(TyD);
7038
7039   // srshl (reg)  2d,4s,2s,8h,4h,16b,8b
7040   // urshl (reg)  2d,4s,2s,8h,4h,16b,8b
7041   if (1) test_srshl_2d_2d_2d(TyD);
7042   if (1) test_srshl_4s_4s_4s(TyS);
7043   if (1) test_srshl_2s_2s_2s(TyS);
7044   if (1) test_srshl_8h_8h_8h(TyH);
7045   if (1) test_srshl_4h_4h_4h(TyH);
7046   if (1) test_srshl_16b_16b_16b(TyB);
7047   if (1) test_srshl_8b_8b_8b(TyB);
7048   if (1) test_urshl_2d_2d_2d(TyD);
7049   if (1) test_urshl_4s_4s_4s(TyS);
7050   if (1) test_urshl_2s_2s_2s(TyS);
7051   if (1) test_urshl_8h_8h_8h(TyH);
7052   if (1) test_urshl_4h_4h_4h(TyH);
7053   if (1) test_urshl_16b_16b_16b(TyB);
7054   if (1) test_urshl_8b_8b_8b(TyB);
7055
7056   // srshr (imm)  d
7057   // urshr (imm)  d
7058   if (1) test_srshr_d_d_1(TyD);
7059   if (1) test_srshr_d_d_32(TyD);
7060   if (1) test_srshr_d_d_64(TyD);
7061   if (1) test_urshr_d_d_1(TyD);
7062   if (1) test_urshr_d_d_32(TyD);
7063   if (1) test_urshr_d_d_64(TyD);
7064
7065   // srshr (imm)  2d,4s,2s,8h,4h,16b,8b
7066   // urshr (imm)  2d,4s,2s,8h,4h,16b,8b
7067   if (1) test_srshr_2d_2d_1(TyD);
7068   if (1) test_srshr_2d_2d_32(TyD);
7069   if (1) test_srshr_2d_2d_64(TyD);
7070   if (1) test_srshr_4s_4s_1(TyS);
7071   if (1) test_srshr_4s_4s_16(TyS);
7072   if (1) test_srshr_4s_4s_32(TyS);
7073   if (1) test_srshr_2s_2s_1(TyS);
7074   if (1) test_srshr_2s_2s_16(TyS);
7075   if (1) test_srshr_2s_2s_32(TyS);
7076   if (1) test_srshr_8h_8h_1(TyH);
7077   if (1) test_srshr_8h_8h_8(TyH);
7078   if (1) test_srshr_8h_8h_16(TyH);
7079   if (1) test_srshr_4h_4h_1(TyH);
7080   if (1) test_srshr_4h_4h_8(TyH);
7081   if (1) test_srshr_4h_4h_16(TyH);
7082   if (1) test_srshr_16b_16b_1(TyB);
7083   if (1) test_srshr_16b_16b_3(TyB);
7084   if (1) test_srshr_16b_16b_8(TyB);
7085   if (1) test_srshr_8b_8b_1(TyB);
7086   if (1) test_srshr_8b_8b_3(TyB);
7087   if (1) test_srshr_8b_8b_8(TyB);
7088   if (1) test_urshr_2d_2d_1(TyD);
7089   if (1) test_urshr_2d_2d_32(TyD);
7090   if (1) test_urshr_2d_2d_64(TyD);
7091   if (1) test_urshr_4s_4s_1(TyS);
7092   if (1) test_urshr_4s_4s_16(TyS);
7093   if (1) test_urshr_4s_4s_32(TyS);
7094   if (1) test_urshr_2s_2s_1(TyS);
7095   if (1) test_urshr_2s_2s_16(TyS);
7096   if (1) test_urshr_2s_2s_32(TyS);
7097   if (1) test_urshr_8h_8h_1(TyH);
7098   if (1) test_urshr_8h_8h_8(TyH);
7099   if (1) test_urshr_8h_8h_16(TyH);
7100   if (1) test_urshr_4h_4h_1(TyH);
7101   if (1) test_urshr_4h_4h_8(TyH);
7102   if (1) test_urshr_4h_4h_16(TyH);
7103   if (1) test_urshr_16b_16b_1(TyB);
7104   if (1) test_urshr_16b_16b_3(TyB);
7105   if (1) test_urshr_16b_16b_8(TyB);
7106   if (1) test_urshr_8b_8b_1(TyB);
7107   if (1) test_urshr_8b_8b_3(TyB);
7108   if (1) test_urshr_8b_8b_8(TyB);
7109
7110   // srsra (imm)  d
7111   // ursra (imm)  d
7112   if (1) test_srsra_d_d_1(TyD);
7113   if (1) test_srsra_d_d_32(TyD);
7114   if (1) test_srsra_d_d_64(TyD);
7115   if (1) test_ursra_d_d_1(TyD);
7116   if (1) test_ursra_d_d_32(TyD);
7117   if (1) test_ursra_d_d_64(TyD);
7118
7119   // srsra (imm)  2d,4s,2s,8h,4h,16b,8b
7120   // ursra (imm)  2d,4s,2s,8h,4h,16b,8b
7121   if (1) test_srsra_2d_2d_1(TyD);
7122   if (1) test_srsra_2d_2d_32(TyD);
7123   if (1) test_srsra_2d_2d_64(TyD);
7124   if (1) test_srsra_4s_4s_1(TyS);
7125   if (1) test_srsra_4s_4s_16(TyS);
7126   if (1) test_srsra_4s_4s_32(TyS);
7127   if (1) test_srsra_2s_2s_1(TyS);
7128   if (1) test_srsra_2s_2s_16(TyS);
7129   if (1) test_srsra_2s_2s_32(TyS);
7130   if (1) test_srsra_8h_8h_1(TyH);
7131   if (1) test_srsra_8h_8h_8(TyH);
7132   if (1) test_srsra_8h_8h_16(TyH);
7133   if (1) test_srsra_4h_4h_1(TyH);
7134   if (1) test_srsra_4h_4h_8(TyH);
7135   if (1) test_srsra_4h_4h_16(TyH);
7136   if (1) test_srsra_16b_16b_1(TyB);
7137   if (1) test_srsra_16b_16b_3(TyB);
7138   if (1) test_srsra_16b_16b_8(TyB);
7139   if (1) test_srsra_8b_8b_1(TyB);
7140   if (1) test_srsra_8b_8b_3(TyB);
7141   if (1) test_srsra_8b_8b_8(TyB);
7142   if (1) test_ursra_2d_2d_1(TyD);
7143   if (1) test_ursra_2d_2d_32(TyD);
7144   if (1) test_ursra_2d_2d_64(TyD);
7145   if (1) test_ursra_4s_4s_1(TyS);
7146   if (1) test_ursra_4s_4s_16(TyS);
7147   if (1) test_ursra_4s_4s_32(TyS);
7148   if (1) test_ursra_2s_2s_1(TyS);
7149   if (1) test_ursra_2s_2s_16(TyS);
7150   if (1) test_ursra_2s_2s_32(TyS);
7151   if (1) test_ursra_8h_8h_1(TyH);
7152   if (1) test_ursra_8h_8h_8(TyH);
7153   if (1) test_ursra_8h_8h_16(TyH);
7154   if (1) test_ursra_4h_4h_1(TyH);
7155   if (1) test_ursra_4h_4h_8(TyH);
7156   if (1) test_ursra_4h_4h_16(TyH);
7157   if (1) test_ursra_16b_16b_1(TyB);
7158   if (1) test_ursra_16b_16b_3(TyB);
7159   if (1) test_ursra_16b_16b_8(TyB);
7160   if (1) test_ursra_8b_8b_1(TyB);
7161   if (1) test_ursra_8b_8b_3(TyB);
7162   if (1) test_ursra_8b_8b_8(TyB);
7163
7164   // sshll{2} (imm)  2d_2s/4s, 4s_4h/8h, 8h_8b/16b
7165   // ushll{2} (imm)  2d_2s/4s, 4s_4h/8h, 8h_8b/16b
7166   if (1) test_sshll_2d_2s_0(TyS);
7167   if (1) test_sshll_2d_2s_15(TyS);
7168   if (1) test_sshll_2d_2s_31(TyS);
7169   if (1) test_sshll2_2d_4s_0(TyS);
7170   if (1) test_sshll2_2d_4s_15(TyS);
7171   if (1) test_sshll2_2d_4s_31(TyS);
7172   if (1) test_sshll_4s_4h_0(TyH);
7173   if (1) test_sshll_4s_4h_7(TyH);
7174   if (1) test_sshll_4s_4h_15(TyH);
7175   if (1) test_sshll2_4s_8h_0(TyH);
7176   if (1) test_sshll2_4s_8h_7(TyH);
7177   if (1) test_sshll2_4s_8h_15(TyH);
7178   if (1) test_sshll_8h_8b_0(TyB);
7179   if (1) test_sshll_8h_8b_3(TyB);
7180   if (1) test_sshll_8h_8b_7(TyB);
7181   if (1) test_sshll2_8h_16b_0(TyB);
7182   if (1) test_sshll2_8h_16b_3(TyB);
7183   if (1) test_sshll2_8h_16b_7(TyB);
7184   if (1) test_ushll_2d_2s_0(TyS);
7185   if (1) test_ushll_2d_2s_15(TyS);
7186   if (1) test_ushll_2d_2s_31(TyS);
7187   if (1) test_ushll2_2d_4s_0(TyS);
7188   if (1) test_ushll2_2d_4s_15(TyS);
7189   if (1) test_ushll2_2d_4s_31(TyS);
7190   if (1) test_ushll_4s_4h_0(TyH);
7191   if (1) test_ushll_4s_4h_7(TyH);
7192   if (1) test_ushll_4s_4h_15(TyH);
7193   if (1) test_ushll2_4s_8h_0(TyH);
7194   if (1) test_ushll2_4s_8h_7(TyH);
7195   if (1) test_ushll2_4s_8h_15(TyH);
7196   if (1) test_ushll_8h_8b_0(TyB);
7197   if (1) test_ushll_8h_8b_3(TyB);
7198   if (1) test_ushll_8h_8b_7(TyB);
7199   if (1) test_ushll2_8h_16b_0(TyB);
7200   if (1) test_ushll2_8h_16b_3(TyB);
7201   if (1) test_ushll2_8h_16b_7(TyB);
7202
7203   // suqadd  d,s,h,b
7204   // usqadd  d,s,h,b
7205   if (1) test_suqadd_d_d(TyD);
7206   if (1) test_suqadd_s_s(TyS);
7207   if (1) test_suqadd_h_h(TyH);
7208   if (1) test_suqadd_b_b(TyB);
7209   if (1) test_usqadd_d_d(TyD);
7210   if (1) test_usqadd_s_s(TyS);
7211   if (1) test_usqadd_h_h(TyH);
7212   if (1) test_usqadd_b_b(TyB);
7213
7214   // suqadd  2d,4s,2s,8h,4h,16b,8b
7215   // usqadd  2d,4s,2s,8h,4h,16b,8b
7216   if (1) test_suqadd_2d_2d(TyD);
7217   if (1) test_suqadd_4s_4s(TyS);
7218   if (1) test_suqadd_2s_2s(TyS);
7219   if (1) test_suqadd_8h_8h(TyH);
7220   if (1) test_suqadd_4h_4h(TyH);
7221   if (1) test_suqadd_16b_16b(TyB);
7222   if (1) test_suqadd_8b_8b(TyB);
7223   if (1) test_usqadd_2d_2d(TyD);
7224   if (1) test_usqadd_4s_4s(TyS);
7225   if (1) test_usqadd_2s_2s(TyS);
7226   if (1) test_usqadd_8h_8h(TyH);
7227   if (1) test_usqadd_4h_4h(TyH);
7228   if (1) test_usqadd_16b_16b(TyB);
7229   if (1) test_usqadd_8b_8b(TyB);
7230
7231   // tbl     8b_{16b}_8b, 16b_{16b}_16b
7232   // tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
7233   // tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
7234   // tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
7235   if (1) test_tbl_16b_1reg(TyB);
7236   if (1) test_tbl_16b_2reg(TyB);
7237   if (1) test_tbl_16b_3reg(TyB);
7238   if (1) test_tbl_16b_4reg(TyB);
7239   if (1) test_tbl_8b_1reg(TyB);
7240   if (1) test_tbl_8b_2reg(TyB);
7241   if (1) test_tbl_8b_3reg(TyB);
7242   if (1) test_tbl_8b_4reg(TyB);
7243
7244   // tbx     8b_{16b}_8b, 16b_{16b}_16b
7245   // tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
7246   // tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
7247   // tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
7248   if (1) test_tbx_16b_1reg(TyB);
7249   if (1) test_tbx_16b_2reg(TyB);
7250   if (1) test_tbx_16b_3reg(TyB);
7251   if (1) test_tbx_16b_4reg(TyB);
7252   if (1) test_tbx_8b_1reg(TyB);
7253   if (1) test_tbx_8b_2reg(TyB);
7254   if (1) test_tbx_8b_3reg(TyB);
7255   if (1) test_tbx_8b_4reg(TyB);
7256
7257   // trn1    2d,4s,2s,8h,4h,16b,8b
7258   // trn2    2d,4s,2s,8h,4h,16b,8b
7259   if (1) test_trn1_2d_2d_2d(TyD);
7260   if (1) test_trn1_4s_4s_4s(TyS);
7261   if (1) test_trn1_2s_2s_2s(TyS);
7262   if (1) test_trn1_8h_8h_8h(TyH);
7263   if (1) test_trn1_4h_4h_4h(TyH);
7264   if (1) test_trn1_16b_16b_16b(TyB);
7265   if (1) test_trn1_8b_8b_8b(TyB);
7266   if (1) test_trn2_2d_2d_2d(TyD);
7267   if (1) test_trn2_4s_4s_4s(TyS);
7268   if (1) test_trn2_2s_2s_2s(TyS);
7269   if (1) test_trn2_8h_8h_8h(TyH);
7270   if (1) test_trn2_4h_4h_4h(TyH);
7271   if (1) test_trn2_16b_16b_16b(TyB);
7272   if (1) test_trn2_8b_8b_8b(TyB);
7273
7274   // urecpe      4s,2s
7275   // ursqrte     4s,2s
7276   if (1) test_urecpe_4s_4s(TyS);
7277   if (1) test_urecpe_2s_2s(TyS);
7278   if (1) test_ursqrte_4s_4s(TyS);
7279   if (1) test_ursqrte_2s_2s(TyS);
7280
7281   // uzp1      2d,4s,2s,8h,4h,16b,8b
7282   // uzp2      2d,4s,2s,8h,4h,16b,8b
7283   // zip1      2d,4s,2s,8h,4h,16b,8b
7284   // zip2      2d,4s,2s,8h,4h,16b,8b
7285   if (1) test_uzp1_2d_2d_2d(TyD);
7286   if (1) test_uzp1_4s_4s_4s(TyS);
7287   if (1) test_uzp1_2s_2s_2s(TyS);
7288   if (1) test_uzp1_8h_8h_8h(TyH);
7289   if (1) test_uzp1_4h_4h_4h(TyH);
7290   if (1) test_uzp1_16b_16b_16b(TyB);
7291   if (1) test_uzp1_8b_8b_8b(TyB);
7292   if (1) test_uzp2_2d_2d_2d(TyD);
7293   if (1) test_uzp2_4s_4s_4s(TyS);
7294   if (1) test_uzp2_2s_2s_2s(TyS);
7295   if (1) test_uzp2_8h_8h_8h(TyH);
7296   if (1) test_uzp2_4h_4h_4h(TyH);
7297   if (1) test_uzp2_16b_16b_16b(TyB);
7298   if (1) test_uzp2_8b_8b_8b(TyB);
7299   if (1) test_zip1_2d_2d_2d(TyD);
7300   if (1) test_zip1_4s_4s_4s(TyS);
7301   if (1) test_zip1_2s_2s_2s(TyS);
7302   if (1) test_zip1_8h_8h_8h(TyH);
7303   if (1) test_zip1_4h_4h_4h(TyH);
7304   if (1) test_zip1_16b_16b_16b(TyB);
7305   if (1) test_zip1_8b_8b_8b(TyB);
7306   if (1) test_zip2_2d_2d_2d(TyD);
7307   if (1) test_zip2_4s_4s_4s(TyS);
7308   if (1) test_zip2_2s_2s_2s(TyS);
7309   if (1) test_zip2_8h_8h_8h(TyH);
7310   if (1) test_zip2_4h_4h_4h(TyH);
7311   if (1) test_zip2_16b_16b_16b(TyB);
7312   if (1) test_zip2_8b_8b_8b(TyB);
7313
7314   // xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
7315   if (1) test_xtn_2s_2d(TyD);
7316   if (1) test_xtn2_4s_2d(TyD);
7317   if (1) test_xtn_4h_4s(TyS);
7318   if (1) test_xtn2_8h_4s(TyS);
7319   if (1) test_xtn_8b_8h(TyH);
7320   if (1) test_xtn2_16b_8h(TyH);
7321
7322   // ======================== MEM ========================
7323
7324   // All the SIMD and FP memory tests are in none/tests/arm64/memory.c.
7325
7326   // ld1  (multiple 1-element structures to 1/2/3/4 regs)
7327   // ld1  (single 1-element structure to one lane of 1 reg)
7328   // ld1r (single 1-element structure and rep to all lanes of 1 reg)
7329
7330   // ld2  (multiple 2-element structures to 2 regs)
7331   // ld2  (single 2-element structure to one lane of 2 regs)
7332   // ld2r (single 2-element structure and rep to all lanes of 2 regs)
7333
7334   // ld3  (multiple 3-element structures to 3 regs)
7335   // ld3  (single 3-element structure to one lane of 3 regs)
7336   // ld3r (single 3-element structure and rep to all lanes of 3 regs)
7337
7338   // ld4  (multiple 4-element structures to 4 regs)
7339   // ld4  (single 4-element structure to one lane of 4 regs)
7340   // ld4r (single 4-element structure and rep to all lanes of 4 regs)
7341
7342   // ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
7343   //       addr = reg + uimm7 * reg_size
7344
7345   // ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
7346   //       addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
7347
7348   // ldr   q,d,s,h,b from addr
7349   //       addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
7350
7351   // ldr   q,d,s from  pc+#imm19
7352
7353   // ldr   q,d,s,h,b from addr
7354   //       addr = [Xn|SP, R <extend> <shift]
7355
7356   // ldur  q,d,s,h,b from addr
7357   //       addr = [Xn|SP,#imm] (unscaled offset)
7358
7359   // st1 (multiple 1-element structures from 1/2/3/4 regs)
7360   // st1 (single 1-element structure for 1 lane of 1 reg)
7361
7362   // st2 (multiple 2-element structures from 2 regs)
7363   // st2 (single 2-element structure from 1 lane of 2 regs)
7364
7365   // st3 (multiple 3-element structures from 3 regs)
7366   // st3 (single 3-element structure from 1 lane of 3 regs)
7367
7368   // st4 (multiple 4-element structures from 4 regs)
7369   // st4 (single 4-element structure from one lane of 4 regs)
7370
7371   // stnp q_q_addr, d_d_addr, s_s_addr
7372   //      addr = [Xn|SP, #imm]
7373
7374   // stp  q_q_addr, d_d_addr, s_s_addr
7375   //      addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
7376
7377   // str  q,d,s,h,b_addr
7378   //      addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
7379
7380   // str   q,d,s,h,b_addr
7381   //       addr = [Xn|SP, R <extend> <shift]
7382
7383   // stur  q,d,s,h,b_addr
7384   //       addr = [Xn|SP,#imm] (unscaled offset)
7385
7386   // ======================== CRYPTO ========================
7387
7388   // aesd       16b (aes single round decryption)
7389   // aese       16b (aes single round encryption)
7390   // aesimc     16b (aes inverse mix columns)
7391   // aesmc      16b (aes mix columns)
7392   if (0) test_aesd_16b_16b(TyNONE);
7393   if (0) test_aese_16b_16b(TyNONE);
7394   if (0) test_aesimc_16b_16b(TyNONE);
7395   if (0) test_aesmc_16b_16b(TyNONE);
7396
7397   // sha1c      q_s_4s
7398   // sha1h      s_s
7399   // sha1m      q_s_4s
7400   // sha1p      q_s_4s
7401   // sha1su0    4s_4s_4s
7402   // sha1su1    4s_4s
7403   if (0) test_sha1c_q_s_4s(TyNONE);
7404   if (0) test_sha1h_s_s(TyNONE);
7405   if (0) test_sha1m_q_s_4s(TyNONE);
7406   if (0) test_sha1p_q_s_4s(TyNONE);
7407   if (0) test_sha1su0_4s_4s_4s(TyNONE);
7408   if (0) test_sha1su1_4s_4s(TyNONE);
7409
7410   // sha256h2   q_q_4s
7411   // sha256h    q_q_4s
7412   // sha256su0  4s_4s
7413   // sha256su1  4s_4s_4s
7414   if (0) test_sha256h2_q_q_4s(TyNONE);
7415   if (0) test_sha256h_q_q_4s(TyNONE);
7416   if (0) test_sha256su0_4s_4s(TyNONE);
7417   if (0) test_sha256su1_4s_4s_4s(TyNONE);
7418
7419   return 0;
7420}
7421
7422
7423/* ---------------------------------------------------------------- */
7424/* -- Alphabetical list of insns                                 -- */
7425/* ---------------------------------------------------------------- */
7426/*
7427   abs      d
7428   abs      2d,4s,2s,8h,4h,16b,8b
7429   add      d
7430   add      2d,4s,2s,8h,4h,16b,8b
7431   addhn    2s.2d.2d, 4s.2d.2d, h_from_s and b_from_h (add and get high half)
7432   addp     d (add pairs, across)
7433   addp     2d,4s,2s,8h,4h,16b,8b
7434   addv     4s,8h,4h,16b,18b (reduce across vector)
7435   aesd     16b (aes single round decryption)
7436   aese     16b (aes single round encryption)
7437   aesimc   16b (aes inverse mix columns)
7438   aesmc    16b (aes mix columns)
7439   and      16b,8b
7440
7441   bic      4s,2s,8h,4h (vector, imm)
7442   also movi, mvni, orr
7443
7444   bic      16b,8b (vector,reg) (bit clear)
7445   bif      16b,8b (vector) (bit insert if false)
7446   bit      16b,8b (vector) (bit insert if true)
7447   bsl      16b,8b (vector) (bit select)
7448
7449   cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
7450   clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
7451
7452   cmeq     d
7453   cmeq     2d,4s,2s,8h,4h,16b,8b
7454   cmeq_z   d
7455   cmeq_z   2d,4s,2s,8h,4h,16b,8b
7456
7457   cmge     d
7458   cmge     2d,4s,2s,8h,4h,16b,8b
7459   cmge_z   d
7460   cmge_z   2d,4s,2s,8h,4h,16b,8b
7461
7462   cmgt     d
7463   cmgt     2d,4s,2s,8h,4h,16b,8b
7464   cmgt_z   d
7465   cmgt_z   2d,4s,2s,8h,4h,16b,8b
7466
7467   cmhi     d
7468   cmhi     2d,4s,2s,8h,4h,16b,8b
7469
7470   cmhs     d
7471   cmhs     2d,4s,2s,8h,4h,16b,8b
7472
7473   cmle_z   d
7474   cmle_z   2d,4s,2s,8h,4h,16b,8b
7475
7476   cmlt_z   d
7477   cmlt_z   2d,4s,2s,8h,4h,16b,8b
7478
7479   cmtst    d
7480   cmtst    2d,4s,2s,8h,4h,16b,8b
7481
7482   cnt      16b,8b (population count per byte)
7483
7484   dup      d,s,h,b (vec elem to scalar)
7485   dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
7486   dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
7487
7488   eor      16b,8b (vector)
7489   ext      16b,8b,#imm4 (concat 2 vectors, then slice)
7490
7491   fabd     d,s
7492   fabd     2d,4s,2s
7493
7494   fabs     d,s
7495   fabs     2d,4s,2s
7496
7497   facge    s,d  (floating abs compare GE)
7498   facge    2d,4s,2s
7499
7500   facgt    s,d  (floating abs compare GE)
7501   facgt    2d,4s,2s
7502
7503   fadd     d,s
7504   fadd     2d,4s,2s
7505
7506   faddp    d,s (floating add pair)
7507   faddp    2d,4s,2s
7508
7509   fccmp    d,s (floating point conditional quiet compare)
7510   fccmpe   d,s (floating point conditional signaling compare)
7511
7512   fcmeq    d,s
7513   fcmeq    2d,4s,2s
7514   fcmeq_z  d,s
7515   fcmeq_z  2d,4s,2s
7516
7517   fcmge    d,s
7518   fcmge    2d,4s,2s
7519   fcmge_z  d,s
7520   fcmge_z  2d,4s,2s
7521
7522   fcmgt    d,s
7523   fcmgt    2d,4s,2s
7524   fcmgt_z  d,s
7525   fcmgt_z  2d,4s,2s
7526
7527   fcmle_z  d,s
7528   fcmle_z  2d,4s,2s
7529
7530   fcmlt_z  d,s
7531   fcmlt_z  2d,4s,2s
7532
7533   fcmp     d,s (floating point quiet, set flags)
7534   fcmp_z   d,s
7535   fcmpe    d,s (floating point signaling, set flags)
7536   fcmpe_z  d,s
7537
7538   fcsel    d,s (fp cond select)
7539
7540   fcvt     s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
7541
7542   fcvtas   d,s  (fcvt to signed int, nearest, ties away)
7543   fcvtas   2d,4s,2s
7544   fcvtas   w_s,x_s,w_d,x_d
7545
7546   fcvtau   d,s  (fcvt to unsigned int, nearest, ties away)
7547   fcvtau   2d,4s,2s
7548   fcvtau   w_s,x_s,w_d,x_d
7549
7550   fcvtl{2} 4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
7551
7552   fcvtms   d,s  (fcvt to signed int, minus inf)
7553   fcvtms   2d,4s,2s
7554   fcvtms   w_s,x_s,w_d,x_d
7555
7556   fcvtmu   d,s  (fcvt to unsigned int, minus inf)
7557   fcvtmu   2d,4s,2s
7558   fcvtmu   w_s,x_s,w_d,x_d
7559
7560   fcvtn{2} 4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
7561
7562   fcvtns   d,s  (fcvt to signed int, nearest)
7563   fcvtns   2d,4s,2s
7564   fcvtns   w_s,x_s,w_d,x_d
7565
7566   fcvtnu   d,s  (fcvt to unsigned int, nearest)
7567   fcvtnu   2d,4s,2s
7568   fcvtnu   w_s,x_s,w_d,x_d
7569
7570   fcvtps   d,s  (fcvt to signed int, plus inf)
7571   fcvtps   2d,4s,2s
7572   fcvtps   w_s,x_s,w_d,x_d
7573
7574   fcvtpu   d,s  (fcvt to unsigned int, plus inf)
7575   fcvtpu   2d,4s,2s
7576   fcvtpu   w_s,x_s,w_d,x_d
7577
7578   fcvtxn   s_d (fcvt to lower prec narrow, rounding to odd)
7579   fcvtxn   2s_2d,4s_2d
7580
7581   fcvtzs   s,d (fcvt to signed fixedpt, to zero) (w/ #fbits)
7582   fcvtzs   2d,4s,2s
7583
7584   fcvtzs   s,d (fcvt to signed integer, to zero)
7585   fcvtzs   2d,4s,2s
7586
7587   fcvtzs   w_s,x_s,w_d,x_d (fcvt to signed fixedpt, to zero) (w/ #fbits)
7588
7589   fcvtzs   w_s,x_s,w_d,x_d (fcvt to signed integer, to zero)
7590
7591   fcvtzu   s,d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
7592   fcvtzu   2d,4s,2s
7593
7594   fcvtzu   s,d (fcvt to unsigned integer, to zero)
7595   fcvtzu   2d,4s,2s
7596
7597   fcvtzu   w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
7598
7599   fcvtzu   w_s,x_s,w_d,x_d (fcvt to unsigned integer, to zero)
7600
7601   fdiv     d,s
7602   fdiv     2d,4s,2s
7603
7604   fmadd    d,s
7605   fnmadd   d,s
7606   fnmsub   d,s
7607   fnmul    d,s
7608
7609   fmax     d,s
7610   fmin     d,s
7611
7612   fmax     2d,4s,2s
7613   fmin     2d,4s,2s
7614
7615   fmaxnm   d,s ("max number")
7616   fminnm   d,s
7617
7618   fmaxnm   2d,4s,2s
7619   fminnm   2d,4s,2s
7620
7621   fmaxnmp  d_2d,s_2s ("max number pairwise")
7622   fminnmp  d_2d,s_2s
7623
7624   fmaxnmp  2d,4s,2s
7625   fminnmp  2d,4s,2s
7626
7627   fmaxnmv  s_4s (maxnum across vector)
7628   fminnmv  s_4s
7629
7630   fmaxp    d_2d,s_2s (max of a pair)
7631   fminp    d_2d,s_2s (max of a pair)
7632
7633   fmaxp    2d,4s,2s  (max pairwise)
7634   fminp    2d,4s,2s
7635
7636   fmaxv    s_4s (max across vector)
7637   fminv    s_4s
7638
7639   fmla     d_d_d[],s_s_s[] (by element)
7640   fmla     2d_2d_d[],4s_4s_s[],2s_2s_s[]
7641
7642   fmla     2d,4s,2s
7643
7644   fmls     d_d_d[],s_s_s[] (by element)
7645   fmls     2d_2d_d[],4s_4s_s[],2s_2s_s[]
7646
7647   fmls     2d,4s,2s
7648
7649   fmov     2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
7650
7651   fmov     d_d,s_s
7652
7653   fmov     s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
7654
7655   fmov     d,s #imm
7656
7657   fmsub    d,s
7658
7659   fmul     d_d_d[],s_s_s[]
7660   fmul     2d_2d_d[],4s_4s_s[],2s_2s_s[]
7661
7662   fmul     2d,4s,2s
7663   fmul     d,s
7664
7665   fmulx    d_d_d[],s_s_s[]
7666   fmulx    2d_2d_d[],4s_4s_s[],2s_2s_s[]
7667
7668   fmulx    d,s
7669   fmulx    2d,4s,2s
7670
7671   fneg     d,s
7672   fneg     2d,4s,2s
7673
7674   frecpe   d,s (recip estimate)
7675   frecpe   2d,4s,2s
7676
7677   frecps   d,s (recip step)
7678   frecps   2d,4s,2s
7679
7680   frecpx   d,s (recip exponent)
7681
7682   frinta   2d,4s,2s (round to integral, nearest away)
7683   frinta   d,s
7684
7685   frinti   2d,4s,2s (round to integral, per FPCR)
7686   frinti   d,s
7687
7688   frintm   2d,4s,2s (round to integral, minus inf)
7689   frintm   d,s
7690
7691   frintn   2d,4s,2s (round to integral, nearest, to even)
7692   frintn   d,s
7693
7694   frintp   2d,4s,2s (round to integral, plus inf)
7695   frintp   d,s
7696
7697   frintx   2d,4s,2s (round to integral exact, per FPCR)
7698   frintx   d,s
7699
7700   frintz   2d,4s,2s (round to integral, zero)
7701   frintz   d,s
7702
7703   frsqrte  d,s (est)
7704   frsqrte  2d,4s,2s
7705
7706   frsqrts  d,s (step)
7707   frsqrts  2d,4s,2s
7708
7709   fsqrt    d,s
7710   fsqrt    2d,4s,2s
7711
7712   fsub     d,s
7713   fsub     2d,4s,2s
7714
7715   ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
7716
7717   ins      d[]_x, s[]_w, h[]_w, b[]_w
7718
7719   ld1  (multiple 1-element structures to 1/2/3/4 regs)
7720   ld1  (single 1-element structure to one lane of 1 reg)
7721   ld1r (single 1-element structure and rep to all lanes of 1 reg)
7722
7723   ld2  (multiple 2-element structures to 2 regs)
7724   ld2  (single 2-element structure to one lane of 2 regs)
7725   ld2r (single 2-element structure and rep to all lanes of 2 regs)
7726
7727   ld3  (multiple 3-element structures to 3 regs)
7728   ld3  (single 3-element structure to one lane of 3 regs)
7729   ld3r (single 3-element structure and rep to all lanes of 3 regs)
7730
7731   ld4  (multiple 4-element structures to 4 regs)
7732   ld4  (single 4-element structure to one lane of 4 regs)
7733   ld4r (single 4-element structure and rep to all lanes of 4 regs)
7734
7735   ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
7736         addr = reg + uimm7 * reg_size
7737
7738   ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
7739         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
7740
7741   ldr   q,d,s,h,b from addr
7742         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
7743
7744   ldr   q,d,s from  pc+#imm19
7745
7746   ldr   q,d,s,h,b from addr
7747         addr = [Xn|SP, R <extend> <shift]
7748
7749   ldur  q,d,s,h,b from addr
7750         addr = [Xn|SP,#imm] (unscaled offset)
7751
7752   mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
7753   mla   4s,2s,8h,4h,16b,8b
7754
7755   mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
7756   mls   4s,2s,8h,4h,16b,8b
7757
7758   movi  16b,8b   #imm8, LSL #0
7759   movi  8h,4h    #imm8, LSL #0 or 8
7760   movi  4s,2s    #imm8, LSL #0, 8, 16, 24
7761   movi  4s,2s    #imm8, MSL #8 or 16
7762   movi  d,       #imm64
7763   movi  2d,      #imm64
7764
7765   mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
7766   mul   4s,2s,8h,4h,16b,8b
7767
7768   mvni  8h,4h    #imm8, LSL #0 or 8
7769   mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
7770   mvni  4s,2s    #imm8, MSL #8 or 16
7771
7772   neg   d
7773   neg   2d,4s,2s,8h,4h,16b,8b
7774
7775   not   16b,8b
7776
7777   orn   16b,8b
7778
7779   orr   8h,4h   #imm8, LSL #0 or 8
7780   orr   4s,2s   #imm8, LSL #0, 8, 16 or 24
7781
7782   orr   16b,8b
7783
7784   pmul  16b,8b
7785
7786   pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1d_2d_2d
7787
7788   raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
7789
7790   rbit    16b,8b
7791   rev16   16b,8b
7792   rev32   16b,8b,8h,4h
7793   rev64   16b,8b,8h,4h,4s,2s
7794
7795   rshrn{2}  2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
7796
7797   rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
7798
7799   saba      16b,8b,8h,4h,4s,2s
7800   sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7801
7802   sabd      16b,8b,8h,4h,4s,2s
7803   sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7804
7805   sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
7806
7807   saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7808
7809   saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
7810
7811   saddlv    h_16b/8b, s_8h/4h, d_4s
7812
7813   saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
7814
7815   scvtf     d,s        _#fbits
7816   scvtf     2d,4s,2s   _#fbits
7817
7818   scvtf     d,s
7819   scvtf     2d,4s,2s
7820
7821   scvtf     s_w, d_w, s_x, d_x,   _#fbits
7822   scvtf     s_w, d_w, s_x, d_x
7823
7824   sha1c       q_s_4s
7825   sha1h       s_s
7826   sha1m       q_s_4s
7827   sha1p       q_s_4s
7828   sha1su0     4s_4s_4s
7829   sha1su1     4s_4s
7830   sha256h2    q_q_4s
7831   sha256h     q_q_4s
7832   sha256su0   4s_4s
7833   sha256su1   4s_4s_4s
7834
7835   shadd       16b,8b,8h,4h,4s,2s
7836
7837   shl         d_#imm
7838   shl         16b,8b,8h,4h,4s,2s,2d  _#imm
7839
7840   shll{2}   8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
7841
7842   shrn{2}  2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
7843
7844   shsub       16b,8b,8h,4h,4s,2s
7845
7846   sli         d_#imm
7847   sli         2d,4s,2s,8h,4h,16b,8b  _#imm
7848
7849   smax        4s,2s,8h,4h,16b,8b
7850
7851   smaxp       4s,2s,8h,4h,16b,8b
7852
7853   smaxv       s_4s,h_8h,h_4h,b_16b,b_8b
7854
7855   smin        4s,2s,8h,4h,16b,8b
7856
7857   sminp       4s,2s,8h,4h,16b,8b
7858
7859   sminv       s_4s,h_8h,h_4h,b_16b,b_8b
7860
7861   smlal{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
7862   smlal{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7863
7864   smlsl{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
7865   smlsl{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7866
7867   smov        w_b[], w_h[], x_b[], x_h[], x_s[]
7868
7869   smull{2}    2d_2s/4s_s[]. 4s_4h/8h_h[]
7870   smull{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7871
7872   sqabs       d,s,h,b
7873   sqabs       2d,4s,2s,8h,4h,16b,8b
7874
7875   sqadd       d,s,h,b
7876   sqadd       2d,4s,2s,8h,4h,16b,8b
7877
7878   sqdmlal     d_s_s[], s_h_h[]
7879   sqdmlal{2}  2d_2s/4s_s[], 4s_4h/8h_h[]
7880
7881   sqdmlal     d_s_s, s_h_h
7882   sqdmlal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
7883
7884   sqdmlsl     d_s_s[], s_h_h[]
7885   sqdmlsl{2}  2d_2s/4s_s[], 4s_4h/8h_h[]
7886
7887   sqdmlsl     d_s_s, s_h_h
7888   sqdmlsl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
7889
7890   sqdmulh     s_s_s[], h_h_h[]
7891   sqdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
7892
7893   sqdmulh     h,s
7894   sqdmulh     4s,2s,8h,4h
7895
7896   sqdmull     d_s_s[], s_h_h[]
7897   sqdmull{2}  2d_2s/4s_s[], 4s_4h/2h_h[]
7898
7899   sqdmull     d_s_s,s_h_h
7900   sqdmull{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
7901
7902   sqneg       d,s,h,b
7903   sqneg       2d,4s,2s,8h,4h,16b,8b
7904
7905   sqrdmulh    s_s_s[], h_h_h[]
7906   sqrdmulh    4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
7907
7908   sqrdmulh    h,s
7909   sqrdmulh    4s,2s,8h,4h
7910
7911   sqrshl      d,s,h,b
7912   sqrshl      2d,4s,2s,8h,4h,16b,8b
7913
7914   sqrshrn     s_d, h_s, b_h   #imm
7915   sqrshrn{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
7916
7917   sqrshrun     s_d, h_s, b_h   #imm
7918   sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
7919
7920   sqshl        d,s,h,b   _#imm
7921   sqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
7922
7923   sqshl        d,s,h,b
7924   sqshl        2d,4s,2s,8h,4h,16b,8b
7925
7926   sqshlu       d,s,h,b  _#imm
7927   sqshlu       2d,4s,2s,8h,4h,16b,8b  _#imm
7928
7929   sqshrn       s_d, h_s, b_h   #imm
7930   sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
7931
7932   sqshrun      s_d, h_s, b_h   #imm
7933   sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
7934
7935   sqsub       d,s,h,b
7936   sqsub       2d,4s,2s,8h,4h,16b,8b
7937
7938   sqxtn       s_d,h_s,b_h
7939   sqxtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
7940
7941   sqxtun      s_d,h_s,b_h
7942   sqxtun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h
7943
7944   srhadd      4s,2s,8h,4h,16b,8b
7945
7946   sri         d_#imm
7947   sri         2d,4s,2s,8h,4h,16b,8b  _#imm
7948
7949   srshl (reg) d
7950   srshl       2d,4s,2s,8h,4h,16b,8b
7951
7952   srshr (imm) d
7953   srshr       2d,4s,2s,8h,4h,16b,8b
7954
7955   srsra (imm) d
7956   srsra       2d,4s,2s,8h,4h,16b,8b
7957
7958   sshl (reg)  d
7959   sshl        2d,4s,2s,8h,4h,16b,8b
7960
7961   sshll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
7962
7963   sshr (imm)  d
7964   sshr        2d,4s,2s,8h,4h,16b,8b
7965
7966   ssra (imm)  d
7967   ssra        2d,4s,2s,8h,4h,16b,8b
7968
7969   ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
7970
7971   ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
7972
7973   st1 (multiple 1-element structures from 1/2/3/4 regs)
7974   st1 (single 1-element structure for 1 lane of 1 reg)
7975
7976   st2 (multiple 2-element structures from 2 regs)
7977   st2 (single 2-element structure from 1 lane of 2 regs)
7978
7979   st3 (multiple 3-element structures from 3 regs)
7980   st3 (single 3-element structure from 1 lane of 3 regs)
7981
7982   st4 (multiple 4-element structures from 4 regs)
7983   st4 (single 4-element structure from one lane of 4 regs)
7984
7985   stnp q_q_addr, d_d_addr, s_s_addr
7986        addr = [Xn|SP, #imm]
7987
7988   stp  q_q_addr, d_d_addr, s_s_addr
7989        addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
7990
7991   str  q,d,s,h,b_addr
7992        addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
7993
7994   str   q,d,s,h,b_addr
7995         addr = [Xn|SP, R <extend> <shift]
7996
7997   stur  q,d,s,h,b_addr
7998         addr = [Xn|SP,#imm] (unscaled offset)
7999
8000   sub   d
8001   sub   2d,4s,2s,8h,4h,16b,8b
8002
8003   subhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
8004
8005   suqadd  d,s,h,b
8006   suqadd  2d,4s,2s,8h,4h,16b,8b
8007
8008   tbl     8b_{16b}_8b, 16b_{16b}_16b
8009   tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
8010   tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
8011   tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
8012
8013   tbx     8b_{16b}_8b, 16b_{16b}_16b
8014   tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
8015   tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
8016   tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
8017
8018   trn1    2d,4s,2s,8h,4h,16b,8b
8019   trn2    2d,4s,2s,8h,4h,16b,8b
8020
8021   uaba      16b,8b,8h,4h,4s,2s
8022   uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8023
8024   uabd      16b,8b,8h,4h,4s,2s
8025   uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8026
8027   uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8028
8029   uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8030
8031   uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8032
8033   uaddlv    h_16b/8b, s_8h/4h, d_4s
8034
8035   uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8036
8037   ucvtf     d,s        _#fbits
8038   ucvtf     2d,4s,2s   _#fbits
8039
8040   ucvtf     d,s
8041   ucvtf     2d,4s,2s
8042
8043   ucvtf     s_w, d_w, s_x, d_x,   _#fbits
8044   ucvtf     s_w, d_w, s_x, d_x
8045
8046   uhadd       16b,8b,8h,4h,4s,2s
8047
8048   uhsub       16b,8b,8h,4h,4s,2s
8049
8050   umax        4s,2s,8h,4h,16b,8b
8051
8052   umaxp       4s,2s,8h,4h,16b,8b
8053
8054   umaxv       s_4s,h_8h,h_4h,b_16b,b_8b
8055
8056   umin        4s,2s,8h,4h,16b,8b
8057
8058   uminp       4s,2s,8h,4h,16b,8b
8059
8060   uminv       s_4s,h_8h,h_4h,b_16b,b_8b
8061
8062   umlal{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
8063   umlal{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8064
8065   umlsl{2}    2d_2s/4s_s[], 4s_4h/8h_h[]
8066   umlsl{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8067
8068   umov        w_b[], w_h[], x_b[], x_h[], x_s[]
8069
8070   umull{2}    2d_2s/4s_s[]. 4s_4h/8h_h[]
8071   umull{2}    2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8072
8073   uqadd       d,s,h,b
8074   uqadd       2d,4s,2s,8h,4h,16b,8b
8075
8076   uqrshl      d,s,h,b
8077   uqrshl      2d,4s,2s,8h,4h,16b,8b
8078
8079   uqrshrn     s_d, h_s, b_h   #imm
8080   uqrshrn{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8081
8082   uqshl        d,s,h,b   _#imm
8083   uqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
8084
8085   uqshl        d,s,h,b
8086   uqshl        2d,4s,2s,8h,4h,16b,8b
8087
8088   uqshrn       s_d, h_s, b_h   #imm
8089   uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8090
8091   uqsub       d,s,h,b
8092   uqsub       2d,4s,2s,8h,4h,16b,8b
8093
8094   uqxtn       s_d,h_s,b_h
8095   uqxtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8096
8097   urecpe      4s,2s
8098
8099   urhadd      4s,2s,8h,4h,16b,8b
8100
8101   urshl (reg) d
8102   urshl       2d,4s,2s,8h,4h,16b,8b
8103
8104   urshr (imm) d
8105   urshr       2d,4s,2s,8h,4h,16b,8b
8106
8107   ursqrte     4s,2s
8108
8109   ursra (imm) d
8110   ursra       2d,4s,2s,8h,4h,16b,8b
8111
8112   ushl (reg)  d
8113   ushl        2d,4s,2s,8h,4h,16b,8b
8114
8115   ushll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
8116
8117   ushr (imm)  d
8118   ushr        2d,4s,2s,8h,4h,16b,8b
8119
8120   usqadd      d,s,h,b
8121   usqadd      2d,4s,2s,8h,4h,16b,8b
8122
8123   usra (imm)  d
8124   usra        2d,4s,2s,8h,4h,16b,8b
8125
8126   usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8127
8128   usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8129
8130   uzp1      2d,4s,2s,8h,4h,16b,8b
8131   uzp2      2d,4s,2s,8h,4h,16b,8b
8132
8133   xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8134
8135   zip1      2d,4s,2s,8h,4h,16b,8b
8136   zip2      2d,4s,2s,8h,4h,16b,8b
8137*/
8138
8139
8140/* ---------------------------------------------------------------- */
8141/* -- List of insns, grouped somewhat by laneage configuration   -- */
8142/* ---------------------------------------------------------------- */
8143/*
8144   ======================== FP ========================
8145
8146   fabs      d,s
8147   fabs      2d,4s,2s
8148
8149   fneg      d,s
8150   fneg      2d,4s,2s
8151
8152   fsqrt     d,s
8153   fsqrt     2d,4s,2s
8154
8155   fadd      d,s
8156   fsub      d,s
8157
8158   fadd      2d,4s,2s
8159   fsub      2d,4s,2s
8160
8161   fabd      d,s
8162   fabd      2d,4s,2s
8163
8164   faddp     d,s (floating add pair)
8165   faddp     2d,4s,2s
8166
8167   fccmp     d,s (floating point conditional quiet compare)
8168   fccmpe    d,s (floating point conditional signaling compare)
8169
8170   fcmeq     d,s
8171   fcmge     d,s
8172   fcmgt     d,s
8173   facgt     d,s  (floating abs compare GE)
8174   facge     d,s  (floating abs compare GE)
8175
8176   fcmeq     2d,4s,2s
8177   fcmge     2d,4s,2s
8178   fcmgt     2d,4s,2s
8179   facge     2d,4s,2s
8180   facgt     2d,4s,2s
8181
8182   fcmeq_z   d,s
8183   fcmge_z   d,s
8184   fcmgt_z   d,s
8185   fcmle_z   d,s
8186   fcmlt_z   d,s
8187
8188   fcmeq_z   2d,4s,2s
8189   fcmge_z   2d,4s,2s
8190   fcmgt_z   2d,4s,2s
8191   fcmle_z   2d,4s,2s
8192   fcmlt_z   2d,4s,2s
8193
8194   fcmp_z    d,s
8195   fcmpe_z   d,s
8196   fcmp      d,s (floating point quiet, set flags)
8197   fcmpe     d,s (floating point signaling, set flags)
8198
8199   fcsel     d,s (fp cond select)
8200
8201   fdiv      d,s
8202   fdiv      2d,4s,2s
8203
8204   fmadd     d,s
8205   fnmadd    d,s
8206   fmsub     d,s
8207   fnmsub    d,s
8208
8209   fnmul     d,s
8210
8211   fmax      d,s
8212   fmin      d,s
8213   fmaxnm    d,s ("max number")
8214   fminnm    d,s
8215
8216   fmax      2d,4s,2s
8217   fmin      2d,4s,2s
8218   fmaxnm    2d,4s,2s
8219   fminnm    2d,4s,2s
8220
8221   fmaxnmp   d_2d,s_2s ("max number pairwise")
8222   fminnmp   d_2d,s_2s
8223
8224   fmaxnmp   2d,4s,2s
8225   fminnmp   2d,4s,2s
8226
8227   fmaxnmv   s_4s (maxnum across vector)
8228   fminnmv   s_4s
8229
8230   fmaxp     d_2d,s_2s (max of a pair)
8231   fminp     d_2d,s_2s (max of a pair)
8232
8233   fmaxp     2d,4s,2s  (max pairwise)
8234   fminp     2d,4s,2s
8235
8236   fmaxv     s_4s (max across vector)
8237   fminv     s_4s
8238
8239   fmla      2d,4s,2s
8240   fmls      2d,4s,2s
8241
8242   fmla      d_d_d[],s_s_s[] (by element)
8243   fmls      d_d_d[],s_s_s[] (by element)
8244
8245   fmla      2d_2d_d[],4s_4s_s[],2s_2s_s[]
8246   fmls      2d_2d_d[],4s_4s_s[],2s_2s_s[]
8247
8248   fmov      2d,4s,2s #imm (part of the MOVI/MVNI/ORR/BIC imm group)
8249
8250   fmov      d_d,s_s
8251
8252   fmov      s_w,w_s,d_x,d[1]_x,x_d,x_d[1]
8253
8254   fmov      d,s #imm
8255
8256   fmul      d_d_d[],s_s_s[]
8257   fmul      2d_2d_d[],4s_4s_s[],2s_2s_s[]
8258
8259   fmul      2d,4s,2s
8260   fmul      d,s
8261
8262   fmulx     d_d_d[],s_s_s[]
8263   fmulx     2d_2d_d[],4s_4s_s[],2s_2s_s[]
8264
8265   fmulx     d,s
8266   fmulx     2d,4s,2s
8267
8268   frecpe    d,s (recip estimate)
8269   frecpe    2d,4s,2s
8270
8271   frecps    d,s (recip step)
8272   frecps    2d,4s,2s
8273
8274   frecpx    d,s (recip exponent)
8275
8276   frinta    d,s
8277   frinti    d,s
8278   frintm    d,s
8279   frintn    d,s
8280   frintp    d,s
8281   frintx    d,s
8282   frintz    d,s
8283
8284   frinta    2d,4s,2s (round to integral, nearest away)
8285   frinti    2d,4s,2s (round to integral, per FPCR)
8286   frintm    2d,4s,2s (round to integral, minus inf)
8287   frintn    2d,4s,2s (round to integral, nearest, to even)
8288   frintp    2d,4s,2s (round to integral, plus inf)
8289   frintx    2d,4s,2s (round to integral exact, per FPCR)
8290   frintz    2d,4s,2s (round to integral, zero)
8291
8292   frsqrte   d,s (est)
8293   frsqrte   2d,4s,2s
8294
8295   frsqrts   d,s (step)
8296   frsqrts   2d,4s,2s
8297
8298   ======================== CONV ========================
8299
8300   fcvt      s_h,d_h,h_s,d_s,h_d,s_d (fp convert, scalar)
8301
8302   fcvtl{2}  4s/4h, 4s/8h, 2d/2s, 2d/4s (float convert to longer form)
8303
8304   fcvtn{2}  4h/4s, 8h/4s, 2s/2d, 4s/2d (float convert to narrower form)
8305
8306   fcvtas    d,s  (fcvt to signed int,   nearest, ties away)
8307   fcvtau    d,s  (fcvt to unsigned int, nearest, ties away)
8308   fcvtas    2d,4s,2s
8309   fcvtau    2d,4s,2s
8310   fcvtas    w_s,x_s,w_d,x_d
8311   fcvtau    w_s,x_s,w_d,x_d
8312
8313   fcvtms    d,s  (fcvt to signed int,   minus inf)
8314   fcvtmu    d,s  (fcvt to unsigned int, minus inf)
8315   fcvtms    2d,4s,2s
8316   fcvtmu    2d,4s,2s
8317   fcvtms    w_s,x_s,w_d,x_d
8318   fcvtmu    w_s,x_s,w_d,x_d
8319
8320   fcvtns    d,s  (fcvt to signed int,   nearest)
8321   fcvtnu    d,s  (fcvt to unsigned int, nearest)
8322   fcvtns    2d,4s,2s
8323   fcvtnu    2d,4s,2s
8324   fcvtns    w_s,x_s,w_d,x_d
8325   fcvtnu    w_s,x_s,w_d,x_d
8326
8327   fcvtps    d,s  (fcvt to signed int,   plus inf)
8328   fcvtpu    d,s  (fcvt to unsigned int, plus inf)
8329   fcvtps    2d,4s,2s
8330   fcvtpu    2d,4s,2s
8331   fcvtps    w_s,x_s,w_d,x_d
8332   fcvtpu    w_s,x_s,w_d,x_d
8333
8334   fcvtzs    d,s (fcvt to signed integer,   to zero)
8335   fcvtzu    d,s (fcvt to unsigned integer, to zero)
8336   fcvtzs    2d,4s,2s
8337   fcvtzu    2d,4s,2s
8338   fcvtzs    w_s,x_s,w_d,x_d
8339   fcvtzu    w_s,x_s,w_d,x_d
8340
8341   fcvtzs    d,s (fcvt to signed fixedpt,   to zero) (w/ #fbits)
8342   fcvtzu    d,s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
8343   fcvtzs    2d,4s,2s
8344   fcvtzu    2d,4s,2s
8345   fcvtzs    w_s,x_s,w_d,x_d (fcvt to signed fixedpt,   to zero) (w/ #fbits)
8346   fcvtzu    w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
8347
8348   fcvtxn    s_d (fcvt to lower prec narrow, rounding to odd)
8349   fcvtxn    2s_2d,4s_2d
8350
8351   scvtf     d,s        _#fbits
8352   ucvtf     d,s        _#fbits
8353
8354   scvtf     2d,4s,2s   _#fbits
8355   ucvtf     2d,4s,2s   _#fbits
8356
8357   scvtf     d,s
8358   ucvtf     d,s
8359
8360   scvtf     2d,4s,2s
8361   ucvtf     2d,4s,2s
8362
8363   scvtf     s_w, d_w, s_x, d_x,   _#fbits
8364   ucvtf     s_w, d_w, s_x, d_x,   _#fbits
8365
8366   scvtf     s_w, d_w, s_x, d_x
8367   ucvtf     s_w, d_w, s_x, d_x
8368
8369   ======================== INT ========================
8370
8371   abs       d
8372   neg       d
8373
8374   abs       2d,4s,2s,8h,4h,16b,8b
8375   neg       2d,4s,2s,8h,4h,16b,8b
8376
8377   add       d
8378   sub       d
8379
8380   add       2d,4s,2s,8h,4h,16b,8b
8381   sub       2d,4s,2s,8h,4h,16b,8b
8382
8383   addhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
8384   subhn{2}   2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
8385   raddhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
8386   rsubhn{2}  2s/4s_2d_2d, 4h/8h_4s_4s, 8b/16b_8h_8h
8387
8388   addp     d (add pairs, across)
8389   addp     2d,4s,2s,8h,4h,16b,8b
8390   addv     4s,8h,4h,16b,18b (reduce across vector)
8391
8392   and      16b,8b
8393
8394   orr      8h,4h   #imm8, LSL #0 or 8
8395   orr      4s,2s   #imm8, LSL #0, 8, 16 or 24
8396   bic      8h,4h   #imm8, LSL #0 or 8
8397   bic      4s,2s   #imm8, LSL #0, 8, 16 or 24
8398   also movi, mvni
8399
8400   bic      16b,8b (vector,reg) (bit clear)
8401   bif      16b,8b (vector) (bit insert if false)
8402   bit      16b,8b (vector) (bit insert if true)
8403   bsl      16b,8b (vector) (bit select)
8404
8405   cls      4s,2s,8h,4h,16b,8b (count leading sign bits)
8406   clz      4s,2s,8h,4h,16b,8b (count leading zero bits)
8407
8408   cmeq     d
8409   cmge     d
8410   cmgt     d
8411   cmhi     d
8412   cmhs     d
8413   cmtst    d
8414
8415   cmeq     2d,4s,2s,8h,4h,16b,8b
8416   cmge     2d,4s,2s,8h,4h,16b,8b
8417   cmgt     2d,4s,2s,8h,4h,16b,8b
8418   cmhi     2d,4s,2s,8h,4h,16b,8b
8419   cmhs     2d,4s,2s,8h,4h,16b,8b
8420   cmtst    2d,4s,2s,8h,4h,16b,8b
8421
8422   cmeq_z   d
8423   cmge_z   d
8424   cmgt_z   d
8425   cmle_z   d
8426   cmlt_z   d
8427
8428   cmeq_z   2d,4s,2s,8h,4h,16b,8b
8429   cmge_z   2d,4s,2s,8h,4h,16b,8b
8430   cmgt_z   2d,4s,2s,8h,4h,16b,8b
8431   cmle_z   2d,4s,2s,8h,4h,16b,8b
8432   cmlt_z   2d,4s,2s,8h,4h,16b,8b
8433
8434   cnt      16b,8b (population count per byte)
8435
8436   dup      d,s,h,b (vec elem to scalar)
8437   dup      2d,4s,2s,8h,4h,16b,8b (vec elem to vector)
8438   dup      2d,4s,2s,8h,4h,16b,8b (general reg to vector)
8439
8440   eor      16b,8b (vector)
8441   ext      16b,8b,#imm4 (concat 2 vectors, then slice)
8442
8443   ins      d[]_d[],s[]_s[],h[]_h[],b[]_b[]
8444
8445   ins      d[]_x, s[]_w, h[]_w, b[]_w
8446
8447   mla   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
8448   mla   4s,2s,8h,4h,16b,8b
8449
8450   mls   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
8451   mls   4s,2s,8h,4h,16b,8b
8452
8453   movi  16b,8b   #imm8, LSL #0
8454   movi  8h,4h    #imm8, LSL #0 or 8
8455   movi  4s,2s    #imm8, LSL #0, 8, 16, 24
8456   movi  4s,2s    #imm8, MSL #8 or 16
8457   movi  d,       #imm64
8458   movi  2d,      #imm64
8459
8460   mul   4s_4s_s[],2s_2s_s[],8h_8h_h[],4h_4h_h[]
8461   mul   4s,2s,8h,4h,16b,8b
8462
8463   mvni  8h,4h    #imm8, LSL #0 or 8
8464   mvni  4s,2s    #imm8, LSL #0, 8, 16, 24
8465   mvni  4s,2s    #imm8, MSL #8 or 16
8466
8467   not   16b,8b
8468
8469   orn   16b,8b
8470   orr   16b,8b
8471
8472   pmul  16b,8b
8473
8474   pmull{2}  8h_8b_8b,8h_16b_16b,1q_1d_1d,1d_2d_2d
8475
8476   rbit    16b,8b
8477   rev16   16b,8b
8478   rev32   16b,8b,8h,4h
8479   rev64   16b,8b,8h,4h,4s,2s
8480
8481   saba      16b,8b,8h,4h,4s,2s
8482   uaba      16b,8b,8h,4h,4s,2s
8483
8484   sabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8485   uabal{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8486
8487   sabd      16b,8b,8h,4h,4s,2s
8488   uabd      16b,8b,8h,4h,4s,2s
8489
8490   sabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8491   uabdl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8492
8493   sadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8494   uadalp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8495
8496   saddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8497   uaddl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8498   ssubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8499   usubl{2}  2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8500
8501   saddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8502   uaddlp    4h_8b,8h_16b,2s_4h,4s_8h,1d_2s,2d_4s
8503
8504   saddlv    h_16b/8b, s_8h/4h, d_4s
8505   uaddlv    h_16b/8b, s_8h/4h, d_4s
8506
8507   saddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8508   uaddw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8509   ssubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8510   usubw{2}  8h_8h_16b/8b, 4s_4s_8h/4h, 2d_2d_2s/4s
8511
8512   shadd        16b,8b,8h,4h,4s,2s
8513   uhadd        16b,8b,8h,4h,4s,2s
8514   shsub        16b,8b,8h,4h,4s,2s
8515   uhsub        16b,8b,8h,4h,4s,2s
8516
8517   shl          d_#imm
8518   shl          16b,8b,8h,4h,4s,2s,2d  _#imm
8519
8520   shll{2}      8h_8b/16b_#8, 4s_4h/8h_#16, 2d_2s/4s_#32
8521
8522   shrn{2}      2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
8523   rshrn{2}     2s/4s_2d, 8h/4h_4s, 2s/4s_2d,   #imm in 1 .. elem_bits
8524
8525   sli          d_#imm
8526   sri          d_#imm
8527
8528   sli          2d,4s,2s,8h,4h,16b,8b  _#imm
8529   sri          2d,4s,2s,8h,4h,16b,8b  _#imm
8530
8531   smax         4s,2s,8h,4h,16b,8b
8532   umax         4s,2s,8h,4h,16b,8b
8533   smin         4s,2s,8h,4h,16b,8b
8534   umin         4s,2s,8h,4h,16b,8b
8535
8536   smaxp        4s,2s,8h,4h,16b,8b
8537   umaxp        4s,2s,8h,4h,16b,8b
8538   sminp        4s,2s,8h,4h,16b,8b
8539   uminp        4s,2s,8h,4h,16b,8b
8540
8541   smaxv        s_4s,h_8h,h_4h,b_16b,b_8b
8542   umaxv        s_4s,h_8h,h_4h,b_16b,b_8b
8543   sminv        s_4s,h_8h,h_4h,b_16b,b_8b
8544   uminv        s_4s,h_8h,h_4h,b_16b,b_8b
8545
8546   smlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
8547   umlal{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
8548   smlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
8549   umlsl{2}     2d_2s/4s_s[], 4s_4h/8h_h[]
8550   smull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
8551   umull{2}     2d_2s/4s_s[]. 4s_4h/8h_h[]
8552
8553   smlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8554   umlal{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8555   smlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8556   umlsl{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8557   smull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8558   umull{2}     2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h), 8h_(8b_8b)/(16b_16b)
8559
8560   smov         w_b[], w_h[], x_b[], x_h[], x_s[]
8561   umov         w_b[], w_h[], x_b[], x_h[], x_s[]
8562
8563   sqabs        d,s,h,b
8564   sqneg        d,s,h,b
8565
8566   sqabs        2d,4s,2s,8h,4h,16b,8b
8567   sqneg        2d,4s,2s,8h,4h,16b,8b
8568
8569   sqadd        d,s,h,b
8570   uqadd        d,s,h,b
8571   sqsub        d,s,h,b
8572   uqsub        d,s,h,b
8573
8574   sqadd        2d,4s,2s,8h,4h,16b,8b
8575   uqadd        2d,4s,2s,8h,4h,16b,8b
8576   sqsub        2d,4s,2s,8h,4h,16b,8b
8577   uqsub        2d,4s,2s,8h,4h,16b,8b
8578
8579   sqdmlal      d_s_s[], s_h_h[]
8580   sqdmlsl      d_s_s[], s_h_h[]
8581   sqdmull      d_s_s[], s_h_h[]
8582
8583   sqdmlal{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
8584   sqdmlsl{2}   2d_2s/4s_s[], 4s_4h/8h_h[]
8585   sqdmull{2}   2d_2s/4s_s[], 4s_4h/2h_h[]
8586
8587   sqdmlal      d_s_s, s_h_h
8588   sqdmlsl      d_s_s, s_h_h
8589   sqdmull      d_s_s, s_h_h
8590
8591   sqdmlal{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
8592   sqdmlsl{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
8593   sqdmull{2}   2d_(2s_2s)/(4s_4s), 4s_(4h_4h)/(8h_8h)
8594
8595   sqdmulh      s_s_s[], h_h_h[]
8596   sqrdmulh     s_s_s[], h_h_h[]
8597
8598   sqdmulh      4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
8599   sqrdmulh     4s_4s_s[], 2s_2s_s[], 8h_8h_h[], 4h_4h_h[]
8600
8601   sqdmulh      h,s
8602   sqrdmulh     h,s
8603
8604   sqdmulh      4s,2s,8h,4h
8605   sqrdmulh     4s,2s,8h,4h
8606
8607   sqshl        d,s,h,b
8608   uqshl        d,s,h,b
8609   sqrshl       d,s,h,b
8610   uqrshl       d,s,h,b
8611
8612   sqshl        2d,4s,2s,8h,4h,16b,8b
8613   uqshl        2d,4s,2s,8h,4h,16b,8b
8614   sqrshl       2d,4s,2s,8h,4h,16b,8b
8615   uqrshl       2d,4s,2s,8h,4h,16b,8b
8616
8617   sqrshrn      s_d, h_s, b_h   #imm
8618   uqrshrn      s_d, h_s, b_h   #imm
8619   sqshrn       s_d, h_s, b_h   #imm
8620   uqshrn       s_d, h_s, b_h   #imm
8621
8622   sqrshrun     s_d, h_s, b_h   #imm
8623   sqshrun      s_d, h_s, b_h   #imm
8624
8625   sqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8626   uqrshrn{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8627   sqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8628   uqshrn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8629
8630   sqrshrun{2}  2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8631   sqshrun{2}   2s/4s_2d, 4h/8h_4s, 8b/16b_8h,  #imm
8632
8633   sqshl        d,s,h,b   _#imm
8634   uqshl        d,s,h,b   _#imm
8635   sqshlu       d,s,h,b   _#imm
8636
8637   sqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
8638   uqshl        2d,4s,2s,8h,4h,16b,8b   _#imm
8639   sqshlu       2d,4s,2s,8h,4h,16b,8b   _#imm
8640
8641   sqxtn        s_d,h_s,b_h
8642   uqxtn        s_d,h_s,b_h
8643   sqxtun       s_d,h_s,b_h
8644
8645   sqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8646   uqxtn{2}     2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8647   sqxtun{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8648
8649   srhadd       4s,2s,8h,4h,16b,8b
8650   urhadd       4s,2s,8h,4h,16b,8b
8651
8652   sshl (reg)   d
8653   ushl (reg)   d
8654   sshr (imm)   d
8655   ushr (imm)   d
8656   ssra (imm)   d
8657   usra (imm)   d
8658
8659   srshl (reg)  d
8660   urshl (reg)  d
8661   srshr (imm)  d
8662   urshr (imm)  d
8663   srsra (imm)  d
8664   ursra (imm)  d
8665
8666   sshl         2d,4s,2s,8h,4h,16b,8b
8667   ushl         2d,4s,2s,8h,4h,16b,8b
8668   sshr         2d,4s,2s,8h,4h,16b,8b
8669   ushr         2d,4s,2s,8h,4h,16b,8b
8670   ssra         2d,4s,2s,8h,4h,16b,8b
8671   usra         2d,4s,2s,8h,4h,16b,8b
8672
8673   srshl        2d,4s,2s,8h,4h,16b,8b
8674   urshl        2d,4s,2s,8h,4h,16b,8b
8675   srshr        2d,4s,2s,8h,4h,16b,8b
8676   urshr        2d,4s,2s,8h,4h,16b,8b
8677   srsra        2d,4s,2s,8h,4h,16b,8b
8678   ursra        2d,4s,2s,8h,4h,16b,8b
8679
8680   sshll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
8681   ushll{2} (imm)  2d_2s/4s  4s_4h/8h, 8h_8b/16b
8682
8683   suqadd  d,s,h,b
8684   suqadd  2d,4s,2s,8h,4h,16b,8b
8685
8686   tbl     8b_{16b}_8b, 16b_{16b}_16b
8687   tbl     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
8688   tbl     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
8689   tbl     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
8690
8691   tbx     8b_{16b}_8b, 16b_{16b}_16b
8692   tbx     8b_{16b,16b}_8b, 16b_{16b,16b}_16b
8693   tbx     8b_{16b,16b,16b}_8b, 16b_{16b,16b,16b}_16b
8694   tbx     8b_{16b,16b,16b,16b}_8b, 16b_{16b,16b,16b,16b}_16b
8695
8696   trn1    2d,4s,2s,8h,4h,16b,8b
8697   trn2    2d,4s,2s,8h,4h,16b,8b
8698
8699   urecpe      4s,2s
8700
8701   ursqrte     4s,2s
8702
8703   usqadd      d,s,h,b
8704   usqadd      2d,4s,2s,8h,4h,16b,8b
8705
8706   uzp1      2d,4s,2s,8h,4h,16b,8b
8707   uzp2      2d,4s,2s,8h,4h,16b,8b
8708
8709   xtn{2}    2s/4s_2d, 4h/8h_4s, 8b/16b_8h
8710
8711   zip1      2d,4s,2s,8h,4h,16b,8b
8712   zip2      2d,4s,2s,8h,4h,16b,8b
8713
8714   ======================== MEM ========================
8715
8716   ld1  (multiple 1-element structures to 1/2/3/4 regs)
8717   ld1  (single 1-element structure to one lane of 1 reg)
8718   ld1r (single 1-element structure and rep to all lanes of 1 reg)
8719
8720   ld2  (multiple 2-element structures to 2 regs)
8721   ld2  (single 2-element structure to one lane of 2 regs)
8722   ld2r (single 2-element structure and rep to all lanes of 2 regs)
8723
8724   ld3  (multiple 3-element structures to 3 regs)
8725   ld3  (single 3-element structure to one lane of 3 regs)
8726   ld3r (single 3-element structure and rep to all lanes of 3 regs)
8727
8728   ld4  (multiple 4-element structures to 4 regs)
8729   ld4  (single 4-element structure to one lane of 4 regs)
8730   ld4r (single 4-element structure and rep to all lanes of 4 regs)
8731
8732   ldnp  q_q_addr,d_d_addr,s_s_addr  (load pair w/ non-temporal hint)
8733         addr = reg + uimm7 * reg_size
8734
8735   ldp   q_q_addr,d_d_addr,s_s_addr  (load pair)
8736         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
8737
8738   ldr   q,d,s,h,b from addr
8739         addr = [Xn|SP],#imm   or [Xn|SP,#imm]!  or [Xn|SP,#imm]
8740
8741   ldr   q,d,s from  pc+#imm19
8742
8743   ldr   q,d,s,h,b from addr
8744         addr = [Xn|SP, R <extend> <shift]
8745
8746   ldur  q,d,s,h,b from addr
8747         addr = [Xn|SP,#imm] (unscaled offset)
8748
8749   st1 (multiple 1-element structures from 1/2/3/4 regs)
8750   st1 (single 1-element structure for 1 lane of 1 reg)
8751
8752   st2 (multiple 2-element structures from 2 regs)
8753   st2 (single 2-element structure from 1 lane of 2 regs)
8754
8755   st3 (multiple 3-element structures from 3 regs)
8756   st3 (single 3-element structure from 1 lane of 3 regs)
8757
8758   st4 (multiple 4-element structures from 4 regs)
8759   st4 (single 4-element structure from one lane of 4 regs)
8760
8761   stnp q_q_addr, d_d_addr, s_s_addr
8762        addr = [Xn|SP, #imm]
8763
8764   stp  q_q_addr, d_d_addr, s_s_addr
8765        addr = [Xn|SP], #imm  or [Xn|SP, #imm]!  or [Xn|SP, #imm]
8766
8767   str  q,d,s,h,b_addr
8768        addr = [Xn|SP], #simm  or [Xn|SP, #simm]!  or [Xn|SP, #pimm]
8769
8770   str   q,d,s,h,b_addr
8771         addr = [Xn|SP, R <extend> <shift]
8772
8773   stur  q,d,s,h,b_addr
8774         addr = [Xn|SP,#imm] (unscaled offset)
8775
8776   ======================== CRYPTO ========================
8777
8778   aesd       16b (aes single round decryption)
8779   aese       16b (aes single round encryption)
8780   aesimc     16b (aes inverse mix columns)
8781   aesmc      16b (aes mix columns)
8782
8783   sha1c      q_s_4s
8784   sha1h      s_s
8785   sha1m      q_s_4s
8786   sha1p      q_s_4s
8787   sha1su0    4s_4s_4s
8788   sha1su1    4s_4s
8789
8790   sha256h2   q_q_4s
8791   sha256h    q_q_4s
8792   sha256su0  4s_4s
8793   sha256su1  4s_4s_4s
8794*/
8795