Home | History | Annotate | Download | only in arm64
      1 
      2 /* To compile:
      3    aarch64-linux-gnu-gcc -Wall -g -O0 -o memory none/tests/arm64/memory.c
      4 */
      5 
      6 #include <stdio.h>
      7 #include <malloc.h>  // memalign
      8 #include <string.h>  // memset
      9 #include "tests/malloc.h"
     10 #include <assert.h>
     11 
     12 typedef  unsigned char           UChar;
     13 typedef  unsigned short int      UShort;
     14 typedef  unsigned int            UInt;
     15 typedef  signed int              Int;
     16 typedef  unsigned char           UChar;
     17 typedef  signed long long int    Long;
     18 typedef  unsigned long long int  ULong;
     19 
     20 typedef  unsigned char           Bool;
     21 #define False ((Bool)0)
     22 #define True  ((Bool)1)
     23 
     24 static inline UChar randUChar ( void )
     25 {
     26    static UInt seed = 80021;
     27    seed = 1103515245 * seed + 12345;
     28    return (seed >> 17) & 0xFF;
     29 }
     30 
     31 static ULong randULong ( void )
     32 {
     33    Int i;
     34    ULong r = 0;
     35    for (i = 0; i < 8; i++) {
     36       r = (r << 8) | (ULong)(0xFF & randUChar());
     37    }
     38    return r;
     39 }
     40 
     41 
     42 // Same as TESTINST2 except it doesn't print the RN value, since
     43 // that may differ between runs (it's a stack address).  Also,
     44 // claim it trashes x28 so that can be used as scratch if needed.
     45 #define TESTINST2_hide2(instruction, RNval, RD, RN, carryin) \
     46 { \
     47    ULong out; \
     48    ULong nzcv_out; \
     49    ULong nzcv_in = (carryin ? (1<<29) : 0); \
     50    __asm__ __volatile__( \
     51       "msr nzcv,%3;" \
     52       "mov " #RN ",%2;" \
     53       instruction ";" \
     54       "mov %0," #RD ";" \
     55       "mrs %1,nzcv;" \
     56       : "=&r" (out), "=&r" (nzcv_out) \
     57       : "r" (RNval), "r" (nzcv_in) \
     58       : #RD, #RN, "cc", "memory", "x28"  \
     59    ); \
     60    printf("%s :: rd %016llx rn (hidden), " \
     61           "cin %d, nzcv %08llx %c%c%c%c\n",       \
     62       instruction, out, \
     63       carryin ? 1 : 0, \
     64       nzcv_out & 0xffff0000, \
     65       ((1<<31) & nzcv_out) ? 'N' : ' ', \
     66       ((1<<30) & nzcv_out) ? 'Z' : ' ', \
     67       ((1<<29) & nzcv_out) ? 'C' : ' ', \
     68       ((1<<28) & nzcv_out) ? 'V' : ' ' \
     69       ); \
     70 }
     71 
     72 #define TESTINST3_hide2and3(instruction, RMval, RNval, RD, RM, RN, carryin) \
     73 { \
     74    ULong out; \
     75    ULong nzcv_out; \
     76    ULong nzcv_in = (carryin ? (1<<29) : 0); \
     77    __asm__ __volatile__( \
     78       "msr nzcv,%4;" \
     79       "mov " #RM ",%2;" \
     80       "mov " #RN ",%3;" \
     81       instruction ";" \
     82       "mov %0," #RD ";" \
     83       "mrs %1,nzcv;" \
     84       : "=&r" (out), "=&r" (nzcv_out) \
     85       : "r" (RMval), "r" (RNval), "r" (nzcv_in) \
     86       : #RD, #RM, #RN, "cc", "memory" \
     87    ); \
     88    printf("%s :: rd %016llx rm (hidden), rn (hidden), " \
     89           "cin %d, nzcv %08llx %c%c%c%c\n",       \
     90       instruction, out, \
     91       carryin ? 1 : 0, \
     92       nzcv_out & 0xffff0000, \
     93       ((1<<31) & nzcv_out) ? 'N' : ' ', \
     94       ((1<<30) & nzcv_out) ? 'Z' : ' ', \
     95       ((1<<29) & nzcv_out) ? 'C' : ' ', \
     96       ((1<<28) & nzcv_out) ? 'V' : ' ' \
     97       ); \
     98 }
     99 
    100 
    101 ////////////////////////////////////////////////////////////////
    102 ////////////////////////////////////////////////////////////////
    103 ////////////////////////////////////////////////////////////////
    104 //                                                            //
    105 // test_memory_old                                            //
    106 //                                                            //
    107 ////////////////////////////////////////////////////////////////
    108 ////////////////////////////////////////////////////////////////
    109 ////////////////////////////////////////////////////////////////
    110 
    111 static __attribute((noinline)) void test_memory_old ( void )
    112 {
    113 printf("Integer loads\n");
    114 
    115 unsigned char area[512];
    116 
    117 #define RESET \
    118    do { int i; for (i = 0; i < sizeof(area); i++) \
    119           area[i] = i | 0x80; \
    120    } while (0)
    121 
    122 #define AREA_MID (((ULong)(&area[(sizeof(area)/2)-1])) & (~(ULong)0xF))
    123 
    124 RESET;
    125 
    126 ////////////////////////////////////////////////////////////////
    127 printf("LDR,STR (immediate, uimm12) (STR cases are MISSING)");
    128 TESTINST2_hide2("ldr  x21, [x22, #24]", AREA_MID, x21,x22,0);
    129 TESTINST2_hide2("ldr  w21, [x22, #20]", AREA_MID, x21,x22,0);
    130 TESTINST2_hide2("ldrh w21, [x22, #44]", AREA_MID, x21,x22,0);
    131 TESTINST2_hide2("ldrb w21, [x22, #56]", AREA_MID, x21,x22,0);
    132 
    133 ////////////////////////////////////////////////////////////////
    134 printf("LDUR,STUR (immediate, simm9) (STR cases and wb check are MISSING)\n");
    135 TESTINST2_hide2("ldr x21, [x22], #-24", AREA_MID, x21,x22,0);
    136 TESTINST2_hide2("ldr x21, [x22, #-40]!", AREA_MID, x21,x22,0);
    137 TESTINST2_hide2("ldr x21, [x22, #-48]", AREA_MID, x21,x22,0);
    138 printf("LDUR,STUR (immediate, simm9): STR cases are MISSING");
    139 
    140 ////////////////////////////////////////////////////////////////
    141 // TESTINST2_hide2 allows use of x28 as scratch
    142 printf("LDP,STP (immediate, simm7) (STR cases and wb check is MISSING)\n");
    143 
    144 TESTINST2_hide2("ldp x21, x28, [x22], #-24 ; add x21,x21,x28", AREA_MID, x21,x22,0);
    145 TESTINST2_hide2("ldp x21, x28, [x22], #-24 ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    146 TESTINST2_hide2("ldp x21, x28, [x22, #-40]! ; add x21,x21,x28", AREA_MID, x21,x22,0);
    147 TESTINST2_hide2("ldp x21, x28, [x22, #-40]! ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    148 TESTINST2_hide2("ldp x21, x28, [x22, #-40] ; add x21,x21,x28", AREA_MID, x21,x22,0);
    149 TESTINST2_hide2("ldp x21, x28, [x22, #-40] ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    150 
    151 TESTINST2_hide2("ldp w21, w28, [x22], #-24 ; add x21,x21,x28", AREA_MID, x21,x22,0);
    152 TESTINST2_hide2("ldp w21, w28, [x22], #-24 ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    153 TESTINST2_hide2("ldp w21, w28, [x22, #-40]! ; add x21,x21,x28", AREA_MID, x21,x22,0);
    154 TESTINST2_hide2("ldp w21, w28, [x22, #-40]! ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    155 TESTINST2_hide2("ldp w21, w28, [x22, #-40] ; add x21,x21,x28", AREA_MID, x21,x22,0);
    156 TESTINST2_hide2("ldp w21, w28, [x22, #-40] ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    157 
    158 ////////////////////////////////////////////////////////////////
    159 // This is a bit tricky.  We load the value from just before and
    160 // just after the actual instruction.  So we place a couple of
    161 // nop insns either side of the test insn, these should "safe"
    162 // to check.
    163 
    164 printf("LDR (literal, int reg)\n");
    165 TESTINST2_hide2("nop; nop; nop; xyzzy00: ldr  x21, xyzzy00 - 8; nop; nop; nop", AREA_MID, x21,x22,0);
    166 TESTINST2_hide2("nop; nop; nop; xyzzy01: ldr  x21, xyzzy01 + 0; nop; nop; nop", AREA_MID, x21,x22,0);
    167 TESTINST2_hide2("nop; nop; nop; xyzzy02: ldr  x21, xyzzy02 + 8; nop; nop; nop", AREA_MID, x21,x22,0);
    168 
    169 TESTINST2_hide2("nop; nop; nop; xyzzy03: ldr  x21, xyzzy03 - 4; nop; nop; nop", AREA_MID, x21,x22,0);
    170 TESTINST2_hide2("nop; nop; nop; xyzzy04: ldr  x21, xyzzy04 + 0; nop; nop; nop", AREA_MID, x21,x22,0);
    171 TESTINST2_hide2("nop; nop; nop; xyzzy05: ldr  x21, xyzzy05 + 4; nop; nop; nop", AREA_MID, x21,x22,0);
    172 
    173 ////////////////////////////////////////////////////////////////
    174 printf("{LD,ST}R (integer register) (entirely MISSING)\n");
    175 
    176 ////////////////////////////////////////////////////////////////
    177 printf("LDRS{B,H,W} (uimm12)\n");
    178 TESTINST2_hide2("ldrsw x21, [x22, #24]", AREA_MID, x21,x22,0);
    179 TESTINST2_hide2("ldrsh x21, [x22, #20]", AREA_MID, x21,x22,0);
    180 TESTINST2_hide2("ldrsh w21, [x22, #44]", AREA_MID, x21,x22,0);
    181 TESTINST2_hide2("ldrsb x21, [x22, #88]", AREA_MID, x21,x22,0);
    182 TESTINST2_hide2("ldrsb w21, [x22, #56]", AREA_MID, x21,x22,0);
    183 
    184 ////////////////////////////////////////////////////////////////
    185 printf("LDRS{B,H,W} (simm9, upd) (upd check is MISSING)\n");
    186 TESTINST2_hide2("ldrsw x21, [x22, #-24]!", AREA_MID, x21,x22,0);
    187 TESTINST2_hide2("ldrsh x21, [x22, #-20]!", AREA_MID, x21,x22,0);
    188 TESTINST2_hide2("ldrsh w21, [x22, #-44]!", AREA_MID, x21,x22,0);
    189 TESTINST2_hide2("ldrsb x21, [x22, #-88]!", AREA_MID, x21,x22,0);
    190 TESTINST2_hide2("ldrsb w21, [x22, #-56]!", AREA_MID, x21,x22,0);
    191 
    192 TESTINST2_hide2("ldrsw x21, [x22], #-24", AREA_MID, x21,x22,0);
    193 TESTINST2_hide2("ldrsh x21, [x22], #-20", AREA_MID, x21,x22,0);
    194 TESTINST2_hide2("ldrsh w21, [x22], #-44", AREA_MID, x21,x22,0);
    195 TESTINST2_hide2("ldrsb x21, [x22], #-88", AREA_MID, x21,x22,0);
    196 TESTINST2_hide2("ldrsb w21, [x22], #-56", AREA_MID, x21,x22,0);
    197 
    198 ////////////////////////////////////////////////////////////////
    199 printf("LDRS{B,H,W} (simm9, noUpd)\n");
    200 TESTINST2_hide2("ldrsw x21, [x22, #-24]", AREA_MID, x21,x22,0);
    201 TESTINST2_hide2("ldrsh x21, [x22, #-20]", AREA_MID, x21,x22,0);
    202 TESTINST2_hide2("ldrsh w21, [x22, #-44]", AREA_MID, x21,x22,0);
    203 TESTINST2_hide2("ldrsb x21, [x22, #-88]", AREA_MID, x21,x22,0);
    204 TESTINST2_hide2("ldrsb w21, [x22, #-56]", AREA_MID, x21,x22,0);
    205 
    206 ////////////////////////////////////////////////////////////////
    207 printf("LDP,STP (immediate, simm7) (FP&VEC) (entirely MISSING)\n");
    208 
    209 ////////////////////////////////////////////////////////////////
    210 printf("{LD,ST}R (vector register) (entirely MISSING)\n");
    211 
    212 ////////////////////////////////////////////////////////////////
    213 printf("LDRS{B,H,W} (integer register, SX)\n");
    214 
    215 TESTINST3_hide2and3("ldrsw x21, [x22,x23]", AREA_MID, 5, x21,x22,x23,0);
    216 TESTINST3_hide2and3("ldrsw x21, [x22,x23, lsl #2]", AREA_MID, 5, x21,x22,x23,0);
    217 TESTINST3_hide2and3("ldrsw x21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    218 TESTINST3_hide2and3("ldrsw x21, [x22,w23,uxtw #2]", AREA_MID, 5, x21,x22,x23,0);
    219 TESTINST3_hide2and3("ldrsw x21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    220 TESTINST3_hide2and3("ldrsw x21, [x22,w23,sxtw #2]", AREA_MID, -5ULL, x21,x22,x23,0);
    221 
    222 TESTINST3_hide2and3("ldrsh x21, [x22,x23]", AREA_MID, 5, x21,x22,x23,0);
    223 TESTINST3_hide2and3("ldrsh x21, [x22,x23, lsl #1]", AREA_MID, 5, x21,x22,x23,0);
    224 TESTINST3_hide2and3("ldrsh x21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    225 TESTINST3_hide2and3("ldrsh x21, [x22,w23,uxtw #1]", AREA_MID, 5, x21,x22,x23,0);
    226 TESTINST3_hide2and3("ldrsh x21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    227 TESTINST3_hide2and3("ldrsh x21, [x22,w23,sxtw #1]", AREA_MID, -5ULL, x21,x22,x23,0);
    228 
    229 TESTINST3_hide2and3("ldrsh w21, [x22,x23]", AREA_MID, 5, x21,x22,x23,0);
    230 TESTINST3_hide2and3("ldrsh w21, [x22,x23, lsl #1]", AREA_MID, 5, x21,x22,x23,0);
    231 TESTINST3_hide2and3("ldrsh w21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    232 TESTINST3_hide2and3("ldrsh w21, [x22,w23,uxtw #1]", AREA_MID, 5, x21,x22,x23,0);
    233 TESTINST3_hide2and3("ldrsh w21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    234 TESTINST3_hide2and3("ldrsh w21, [x22,w23,sxtw #1]", AREA_MID, -5ULL, x21,x22,x23,0);
    235 
    236 TESTINST3_hide2and3("ldrsb x21, [x22,x23]", AREA_MID, 5, x21,x22,x23,0);
    237 TESTINST3_hide2and3("ldrsb x21, [x22,x23, lsl #0]", AREA_MID, 5, x21,x22,x23,0);
    238 TESTINST3_hide2and3("ldrsb x21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    239 TESTINST3_hide2and3("ldrsb x21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    240 TESTINST3_hide2and3("ldrsb x21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    241 TESTINST3_hide2and3("ldrsb x21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    242 
    243 TESTINST3_hide2and3("ldrsb w21, [x22,x23]", AREA_MID, 5, x21,x22,x23,0);
    244 TESTINST3_hide2and3("ldrsb w21, [x22,x23, lsl #0]", AREA_MID, 5, x21,x22,x23,0);
    245 TESTINST3_hide2and3("ldrsb w21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    246 TESTINST3_hide2and3("ldrsb w21, [x22,w23,uxtw #0]", AREA_MID, 5, x21,x22,x23,0);
    247 TESTINST3_hide2and3("ldrsb w21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    248 TESTINST3_hide2and3("ldrsb w21, [x22,w23,sxtw #0]", AREA_MID, -5ULL, x21,x22,x23,0);
    249 
    250 ////////////////////////////////////////////////////////////////
    251 printf("LDR/STR (immediate, SIMD&FP, unsigned offset) (entirely MISSING)\n");
    252 
    253 ////////////////////////////////////////////////////////////////
    254 printf("LDR/STR (immediate, SIMD&FP, pre/post index) (entirely MISSING)\n");
    255 
    256 ////////////////////////////////////////////////////////////////
    257 printf("LDUR/STUR (unscaled offset, SIMD&FP) (entirely MISSING)\n");
    258 
    259 ////////////////////////////////////////////////////////////////
    260 printf("LDR (literal, SIMD&FP) (entirely MISSING)\n");
    261 
    262 ////////////////////////////////////////////////////////////////
    263 printf("LD1/ST1 (single structure, no offset) (entirely MISSING)\n");
    264 
    265 ////////////////////////////////////////////////////////////////
    266 printf("LD1/ST1 (single structure, post index) (entirely MISSING)\n");
    267 
    268 ////////////////////////////////////////////////////////////////
    269 printf("LD{,A}X{R,RH,RB} (entirely MISSING)\n");
    270 
    271 ////////////////////////////////////////////////////////////////
    272 printf("ST{,L}X{R,RH,RB} (entirely MISSING)\n");
    273 
    274 ////////////////////////////////////////////////////////////////
    275 printf("LDA{R,RH,RB}\n");
    276 TESTINST2_hide2("ldar  x21, [x22]", AREA_MID, x21,x22,0);
    277 TESTINST2_hide2("ldar  w21, [x22]", AREA_MID, x21,x22,0);
    278 TESTINST2_hide2("ldarh w21, [x22]", AREA_MID, x21,x22,0);
    279 TESTINST2_hide2("ldarb w21, [x22]", AREA_MID, x21,x22,0);
    280 
    281 ////////////////////////////////////////////////////////////////
    282 printf("STL{R,RH,RB} (entirely MISSING)\n");
    283 
    284 ////////////////////////////////////////////////////////////////
    285 // TESTINST2_hide2 allows use of x28 as scratch
    286 printf("LDPSW (immediate, simm7)\n");
    287 
    288 TESTINST2_hide2("ldpsw x21, x28, [x22], #-24 ; add x21,x21,x28", AREA_MID, x21,x22,0);
    289 TESTINST2_hide2("ldpsw x21, x28, [x22], #-24 ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    290 TESTINST2_hide2("ldpsw x21, x28, [x22, #-40]! ; add x21,x21,x28", AREA_MID, x21,x22,0);
    291 TESTINST2_hide2("ldpsw x21, x28, [x22, #-40]! ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    292 TESTINST2_hide2("ldpsw x21, x28, [x22, #-40] ; add x21,x21,x28", AREA_MID, x21,x22,0);
    293 TESTINST2_hide2("ldpsw x21, x28, [x22, #-40] ; eor x21,x21,x28", AREA_MID, x21,x22,0);
    294 
    295 } /* end of test_memory_old() */
    296 
    297 
    298 ////////////////////////////////////////////////////////////////
    299 ////////////////////////////////////////////////////////////////
    300 ////////////////////////////////////////////////////////////////
    301 //                                                            //
    302 // test_memory_new                                            //
    303 //                                                            //
    304 ////////////////////////////////////////////////////////////////
    305 ////////////////////////////////////////////////////////////////
    306 ////////////////////////////////////////////////////////////////
    307 
    308 static void show_block_xor ( UChar* block1, UChar* block2, Int n )
    309 {
    310    Int i;
    311    printf("  ");
    312    for (i = 0; i < n; i++) {
    313       if (i > 0 && 0 == (i & 15)) printf("\n  ");
    314       if (0 == (i & 15)) printf("[%3d]  ", i);
    315       UInt diff = 0xFF & (UInt)(block1[i] - block2[i]);
    316       if (diff == 0)
    317          printf(".. ");
    318       else
    319          printf("%02x ", diff);
    320    }
    321    printf("\n");
    322 }
    323 
    324 
    325 // In: rand:
    326 //       memory area, xferred vec regs, xferred int regs,
    327 //     caller spec:
    328 //       addr reg1, addr reg2
    329 //
    330 // Out: memory area, xferred vec regs, xferred int regs, addr reg1, addr reg2
    331 //
    332 // INSN may mention the following regs as containing load/store data:
    333 //     x13 x23 v17 v18 v19 v20
    334 // and
    335 //     x5 as containing the base address
    336 //     x6 as containing an offset, if required
    337 // A memory area is filled with random data, and x13, x23, v17, v18, v19, v20
    338 // are loaded with random data too.  INSN is then executed, with
    339 // x5 set to the middle of the memory area + AREG1OFF, and x6 set to AREG2VAL.
    340 //
    341 // What is printed out: the XOR of the new and old versions of the
    342 // following:
    343 //    the memory area
    344 //    x13 x23 v17 v18 v19 v20
    345 // and the SUB of the new and old values of the following:
    346 //    x5 x6
    347 // If the insn modifies its base register then (obviously) the x5 "new - old"
    348 // value will be nonzero.
    349 
    350 #define MEM_TEST(INSN, AREG1OFF, AREG2VAL) { \
    351   int i; \
    352   const int N = 256; \
    353   UChar* area = memalign16(N); \
    354   UChar area2[N]; \
    355   for (i = 0; i < N; i++) area[i] = area2[i] = randUChar(); \
    356   ULong block[12]; \
    357   /* 0:x13      1:x23      2:v17.d[0] 3:v17.d[1] 4:v18.d[0] 5:v18.d[1] */ \
    358   /* 6:v19.d[0] 7:v19.d[1] 8:v20.d[0] 9:v20.d[1] 10:x5      11:x6 */ \
    359   for (i = 0; i < 12; i++) block[i] = randULong(); \
    360   block[10] = (ULong)(&area[128]) + (Long)(Int)AREG1OFF; \
    361   block[11] = (Long)AREG2VAL; \
    362   ULong block2[12]; \
    363   for (i = 0; i < 12; i++) block2[i] = block[i]; \
    364   __asm__ __volatile__( \
    365   "ldr x13, [%0, #0]  ; " \
    366   "ldr x23, [%0, #8]  ; " \
    367   "ldr q17, [%0, #16] ; " \
    368   "ldr q18, [%0, #32] ; " \
    369   "ldr q19, [%0, #48] ; " \
    370   "ldr q20, [%0, #64] ; " \
    371   "ldr x5,  [%0, #80] ; " \
    372   "ldr x6,  [%0, #88] ; " \
    373   INSN " ; " \
    374   "str x13, [%0, #0]  ; " \
    375   "str x23, [%0, #8]  ; " \
    376   "str q17, [%0, #16] ; " \
    377   "str q18, [%0, #32] ; " \
    378   "str q19, [%0, #48] ; " \
    379   "str q20, [%0, #64] ; " \
    380   "str x5,  [%0, #80] ; " \
    381   "str x6,  [%0, #88] ; " \
    382   : : "r"(&block[0]) : "x5", "x6", "x13", "x23", \
    383                        "v17", "v18", "v19", "v20", "memory", "cc" \
    384   ); \
    385   printf("%s  with  x5 = middle_of_block+%lld,  x6=%lld\n", \
    386          INSN, (Long)AREG1OFF, (Long)AREG2VAL); \
    387   show_block_xor(&area2[0], area, 256); \
    388   printf("  %016llx  x13      (xor, xfer intreg #1)\n", block[0] ^ block2[0]); \
    389   printf("  %016llx  x23      (xor, xfer intreg #2)\n", block[1] ^ block2[1]); \
    390   printf("  %016llx  v17.d[0] (xor, xfer vecreg #1)\n", block[2] ^ block2[2]); \
    391   printf("  %016llx  v17.d[1] (xor, xfer vecreg #1)\n", block[3] ^ block2[3]); \
    392   printf("  %016llx  v18.d[0] (xor, xfer vecreg #2)\n", block[4] ^ block2[4]); \
    393   printf("  %016llx  v18.d[1] (xor, xfer vecreg #2)\n", block[5] ^ block2[5]); \
    394   printf("  %016llx  v19.d[0] (xor, xfer vecreg #3)\n", block[6] ^ block2[6]); \
    395   printf("  %016llx  v19.d[1] (xor, xfer vecreg #3)\n", block[7] ^ block2[7]); \
    396   printf("  %016llx  v20.d[0] (xor, xfer vecreg #3)\n", block[8] ^ block2[8]); \
    397   printf("  %016llx  v20.d[1] (xor, xfer vecreg #3)\n", block[9] ^ block2[9]); \
    398   printf("  %16lld  x5       (sub, base reg)\n",     block[10] - block2[10]); \
    399   printf("  %16lld  x6       (sub, index reg)\n",    block[11] - block2[11]); \
    400   printf("\n"); \
    401   free(area); \
    402   }
    403 
    404 
    405 static __attribute__((noinline)) void test_memory_new ( void )
    406 {
    407 ////////////////////////////////////////////////////////////////
    408 printf("LDR,STR (immediate, uimm12)");
    409 MEM_TEST("ldr  x13, [x5, #24]", -1, 0);
    410 MEM_TEST("ldr  w13, [x5, #20]", 1, 0);
    411 MEM_TEST("ldrh w13, [x5, #44]", 2, 0);
    412 MEM_TEST("ldrb w13, [x5, #56]", 3, 0);
    413 MEM_TEST("str  x13, [x5, #24]", -3, 0);
    414 MEM_TEST("str  w13, [x5, #20]", 5, 0);
    415 MEM_TEST("strh w13, [x5, #44]", 6, 0);
    416 MEM_TEST("strb w13, [x5, #56]", 7, 0);
    417 
    418 ////////////////////////////////////////////////////////////////
    419 printf("LDUR,STUR (immediate, simm9)\n");
    420 MEM_TEST("ldr x13, [x5], #-24",  0, 0);
    421 MEM_TEST("ldr x13, [x5, #-40]!", 0, 0);
    422 MEM_TEST("ldr x13, [x5, #-48]",  0, 0);
    423 MEM_TEST("str x13, [x5], #-24",  0, 0);
    424 MEM_TEST("str x13, [x5, #-40]!", 0, 0);
    425 MEM_TEST("str x13, [x5, #-48]",  0, 0);
    426 
    427 ////////////////////////////////////////////////////////////////
    428 printf("LDP,STP (immediate, simm7)\n");
    429 MEM_TEST("ldp x13, x23, [x5], #-24",   0, 0);
    430 MEM_TEST("ldp x13, x23, [x5, #-40]!",  0, 0);
    431 MEM_TEST("ldp x13, x23, [x5, #-40]",   0, 0);
    432 MEM_TEST("stp x13, x23, [x5], #-24",   0, 0);
    433 MEM_TEST("stp x13, x23, [x5, #-40]!",  0, 0);
    434 MEM_TEST("stp x13, x23, [x5, #-40]",   0, 0);
    435 
    436 MEM_TEST("ldp w13, w23, [x5], #-24",   0, 0);
    437 MEM_TEST("ldp w13, w23, [x5, #-40]!",  0, 0);
    438 MEM_TEST("ldp w13, w23, [x5, #-40]",   0, 0);
    439 MEM_TEST("stp w13, w23, [x5], #-24",   0, 0);
    440 MEM_TEST("stp w13, w23, [x5, #-40]!",  0, 0);
    441 MEM_TEST("stp w13, w23, [x5, #-40]",   0, 0);
    442 
    443 ////////////////////////////////////////////////////////////////
    444 printf("LDR (literal, int reg) (done above by test_memory_old)\n");
    445 
    446 ////////////////////////////////////////////////////////////////
    447 printf("{LD,ST}R (integer register)\n");
    448 MEM_TEST("str x13, [x5, x6]",          12, -4);
    449 MEM_TEST("str x13, [x5, x6, lsl #3]",  12, -4);
    450 MEM_TEST("str x13, [x5, w6, uxtw]",    12,  4);
    451 MEM_TEST("str x13, [x5, w6, uxtw #3]", 12,  4);
    452 MEM_TEST("str x13, [x5, w6, sxtw]",    12,  4);
    453 MEM_TEST("str x13, [x5, w6, sxtw #3]", 12,  -4);
    454 MEM_TEST("ldr x13, [x5, x6]",          12, -4);
    455 MEM_TEST("ldr x13, [x5, x6, lsl #3]",  12, -4);
    456 MEM_TEST("ldr x13, [x5, w6, uxtw]",    12,  4);
    457 MEM_TEST("ldr x13, [x5, w6, uxtw #3]", 12,  4);
    458 MEM_TEST("ldr x13, [x5, w6, sxtw]",    12,  4);
    459 MEM_TEST("ldr x13, [x5, w6, sxtw #3]", 12,  -4);
    460 
    461 MEM_TEST("str w13, [x5, x6]",          12, -4);
    462 MEM_TEST("str w13, [x5, x6, lsl #2]",  12, -4);
    463 MEM_TEST("str w13, [x5, w6, uxtw]",    12,  4);
    464 MEM_TEST("str w13, [x5, w6, uxtw #2]", 12,  4);
    465 MEM_TEST("str w13, [x5, w6, sxtw]",    12,  4);
    466 MEM_TEST("str w13, [x5, w6, sxtw #2]", 12,  -4);
    467 MEM_TEST("ldr w13, [x5, x6]",          12, -4);
    468 MEM_TEST("ldr w13, [x5, x6, lsl #2]",  12, -4);
    469 MEM_TEST("ldr w13, [x5, w6, uxtw]",    12,  4);
    470 MEM_TEST("ldr w13, [x5, w6, uxtw #2]", 12,  4);
    471 MEM_TEST("ldr w13, [x5, w6, sxtw]",    12,  4);
    472 MEM_TEST("ldr w13, [x5, w6, sxtw #2]", 12,  -4);
    473 
    474 MEM_TEST("strh w13, [x5, x6]",          12, -4);
    475 MEM_TEST("strh w13, [x5, x6, lsl #1]",  12, -4);
    476 MEM_TEST("strh w13, [x5, w6, uxtw]",    12,  4);
    477 MEM_TEST("strh w13, [x5, w6, uxtw #1]", 12,  4);
    478 MEM_TEST("strh w13, [x5, w6, sxtw]",    12,  4);
    479 MEM_TEST("strh w13, [x5, w6, sxtw #1]", 12,  -4);
    480 MEM_TEST("ldrh w13, [x5, x6]",          12, -4);
    481 MEM_TEST("ldrh w13, [x5, x6, lsl #1]",  12, -4);
    482 MEM_TEST("ldrh w13, [x5, w6, uxtw]",    12,  4);
    483 MEM_TEST("ldrh w13, [x5, w6, uxtw #1]", 12,  4);
    484 MEM_TEST("ldrh w13, [x5, w6, sxtw]",    12,  4);
    485 MEM_TEST("ldrh w13, [x5, w6, sxtw #1]", 12,  -4);
    486 
    487 MEM_TEST("strb w13, [x5, x6]",          12, -4);
    488 MEM_TEST("strb w13, [x5, x6, lsl #0]",  12, -4);
    489 MEM_TEST("strb w13, [x5, w6, uxtw]",    12,  4);
    490 MEM_TEST("strb w13, [x5, w6, uxtw #0]", 12,  4);
    491 MEM_TEST("strb w13, [x5, w6, sxtw]",    12,  4);
    492 MEM_TEST("strb w13, [x5, w6, sxtw #0]", 12,  -4);
    493 MEM_TEST("ldrb w13, [x5, x6]",          12, -4);
    494 MEM_TEST("ldrb w13, [x5, x6, lsl #0]",  12, -4);
    495 MEM_TEST("ldrb w13, [x5, w6, uxtw]",    12,  4);
    496 MEM_TEST("ldrb w13, [x5, w6, uxtw #0]", 12,  4);
    497 MEM_TEST("ldrb w13, [x5, w6, sxtw]",    12,  4);
    498 MEM_TEST("ldrb w13, [x5, w6, sxtw #0]", 12,  -4);
    499 
    500 ////////////////////////////////////////////////////////////////
    501 printf("LDRS{B,H,W} (uimm12)\n");
    502 MEM_TEST("ldrsw x13, [x5, #24]", -16, 4);
    503 MEM_TEST("ldrsh x13, [x5, #20]", -16, 4);
    504 MEM_TEST("ldrsh w13, [x5, #44]", -16, 4);
    505 MEM_TEST("ldrsb x13, [x5, #72]", -16, 4);
    506 MEM_TEST("ldrsb w13, [x5, #56]", -16, 4);
    507 
    508 ////////////////////////////////////////////////////////////////
    509 printf("LDRS{B,H,W} (simm9, upd)\n");
    510 MEM_TEST("ldrsw x13, [x5, #-24]!", -16, 4);
    511 MEM_TEST("ldrsh x13, [x5, #-20]!", -16, 4);
    512 MEM_TEST("ldrsh w13, [x5, #-44]!", -16, 4);
    513 MEM_TEST("ldrsb x13, [x5, #-72]!", -16, 4);
    514 MEM_TEST("ldrsb w13, [x5, #-56]!", -16, 4);
    515 
    516 MEM_TEST("ldrsw x13, [x5], #-24", -16, 4);
    517 MEM_TEST("ldrsh x13, [x5], #-20", -16, 4);
    518 MEM_TEST("ldrsh w13, [x5], #-44", -16, 4);
    519 MEM_TEST("ldrsb x13, [x5], #-72", -16, 4);
    520 MEM_TEST("ldrsb w13, [x5], #-56", -16, 4);
    521 
    522 ////////////////////////////////////////////////////////////////
    523 printf("LDRS{B,H,W} (simm9, noUpd)\n");
    524 MEM_TEST("ldrsw x13, [x5, #-24]", -16, 4);
    525 MEM_TEST("ldrsh x13, [x5, #-20]", -16, 4);
    526 MEM_TEST("ldrsh w13, [x5, #-44]", -16, 4);
    527 MEM_TEST("ldrsb x13, [x5, #-72]", -16, 4);
    528 MEM_TEST("ldrsb w13, [x5, #-56]", -16, 4);
    529 
    530 ////////////////////////////////////////////////////////////////
    531 printf("LDP,STP (immediate, simm7) (FP&VEC)\n");
    532 
    533 MEM_TEST("stp q17, q18, [x5, 16]",  -15, 4);
    534 MEM_TEST("stp q19, q18, [x5, 32]!", -11, 4);
    535 MEM_TEST("stp q20, q17, [x5], -48",  -7, 4);
    536 
    537 MEM_TEST("stp d18, d17, [x5, 16]",  -15, 4);
    538 MEM_TEST("stp d17, d19, [x5, 32]!", -11, 4);
    539 MEM_TEST("stp d20, d18, [x5], -48",  -7, 4);
    540 
    541 MEM_TEST("stp s17, s18, [x5, 16]",  -15, 4);
    542 MEM_TEST("stp s19, s18, [x5, 32]!", -11, 4);
    543 MEM_TEST("stp s20, s17, [x5], -48", -7, 4);
    544 
    545 MEM_TEST("ldp q17, q18, [x5, 16]",  -15, 4);
    546 MEM_TEST("ldp q18, q19, [x5, 32]!", -11, 4);
    547 MEM_TEST("ldp q19, q20, [x5], -48",  -7, 4);
    548 
    549 MEM_TEST("ldp d20, d17, [x5, 16]",  -15, 4);
    550 MEM_TEST("ldp d17, d18, [x5, 32]!", -11, 4);
    551 MEM_TEST("ldp d18, d19, [x5], -48", -7, 4);
    552 
    553 MEM_TEST("ldp s19, s20, [x5, 16]",  -15, 4);
    554 MEM_TEST("ldp s20, s17, [x5, 32]!", -11, 4);
    555 MEM_TEST("ldp s17, s18, [x5], -48", -7, 4);
    556 
    557 ////////////////////////////////////////////////////////////////
    558 printf("LDNP,STNP (immediate, simm7) (FP&VEC, w/ nontemporal hint)\n");
    559 
    560 MEM_TEST("stnp q18, q17, [x5, 16]",  -15, 4);
    561 MEM_TEST("stnp d20, d19, [x5, 40]",  -15, 4);
    562 MEM_TEST("stnp s19, s18, [x5, 68]",  -15, 4);
    563 
    564 MEM_TEST("ldnp q18, q17, [x5, 16]",  -15, 4);
    565 MEM_TEST("ldnp d17, d20, [x5, 40]",  -15, 4);
    566 MEM_TEST("ldnp s20, s19, [x5, 68]",  -15, 4);
    567 
    568 ////////////////////////////////////////////////////////////////
    569 printf("{LD,ST}R (vector register)\n");
    570 
    571 MEM_TEST("str q17, [x5, x6]",          12, -4);
    572 MEM_TEST("str q17, [x5, x6, lsl #4]",  12, -4);
    573 MEM_TEST("str q17, [x5, w6, uxtw]",    12,  4);
    574 MEM_TEST("str q17, [x5, w6, uxtw #4]", 12,  4);
    575 MEM_TEST("str q17, [x5, w6, sxtw]",    12,  4);
    576 MEM_TEST("str q17, [x5, w6, sxtw #4]", 12,  -4);
    577 MEM_TEST("ldr q17, [x5, x6]",          12, -4);
    578 MEM_TEST("ldr q17, [x5, x6, lsl #4]",  12, -4);
    579 MEM_TEST("ldr q17, [x5, w6, uxtw]",    12,  4);
    580 MEM_TEST("ldr q17, [x5, w6, uxtw #4]", 12,  4);
    581 MEM_TEST("ldr q17, [x5, w6, sxtw]",    12,  4);
    582 MEM_TEST("ldr q17, [x5, w6, sxtw #4]", 12,  -4);
    583 
    584 MEM_TEST("str d17, [x5, x6]",          12, -4);
    585 MEM_TEST("str d17, [x5, x6, lsl #3]",  12, -4);
    586 MEM_TEST("str d17, [x5, w6, uxtw]",    12,  4);
    587 MEM_TEST("str d17, [x5, w6, uxtw #3]", 12,  4);
    588 MEM_TEST("str d17, [x5, w6, sxtw]",    12,  4);
    589 MEM_TEST("str d17, [x5, w6, sxtw #3]", 12,  -4);
    590 MEM_TEST("ldr d17, [x5, x6]",          12, -4);
    591 MEM_TEST("ldr d17, [x5, x6, lsl #3]",  12, -4);
    592 MEM_TEST("ldr d17, [x5, w6, uxtw]",    12,  4);
    593 MEM_TEST("ldr d17, [x5, w6, uxtw #3]", 12,  4);
    594 MEM_TEST("ldr d17, [x5, w6, sxtw]",    12,  4);
    595 MEM_TEST("ldr d17, [x5, w6, sxtw #3]", 12,  -4);
    596 
    597 MEM_TEST("str s17, [x5, x6]",          12, -4);
    598 MEM_TEST("str s17, [x5, x6, lsl #2]",  12, -4);
    599 MEM_TEST("str s17, [x5, w6, uxtw]",    12,  4);
    600 MEM_TEST("str s17, [x5, w6, uxtw #2]", 12,  4);
    601 MEM_TEST("str s17, [x5, w6, sxtw]",    12,  4);
    602 MEM_TEST("str s17, [x5, w6, sxtw #2]", 12,  -4);
    603 MEM_TEST("ldr s17, [x5, x6]",          12, -4);
    604 MEM_TEST("ldr s17, [x5, x6, lsl #2]",  12, -4);
    605 MEM_TEST("ldr s17, [x5, w6, uxtw]",    12,  4);
    606 MEM_TEST("ldr s17, [x5, w6, uxtw #2]", 12,  4);
    607 MEM_TEST("ldr s17, [x5, w6, sxtw]",    12,  4);
    608 MEM_TEST("ldr s17, [x5, w6, sxtw #2]", 12,  -4);
    609 
    610 MEM_TEST("str h17, [x5, x6]",          12, -4);
    611 MEM_TEST("str h17, [x5, x6, lsl #1]",  12, -4);
    612 MEM_TEST("str h17, [x5, w6, uxtw]",    12,  4);
    613 MEM_TEST("str h17, [x5, w6, uxtw #1]", 12,  4);
    614 MEM_TEST("str h17, [x5, w6, sxtw]",    12,  4);
    615 MEM_TEST("str h17, [x5, w6, sxtw #1]", 12,  -4);
    616 MEM_TEST("ldr h17, [x5, x6]",          12, -4);
    617 MEM_TEST("ldr h17, [x5, x6, lsl #1]",  12, -4);
    618 MEM_TEST("ldr h17, [x5, w6, uxtw]",    12,  4);
    619 MEM_TEST("ldr h17, [x5, w6, uxtw #1]", 12,  4);
    620 MEM_TEST("ldr h17, [x5, w6, sxtw]",    12,  4);
    621 MEM_TEST("ldr h17, [x5, w6, sxtw #1]", 12,  -4);
    622 
    623 MEM_TEST("str b17, [x5, x6]",          12, -4);
    624 MEM_TEST("str b17, [x5, x6, lsl #0]",  12, -4);
    625 MEM_TEST("str b17, [x5, w6, uxtw]",    12,  4);
    626 MEM_TEST("str b17, [x5, w6, uxtw #0]", 12,  4);
    627 MEM_TEST("str b17, [x5, w6, sxtw]",    12,  4);
    628 MEM_TEST("str b17, [x5, w6, sxtw #0]", 12,  -4);
    629 MEM_TEST("ldr b17, [x5, x6]",          12, -4);
    630 MEM_TEST("ldr b17, [x5, x6, lsl #0]",  12, -4);
    631 MEM_TEST("ldr b17, [x5, w6, uxtw]",    12,  4);
    632 MEM_TEST("ldr b17, [x5, w6, uxtw #0]", 12,  4);
    633 MEM_TEST("ldr b17, [x5, w6, sxtw]",    12,  4);
    634 MEM_TEST("ldr b17, [x5, w6, sxtw #0]", 12,  -4);
    635 
    636 ////////////////////////////////////////////////////////////////
    637 printf("LDRS{B,H,W} (integer register, SX)\n");
    638 
    639 MEM_TEST("ldrsw x13, [x5,x6]", 12, -4);
    640 MEM_TEST("ldrsw x13, [x5,x6, lsl #2]", 12, -4);
    641 MEM_TEST("ldrsw x13, [x5,w6,uxtw #0]", 12, 4);
    642 MEM_TEST("ldrsw x13, [x5,w6,uxtw #2]", 12, 4);
    643 MEM_TEST("ldrsw x13, [x5,w6,sxtw #0]", 12, 4);
    644 MEM_TEST("ldrsw x13, [x5,w6,sxtw #2]", 12, -4);
    645 
    646 MEM_TEST("ldrsh x13, [x5,x6]",  12, -4);
    647 MEM_TEST("ldrsh x13, [x5,x6, lsl #1]",  12, -4);
    648 MEM_TEST("ldrsh x13, [x5,w6,uxtw #0]", 12, 4);
    649 MEM_TEST("ldrsh x13, [x5,w6,uxtw #1]", 12, 4);
    650 MEM_TEST("ldrsh x13, [x5,w6,sxtw #0]", 12, 4);
    651 MEM_TEST("ldrsh x13, [x5,w6,sxtw #1]",  12, -4);
    652 
    653 MEM_TEST("ldrsh w13, [x5,x6]",  12, -4);
    654 MEM_TEST("ldrsh w13, [x5,x6, lsl #1]",  12, -4);
    655 MEM_TEST("ldrsh w13, [x5,w6,uxtw #0]", 12, 4);
    656 MEM_TEST("ldrsh w13, [x5,w6,uxtw #1]", 12, 4);
    657 MEM_TEST("ldrsh w13, [x5,w6,sxtw #0]", 12, 4);
    658 MEM_TEST("ldrsh w13, [x5,w6,sxtw #1]",  12, -4);
    659 
    660 MEM_TEST("ldrsb x13, [x5,x6]",  12, -4);
    661 MEM_TEST("ldrsb x13, [x5,x6, lsl #0]",  12, -4);
    662 MEM_TEST("ldrsb x13, [x5,w6,uxtw #0]", 12, 4);
    663 MEM_TEST("ldrsb x13, [x5,w6,uxtw #0]", 12, 4);
    664 MEM_TEST("ldrsb x13, [x5,w6,sxtw #0]", 12, 4);
    665 MEM_TEST("ldrsb x13, [x5,w6,sxtw #0]",  12, -4);
    666 
    667 MEM_TEST("ldrsb w13, [x5,x6]",  12, -4);
    668 MEM_TEST("ldrsb w13, [x5,x6, lsl #0]",  12, -4);
    669 MEM_TEST("ldrsb w13, [x5,w6,uxtw #0]", 12, 4);
    670 MEM_TEST("ldrsb w13, [x5,w6,uxtw #0]", 12, 4);
    671 MEM_TEST("ldrsb w13, [x5,w6,sxtw #0]", 12, 4);
    672 MEM_TEST("ldrsb w13, [x5,w6,sxtw #0]",  12, -4);
    673 
    674 ////////////////////////////////////////////////////////////////
    675 printf("LDR/STR (immediate, SIMD&FP, unsigned offset)\n");
    676 
    677 MEM_TEST("str q17, [x5, #-32]", 16, 0);
    678 MEM_TEST("str d17, [x5, #-32]", 16, 0);
    679 MEM_TEST("str s17, [x5, #-32]", 16, 0);
    680 MEM_TEST("str h17, [x5, #-32]", 16, 0);
    681 MEM_TEST("str b17, [x5, #-32]", 16, 0);
    682 MEM_TEST("ldr q17, [x5, #-32]", 16, 0);
    683 MEM_TEST("ldr d17, [x5, #-32]", 16, 0);
    684 MEM_TEST("ldr s17, [x5, #-32]", 16, 0);
    685 MEM_TEST("ldr h17, [x5, #-32]", 16, 0);
    686 MEM_TEST("ldr b17, [x5, #-32]", 16, 0);
    687 
    688 ////////////////////////////////////////////////////////////////
    689 printf("LDR/STR (immediate, SIMD&FP, pre/post index)\n");
    690 
    691 MEM_TEST("str q17, [x5], #-32", 16, 0);
    692 MEM_TEST("str d17, [x5], #-32", 16, 0);
    693 MEM_TEST("str s17, [x5], #-32", 16, 0);
    694 MEM_TEST("str h17, [x5], #-32", 16, 0);
    695 MEM_TEST("str b17, [x5], #-32", 16, 0);
    696 MEM_TEST("ldr q17, [x5], #-32", 16, 0);
    697 MEM_TEST("ldr d17, [x5], #-32", 16, 0);
    698 MEM_TEST("ldr s17, [x5], #-32", 16, 0);
    699 MEM_TEST("ldr h17, [x5], #-32", 16, 0);
    700 MEM_TEST("ldr b17, [x5], #-32", 16, 0);
    701 
    702 MEM_TEST("str q17, [x5, #-32]!", 16, 0);
    703 MEM_TEST("str d17, [x5, #-32]!", 16, 0);
    704 MEM_TEST("str s17, [x5, #-32]!", 16, 0);
    705 MEM_TEST("str h17, [x5, #-32]!", 16, 0);
    706 MEM_TEST("str b17, [x5, #-32]!", 16, 0);
    707 MEM_TEST("ldr q17, [x5, #-32]!", 16, 0);
    708 MEM_TEST("ldr d17, [x5, #-32]!", 16, 0);
    709 MEM_TEST("ldr s17, [x5, #-32]!", 16, 0);
    710 MEM_TEST("ldr h17, [x5, #-32]!", 16, 0);
    711 MEM_TEST("ldr b17, [x5, #-32]!", 16, 0);
    712 
    713 ////////////////////////////////////////////////////////////////
    714 printf("LDUR/STUR (unscaled offset, SIMD&FP)\n");
    715 
    716 MEM_TEST("str q17, [x5, #-13]", 16, 0);
    717 MEM_TEST("str d17, [x5, #-13]", 16, 0);
    718 MEM_TEST("str s17, [x5, #-13]", 16, 0);
    719 MEM_TEST("str h17, [x5, #-13]", 16, 0);
    720 MEM_TEST("str b17, [x5, #-13]", 16, 0);
    721 MEM_TEST("ldr q17, [x5, #-13]", 16, 0);
    722 MEM_TEST("ldr d17, [x5, #-13]", 16, 0);
    723 MEM_TEST("ldr s17, [x5, #-13]", 16, 0);
    724 MEM_TEST("ldr h17, [x5, #-13]", 16, 0);
    725 MEM_TEST("ldr b17, [x5, #-13]", 16, 0);
    726 
    727 ////////////////////////////////////////////////////////////////
    728 printf("LDR (literal, SIMD&FP) (entirely MISSING)\n");
    729 
    730 MEM_TEST("xyzzy10: ldr s17, xyzzy10 - 8", 0, 0)
    731 MEM_TEST("xyzzy11: ldr d17, xyzzy11 + 8", 0, 0)
    732 MEM_TEST("xyzzy12: ldr q17, xyzzy12 + 4", 0, 0)
    733 
    734 ////////////////////////////////////////////////////////////////
    735 printf("LD1/ST1 (multiple 1-elem structs to/from 1 reg\n");
    736 
    737 MEM_TEST("st1 {v18.2d}, [x5]",       17, 7)
    738 MEM_TEST("st1 {v18.2d}, [x5], #16",  9, 9)
    739 MEM_TEST("st1 {v18.2d}, [x5], x6",   -13, -5)
    740 
    741 MEM_TEST("st1 {v18.1d}, [x5]",       17, 7)
    742 MEM_TEST("st1 {v18.1d}, [x5], #8",   9, 9)
    743 MEM_TEST("st1 {v18.1d}, [x5], x6",   -13, -5)
    744 
    745 MEM_TEST("st1 {v18.4s}, [x5]",       17, 7)
    746 MEM_TEST("st1 {v18.4s}, [x5], #16",  9, 9)
    747 MEM_TEST("st1 {v18.4s}, [x5], x6",   -13, -5)
    748 
    749 MEM_TEST("st1 {v18.2s}, [x5]",       17, 7)
    750 MEM_TEST("st1 {v18.2s}, [x5], #8",   9, 9)
    751 MEM_TEST("st1 {v18.2s}, [x5], x6",   -13, -5)
    752 
    753 MEM_TEST("st1 {v18.8h}, [x5]",       17, 7)
    754 MEM_TEST("st1 {v18.8h}, [x5], #16",  9, 9)
    755 MEM_TEST("st1 {v18.8h}, [x5], x6",   -13, -5)
    756 
    757 MEM_TEST("st1 {v18.4h}, [x5]",       17, 7)
    758 MEM_TEST("st1 {v18.4h}, [x5], #8",   9, 9)
    759 MEM_TEST("st1 {v18.4h}, [x5], x6",   -13, -5)
    760 
    761 MEM_TEST("st1 {v18.16b}, [x5]",      17, 7)
    762 MEM_TEST("st1 {v18.16b}, [x5], #16", 9, 9)
    763 MEM_TEST("st1 {v18.16b}, [x5], x6",  -13, -5)
    764 
    765 MEM_TEST("st1 {v18.8b}, [x5]",       17, 7)
    766 MEM_TEST("st1 {v18.8b}, [x5], #8",   9, 9)
    767 MEM_TEST("st1 {v18.8b}, [x5], x6",   -13, -5)
    768 
    769 MEM_TEST("ld1 {v18.2d}, [x5]",       17, 7)
    770 MEM_TEST("ld1 {v18.2d}, [x5], #16",  9, 9)
    771 MEM_TEST("ld1 {v18.2d}, [x5], x6",   -13, -5)
    772 
    773 MEM_TEST("ld1 {v18.1d}, [x5]",       17, 7)
    774 MEM_TEST("ld1 {v18.1d}, [x5], #8",   9, 9)
    775 MEM_TEST("ld1 {v18.1d}, [x5], x6",   -13, -5)
    776 
    777 MEM_TEST("ld1 {v18.4s}, [x5]",       17, 7)
    778 MEM_TEST("ld1 {v18.4s}, [x5], #16",  9, 9)
    779 MEM_TEST("ld1 {v18.4s}, [x5], x6",   -13, -5)
    780 
    781 MEM_TEST("ld1 {v18.2s}, [x5]",       17, 7)
    782 MEM_TEST("ld1 {v18.2s}, [x5], #8",   9, 9)
    783 MEM_TEST("ld1 {v18.2s}, [x5], x6",   -13, -5)
    784 
    785 MEM_TEST("ld1 {v18.8h}, [x5]",       17, 7)
    786 MEM_TEST("ld1 {v18.8h}, [x5], #16",  9, 9)
    787 MEM_TEST("ld1 {v18.8h}, [x5], x6",   -13, -5)
    788 
    789 MEM_TEST("ld1 {v18.4h}, [x5]",       17, 7)
    790 MEM_TEST("ld1 {v18.4h}, [x5], #8",   9, 9)
    791 MEM_TEST("ld1 {v18.4h}, [x5], x6",   -13, -5)
    792 
    793 MEM_TEST("ld1 {v18.16b}, [x5]",      17, 7)
    794 MEM_TEST("ld1 {v18.16b}, [x5], #16", 9, 9)
    795 MEM_TEST("ld1 {v18.16b}, [x5], x6",  -13, -5)
    796 
    797 MEM_TEST("ld1 {v18.8b}, [x5]",       17, 7)
    798 MEM_TEST("ld1 {v18.8b}, [x5], #8",   9, 9)
    799 MEM_TEST("ld1 {v18.8b}, [x5], x6",   -13, -5)
    800 
    801 ////////////////////////////////////////////////////////////////
    802 printf("LD2/ST2 (multiple 2-elem structs to/from 2 regs\n");
    803 
    804 MEM_TEST("st2 {v18.2d, v19.2d}, [x5]",         17, 7)
    805 MEM_TEST("st2 {v18.2d, v19.2d}, [x5], #32",    9, 9)
    806 MEM_TEST("st2 {v18.2d, v19.2d}, [x5], x6",     -13, -5)
    807 
    808 /* no 1d case */
    809 
    810 MEM_TEST("st2 {v18.4s, v19.4s}, [x5]",         17, 7)
    811 MEM_TEST("st2 {v18.4s, v19.4s}, [x5], #32",    9, 9)
    812 MEM_TEST("st2 {v18.4s, v19.4s}, [x5], x6",     -13, -5)
    813 
    814 MEM_TEST("st2 {v18.2s, v19.2s}, [x5]",         17, 7)
    815 MEM_TEST("st2 {v18.2s, v19.2s}, [x5], #16",    9, 9)
    816 MEM_TEST("st2 {v18.2s, v19.2s}, [x5], x6",     -13, -5)
    817 
    818 MEM_TEST("st2 {v18.8h, v19.8h}, [x5]",         17, 7)
    819 MEM_TEST("st2 {v18.8h, v19.8h}, [x5], #32",    9, 9)
    820 MEM_TEST("st2 {v18.8h, v19.8h}, [x5], x6",     -13, -5)
    821 
    822 MEM_TEST("st2 {v18.4h, v19.4h}, [x5]",         17, 7)
    823 MEM_TEST("st2 {v18.4h, v19.4h}, [x5], #16",    9, 9)
    824 MEM_TEST("st2 {v18.4h, v19.4h}, [x5], x6",     -13, -5)
    825 
    826 MEM_TEST("st2 {v18.16b, v19.16b}, [x5]",       17, 7)
    827 MEM_TEST("st2 {v18.16b, v19.16b}, [x5], #32",  9, 9)
    828 MEM_TEST("st2 {v18.16b, v19.16b}, [x5], x6",   -13, -5)
    829 
    830 MEM_TEST("st2 {v18.8b, v19.8b}, [x5]",         17, 7)
    831 MEM_TEST("st2 {v18.8b, v19.8b}, [x5], #16",    9, 9)
    832 MEM_TEST("st2 {v18.8b, v19.8b}, [x5], x6",     -13, -5)
    833 
    834 MEM_TEST("ld2 {v18.2d, v19.2d}, [x5]",         17, 7)
    835 MEM_TEST("ld2 {v18.2d, v19.2d}, [x5], #32",    9, 9)
    836 MEM_TEST("ld2 {v18.2d, v19.2d}, [x5], x6",     -13, -5)
    837 
    838 /* no 1d case */
    839 
    840 MEM_TEST("ld2 {v18.4s, v19.4s}, [x5]",         17, 7)
    841 MEM_TEST("ld2 {v18.4s, v19.4s}, [x5], #32",    9, 9)
    842 MEM_TEST("ld2 {v18.4s, v19.4s}, [x5], x6",     -13, -5)
    843 
    844 MEM_TEST("ld2 {v18.2s, v19.2s}, [x5]",         17, 7)
    845 MEM_TEST("ld2 {v18.2s, v19.2s}, [x5], #16",    9, 9)
    846 MEM_TEST("ld2 {v18.2s, v19.2s}, [x5], x6",     -13, -5)
    847 
    848 MEM_TEST("ld2 {v18.8h, v19.8h}, [x5]",         17, 7)
    849 MEM_TEST("ld2 {v18.8h, v19.8h}, [x5], #32",    9, 9)
    850 MEM_TEST("ld2 {v18.8h, v19.8h}, [x5], x6",     -13, -5)
    851 
    852 MEM_TEST("ld2 {v18.4h, v19.4h}, [x5]",         17, 7)
    853 MEM_TEST("ld2 {v18.4h, v19.4h}, [x5], #16",    9, 9)
    854 MEM_TEST("ld2 {v18.4h, v19.4h}, [x5], x6",     -13, -5)
    855 
    856 MEM_TEST("ld2 {v18.16b, v19.16b}, [x5]",       17, 7)
    857 MEM_TEST("ld2 {v18.16b, v19.16b}, [x5], #32",  9, 9)
    858 MEM_TEST("ld2 {v18.16b, v19.16b}, [x5], x6",   -13, -5)
    859 
    860 MEM_TEST("ld2 {v18.8b, v19.8b}, [x5]",         17, 7)
    861 MEM_TEST("ld2 {v18.8b, v19.8b}, [x5], #16",    9, 9)
    862 MEM_TEST("ld2 {v18.8b, v19.8b}, [x5], x6",     -13, -5)
    863 
    864 ////////////////////////////////////////////////////////////////
    865 printf("LD3/ST3 (multiple 3-elem structs to/from 3 regs\n");
    866 
    867 MEM_TEST("st3 {v17.2d, v18.2d, v19.2d}, [x5]",       17,  7)
    868 MEM_TEST("st3 {v17.2d, v18.2d, v19.2d}, [x5], #48",  9,   9)
    869 MEM_TEST("st3 {v17.2d, v18.2d, v19.2d}, [x5], x6",   -13, -5)
    870 
    871 /* no 1d case */
    872 
    873 MEM_TEST("st3 {v17.4s, v18.4s, v19.4s}, [x5]",          17, 7)
    874 MEM_TEST("st3 {v17.4s, v18.4s, v19.4s}, [x5], #48",     9, 9)
    875 MEM_TEST("st3 {v17.4s, v18.4s, v19.4s}, [x5], x6",      -13, -5)
    876 
    877 MEM_TEST("st3 {v17.2s, v18.2s, v19.2s}, [x5]",          17, 7)
    878 MEM_TEST("st3 {v17.2s, v18.2s, v19.2s}, [x5], #24",     9, 9)
    879 MEM_TEST("st3 {v17.2s, v18.2s, v19.2s}, [x5], x6",      -13, -5)
    880 
    881 MEM_TEST("st3 {v17.8h, v18.8h, v19.8h}, [x5]",          17, 7)
    882 MEM_TEST("st3 {v17.8h, v18.8h, v19.8h}, [x5], #48",     9, 9)
    883 MEM_TEST("st3 {v17.8h, v18.8h, v19.8h}, [x5], x6",      -13, -5)
    884 
    885 MEM_TEST("st3 {v17.4h, v18.4h, v19.4h}, [x5]",          17, 7)
    886 MEM_TEST("st3 {v17.4h, v18.4h, v19.4h}, [x5], #24",     9, 9)
    887 MEM_TEST("st3 {v17.4h, v18.4h, v19.4h}, [x5], x6",      -13, -5)
    888 
    889 MEM_TEST("st3 {v17.16b, v18.16b, v19.16b}, [x5]",       17, 7)
    890 MEM_TEST("st3 {v17.16b, v18.16b, v19.16b}, [x5], #48",  9, 9)
    891 MEM_TEST("st3 {v17.16b, v18.16b, v19.16b}, [x5], x6",   -13, -5)
    892 
    893 MEM_TEST("st3 {v17.8b, v18.8b, v19.8b}, [x5]",          17, 7)
    894 MEM_TEST("st3 {v17.8b, v18.8b, v19.8b}, [x5], #24",     9, 9)
    895 MEM_TEST("st3 {v17.8b, v18.8b, v19.8b}, [x5], x6",      -13, -5)
    896 
    897 MEM_TEST("ld3 {v17.2d, v18.2d, v19.2d}, [x5]",       17,  7)
    898 MEM_TEST("ld3 {v17.2d, v18.2d, v19.2d}, [x5], #48",  9,   9)
    899 MEM_TEST("ld3 {v17.2d, v18.2d, v19.2d}, [x5], x6",   -13, -5)
    900 
    901 /* no 1d case */
    902 
    903 MEM_TEST("ld3 {v17.4s, v18.4s, v19.4s}, [x5]",          17, 7)
    904 MEM_TEST("ld3 {v17.4s, v18.4s, v19.4s}, [x5], #48",     9, 9)
    905 MEM_TEST("ld3 {v17.4s, v18.4s, v19.4s}, [x5], x6",      -13, -5)
    906 
    907 MEM_TEST("ld3 {v17.2s, v18.2s, v19.2s}, [x5]",          17, 7)
    908 MEM_TEST("ld3 {v17.2s, v18.2s, v19.2s}, [x5], #24",     9, 9)
    909 MEM_TEST("ld3 {v17.2s, v18.2s, v19.2s}, [x5], x6",      -13, -5)
    910 
    911 MEM_TEST("ld3 {v17.8h, v18.8h, v19.8h}, [x5]",          17, 7)
    912 MEM_TEST("ld3 {v17.8h, v18.8h, v19.8h}, [x5], #48",     9, 9)
    913 MEM_TEST("ld3 {v17.8h, v18.8h, v19.8h}, [x5], x6",      -13, -5)
    914 
    915 MEM_TEST("ld3 {v17.4h, v18.4h, v19.4h}, [x5]",          17, 7)
    916 MEM_TEST("ld3 {v17.4h, v18.4h, v19.4h}, [x5], #24",     9, 9)
    917 MEM_TEST("ld3 {v17.4h, v18.4h, v19.4h}, [x5], x6",      -13, -5)
    918 
    919 MEM_TEST("ld3 {v17.16b, v18.16b, v19.16b}, [x5]",       17, 7)
    920 MEM_TEST("ld3 {v17.16b, v18.16b, v19.16b}, [x5], #48",  9, 9)
    921 MEM_TEST("ld3 {v17.16b, v18.16b, v19.16b}, [x5], x6",   -13, -5)
    922 
    923 MEM_TEST("ld3 {v17.8b, v18.8b, v19.8b}, [x5]",          17, 7)
    924 MEM_TEST("ld3 {v17.8b, v18.8b, v19.8b}, [x5], #24",     9, 9)
    925 MEM_TEST("ld3 {v17.8b, v18.8b, v19.8b}, [x5], x6",      -13, -5)
    926 
    927 ////////////////////////////////////////////////////////////////
    928 printf("LD4/ST4 (multiple 4-elem structs to/from 4 regs\n");
    929 
    930 MEM_TEST("st4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5]",           17, 7)
    931 MEM_TEST("st4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5], #64",      9, 9)
    932 MEM_TEST("st4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5], x6",       -13, -5)
    933 
    934 /* no 1d case */
    935 
    936 MEM_TEST("st4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5]",           17, 7)
    937 MEM_TEST("st4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5], #64",      9, 9)
    938 MEM_TEST("st4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5], x6",       -13, -5)
    939 
    940 MEM_TEST("st4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5]",           17, 7)
    941 MEM_TEST("st4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5], #32",      9, 9)
    942 MEM_TEST("st4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5], x6",       -13, -5)
    943 
    944 MEM_TEST("st4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5]",           17, 7)
    945 MEM_TEST("st4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5], #64",      9, 9)
    946 MEM_TEST("st4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5], x6",       -13, -5)
    947 
    948 MEM_TEST("st4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5]",           17, 7)
    949 MEM_TEST("st4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5], #32",      9, 9)
    950 MEM_TEST("st4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5], x6",       -13, -5)
    951 
    952 MEM_TEST("st4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5]",       17, 7)
    953 MEM_TEST("st4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], #64",  9, 9)
    954 MEM_TEST("st4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], x6",   -13, -5)
    955 
    956 MEM_TEST("st4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5]",           17, 7)
    957 MEM_TEST("st4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5], #32",      9, 9)
    958 MEM_TEST("st4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5], x6",       -13, -5)
    959 
    960 MEM_TEST("ld4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5]",           17, 7)
    961 MEM_TEST("ld4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5], #64",      9, 9)
    962 MEM_TEST("ld4 {v17.2d, v18.2d, v19.2d, v20.2d}, [x5], x6",       -13, -5)
    963 
    964 /* no 1d case */
    965 
    966 MEM_TEST("ld4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5]",           17, 7)
    967 MEM_TEST("ld4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5], #64",      9, 9)
    968 MEM_TEST("ld4 {v17.4s, v18.4s, v19.4s, v20.4s}, [x5], x6",       -13, -5)
    969 
    970 MEM_TEST("ld4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5]",           17, 7)
    971 MEM_TEST("ld4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5], #32",      9, 9)
    972 MEM_TEST("ld4 {v17.2s, v18.2s, v19.2s, v20.2s}, [x5], x6",       -13, -5)
    973 
    974 MEM_TEST("ld4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5]",           17, 7)
    975 MEM_TEST("ld4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5], #64",      9, 9)
    976 MEM_TEST("ld4 {v17.8h, v18.8h, v19.8h, v20.8h}, [x5], x6",       -13, -5)
    977 
    978 MEM_TEST("ld4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5]",           17, 7)
    979 MEM_TEST("ld4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5], #32",      9, 9)
    980 MEM_TEST("ld4 {v17.4h, v18.4h, v19.4h, v20.4h}, [x5], x6",       -13, -5)
    981 
    982 MEM_TEST("ld4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5]",       17, 7)
    983 MEM_TEST("ld4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], #64",  9, 9)
    984 MEM_TEST("ld4 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], x6",   -13, -5)
    985 
    986 MEM_TEST("ld4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5]",           17, 7)
    987 MEM_TEST("ld4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5], #32",      9, 9)
    988 MEM_TEST("ld4 {v17.8b, v18.8b, v19.8b, v20.8b}, [x5], x6",       -13, -5)
    989 
    990 ////////////////////////////////////////////////////////////////
    991 printf("LD1/ST1 (multiple 1-elem structs to/from 2/3/4 regs\n");
    992 
    993 MEM_TEST("st1 {v19.2d, v20.2d},                     [x5]", 17, 7)
    994 MEM_TEST("st1 {v19.2d, v20.2d},                     [x5], #32", 9, 9)
    995 MEM_TEST("st1 {v19.2d, v20.2d},                     [x5], x6", -13, -5)
    996 
    997 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d},             [x5]", 17, 7)
    998 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d},             [x5], #48", 9, 9)
    999 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d},             [x5], x6", -13, -5)
   1000 
   1001 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5]", 17, 7)
   1002 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5], #64", 9, 9)
   1003 MEM_TEST("st1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5], x6", -13, -5)
   1004 
   1005 
   1006 MEM_TEST("st1 {v19.1d, v20.1d},                     [x5]", 17, 7)
   1007 MEM_TEST("st1 {v19.1d, v20.1d},                     [x5], #16", 9, 9)
   1008 MEM_TEST("st1 {v19.1d, v20.1d},                     [x5], x6", -13, -5)
   1009 
   1010 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d},             [x5]", 17, 7)
   1011 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d},             [x5], #24", 9, 9)
   1012 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d},             [x5], x6", -13, -5)
   1013 
   1014 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5]", 17, 7)
   1015 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5], #32", 9, 9)
   1016 MEM_TEST("st1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5], x6", -13, -5)
   1017 
   1018 
   1019 MEM_TEST("st1 {v19.4s, v20.4s},                     [x5]", 17, 7)
   1020 MEM_TEST("st1 {v19.4s, v20.4s},                     [x5], #32", 9, 9)
   1021 MEM_TEST("st1 {v19.4s, v20.4s},                     [x5], x6", -13, -5)
   1022 
   1023 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s},             [x5]", 17, 7)
   1024 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s},             [x5], #48", 9, 9)
   1025 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s},             [x5], x6", -13, -5)
   1026 
   1027 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5]", 17, 7)
   1028 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5], #64", 9, 9)
   1029 MEM_TEST("st1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5], x6", -13, -5)
   1030 
   1031 
   1032 MEM_TEST("st1 {v19.2s, v20.2s},                     [x5]", 17, 7)
   1033 MEM_TEST("st1 {v19.2s, v20.2s},                     [x5], #16", 9, 9)
   1034 MEM_TEST("st1 {v19.2s, v20.2s},                     [x5], x6", -13, -5)
   1035 
   1036 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s},             [x5]", 17, 7)
   1037 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s},             [x5], #24", 9, 9)
   1038 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s},             [x5], x6", -13, -5)
   1039 
   1040 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5]", 17, 7)
   1041 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5], #32", 9, 9)
   1042 MEM_TEST("st1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5], x6", -13, -5)
   1043 
   1044 
   1045 MEM_TEST("st1 {v19.8h, v20.8h},                     [x5]", 17, 7)
   1046 MEM_TEST("st1 {v19.8h, v20.8h},                     [x5], #32", 9, 9)
   1047 MEM_TEST("st1 {v19.8h, v20.8h},                     [x5], x6", -13, -5)
   1048 
   1049 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h},             [x5]", 17, 7)
   1050 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h},             [x5], #48", 9, 9)
   1051 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h},             [x5], x6", -13, -5)
   1052 
   1053 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5]", 17, 7)
   1054 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5], #64", 9, 9)
   1055 MEM_TEST("st1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5], x6", -13, -5)
   1056 
   1057 
   1058 MEM_TEST("st1 {v19.4h, v20.4h},                     [x5]", 17, 7)
   1059 MEM_TEST("st1 {v19.4h, v20.4h},                     [x5], #16", 9, 9)
   1060 MEM_TEST("st1 {v19.4h, v20.4h},                     [x5], x6", -13, -5)
   1061 
   1062 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h},             [x5]", 17, 7)
   1063 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h},             [x5], #24", 9, 9)
   1064 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h},             [x5], x6", -13, -5)
   1065 
   1066 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5]", 17, 7)
   1067 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5], #32", 9, 9)
   1068 MEM_TEST("st1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5], x6", -13, -5)
   1069 
   1070 
   1071 MEM_TEST("st1 {v19.16b, v20.16b},                   [x5]", 17, 7)
   1072 MEM_TEST("st1 {v19.16b, v20.16b},                   [x5], #32", 9, 9)
   1073 MEM_TEST("st1 {v19.16b, v20.16b},                   [x5], x6", -13, -5)
   1074 
   1075 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b},          [x5]", 17, 7)
   1076 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b},          [x5], #48", 9, 9)
   1077 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b},          [x5], x6", -13, -5)
   1078 
   1079 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5]", 17, 7)
   1080 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], #64", 9, 9)
   1081 MEM_TEST("st1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], x6", -13, -5)
   1082 
   1083 
   1084 MEM_TEST("st1 {v19.8b, v20.8b},                     [x5]", 17, 7)
   1085 MEM_TEST("st1 {v19.8b, v20.8b},                     [x5], #16", 9, 9)
   1086 MEM_TEST("st1 {v19.8b, v20.8b},                     [x5], x6", -13, -5)
   1087 
   1088 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b},             [x5]", 17, 7)
   1089 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b},             [x5], #24", 9, 9)
   1090 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b},             [x5], x6", -13, -5)
   1091 
   1092 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5]", 17, 7)
   1093 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5], #32", 9, 9)
   1094 MEM_TEST("st1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5], x6", -13, -5)
   1095 
   1096 
   1097 MEM_TEST("ld1 {v19.2d, v20.2d},                     [x5]", 17, 7)
   1098 MEM_TEST("ld1 {v19.2d, v20.2d},                     [x5], #32", 9, 9)
   1099 MEM_TEST("ld1 {v19.2d, v20.2d},                     [x5], x6", -13, -5)
   1100 
   1101 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d},             [x5]", 17, 7)
   1102 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d},             [x5], #48", 9, 9)
   1103 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d},             [x5], x6", -13, -5)
   1104 
   1105 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5]", 17, 7)
   1106 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5], #64", 9, 9)
   1107 MEM_TEST("ld1 {v17.2d, v18.2d, v19.2d, v20.2d},     [x5], x6", -13, -5)
   1108 
   1109 
   1110 MEM_TEST("ld1 {v19.1d, v20.1d},                     [x5]", 17, 7)
   1111 MEM_TEST("ld1 {v19.1d, v20.1d},                     [x5], #16", 9, 9)
   1112 MEM_TEST("ld1 {v19.1d, v20.1d},                     [x5], x6", -13, -5)
   1113 
   1114 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d},             [x5]", 17, 7)
   1115 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d},             [x5], #24", 9, 9)
   1116 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d},             [x5], x6", -13, -5)
   1117 
   1118 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5]", 17, 7)
   1119 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5], #32", 9, 9)
   1120 MEM_TEST("ld1 {v17.1d, v18.1d, v19.1d, v20.1d},     [x5], x6", -13, -5)
   1121 
   1122 
   1123 MEM_TEST("ld1 {v19.4s, v20.4s},                     [x5]", 17, 7)
   1124 MEM_TEST("ld1 {v19.4s, v20.4s},                     [x5], #32", 9, 9)
   1125 MEM_TEST("ld1 {v19.4s, v20.4s},                     [x5], x6", -13, -5)
   1126 
   1127 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s},             [x5]", 17, 7)
   1128 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s},             [x5], #48", 9, 9)
   1129 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s},             [x5], x6", -13, -5)
   1130 
   1131 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5]", 17, 7)
   1132 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5], #64", 9, 9)
   1133 MEM_TEST("ld1 {v17.4s, v18.4s, v19.4s, v20.4s},     [x5], x6", -13, -5)
   1134 
   1135 
   1136 MEM_TEST("ld1 {v19.2s, v20.2s},                     [x5]", 17, 7)
   1137 MEM_TEST("ld1 {v19.2s, v20.2s},                     [x5], #16", 9, 9)
   1138 MEM_TEST("ld1 {v19.2s, v20.2s},                     [x5], x6", -13, -5)
   1139 
   1140 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s},             [x5]", 17, 7)
   1141 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s},             [x5], #24", 9, 9)
   1142 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s},             [x5], x6", -13, -5)
   1143 
   1144 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5]", 17, 7)
   1145 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5], #32", 9, 9)
   1146 MEM_TEST("ld1 {v17.2s, v18.2s, v19.2s, v20.2s},     [x5], x6", -13, -5)
   1147 
   1148 
   1149 MEM_TEST("ld1 {v19.8h, v20.8h},                     [x5]", 17, 7)
   1150 MEM_TEST("ld1 {v19.8h, v20.8h},                     [x5], #32", 9, 9)
   1151 MEM_TEST("ld1 {v19.8h, v20.8h},                     [x5], x6", -13, -5)
   1152 
   1153 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h},             [x5]", 17, 7)
   1154 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h},             [x5], #48", 9, 9)
   1155 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h},             [x5], x6", -13, -5)
   1156 
   1157 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5]", 17, 7)
   1158 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5], #64", 9, 9)
   1159 MEM_TEST("ld1 {v17.8h, v18.8h, v19.8h, v20.8h},     [x5], x6", -13, -5)
   1160 
   1161 
   1162 MEM_TEST("ld1 {v19.4h, v20.4h},                     [x5]", 17, 7)
   1163 MEM_TEST("ld1 {v19.4h, v20.4h},                     [x5], #16", 9, 9)
   1164 MEM_TEST("ld1 {v19.4h, v20.4h},                     [x5], x6", -13, -5)
   1165 
   1166 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h},             [x5]", 17, 7)
   1167 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h},             [x5], #24", 9, 9)
   1168 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h},             [x5], x6", -13, -5)
   1169 
   1170 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5]", 17, 7)
   1171 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5], #32", 9, 9)
   1172 MEM_TEST("ld1 {v17.4h, v18.4h, v19.4h, v20.4h},     [x5], x6", -13, -5)
   1173 
   1174 
   1175 MEM_TEST("ld1 {v19.16b, v20.16b},                   [x5]", 17, 7)
   1176 MEM_TEST("ld1 {v19.16b, v20.16b},                   [x5], #32", 9, 9)
   1177 MEM_TEST("ld1 {v19.16b, v20.16b},                   [x5], x6", -13, -5)
   1178 
   1179 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b},          [x5]", 17, 7)
   1180 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b},          [x5], #48", 9, 9)
   1181 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b},          [x5], x6", -13, -5)
   1182 
   1183 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5]", 17, 7)
   1184 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], #64", 9, 9)
   1185 MEM_TEST("ld1 {v17.16b, v18.16b, v19.16b, v20.16b}, [x5], x6", -13, -5)
   1186 
   1187 
   1188 MEM_TEST("ld1 {v19.8b, v20.8b},                     [x5]", 17, 7)
   1189 MEM_TEST("ld1 {v19.8b, v20.8b},                     [x5], #16", 9, 9)
   1190 MEM_TEST("ld1 {v19.8b, v20.8b},                     [x5], x6", -13, -5)
   1191 
   1192 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b},             [x5]", 17, 7)
   1193 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b},             [x5], #24", 9, 9)
   1194 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b},             [x5], x6", -13, -5)
   1195 
   1196 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5]", 17, 7)
   1197 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5], #32", 9, 9)
   1198 MEM_TEST("ld1 {v17.8b, v18.8b, v19.8b, v20.8b},     [x5], x6", -13, -5)
   1199 
   1200 
   1201 ////////////////////////////////////////////////////////////////
   1202 printf("LD1R (single structure, replicate)\n");
   1203 
   1204 MEM_TEST("ld1r {v17.2d},  [x5]", 3, -5)
   1205 MEM_TEST("ld1r {v17.1d},  [x5]", 3, -4)
   1206 MEM_TEST("ld1r {v17.4s},  [x5]", 3, -3)
   1207 MEM_TEST("ld1r {v17.2s},  [x5]", 3, -2)
   1208 MEM_TEST("ld1r {v17.8h},  [x5]", 3, -1)
   1209 MEM_TEST("ld1r {v17.4h},  [x5]", 3, 1)
   1210 MEM_TEST("ld1r {v17.16b}, [x5]", 3, 2)
   1211 MEM_TEST("ld1r {v17.8b},  [x5]", 3, 3)
   1212 
   1213 MEM_TEST("ld1r {v17.2d},  [x5], #8", 3, -5)
   1214 MEM_TEST("ld1r {v17.1d},  [x5], #8", 3, -4)
   1215 MEM_TEST("ld1r {v17.4s},  [x5], #4", 3, -3)
   1216 MEM_TEST("ld1r {v17.2s},  [x5], #4", 3, -2)
   1217 MEM_TEST("ld1r {v17.8h},  [x5], #2", 3, -1)
   1218 MEM_TEST("ld1r {v17.4h},  [x5], #2", 3, 1)
   1219 MEM_TEST("ld1r {v17.16b}, [x5], #1", 3, 2)
   1220 MEM_TEST("ld1r {v17.8b},  [x5], #1", 3, 3)
   1221 
   1222 MEM_TEST("ld1r {v17.2d},  [x5], x6", 3, -5)
   1223 MEM_TEST("ld1r {v17.1d},  [x5], x6", 3, -4)
   1224 MEM_TEST("ld1r {v17.4s},  [x5], x6", 3, -3)
   1225 MEM_TEST("ld1r {v17.2s},  [x5], x6", 3, -2)
   1226 MEM_TEST("ld1r {v17.8h},  [x5], x6", 3, -1)
   1227 MEM_TEST("ld1r {v17.4h},  [x5], x6", 3, 1)
   1228 MEM_TEST("ld1r {v17.16b}, [x5], x6", 3, 2)
   1229 MEM_TEST("ld1r {v17.8b},  [x5], x6", 3, 3)
   1230 
   1231 
   1232 ////////////////////////////////////////////////////////////////
   1233 printf("LD2R (single structure, replicate)\n");
   1234 
   1235 MEM_TEST("ld2r {v17.2d , v18.2d },  [x5]", 3, -5)
   1236 MEM_TEST("ld2r {v18.1d , v19.1d },  [x5]", 3, -4)
   1237 MEM_TEST("ld2r {v19.4s , v20.4s },  [x5]", 3, -3)
   1238 MEM_TEST("ld2r {v17.2s , v18.2s },  [x5]", 3, -2)
   1239 MEM_TEST("ld2r {v18.8h , v19.8h },  [x5]", 3, -1)
   1240 MEM_TEST("ld2r {v19.4h , v20.4h },  [x5]", 3, 1)
   1241 MEM_TEST("ld2r {v17.16b, v18.16b},  [x5]", 3, 2)
   1242 MEM_TEST("ld2r {v18.8b , v19.8b },  [x5]", 3, 3)
   1243 
   1244 MEM_TEST("ld2r {v19.2d , v20.2d },  [x5], #16", 3, -5)
   1245 MEM_TEST("ld2r {v17.1d , v18.1d },  [x5], #16", 3, -4)
   1246 MEM_TEST("ld2r {v18.4s , v19.4s },  [x5], #8", 3, -3)
   1247 MEM_TEST("ld2r {v19.2s , v20.2s },  [x5], #8", 3, -2)
   1248 MEM_TEST("ld2r {v17.8h , v18.8h },  [x5], #4", 3, -1)
   1249 MEM_TEST("ld2r {v18.4h , v19.4h },  [x5], #4", 3, 1)
   1250 MEM_TEST("ld2r {v19.16b, v20.16b},  [x5], #2", 3, 2)
   1251 MEM_TEST("ld2r {v17.8b , v18.8b },  [x5], #2", 3, 3)
   1252 
   1253 MEM_TEST("ld2r {v18.2d , v19.2d },  [x5], x6", 3, -5)
   1254 MEM_TEST("ld2r {v19.1d , v20.1d },  [x5], x6", 3, -4)
   1255 MEM_TEST("ld2r {v17.4s , v18.4s },  [x5], x6", 3, -3)
   1256 MEM_TEST("ld2r {v18.2s , v19.2s },  [x5], x6", 3, -2)
   1257 MEM_TEST("ld2r {v19.8h , v20.8h },  [x5], x6", 3, -1)
   1258 MEM_TEST("ld2r {v17.4h , v18.4h },  [x5], x6", 3, 1)
   1259 MEM_TEST("ld2r {v18.16b, v19.16b},  [x5], x6", 3, 2)
   1260 MEM_TEST("ld2r {v19.8b , v20.8b },  [x5], x6", 3, 3)
   1261 
   1262 
   1263 //////////////////////////////////////////////////////////////////
   1264 printf("LD3R (single structure, replicate)\n");
   1265 
   1266 MEM_TEST("ld3r {v17.2d , v18.2d , v19.2d },  [x5]", 3, -5)
   1267 MEM_TEST("ld3r {v18.1d , v19.1d , v20.1d },  [x5]", 3, -4)
   1268 MEM_TEST("ld3r {v17.4s , v18.4s , v19.4s },  [x5]", 3, -3)
   1269 MEM_TEST("ld3r {v18.2s , v19.2s , v20.2s },  [x5]", 3, -2)
   1270 MEM_TEST("ld3r {v17.8h , v18.8h , v19.8h },  [x5]", 3, -5)
   1271 MEM_TEST("ld3r {v18.4h , v19.4h , v20.4h },  [x5]", 3, -4)
   1272 MEM_TEST("ld3r {v17.16b, v18.16b, v19.16b},  [x5]", 3, -3)
   1273 MEM_TEST("ld3r {v18.8b , v19.8b , v20.8b },  [x5]", 3, -2)
   1274 
   1275 MEM_TEST("ld3r {v17.2d , v18.2d , v19.2d },  [x5], #24", 3, -5)
   1276 MEM_TEST("ld3r {v18.1d , v19.1d , v20.1d },  [x5], #24", 3, -4)
   1277 MEM_TEST("ld3r {v17.4s , v18.4s , v19.4s },  [x5], #12", 3, -3)
   1278 MEM_TEST("ld3r {v18.2s , v19.2s , v20.2s },  [x5], #12", 3, -2)
   1279 MEM_TEST("ld3r {v17.8h , v18.8h , v19.8h },  [x5], #6", 3, -5)
   1280 MEM_TEST("ld3r {v18.4h , v19.4h , v20.4h },  [x5], #6", 3, -4)
   1281 MEM_TEST("ld3r {v17.16b, v18.16b, v19.16b},  [x5], #3", 3, -3)
   1282 MEM_TEST("ld3r {v18.8b , v19.8b , v20.8b },  [x5], #3", 3, -2)
   1283 
   1284 MEM_TEST("ld3r {v17.2d , v18.2d , v19.2d },  [x5], x6", 3, -5)
   1285 MEM_TEST("ld3r {v18.1d , v19.1d , v20.1d },  [x5], x6", 3, -4)
   1286 MEM_TEST("ld3r {v17.4s , v18.4s , v19.4s },  [x5], x6", 3, -3)
   1287 MEM_TEST("ld3r {v18.2s , v19.2s , v20.2s },  [x5], x6", 3, -2)
   1288 MEM_TEST("ld3r {v17.8h , v18.8h , v19.8h },  [x5], x6", 3, -5)
   1289 MEM_TEST("ld3r {v18.4h , v19.4h , v20.4h },  [x5], x6", 3, -4)
   1290 MEM_TEST("ld3r {v17.16b, v18.16b, v19.16b},  [x5], x6", 3, -3)
   1291 MEM_TEST("ld3r {v18.8b , v19.8b , v20.8b },  [x5], x6", 3, -2)
   1292 
   1293 
   1294 ////////////////////////////////////////////////////////////////
   1295 printf("LD4R (single structure, replicate)\n");
   1296 
   1297 MEM_TEST("ld4r {v17.2d , v18.2d , v19.2d , v20.2d },  [x5]", 3, -5)
   1298 MEM_TEST("ld4r {v17.1d , v18.1d , v19.1d , v20.1d },  [x5]", 3, -4)
   1299 MEM_TEST("ld4r {v17.4s , v18.4s , v19.4s , v20.4s },  [x5]", 3, -3)
   1300 MEM_TEST("ld4r {v17.2s , v18.2s , v19.2s , v20.2s },  [x5]", 3, -2)
   1301 MEM_TEST("ld4r {v17.8h , v18.8h , v19.8h , v20.8h },  [x5]", 3, -5)
   1302 MEM_TEST("ld4r {v17.4h , v18.4h , v19.4h , v20.4h },  [x5]", 3, -4)
   1303 MEM_TEST("ld4r {v17.16b, v18.16b, v19.16b, v20.16b},  [x5]", 3, -3)
   1304 MEM_TEST("ld4r {v17.8b , v18.8b , v19.8b , v20.8b },  [x5]", 3, -2)
   1305 
   1306 MEM_TEST("ld4r {v17.2d , v18.2d , v19.2d , v20.2d },  [x5], #32", 3, -5)
   1307 MEM_TEST("ld4r {v17.1d , v18.1d , v19.1d , v20.1d },  [x5], #32", 3, -4)
   1308 MEM_TEST("ld4r {v17.4s , v18.4s , v19.4s , v20.4s },  [x5], #16", 3, -3)
   1309 MEM_TEST("ld4r {v17.2s , v18.2s , v19.2s , v20.2s },  [x5], #16", 3, -2)
   1310 MEM_TEST("ld4r {v17.8h , v18.8h , v19.8h , v20.8h },  [x5], #8", 3, -5)
   1311 MEM_TEST("ld4r {v17.4h , v18.4h , v19.4h , v20.4h },  [x5], #8", 3, -4)
   1312 MEM_TEST("ld4r {v17.16b, v18.16b, v19.16b, v20.16b},  [x5], #4", 3, -3)
   1313 MEM_TEST("ld4r {v17.8b , v18.8b , v19.8b , v20.8b },  [x5], #4", 3, -2)
   1314 
   1315 MEM_TEST("ld4r {v17.2d , v18.2d , v19.2d , v20.2d },  [x5], x6", 3, -5)
   1316 MEM_TEST("ld4r {v17.1d , v18.1d , v19.1d , v20.1d },  [x5], x6", 3, -4)
   1317 MEM_TEST("ld4r {v17.4s , v18.4s , v19.4s , v20.4s },  [x5], x6", 3, -3)
   1318 MEM_TEST("ld4r {v17.2s , v18.2s , v19.2s , v20.2s },  [x5], x6", 3, -2)
   1319 MEM_TEST("ld4r {v17.8h , v18.8h , v19.8h , v20.8h },  [x5], x6", 3, -5)
   1320 MEM_TEST("ld4r {v17.4h , v18.4h , v19.4h , v20.4h },  [x5], x6", 3, -4)
   1321 MEM_TEST("ld4r {v17.16b, v18.16b, v19.16b, v20.16b},  [x5], x6", 3, -3)
   1322 MEM_TEST("ld4r {v17.8b , v18.8b , v19.8b , v20.8b },  [x5], x6", 3, -2)
   1323 
   1324 
   1325 ////////////////////////////////////////////////////////////////
   1326 printf("LD1/ST1 (single 1-elem struct to/from one lane of 1 reg\n");
   1327 
   1328 MEM_TEST("st1 {v19.d}[0], [x5]",       17,  7)
   1329 MEM_TEST("st1 {v19.d}[0], [x5], #8",   -9, 12)
   1330 MEM_TEST("st1 {v19.d}[0], [x5], x6",   9, 13)
   1331 
   1332 MEM_TEST("st1 {v19.d}[1], [x5]",       17,  7)
   1333 MEM_TEST("st1 {v19.d}[1], [x5], #8",   -9, 12)
   1334 MEM_TEST("st1 {v19.d}[1], [x5], x6",   9, 13)
   1335 
   1336 MEM_TEST("st1 {v19.s}[0], [x5]",       17,  7)
   1337 MEM_TEST("st1 {v19.s}[0], [x5], #4",   -9, 12)
   1338 MEM_TEST("st1 {v19.s}[0], [x5], x6",   9, 13)
   1339 
   1340 MEM_TEST("st1 {v19.s}[3], [x5]",       17,  7)
   1341 MEM_TEST("st1 {v19.s}[3], [x5], #4",   -9, 12)
   1342 MEM_TEST("st1 {v19.s}[3], [x5], x6",   9, 13)
   1343 
   1344 MEM_TEST("st1 {v19.h}[0], [x5]",       17,  7)
   1345 MEM_TEST("st1 {v19.h}[0], [x5], #2",   -9, 12)
   1346 MEM_TEST("st1 {v19.h}[0], [x5], x6",   9, 13)
   1347 
   1348 MEM_TEST("st1 {v19.h}[6], [x5]",       17,  7)
   1349 MEM_TEST("st1 {v19.h}[6], [x5], #2",   -9, 12)
   1350 MEM_TEST("st1 {v19.h}[6], [x5], x6",   9, 13)
   1351 
   1352 MEM_TEST("st1 {v19.b}[0], [x5]",       17,  7)
   1353 MEM_TEST("st1 {v19.b}[0], [x5], #1",   -9, 12)
   1354 MEM_TEST("st1 {v19.b}[0], [x5], x6",   9, 13)
   1355 
   1356 MEM_TEST("st1 {v19.b}[13], [x5]",      17,  7)
   1357 MEM_TEST("st1 {v19.b}[13], [x5], #1",  -9, 12)
   1358 MEM_TEST("st1 {v19.b}[13], [x5], x6",  9, 13)
   1359 
   1360 
   1361 MEM_TEST("ld1 {v19.d}[0], [x5]",       17,  7)
   1362 MEM_TEST("ld1 {v19.d}[0], [x5], #8",   -9, 12)
   1363 MEM_TEST("ld1 {v19.d}[0], [x5], x6",   9, 13)
   1364 
   1365 MEM_TEST("ld1 {v19.d}[1], [x5]",       17,  7)
   1366 MEM_TEST("ld1 {v19.d}[1], [x5], #8",   -9, 12)
   1367 MEM_TEST("ld1 {v19.d}[1], [x5], x6",   9, 13)
   1368 
   1369 MEM_TEST("ld1 {v19.s}[0], [x5]",       17,  7)
   1370 MEM_TEST("ld1 {v19.s}[0], [x5], #4",   -9, 12)
   1371 MEM_TEST("ld1 {v19.s}[0], [x5], x6",   9, 13)
   1372 
   1373 MEM_TEST("ld1 {v19.s}[3], [x5]",       17,  7)
   1374 MEM_TEST("ld1 {v19.s}[3], [x5], #4",   -9, 12)
   1375 MEM_TEST("ld1 {v19.s}[3], [x5], x6",   9, 13)
   1376 
   1377 MEM_TEST("ld1 {v19.h}[0], [x5]",       17,  7)
   1378 MEM_TEST("ld1 {v19.h}[0], [x5], #2",   -9, 12)
   1379 MEM_TEST("ld1 {v19.h}[0], [x5], x6",   9, 13)
   1380 
   1381 MEM_TEST("ld1 {v19.h}[6], [x5]",       17,  7)
   1382 MEM_TEST("ld1 {v19.h}[6], [x5], #2",   -9, 12)
   1383 MEM_TEST("ld1 {v19.h}[6], [x5], x6",   9, 13)
   1384 
   1385 MEM_TEST("ld1 {v19.b}[0], [x5]",       17,  7)
   1386 MEM_TEST("ld1 {v19.b}[0], [x5], #1",   -9, 12)
   1387 MEM_TEST("ld1 {v19.b}[0], [x5], x6",   9, 13)
   1388 
   1389 MEM_TEST("ld1 {v19.b}[13], [x5]",      17,  7)
   1390 MEM_TEST("ld1 {v19.b}[13], [x5], #1",  -9, 12)
   1391 MEM_TEST("ld1 {v19.b}[13], [x5], x6",  9, 13)
   1392 
   1393 
   1394 ////////////////////////////////////////////////////////////////
   1395 printf("LD2/ST2 (single 2-elem struct to/from one lane of 2 regs\n");
   1396 
   1397 MEM_TEST("st2 {v18.d, v19.d}[0], [x5]",       17,  7)
   1398 MEM_TEST("st2 {v18.d, v19.d}[0], [x5], #16",  -9, 12)
   1399 MEM_TEST("st2 {v18.d, v19.d}[0], [x5], x6",   9, 13)
   1400 
   1401 MEM_TEST("st2 {v18.d, v19.d}[1], [x5]",       17,  7)
   1402 MEM_TEST("st2 {v18.d, v19.d}[1], [x5], #16",  -9, 12)
   1403 MEM_TEST("st2 {v18.d, v19.d}[1], [x5], x6",   9, 13)
   1404 
   1405 MEM_TEST("st2 {v18.s, v19.s}[0], [x5]",       17,  7)
   1406 MEM_TEST("st2 {v18.s, v19.s}[0], [x5], #8",   -9, 12)
   1407 MEM_TEST("st2 {v18.s, v19.s}[0], [x5], x6",   9, 13)
   1408 
   1409 MEM_TEST("st2 {v18.s, v19.s}[3], [x5]",       17,  7)
   1410 MEM_TEST("st2 {v18.s, v19.s}[3], [x5], #8",   -9, 12)
   1411 MEM_TEST("st2 {v18.s, v19.s}[3], [x5], x6",   9, 13)
   1412 
   1413 MEM_TEST("st2 {v18.h, v19.h}[0], [x5]",       17,  7)
   1414 MEM_TEST("st2 {v18.h, v19.h}[0], [x5], #4",   -9, 12)
   1415 MEM_TEST("st2 {v18.h, v19.h}[0], [x5], x6",   9, 13)
   1416 
   1417 MEM_TEST("st2 {v18.h, v19.h}[6], [x5]",       17,  7)
   1418 MEM_TEST("st2 {v18.h, v19.h}[6], [x5], #4",   -9, 12)
   1419 MEM_TEST("st2 {v18.h, v19.h}[6], [x5], x6",   9, 13)
   1420 
   1421 MEM_TEST("st2 {v18.b, v19.b}[0], [x5]",       17,  7)
   1422 MEM_TEST("st2 {v18.b, v19.b}[0], [x5], #2",   -9, 12)
   1423 MEM_TEST("st2 {v18.b, v19.b}[0], [x5], x6",   9, 13)
   1424 
   1425 MEM_TEST("st2 {v18.b, v19.b}[13], [x5]",      17,  7)
   1426 MEM_TEST("st2 {v18.b, v19.b}[13], [x5], #2",  -9, 12)
   1427 MEM_TEST("st2 {v18.b, v19.b}[13], [x5], x6",  9, 13)
   1428 
   1429 
   1430 MEM_TEST("ld2 {v18.d, v19.d}[0], [x5]",       17,  7)
   1431 MEM_TEST("ld2 {v18.d, v19.d}[0], [x5], #16",  -9, 12)
   1432 MEM_TEST("ld2 {v18.d, v19.d}[0], [x5], x6",   9, 13)
   1433 
   1434 MEM_TEST("ld2 {v18.d, v19.d}[1], [x5]",       17,  7)
   1435 MEM_TEST("ld2 {v18.d, v19.d}[1], [x5], #16",  -9, 12)
   1436 MEM_TEST("ld2 {v18.d, v19.d}[1], [x5], x6",   9, 13)
   1437 
   1438 MEM_TEST("ld2 {v18.s, v19.s}[0], [x5]",       17,  7)
   1439 MEM_TEST("ld2 {v18.s, v19.s}[0], [x5], #8",   -9, 12)
   1440 MEM_TEST("ld2 {v18.s, v19.s}[0], [x5], x6",   9, 13)
   1441 
   1442 MEM_TEST("ld2 {v18.s, v19.s}[3], [x5]",       17,  7)
   1443 MEM_TEST("ld2 {v18.s, v19.s}[3], [x5], #8",   -9, 12)
   1444 MEM_TEST("ld2 {v18.s, v19.s}[3], [x5], x6",   9, 13)
   1445 
   1446 MEM_TEST("ld2 {v18.h, v19.h}[0], [x5]",       17,  7)
   1447 MEM_TEST("ld2 {v18.h, v19.h}[0], [x5], #4",   -9, 12)
   1448 MEM_TEST("ld2 {v18.h, v19.h}[0], [x5], x6",   9, 13)
   1449 
   1450 MEM_TEST("ld2 {v18.h, v19.h}[6], [x5]",       17,  7)
   1451 MEM_TEST("ld2 {v18.h, v19.h}[6], [x5], #4",   -9, 12)
   1452 MEM_TEST("ld2 {v18.h, v19.h}[6], [x5], x6",   9, 13)
   1453 
   1454 MEM_TEST("ld2 {v18.b, v19.b}[0], [x5]",       17,  7)
   1455 MEM_TEST("ld2 {v18.b, v19.b}[0], [x5], #2",   -9, 12)
   1456 MEM_TEST("ld2 {v18.b, v19.b}[0], [x5], x6",   9, 13)
   1457 
   1458 MEM_TEST("ld2 {v18.b, v19.b}[13], [x5]",      17,  7)
   1459 MEM_TEST("ld2 {v18.b, v19.b}[13], [x5], #2",  -9, 12)
   1460 MEM_TEST("ld2 {v18.b, v19.b}[13], [x5], x6",  9, 13)
   1461 
   1462 
   1463 ////////////////////////////////////////////////////////////////
   1464 printf("LD3/ST3 (single 3-elem struct to/from one lane of 3 regs\n");
   1465 
   1466 MEM_TEST("st3 {v17.d, v18.d, v19.d}[0], [x5]",       17,  7)
   1467 MEM_TEST("st3 {v17.d, v18.d, v19.d}[0], [x5], #24",  -9, 12)
   1468 MEM_TEST("st3 {v17.d, v18.d, v19.d}[0], [x5], x6",   9, 13)
   1469 
   1470 MEM_TEST("st3 {v17.d, v18.d, v19.d}[1], [x5]",       17,  7)
   1471 MEM_TEST("st3 {v17.d, v18.d, v19.d}[1], [x5], #24",  -9, 12)
   1472 MEM_TEST("st3 {v17.d, v18.d, v19.d}[1], [x5], x6",   9, 13)
   1473 
   1474 MEM_TEST("st3 {v17.s, v18.s, v19.s}[0], [x5]",       17,  7)
   1475 MEM_TEST("st3 {v17.s, v18.s, v19.s}[0], [x5], #12",  -9, 12)
   1476 MEM_TEST("st3 {v17.s, v18.s, v19.s}[0], [x5], x6",   9, 13)
   1477 
   1478 MEM_TEST("st3 {v17.s, v18.s, v19.s}[3], [x5]",       17,  7)
   1479 MEM_TEST("st3 {v17.s, v18.s, v19.s}[3], [x5], #12",  -9, 12)
   1480 MEM_TEST("st3 {v17.s, v18.s, v19.s}[3], [x5], x6",   9, 13)
   1481 
   1482 MEM_TEST("st3 {v17.h, v18.h, v19.h}[0], [x5]",       17,  7)
   1483 MEM_TEST("st3 {v17.h, v18.h, v19.h}[0], [x5], #6",   -9, 12)
   1484 MEM_TEST("st3 {v17.h, v18.h, v19.h}[0], [x5], x6",   9, 13)
   1485 
   1486 MEM_TEST("st3 {v17.h, v18.h, v19.h}[6], [x5]",       17,  7)
   1487 MEM_TEST("st3 {v17.h, v18.h, v19.h}[6], [x5], #6",   -9, 12)
   1488 MEM_TEST("st3 {v17.h, v18.h, v19.h}[6], [x5], x6",   9, 13)
   1489 
   1490 MEM_TEST("st3 {v17.b, v18.b, v19.b}[0], [x5]",       17,  7)
   1491 MEM_TEST("st3 {v17.b, v18.b, v19.b}[0], [x5], #3",   -9, 12)
   1492 MEM_TEST("st3 {v17.b, v18.b, v19.b}[0], [x5], x6",   9, 13)
   1493 
   1494 MEM_TEST("st3 {v17.b, v18.b, v19.b}[13], [x5]",      17,  7)
   1495 MEM_TEST("st3 {v17.b, v18.b, v19.b}[13], [x5], #3",  -9, 12)
   1496 MEM_TEST("st3 {v17.b, v18.b, v19.b}[13], [x5], x6",  9, 13)
   1497 
   1498 
   1499 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[0], [x5]",       17,  7)
   1500 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[0], [x5], #24",  -9, 12)
   1501 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[0], [x5], x6",   9, 13)
   1502 
   1503 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[1], [x5]",       17,  7)
   1504 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[1], [x5], #24",  -9, 12)
   1505 MEM_TEST("ld3 {v17.d, v18.d, v19.d}[1], [x5], x6",   9, 13)
   1506 
   1507 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[0], [x5]",       17,  7)
   1508 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[0], [x5], #12",  -9, 12)
   1509 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[0], [x5], x6",   9, 13)
   1510 
   1511 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[3], [x5]",       17,  7)
   1512 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[3], [x5], #12",  -9, 12)
   1513 MEM_TEST("ld3 {v17.s, v18.s, v19.s}[3], [x5], x6",   9, 13)
   1514 
   1515 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[0], [x5]",       17,  7)
   1516 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[0], [x5], #6",   -9, 12)
   1517 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[0], [x5], x6",   9, 13)
   1518 
   1519 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[6], [x5]",       17,  7)
   1520 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[6], [x5], #6",   -9, 12)
   1521 MEM_TEST("ld3 {v17.h, v18.h, v19.h}[6], [x5], x6",   9, 13)
   1522 
   1523 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[0], [x5]",       17,  7)
   1524 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[0], [x5], #3",   -9, 12)
   1525 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[0], [x5], x6",   9, 13)
   1526 
   1527 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[13], [x5]",      17,  7)
   1528 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[13], [x5], #3",  -9, 12)
   1529 MEM_TEST("ld3 {v17.b, v18.b, v19.b}[13], [x5], x6",  9, 13)
   1530 
   1531 
   1532 ////////////////////////////////////////////////////////////////
   1533 printf("LD4/ST4 (single 4-elem struct to/from one lane of 4 regs\n");
   1534 
   1535 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[0], [x5]",       17,  7)
   1536 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[0], [x5], #32",  -9, 12)
   1537 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[0], [x5], x6",   9, 13)
   1538 
   1539 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[1], [x5]",       17,  7)
   1540 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[1], [x5], #32",  -9, 12)
   1541 MEM_TEST("st4 {v17.d, v18.d, v19.d, v20.d}[1], [x5], x6",   9, 13)
   1542 
   1543 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[0], [x5]",       17,  7)
   1544 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[0], [x5], #16",  -9, 12)
   1545 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[0], [x5], x6",   9, 13)
   1546 
   1547 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[3], [x5]",       17,  7)
   1548 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[3], [x5], #16",  -9, 12)
   1549 MEM_TEST("st4 {v17.s, v18.s, v19.s, v20.s}[3], [x5], x6",   9, 13)
   1550 
   1551 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[0], [x5]",       17,  7)
   1552 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[0], [x5], #8",   -9, 12)
   1553 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[0], [x5], x6",   9, 13)
   1554 
   1555 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[6], [x5]",       17,  7)
   1556 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[6], [x5], #8",   -9, 12)
   1557 MEM_TEST("st4 {v17.h, v18.h, v19.h, v20.h}[6], [x5], x6",   9, 13)
   1558 
   1559 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[0], [x5]",       17,  7)
   1560 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[0], [x5], #4",   -9, 12)
   1561 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[0], [x5], x6",   9, 13)
   1562 
   1563 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[13], [x5]",      17,  7)
   1564 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[13], [x5], #4",  -9, 12)
   1565 MEM_TEST("st4 {v17.b, v18.b, v19.b, v20.b}[13], [x5], x6",  9, 13)
   1566 
   1567 
   1568 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[0], [x5]",       17,  7)
   1569 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[0], [x5], #32",  -9, 12)
   1570 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[0], [x5], x6",   9, 13)
   1571 
   1572 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[1], [x5]",       17,  7)
   1573 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[1], [x5], #32",  -9, 12)
   1574 MEM_TEST("ld4 {v17.d, v18.d, v19.d, v20.d}[1], [x5], x6",   9, 13)
   1575 
   1576 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[0], [x5]",       17,  7)
   1577 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[0], [x5], #16",  -9, 12)
   1578 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[0], [x5], x6",   9, 13)
   1579 
   1580 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[3], [x5]",       17,  7)
   1581 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[3], [x5], #16",  -9, 12)
   1582 MEM_TEST("ld4 {v17.s, v18.s, v19.s, v20.s}[3], [x5], x6",   9, 13)
   1583 
   1584 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[0], [x5]",       17,  7)
   1585 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[0], [x5], #8",   -9, 12)
   1586 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[0], [x5], x6",   9, 13)
   1587 
   1588 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[6], [x5]",       17,  7)
   1589 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[6], [x5], #8",   -9, 12)
   1590 MEM_TEST("ld4 {v17.h, v18.h, v19.h, v20.h}[6], [x5], x6",   9, 13)
   1591 
   1592 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[0], [x5]",       17,  7)
   1593 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[0], [x5], #4",   -9, 12)
   1594 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[0], [x5], x6",   9, 13)
   1595 
   1596 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[13], [x5]",      17,  7)
   1597 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[13], [x5], #4",  -9, 12)
   1598 MEM_TEST("ld4 {v17.b, v18.b, v19.b, v20.b}[13], [x5], x6",  9, 13)
   1599 
   1600 ////////////////////////////////////////////////////////////////
   1601 printf("PRFM (immediate)\n");
   1602 
   1603 MEM_TEST("prfm pldl1keep, [x5, #40]",  12, -4);
   1604 MEM_TEST("prfm pstl3strm, [x5, #56]",  12, -4);
   1605 
   1606 ////////////////////////////////////////////////////////////////
   1607 printf("PRFM (register)\n");
   1608 
   1609 MEM_TEST("prfm pldl1keep, [x5,x6]",  12, -4);
   1610 MEM_TEST("prfm pldl1strm, [x5,x6, lsl #3]",  12, -4);
   1611 MEM_TEST("prfm pldl2keep, [x5,w6,uxtw #0]", 12, 4);
   1612 MEM_TEST("prfm pldl2strm, [x5,w6,uxtw #3]", 12, 4);
   1613 MEM_TEST("prfm pldl3keep, [x5,w6,sxtw #0]", 12, 4);
   1614 MEM_TEST("prfm pldl3strm, [x5,w6,sxtw #3]",  12, -4);
   1615 
   1616 MEM_TEST("prfm pstl1keep, [x5,x6]",  12, -4);
   1617 MEM_TEST("prfm pstl1strm, [x5,x6, lsl #3]",  12, -4);
   1618 MEM_TEST("prfm pstl2keep, [x5,w6,uxtw #0]", 12, 4);
   1619 MEM_TEST("prfm pstl2strm, [x5,w6,uxtw #3]", 12, 4);
   1620 MEM_TEST("prfm pstl3keep, [x5,w6,sxtw #0]", 12, 4);
   1621 MEM_TEST("prfm pstl3strm, [x5,w6,sxtw #3]",  12, -4);
   1622 
   1623 ////////////////////////////////////////////////////////////////
   1624 printf("LDPSW (immediate, simm7)\n");
   1625 MEM_TEST("ldpsw x13, x23, [x5], #-24",   0, 0);
   1626 MEM_TEST("ldpsw x13, x23, [x5, #-40]!",  0, 0);
   1627 MEM_TEST("ldpsw x13, x23, [x5, #-40]",   0, 0);
   1628 
   1629 } /* end of test_memory2() */
   1630 
   1631 ////////////////////////////////////////////////////////////////
   1632 ////////////////////////////////////////////////////////////////
   1633 ////////////////////////////////////////////////////////////////
   1634 ////////////////////////////////////////////////////////////////
   1635 ////////////////////////////////////////////////////////////////
   1636 ////////////////////////////////////////////////////////////////
   1637 
   1638 int main ( void )
   1639 {
   1640   if (1) test_memory_old();
   1641   if (1) test_memory_new();
   1642   return 0;
   1643 }
   1644