Home | History | Annotate | Download | only in SVE
      1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
      2 
      3 // input should be a 64bit scalar register
      4 mov z0.d, w0
      5 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
      6 // CHECK-NEXT: mov z0.d, w0
      7 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
      8 
      9 // wzr is not a valid operand to mov
     10 mov z0.s, wzr
     11 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     12 // CHECK-NEXT: mov z0.s, wzr
     13 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
     14 
     15 // xzr is not a valid operand to mov
     16 mov z0.d, xzr
     17 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     18 // CHECK-NEXT: mov z0.d, xzr
     19 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
     20 
     21 
     22 // --------------------------------------------------------------------------//
     23 // Unpredicated mov of Z register only allowed for .d
     24 
     25 mov z0.b, z1.b
     26 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
     27 // CHECK-NEXT: mov z0.b, z1.b
     28 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     29 
     30 mov z0.h, z1.h
     31 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
     32 // CHECK-NEXT: mov z0.h, z1.h
     33 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     34 
     35 mov z0.s, z1.s
     36 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
     37 // CHECK-NEXT: mov z0.s, z1.s
     38 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     39 
     40 // --------------------------------------------------------------------------//
     41 // Invalid scalar operand for result element width.
     42 
     43 mov z0.d, w0
     44 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     45 // CHECK-NEXT: mov z0.d, w0
     46 // CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
     47 
     48 mov z0.b, p0/m, x0
     49 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     50 // CHECK-NEXT: mov z0.b, p0/m, x0
     51 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     52 
     53 mov z0.h, p0/m, x0
     54 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     55 // CHECK-NEXT: mov z0.h, p0/m, x0
     56 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     57 
     58 mov z0.s, p0/m, x0
     59 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     60 // CHECK-NEXT: mov z0.s, p0/m, x0
     61 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     62 
     63 mov z0.d, p0/m, w0
     64 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     65 // CHECK-NEXT: mov z0.d, p0/m, w0
     66 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     67 
     68 mov z0.b, p0/m, h0
     69 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     70 // CHECK-NEXT: mov z0.b, p0/m, h0
     71 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     72 
     73 mov z0.b, p0/m, s0
     74 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     75 // CHECK-NEXT: mov z0.b, p0/m, s0
     76 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     77 
     78 mov z0.b, p0/m, d0
     79 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     80 // CHECK-NEXT: mov z0.b, p0/m, d0
     81 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     82 
     83 mov z0.h, p0/m, b0
     84 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     85 // CHECK-NEXT: mov z0.h, p0/m, b0
     86 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     87 
     88 mov z0.h, p0/m, s0
     89 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     90 // CHECK-NEXT: mov z0.h, p0/m, s0
     91 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     92 
     93 mov z0.h, p0/m, d0
     94 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
     95 // CHECK-NEXT: mov z0.h, p0/m, d0
     96 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     97 
     98 mov z0.s, p0/m, b0
     99 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    100 // CHECK-NEXT: mov z0.s, p0/m, b0
    101 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    102 
    103 mov z0.s, p0/m, h0
    104 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    105 // CHECK-NEXT: mov z0.s, p0/m, h0
    106 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    107 
    108 mov z0.s, p0/m, d0
    109 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    110 // CHECK-NEXT: mov z0.s, p0/m, d0
    111 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    112 
    113 mov z0.d, p0/m, b0
    114 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    115 // CHECK-NEXT: mov z0.d, p0/m, b0
    116 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    117 
    118 mov z0.d, p0/m, h0
    119 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    120 // CHECK-NEXT: mov z0.d, p0/m, h0
    121 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    122 
    123 mov z0.d, p0/m, s0
    124 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
    125 // CHECK-NEXT: mov z0.d, p0/m, s0
    126 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    127 
    128 // --------------------------------------------------------------------------//
    129 // Invalid immediates
    130 
    131 mov z0.b, #0, lsl #8      // #0, lsl #8 is not valid for .b
    132 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    133 // CHECK-NEXT: mov z0.b, #0, lsl #8
    134 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    135 
    136 mov z0.b, #-129
    137 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    138 // CHECK-NEXT: mov z0.b, #-129
    139 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    140 
    141 mov z0.b, #-1, lsl #8
    142 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    143 // CHECK-NEXT: mov z0.b, #-1, lsl #8
    144 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    145 
    146 mov z0.b, #256
    147 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    148 // CHECK-NEXT: mov z0.b, #256
    149 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    150 
    151 mov z0.b, #1, lsl #8
    152 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    153 // CHECK-NEXT: mov z0.b, #1, lsl #8
    154 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    155 
    156 mov z0.h, #-33024
    157 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    158 // CHECK-NEXT: mov z0.h, #-33024
    159 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    160 
    161 mov z0.h, #-32769
    162 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    163 // CHECK-NEXT: mov z0.h, #-32769
    164 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    165 
    166 mov z0.h, #-129, lsl #8
    167 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    168 // CHECK-NEXT: mov z0.h, #-129, lsl #8
    169 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    170 
    171 // Note: 65281 is a valid logical immediate.
    172 mov z0.h, #65282
    173 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    174 // CHECK-NEXT: mov z0.h, #65282
    175 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    176 
    177 mov z0.h, #256, lsl #8
    178 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    179 // CHECK-NEXT: mov z0.h, #256, lsl #8
    180 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    181 
    182 mov z0.s, #-33024
    183 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    184 // CHECK-NEXT: mov z0.s, #-33024
    185 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    186 
    187 mov z0.s, #-129, lsl #8
    188 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    189 // CHECK-NEXT: mov z0.s, #-129, lsl #8
    190 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    191 
    192 mov z0.s, #32513
    193 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    194 // CHECK-NEXT: mov z0.s, #32513
    195 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    196 
    197 mov z0.s, #128, lsl #8
    198 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    199 // CHECK-NEXT: mov z0.s, #128, lsl #8
    200 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    201 
    202 mov z0.d, #-33024
    203 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    204 // CHECK-NEXT: mov z0.d, #-33024
    205 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    206 
    207 mov z0.d, #-129, lsl #8
    208 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    209 // CHECK-NEXT: mov z0.d, #-129, lsl #8
    210 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    211 
    212 mov z0.d, #32513
    213 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    214 // CHECK-NEXT: mov z0.d, #32513
    215 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    216 
    217 mov z0.d, #128, lsl #8
    218 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    219 // CHECK-NEXT: mov z0.d, #128, lsl #8
    220 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    221 
    222 mov z5.b, #0xfff9
    223 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255] with a shift amount of 0
    224 // CHECK-NEXT: mov z5.b, #0xfff9
    225 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    226 
    227 mov z5.h, #0xfffa
    228 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    229 // CHECK-NEXT: mov z5.h, #0xfffa
    230 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    231 
    232 mov z5.h, #0xfffffff9
    233 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    234 // CHECK-NEXT: mov z5.h, #0xfffffff9
    235 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    236 
    237 mov z5.s, #0xfffffffa
    238 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    239 // CHECK-NEXT: mov z5.s, #0xfffffffa
    240 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    241 
    242 mov z5.s, #0xffffffffffffff9
    243 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    244 // CHECK-NEXT: mov z5.s, #0xffffffffffffff9
    245 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    246 
    247 mov z0.b, p0/z, #0, lsl #8      // #0, lsl #8 is not valid for .b
    248 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    249 // CHECK-NEXT: mov z0.b, p0/z, #0, lsl #8
    250 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    251 
    252 mov z0.b, p0/z, #-129
    253 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    254 // CHECK-NEXT: mov z0.b, p0/z, #-129
    255 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    256 
    257 mov z0.b, p0/z, #-1, lsl #8
    258 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    259 // CHECK-NEXT: mov z0.b, p0/z, #-1, lsl #8
    260 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    261 
    262 mov z0.b, p0/z, #256
    263 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    264 // CHECK-NEXT: mov z0.b, p0/z, #256
    265 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    266 
    267 mov z0.b, p0/z, #1, lsl #8
    268 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
    269 // CHECK-NEXT: mov z0.b, p0/z, #1, lsl #8
    270 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    271 
    272 mov z0.h, p0/z, #-33024
    273 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    274 // CHECK-NEXT: mov z0.h, p0/z, #-33024
    275 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    276 
    277 mov z0.h, p0/z, #-32769
    278 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    279 // CHECK-NEXT: mov z0.h, p0/z, #-32769
    280 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    281 
    282 mov z0.h, p0/z, #-129, lsl #8
    283 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    284 // CHECK-NEXT: mov z0.h, p0/z, #-129, lsl #8
    285 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    286 
    287 mov z0.h, p0/z, #32513
    288 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    289 // CHECK-NEXT: mov z0.h, p0/z, #32513
    290 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    291 
    292 mov z0.h, p0/z, #65281
    293 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    294 // CHECK-NEXT: mov z0.h, p0/z, #65281
    295 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    296 
    297 mov z0.h, p0/z, #256, lsl #8
    298 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
    299 // CHECK-NEXT: mov z0.h, p0/z, #256, lsl #8
    300 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    301 
    302 mov z0.s, p0/z, #-33024
    303 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    304 // CHECK-NEXT: mov z0.s, p0/z, #-33024
    305 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    306 
    307 mov z0.s, p0/z, #-32769
    308 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    309 // CHECK-NEXT: mov z0.s, p0/z, #-32769
    310 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    311 
    312 mov z0.s, p0/z, #-129, lsl #8
    313 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    314 // CHECK-NEXT: mov z0.s, p0/z, #-129, lsl #8
    315 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    316 
    317 mov z0.s, p0/z, #32513
    318 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    319 // CHECK-NEXT: mov z0.s, p0/z, #32513
    320 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    321 
    322 mov z0.s, p0/z, #32768
    323 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    324 // CHECK-NEXT: mov z0.s, p0/z, #32768
    325 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    326 
    327 mov z0.s, p0/z, #128, lsl #8
    328 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    329 // CHECK-NEXT: mov z0.s, p0/z, #128, lsl #8
    330 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    331 
    332 mov z0.d, p0/z, #-33024
    333 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    334 // CHECK-NEXT: mov z0.d, p0/z, #-33024
    335 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    336 
    337 mov z0.d, p0/z, #-32769
    338 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    339 // CHECK-NEXT: mov z0.d, p0/z, #-32769
    340 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    341 
    342 mov z0.d, p0/z, #-129, lsl #8
    343 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    344 // CHECK-NEXT: mov z0.d, p0/z, #-129, lsl #8
    345 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    346 
    347 mov z0.d, p0/z, #32513
    348 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    349 // CHECK-NEXT: mov z0.d, p0/z, #32513
    350 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    351 
    352 mov z0.d, p0/z, #32768
    353 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    354 // CHECK-NEXT: mov z0.d, p0/z, #32768
    355 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    356 
    357 mov z0.d, p0/z, #128, lsl #8
    358 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
    359 // CHECK-NEXT: mov z0.d, p0/z, #128, lsl #8
    360 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    361 
    362 
    363 // --------------------------------------------------------------------------//
    364 // Immediate not compatible with encode/decode function.
    365 
    366 mov z24.b, z17.b[-1]
    367 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
    368 // CHECK-NEXT: mov z24.b, z17.b[-1]
    369 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    370 
    371 mov z17.b, z5.b[64]
    372 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
    373 // CHECK-NEXT: mov z17.b, z5.b[64]
    374 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    375 
    376 mov z16.h, z30.h[-1]
    377 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
    378 // CHECK-NEXT: mov z16.h, z30.h[-1]
    379 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    380 
    381 mov z19.h, z23.h[32]
    382 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
    383 // CHECK-NEXT: mov z19.h, z23.h[32]
    384 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    385 
    386 mov z1.s, z6.s[-1]
    387 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
    388 // CHECK-NEXT: mov z1.s, z6.s[-1]
    389 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    390 
    391 mov z24.s, z3.s[16]
    392 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
    393 // CHECK-NEXT: mov z24.s, z3.s[16]
    394 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    395 
    396 mov z5.d, z25.d[-1]
    397 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
    398 // CHECK-NEXT: mov z5.d, z25.d[-1]
    399 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    400 
    401 mov z12.d, z28.d[8]
    402 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
    403 // CHECK-NEXT: mov z12.d, z28.d[8]
    404 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    405 
    406 mov z22.q, z7.q[-1]
    407 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
    408 // CHECK-NEXT: mov z22.q, z7.q[-1]
    409 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    410 
    411 mov z24.q, z21.q[4]
    412 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
    413 // CHECK-NEXT: mov z24.q, z21.q[4]
    414 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    415 
    416 
    417 // --------------------------------------------------------------------------//
    418 // Negative tests for instructions that are incompatible with movprfx
    419 
    420 movprfx z31.b, p0/z, z6.b
    421 mov     z31.b, wsp
    422 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    423 // CHECK-NEXT: mov     z31.b, wsp
    424 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    425 
    426 movprfx z31, z6
    427 mov     z31.b, wsp
    428 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    429 // CHECK-NEXT: mov     z31.b, wsp
    430 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    431 
    432 movprfx z0.d, p0/z, z7.d
    433 mov     z0.d, #0xe0000000000003ff
    434 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    435 // CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
    436 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    437 
    438 movprfx z0, z7
    439 mov     z0.d, #0xe0000000000003ff
    440 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    441 // CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
    442 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    443 
    444 movprfx z4.d, p7/z, z6.d
    445 mov     z4.d, p7/m, z31.d
    446 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    447 // CHECK-NEXT: mov     z4.d, p7/m, z31.d
    448 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    449 
    450 movprfx z31, z6
    451 mov     z31.d, p15/m, z31.d
    452 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    453 // CHECK-NEXT: mov     z31.d, p15/m, z31.d
    454 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    455 
    456 movprfx z0.d, p0/z, z7.d
    457 mov     z0.d, d0
    458 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    459 // CHECK-NEXT: mov     z0.d, d0
    460 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    461 
    462 movprfx z0, z7
    463 mov     z0.d, d0
    464 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    465 // CHECK-NEXT: mov     z0.d, d0
    466 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    467 
    468 movprfx z31.d, p0/z, z6.d
    469 mov     z31.d, z0.d
    470 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    471 // CHECK-NEXT: mov     z31.d, z0.d
    472 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    473 
    474 movprfx z31, z6
    475 mov     z31.d, z0.d
    476 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    477 // CHECK-NEXT: mov     z31.d, z0.d
    478 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    479 
    480 movprfx z31.d, p0/z, z6.d
    481 mov     z31.d, z31.d[7]
    482 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    483 // CHECK-NEXT: mov     z31.d, z31.d[7]
    484 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    485 
    486 movprfx z31, z6
    487 mov     z31.d, z31.d[7]
    488 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    489 // CHECK-NEXT: mov     z31.d, z31.d[7]
    490 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    491