Home | History | Annotate | Download | only in AArch64
      1 // RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.4a < %s | FileCheck %s --check-prefix=CHECK
      2 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=-v8.4a < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-V84
      3 
      4 //------------------------------------------------------------------------------
      5 // Armv8.4-A LDAPR and STLR instructions with immediate offsets
      6 //------------------------------------------------------------------------------
      7 
      8 STLURB   WZR, [X10]
      9 STLURB   W1, [X10]
     10 STLURB   W1, [X10, #-256]
     11 stlurb   w2, [x11, #255]
     12 STLURB   W3, [SP, #-3]
     13 
     14 //CHECK:       stlurb  w1, [x10]               // encoding: [0x41,0x01,0x00,0x19]
     15 //CHECK-NEXT:  stlurb  w1, [x10, #-256]        // encoding: [0x41,0x01,0x10,0x19]
     16 //CHECK-NEXT:  stlurb  w2, [x11, #255]         // encoding: [0x62,0xf1,0x0f,0x19]
     17 //CHECK-NEXT:  stlurb  w3, [sp, #-3]           // encoding: [0xe3,0xd3,0x1f,0x19]
     18 
     19 ldapurb  wzr, [x12]
     20 ldapurb  w4, [x12]
     21 ldapurb  w4, [x12, #-256]
     22 LDAPURB  W5, [X13, #255]
     23 LDAPURB  W6, [SP, #-2]
     24 
     25 //CHECK:       ldapurb wzr, [x12]              // encoding: [0x9f,0x01,0x40,0x19]
     26 //CHECK-NEXT:  ldapurb w4, [x12]               // encoding: [0x84,0x01,0x40,0x19]
     27 //CHECK-NEXT:  ldapurb w4, [x12, #-256]        // encoding: [0x84,0x01,0x50,0x19]
     28 //CHECK-NEXT:  ldapurb w5, [x13, #255]         // encoding: [0xa5,0xf1,0x4f,0x19]
     29 //CHECK-NEXT:  ldapurb w6, [sp, #-2]           // encoding: [0xe6,0xe3,0x5f,0x19]
     30 
     31 LDAPURSB W7, [X14]
     32 LDAPURSB W7, [X14, #-256]
     33 ldapursb w8, [x15, #255]
     34 ldapursb w9, [sp, #-1]
     35 
     36 //CHECK:       ldapursb    w7, [x14]           // encoding: [0xc7,0x01,0xc0,0x19]
     37 //CHECK-NEXT:  ldapursb  w7, [x14, #-256]      // encoding: [0xc7,0x01,0xd0,0x19]
     38 //CHECK-NEXT:  ldapursb  w8, [x15, #255]       // encoding: [0xe8,0xf1,0xcf,0x19]
     39 //CHECK-NEXT:  ldapursb  w9, [sp, #-1]         // encoding: [0xe9,0xf3,0xdf,0x19]
     40 
     41 LDAPURSB X0, [X16]
     42 LDAPURSB X0, [X16, #-256]
     43 LDAPURSB X1, [X17, #255]
     44 ldapursb x2, [sp, #0]
     45 ldapursb x2, [sp]
     46 
     47 //CHECK:       ldapursb    x0, [x16]           // encoding: [0x00,0x02,0x80,0x19]
     48 //CHECK-NEXT:  ldapursb  x0, [x16, #-256]      // encoding: [0x00,0x02,0x90,0x19]
     49 //CHECK-NEXT:  ldapursb  x1, [x17, #255]       // encoding: [0x21,0xf2,0x8f,0x19]
     50 //CHECK-NEXT:  ldapursb  x2, [sp]              // encoding: [0xe2,0x03,0x80,0x19]
     51 //CHECK-NEXT:  ldapursb  x2, [sp]              // encoding: [0xe2,0x03,0x80,0x19]
     52 
     53 stlurh   w10, [x18]
     54 stlurh   w10, [x18, #-256]
     55 STLURH   W11, [X19, #255]
     56 STLURH   W12, [SP, #1]
     57 
     58 //CHECK:       stlurh    w10, [x18]            // encoding: [0x4a,0x02,0x00,0x59]
     59 //CHECK-NEXT:  stlurh  w10, [x18, #-256]       // encoding: [0x4a,0x02,0x10,0x59]
     60 //CHECK-NEXT:  stlurh  w11, [x19, #255]        // encoding: [0x6b,0xf2,0x0f,0x59]
     61 //CHECK-NEXT:  stlurh  w12, [sp, #1]           // encoding: [0xec,0x13,0x00,0x59]
     62 
     63 LDAPURH  W13, [X20]
     64 LDAPURH  W13, [X20, #-256]
     65 ldapurh  w14, [x21, #255]
     66 LDAPURH  W15, [SP, #2]
     67 
     68 //CHECK:       ldapurh   w13, [x20]            // encoding: [0x8d,0x02,0x40,0x59]
     69 //CHECK-NEXT:  ldapurh w13, [x20, #-256]       // encoding: [0x8d,0x02,0x50,0x59]
     70 //CHECK-NEXT:  ldapurh w14, [x21, #255]        // encoding: [0xae,0xf2,0x4f,0x59]
     71 //CHECK-NEXT:  ldapurh w15, [sp, #2]           // encoding: [0xef,0x23,0x40,0x59]
     72 
     73 LDAPURSH W16, [X22]
     74 LDAPURSH W16, [X22, #-256]
     75 LDAPURSH W17, [X23, #255]
     76 ldapursh w18, [sp, #3]
     77 
     78 //CHECK:       ldapursh    w16, [x22]          // encoding: [0xd0,0x02,0xc0,0x59]
     79 //CHECK-NEXT:  ldapursh  w16, [x22, #-256]     // encoding: [0xd0,0x02,0xd0,0x59]
     80 //CHECK-NEXT:  ldapursh  w17, [x23, #255]      // encoding: [0xf1,0xf2,0xcf,0x59]
     81 //CHECK-NEXT:  ldapursh  w18, [sp, #3]         // encoding: [0xf2,0x33,0xc0,0x59]
     82 
     83 ldapursh x3, [x24]
     84 ldapursh x3, [x24, #-256]
     85 LDAPURSH X4, [X25, #255]
     86 LDAPURSH X5, [SP, #4]
     87 
     88 //CHECK:       ldapursh    x3, [x24]          // encoding: [0x03,0x03,0x80,0x59]
     89 //CHECK-NEXT:  ldapursh  x3, [x24, #-256]     // encoding: [0x03,0x03,0x90,0x59]
     90 //CHECK-NEXT:  ldapursh  x4, [x25, #255]      // encoding: [0x24,0xf3,0x8f,0x59]
     91 //CHECK-NEXT:  ldapursh  x5, [sp, #4]         // encoding: [0xe5,0x43,0x80,0x59]
     92 
     93 STLUR    W19, [X26]
     94 STLUR    W19, [X26, #-256]
     95 stlur    w20, [x27, #255]
     96 STLUR    W21, [SP, #5]
     97 
     98 //CHECK:       stlur   w19, [x26]            // encoding: [0x53,0x03,0x00,0x99]
     99 //CHECK-NEXT:  stlur w19, [x26, #-256]       // encoding: [0x53,0x03,0x10,0x99]
    100 //CHECK-NEXT:  stlur w20, [x27, #255]        // encoding: [0x74,0xf3,0x0f,0x99]
    101 //CHECK-NEXT:  stlur w21, [sp, #5]           // encoding: [0xf5,0x53,0x00,0x99]
    102 
    103 LDAPUR   W22, [X28]
    104 LDAPUR   W22, [X28, #-256]
    105 LDAPUR   W23, [X29, #255]
    106 ldapur   w24, [sp, #6]
    107 
    108 //CHECK:       ldapur    w22, [x28]          // encoding: [0x96,0x03,0x40,0x99]
    109 //CHECK-NEXT:  ldapur  w22, [x28, #-256]     // encoding: [0x96,0x03,0x50,0x99]
    110 //CHECK-NEXT:  ldapur  w23, [x29, #255]      // encoding: [0xb7,0xf3,0x4f,0x99]
    111 //CHECK-NEXT:  ldapur  w24, [sp, #6]         // encoding: [0xf8,0x63,0x40,0x99]
    112 
    113 ldapursw x6, [x30]
    114 ldapursw x6, [x30, #-256]
    115 LDAPURSW X7, [X0, #255]
    116 LDAPURSW X8, [SP, #7]
    117 
    118 //CHECK:       ldapursw    x6, [x30]         // encoding: [0xc6,0x03,0x80,0x99]
    119 //CHECK-NEXT:  ldapursw  x6, [x30, #-256]    // encoding: [0xc6,0x03,0x90,0x99]
    120 //CHECK-NEXT:  ldapursw  x7, [x0, #255]      // encoding: [0x07,0xf0,0x8f,0x99]
    121 //CHECK-NEXT:  ldapursw  x8, [sp, #7]        // encoding: [0xe8,0x73,0x80,0x99]
    122 
    123 STLUR    X9, [X1]
    124 STLUR    X9, [X1, #-256]
    125 stlur    x10, [x2, #255]
    126 STLUR    X11, [SP, #8]
    127 
    128 //CHECK:       stlur   x9, [x1]              // encoding: [0x29,0x00,0x00,0xd9]
    129 //CHECK-NEXT:  stlur x9, [x1, #-256]         // encoding: [0x29,0x00,0x10,0xd9]
    130 //CHECK-NEXT:  stlur x10, [x2, #255]         // encoding: [0x4a,0xf0,0x0f,0xd9]
    131 //CHECK-NEXT:  stlur x11, [sp, #8]           // encoding: [0xeb,0x83,0x00,0xd9]
    132 
    133 LDAPUR   X12, [X3]
    134 LDAPUR   X12, [X3, #-256]
    135 LDAPUR   X13, [X4, #255]
    136 ldapur   x14, [sp, #9]
    137 
    138 //CHECK:       ldapur    x12, [x3]             // encoding: [0x6c,0x00,0x40,0xd9]
    139 //CHECK-NEXT:  ldapur  x12, [x3, #-256]        // encoding: [0x6c,0x00,0x50,0xd9]
    140 //CHECK-NEXT:  ldapur  x13, [x4, #255]         // encoding: [0x8d,0xf0,0x4f,0xd9]
    141 //CHECK-NEXT:  ldapur  x14, [sp, #9]           // encoding: [0xee,0x93,0x40,0xd9]
    142 
    143 //CHECK-NO-V84:      error: instruction requires: armv8.4a
    144 //CHECK-NO-V84-NEXT: STLURB   WZR, [X10]
    145 //CHECK-NO-V84-NEXT: ^
    146 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    147 //CHECK-NO-V84-NEXT: STLURB   W1, [X10]
    148 //CHECK-NO-V84-NEXT: ^
    149 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    150 //CHECK-NO-V84-NEXT: STLURB   W1, [X10, #-256]
    151 //CHECK-NO-V84-NEXT: ^
    152 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    153 //CHECK-NO-V84-NEXT: stlurb   w2, [x11, #255]
    154 //CHECK-NO-V84-NEXT: ^
    155 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    156 //CHECK-NO-V84-NEXT: STLURB   W3, [SP, #-3]
    157 //CHECK-NO-V84-NEXT: ^
    158 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    159 //CHECK-NO-V84-NEXT: ldapurb  wzr, [x12]
    160 //CHECK-NO-V84-NEXT: ^
    161 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    162 //CHECK-NO-V84-NEXT: ldapurb  w4, [x12]
    163 //CHECK-NO-V84-NEXT: ^
    164 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    165 //CHECK-NO-V84-NEXT: ldapurb  w4, [x12, #-256]
    166 //CHECK-NO-V84-NEXT: ^
    167 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    168 //CHECK-NO-V84-NEXT: LDAPURB  W5, [X13, #255]
    169 //CHECK-NO-V84-NEXT: ^
    170 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    171 //CHECK-NO-V84-NEXT: LDAPURB  W6, [SP, #-2]
    172 //CHECK-NO-V84-NEXT: ^
    173 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    174 //CHECK-NO-V84-NEXT: LDAPURSB W7, [X14]
    175 //CHECK-NO-V84-NEXT: ^
    176 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    177 //CHECK-NO-V84-NEXT: LDAPURSB W7, [X14, #-256]
    178 //CHECK-NO-V84-NEXT: ^
    179 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    180 //CHECK-NO-V84-NEXT: ldapursb w8, [x15, #255]
    181 //CHECK-NO-V84-NEXT: ^
    182 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    183 //CHECK-NO-V84-NEXT: ldapursb w9, [sp, #-1]
    184 //CHECK-NO-V84-NEXT: ^
    185 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    186 //CHECK-NO-V84-NEXT: LDAPURSB X0, [X16]
    187 //CHECK-NO-V84-NEXT: ^
    188 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    189 //CHECK-NO-V84-NEXT: LDAPURSB X0, [X16, #-256]
    190 //CHECK-NO-V84-NEXT: ^
    191 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    192 //CHECK-NO-V84-NEXT: LDAPURSB X1, [X17, #255]
    193 //CHECK-NO-V84-NEXT: ^
    194 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    195 //CHECK-NO-V84-NEXT: ldapursb x2, [sp, #0]
    196 //CHECK-NO-V84-NEXT: ^
    197 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    198 //CHECK-NO-V84-NEXT: ldapursb x2, [sp]
    199 //CHECK-NO-V84-NEXT: ^
    200 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    201 //CHECK-NO-V84-NEXT: stlurh   w10, [x18]
    202 //CHECK-NO-V84-NEXT: ^
    203 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    204 //CHECK-NO-V84-NEXT: stlurh   w10, [x18, #-256]
    205 //CHECK-NO-V84-NEXT: ^
    206 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    207 //CHECK-NO-V84-NEXT: STLURH   W11, [X19, #255]
    208 //CHECK-NO-V84-NEXT: ^
    209 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    210 //CHECK-NO-V84-NEXT: STLURH   W12, [SP, #1]
    211 //CHECK-NO-V84-NEXT: ^
    212 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    213 //CHECK-NO-V84-NEXT: LDAPURH  W13, [X20]
    214 //CHECK-NO-V84-NEXT: ^
    215 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    216 //CHECK-NO-V84-NEXT: LDAPURH  W13, [X20, #-256]
    217 //CHECK-NO-V84-NEXT: ^
    218 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    219 //CHECK-NO-V84-NEXT: ldapurh  w14, [x21, #255]
    220 //CHECK-NO-V84-NEXT: ^
    221 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    222 //CHECK-NO-V84-NEXT: LDAPURH  W15, [SP, #2]
    223 //CHECK-NO-V84-NEXT: ^
    224 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    225 //CHECK-NO-V84-NEXT: LDAPURSH W16, [X22]
    226 //CHECK-NO-V84-NEXT: ^
    227 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    228 //CHECK-NO-V84-NEXT: LDAPURSH W16, [X22, #-256]
    229 //CHECK-NO-V84-NEXT: ^
    230 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    231 //CHECK-NO-V84-NEXT: LDAPURSH W17, [X23, #255]
    232 //CHECK-NO-V84-NEXT: ^
    233 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    234 //CHECK-NO-V84-NEXT: ldapursh w18, [sp, #3]
    235 //CHECK-NO-V84-NEXT: ^
    236 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    237 //CHECK-NO-V84-NEXT: ldapursh x3, [x24]
    238 //CHECK-NO-V84-NEXT: ^
    239 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    240 //CHECK-NO-V84-NEXT: ldapursh x3, [x24, #-256]
    241 //CHECK-NO-V84-NEXT: ^
    242 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    243 //CHECK-NO-V84-NEXT: LDAPURSH X4, [X25, #255]
    244 //CHECK-NO-V84-NEXT: ^
    245 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    246 //CHECK-NO-V84-NEXT: LDAPURSH X5, [SP, #4]
    247 //CHECK-NO-V84-NEXT: ^
    248 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    249 //CHECK-NO-V84-NEXT: STLUR    W19, [X26]
    250 //CHECK-NO-V84-NEXT: ^
    251 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    252 //CHECK-NO-V84-NEXT: STLUR    W19, [X26, #-256]
    253 //CHECK-NO-V84-NEXT: ^
    254 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    255 //CHECK-NO-V84-NEXT: stlur    w20, [x27, #255]
    256 //CHECK-NO-V84-NEXT: ^
    257 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    258 //CHECK-NO-V84-NEXT: STLUR    W21, [SP, #5]
    259 //CHECK-NO-V84-NEXT: ^
    260 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    261 //CHECK-NO-V84-NEXT: LDAPUR   W22, [X28]
    262 //CHECK-NO-V84-NEXT: ^
    263 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    264 //CHECK-NO-V84-NEXT: LDAPUR   W22, [X28, #-256]
    265 //CHECK-NO-V84-NEXT: ^
    266 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    267 //CHECK-NO-V84-NEXT: LDAPUR   W23, [X29, #255]
    268 //CHECK-NO-V84-NEXT: ^
    269 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    270 //CHECK-NO-V84-NEXT: ldapur   w24, [sp, #6]
    271 //CHECK-NO-V84-NEXT: ^
    272 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    273 //CHECK-NO-V84-NEXT: ldapursw x6, [x30]
    274 //CHECK-NO-V84-NEXT: ^
    275 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    276 //CHECK-NO-V84-NEXT: ldapursw x6, [x30, #-256]
    277 //CHECK-NO-V84-NEXT: ^
    278 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    279 //CHECK-NO-V84-NEXT: LDAPURSW X7, [X0, #255]
    280 //CHECK-NO-V84-NEXT: ^
    281 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    282 //CHECK-NO-V84-NEXT: LDAPURSW X8, [SP, #7]
    283 //CHECK-NO-V84-NEXT: ^
    284 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    285 //CHECK-NO-V84-NEXT: STLUR    X9, [X1]
    286 //CHECK-NO-V84-NEXT: ^
    287 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    288 //CHECK-NO-V84-NEXT: STLUR    X9, [X1, #-256]
    289 //CHECK-NO-V84-NEXT: ^
    290 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    291 //CHECK-NO-V84-NEXT: stlur    x10, [x2, #255]
    292 //CHECK-NO-V84-NEXT: ^
    293 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    294 //CHECK-NO-V84-NEXT: STLUR    X11, [SP, #8]
    295 //CHECK-NO-V84-NEXT: ^
    296 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    297 //CHECK-NO-V84-NEXT: LDAPUR   X12, [X3]
    298 //CHECK-NO-V84-NEXT: ^
    299 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    300 //CHECK-NO-V84-NEXT: LDAPUR   X12, [X3, #-256]
    301 //CHECK-NO-V84-NEXT: ^
    302 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    303 //CHECK-NO-V84-NEXT: LDAPUR   X13, [X4, #255]
    304 //CHECK-NO-V84-NEXT: ^
    305 //CHECK-NO-V84-NEXT: error: instruction requires: armv8.4a
    306 //CHECK-NO-V84-NEXT: ldapur   x14, [sp, #9]
    307 //CHECK-NO-V84-NEXT: ^
    308