1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t 2 // RUN: FileCheck --check-prefix=CHECK-ERROR --check-prefix=CHECK-ERROR-ARM64 < %t %s 3 4 //------------------------------------------------------------------------------ 5 // Add/sub (extended register) 6 //------------------------------------------------------------------------------ 7 8 // Mismatched final register and extend 9 add x2, x3, x5, sxtb 10 add x2, x4, w2, uxtx 11 add w5, w7, x9, sxtx 12 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 13 // CHECK-ERROR: add x2, x3, x5, sxtb 14 // CHECK-ERROR: ^ 15 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4] 16 // CHECK-ERROR: add x2, x4, w2, uxtx 17 // CHECK-ERROR: ^ 18 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 19 // CHECK-ERROR: add w5, w7, x9, sxtx 20 // CHECK-ERROR: ^ 21 22 // Out of range extends 23 add x9, x10, w11, uxtb #-1 24 add x3, x5, w7, uxtb #5 25 sub x9, x15, x2, uxth #5 26 // CHECK-ERROR: error: expected integer shift amount 27 // CHECK-ERROR: add x9, x10, w11, uxtb #-1 28 // CHECK-ERROR: ^ 29 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4] 30 // CHECK-ERROR: add x3, x5, w7, uxtb #5 31 // CHECK-ERROR: ^ 32 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 33 // CHECK-ERROR: sub x9, x15, x2, uxth #5 34 // CHECK-ERROR: ^ 35 36 // Wrong registers on normal variants 37 add xzr, x3, x5, uxtx 38 sub x3, xzr, w9, sxth #1 39 add x1, x2, sp, uxtx 40 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 41 // CHECK-ERROR: add xzr, x3, x5, uxtx 42 // CHECK-ERROR: ^ 43 // CHECK-ERROR: error: invalid operand for instruction 44 // CHECK-ERROR: sub x3, xzr, w9, sxth #1 45 // CHECK-ERROR: ^ 46 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 47 // CHECK-ERROR: add x1, x2, sp, uxtx 48 // CHECK-ERROR: ^ 49 50 // Wrong registers on flag-setting variants 51 adds sp, x3, w2, uxtb 52 adds x3, xzr, x9, uxtx 53 subs x2, x1, sp, uxtx 54 adds x2, x1, sp, uxtb #2 55 // CHECK-ERROR: error: invalid operand for instruction 56 // CHECK-ERROR: adds sp, x3, w2, uxtb 57 // CHECK-ERROR: ^ 58 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 59 // CHECK-ERROR: adds x3, xzr, x9, uxtx 60 // CHECK-ERROR: ^ 61 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 62 // CHECK-ERROR: subs x2, x1, sp, uxtx 63 // CHECK-ERROR: ^ 64 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 65 // CHECK-ERROR: adds x2, x1, sp, uxtb #2 66 // CHECK-ERROR: ^ 67 68 // Amount not optional if lsl valid and used 69 add sp, x5, x7, lsl 70 // CHECK-ERROR: error: expected #imm after shift specifier 71 // CHECK-ERROR: add sp, x5, x7, lsl 72 // CHECK-ERROR: ^ 73 74 //------------------------------------------------------------------------------ 75 // Add/sub (immediate) 76 //------------------------------------------------------------------------------ 77 78 // Out of range immediates: more than 12 bits 79 add w4, w5, #-4096 80 add w5, w6, #0x1000 81 add w4, w5, #-4096, lsl #12 82 add w5, w6, #0x1000, lsl #12 83 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 84 // CHECK-ERROR-NEXT: add w4, w5, #-4096 85 // CHECK-ERROR-NEXT: ^ 86 // CHECK-ERROR-AARCH64-NEXT: error: expected compatible register, symbol or integer in range [0, 4095] 87 // CHECK-ERROR-AARCH64-NEXT: add w5, w6, #0x1000 88 // CHECK-ERROR-AARCH64-NEXT: ^ 89 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095] 90 // CHECK-ERROR-NEXT: add w4, w5, #-4096, lsl #12 91 // CHECK-ERROR-NEXT: ^ 92 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095] 93 // CHECK-ERROR-NEXT: add w5, w6, #0x1000, lsl #12 94 // CHECK-ERROR-NEXT: ^ 95 96 // Only lsl #0 and lsl #12 are allowed 97 add w2, w3, #0x1, lsl #1 98 add w5, w17, #0xfff, lsl #13 99 add w17, w20, #0x1000, lsl #12 100 sub xsp, x34, #0x100, lsl #-1 101 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 102 // CHECK-ERROR-NEXT: add w2, w3, #0x1, lsl #1 103 // CHECK-ERROR-NEXT: ^ 104 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095] 105 // CHECK-ERROR-NEXT: add w5, w17, #0xfff, lsl #13 106 // CHECK-ERROR-NEXT: ^ 107 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095] 108 // CHECK-ERROR-NEXT: add w17, w20, #0x1000, lsl #12 109 // CHECK-ERROR-NEXT: ^ 110 // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate 111 // CHECK-ERROR-NEXT: sub xsp, x34, #0x100, lsl #-1 112 // CHECK-ERROR-NEXT: ^ 113 114 // Incorrect registers (w31 doesn't exist at all, and 31 decodes to sp for these). 115 add w31, w20, #1234 116 add wzr, w20, #0x123 117 add w20, wzr, #0x321 118 add wzr, wzr, #0xfff 119 // CHECK-ERROR: error: invalid operand for instruction 120 // CHECK-ERROR-NEXT: add w31, w20, #1234 121 // CHECK-ERROR-NEXT: ^ 122 // CHECK-ERROR-NEXT: error: invalid operand for instruction 123 // CHECK-ERROR-NEXT: add wzr, w20, #0x123 124 // CHECK-ERROR-NEXT: ^ 125 // CHECK-ERROR-NEXT: error: invalid operand for instruction 126 // CHECK-ERROR-NEXT: add w20, wzr, #0x321 127 // CHECK-ERROR-NEXT: ^ 128 // CHECK-ERROR-NEXT: error: invalid operand for instruction 129 // CHECK-ERROR-NEXT: add wzr, wzr, #0xfff 130 // CHECK-ERROR-NEXT: ^ 131 132 // Mixed register classes 133 add xsp, w2, #123 134 sub w2, x30, #32 135 // CHECK-ERROR: error: invalid operand for instruction 136 // CHECK-ERROR-NEXT: add xsp, w2, #123 137 // CHECK-ERROR-NEXT: ^ 138 // CHECK-ERROR-NEXT: error: invalid operand for instruction 139 // CHECK-ERROR-NEXT: sub w2, x30, #32 140 // CHECK-ERROR-NEXT: ^ 141 142 // Out of range immediate 143 adds w0, w5, #0x10000 144 // CHECK-ERROR-AARCH64: error: expected compatible register, symbol or integer in range [0, 4095] 145 // CHECK-ERROR-AARCH64-NEXT: adds w0, w5, #0x10000 146 // CHECK-ERROR-AARCH64-NEXT: ^ 147 148 // Wn|WSP should be in second place 149 adds w4, wzr, #0x123 150 // ...but wzr is the 31 destination 151 subs wsp, w5, #123 152 subs x5, xzr, #0x456, lsl #12 153 // CHECK-ERROR: error: invalid operand for instruction 154 // CHECK-ERROR-NEXT: adds w4, wzr, #0x123 155 // CHECK-ERROR-NEXT: ^ 156 // CHECK-ERROR-NEXT: error: invalid operand for instruction 157 // CHECK-ERROR-NEXT: subs wsp, w5, #123 158 // CHECK-ERROR-NEXT: ^ 159 // CHECK-ERROR-NEXT: error: invalid operand for instruction 160 // CHECK-ERROR-NEXT: subs x5, xzr, #0x456, lsl #12 161 // CHECK-ERROR-NEXT: ^ 162 163 // MOV alias should not accept any fiddling 164 mov x2, xsp, #123 165 mov wsp, w27, #0xfff, lsl #12 166 // CHECK-ERROR: error: expected compatible register or logical immediate 167 // CHECK-ERROR-NEXT: mov x2, xsp, #123 168 // CHECK-ERROR-NEXT: ^ 169 // CHECK-ERROR-NEXT: error: invalid operand for instruction 170 // CHECK-ERROR-NEXT: mov wsp, w27, #0xfff, lsl #12 171 // CHECK-ERROR-NEXT: ^ 172 173 // A relocation should be provided for symbols 174 add x3, x9, #variable 175 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095] 176 // CHECK-ERROR-NEXT: add x3, x9, #variable 177 // CHECK-ERROR-NEXT: ^ 178 179 180 //------------------------------------------------------------------------------ 181 // Add-subtract (shifted register) 182 //------------------------------------------------------------------------------ 183 184 add wsp, w1, w2, lsr #3 185 add x4, sp, x9, asr #5 186 add x9, x10, x5, ror #3 187 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 188 // CHECK-ERROR-NEXT: add wsp, w1, w2, lsr #3 189 // CHECK-ERROR-NEXT: ^ 190 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 191 // CHECK-ERROR-NEXT: add x4, sp, x9, asr #5 192 // CHECK-ERROR-NEXT: ^ 193 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 194 // CHECK-ERROR-NEXT: add x9, x10, x5, ror #3 195 // CHECK-ERROR-NEXT: ^ 196 197 add w1, w2, w3, lsl #-1 198 add w1, w2, w3, lsl #32 199 add w1, w2, w3, lsr #-1 200 add w1, w2, w3, lsr #32 201 add w1, w2, w3, asr #-1 202 add w1, w2, w3, asr #32 203 add x1, x2, x3, lsl #-1 204 add x1, x2, x3, lsl #64 205 add x1, x2, x3, lsr #-1 206 add x1, x2, x3, lsr #64 207 add x1, x2, x3, asr #-1 208 add x1, x2, x3, asr #64 209 // CHECK-ERROR: error: expected integer shift amount 210 // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #-1 211 // CHECK-ERROR-NEXT: ^ 212 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 213 // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #32 214 // CHECK-ERROR-NEXT: ^ 215 // CHECK-ERROR-NEXT: error: expected integer shift amount 216 // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #-1 217 // CHECK-ERROR-NEXT: ^ 218 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 219 // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #32 220 // CHECK-ERROR-NEXT: ^ 221 // CHECK-ERROR-NEXT: error: expected integer shift amount 222 // CHECK-ERROR-NEXT: add w1, w2, w3, asr #-1 223 // CHECK-ERROR-NEXT: ^ 224 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 225 // CHECK-ERROR-NEXT: add w1, w2, w3, asr #32 226 // CHECK-ERROR-NEXT: ^ 227 // CHECK-ERROR-NEXT: error: expected integer shift amount 228 // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #-1 229 // CHECK-ERROR-NEXT: ^ 230 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 231 // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #64 232 // CHECK-ERROR-NEXT: ^ 233 // CHECK-ERROR-NEXT: error: expected integer shift amount 234 // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #-1 235 // CHECK-ERROR-NEXT: ^ 236 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 237 // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #64 238 // CHECK-ERROR-NEXT: ^ 239 // CHECK-ERROR-NEXT: error: expected integer shift amount 240 // CHECK-ERROR-NEXT: add x1, x2, x3, asr #-1 241 // CHECK-ERROR-NEXT: ^ 242 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 243 // CHECK-ERROR-NEXT: add x1, x2, x3, asr #64 244 // CHECK-ERROR-NEXT: ^ 245 246 adds w1, w2, w3, lsl #-1 247 adds w1, w2, w3, lsl #32 248 adds w1, w2, w3, lsr #-1 249 adds w1, w2, w3, lsr #32 250 adds w1, w2, w3, asr #-1 251 adds w1, w2, w3, asr #32 252 adds x1, x2, x3, lsl #-1 253 adds x1, x2, x3, lsl #64 254 adds x1, x2, x3, lsr #-1 255 adds x1, x2, x3, lsr #64 256 adds x1, x2, x3, asr #-1 257 adds x1, x2, x3, asr #64 258 // CHECK-ERROR: error: expected integer shift amount 259 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #-1 260 // CHECK-ERROR-NEXT: ^ 261 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 262 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #32 263 // CHECK-ERROR-NEXT: ^ 264 // CHECK-ERROR-NEXT: error: expected integer shift amount 265 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #-1 266 // CHECK-ERROR-NEXT: ^ 267 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 268 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #32 269 // CHECK-ERROR-NEXT: ^ 270 // CHECK-ERROR-NEXT: error: expected integer shift amount 271 // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #-1 272 // CHECK-ERROR-NEXT: ^ 273 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 274 // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #32 275 // CHECK-ERROR-NEXT: ^ 276 // CHECK-ERROR-NEXT: error: expected integer shift amount 277 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #-1 278 // CHECK-ERROR-NEXT: ^ 279 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 280 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #64 281 // CHECK-ERROR-NEXT: ^ 282 // CHECK-ERROR-NEXT: error: expected integer shift amount 283 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #-1 284 // CHECK-ERROR-NEXT: ^ 285 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 286 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #64 287 // CHECK-ERROR-NEXT: ^ 288 // CHECK-ERROR-NEXT: error: expected integer shift amount 289 // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #-1 290 // CHECK-ERROR-NEXT: ^ 291 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 292 // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #64 293 // CHECK-ERROR-NEXT: ^ 294 295 sub w1, w2, w3, lsl #-1 296 sub w1, w2, w3, lsl #32 297 sub w1, w2, w3, lsr #-1 298 sub w1, w2, w3, lsr #32 299 sub w1, w2, w3, asr #-1 300 sub w1, w2, w3, asr #32 301 sub x1, x2, x3, lsl #-1 302 sub x1, x2, x3, lsl #64 303 sub x1, x2, x3, lsr #-1 304 sub x1, x2, x3, lsr #64 305 sub x1, x2, x3, asr #-1 306 sub x1, x2, x3, asr #64 307 // CHECK-ERROR: error: expected integer shift amount 308 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #-1 309 // CHECK-ERROR-NEXT: ^ 310 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 311 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #32 312 // CHECK-ERROR-NEXT: ^ 313 // CHECK-ERROR-NEXT: error: expected integer shift amount 314 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #-1 315 // CHECK-ERROR-NEXT: ^ 316 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 317 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #32 318 // CHECK-ERROR-NEXT: ^ 319 // CHECK-ERROR-NEXT: error: expected integer shift amount 320 // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #-1 321 // CHECK-ERROR-NEXT: ^ 322 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 323 // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #32 324 // CHECK-ERROR-NEXT: ^ 325 // CHECK-ERROR-NEXT: error: expected integer shift amount 326 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #-1 327 // CHECK-ERROR-NEXT: ^ 328 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 329 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #64 330 // CHECK-ERROR-NEXT: ^ 331 // CHECK-ERROR-NEXT: error: expected integer shift amount 332 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #-1 333 // CHECK-ERROR-NEXT: ^ 334 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 335 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #64 336 // CHECK-ERROR-NEXT: ^ 337 // CHECK-ERROR-NEXT: error: expected integer shift amount 338 // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #-1 339 // CHECK-ERROR-NEXT: ^ 340 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 341 // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #64 342 // CHECK-ERROR-NEXT: ^ 343 344 subs w1, w2, w3, lsl #-1 345 subs w1, w2, w3, lsl #32 346 subs w1, w2, w3, lsr #-1 347 subs w1, w2, w3, lsr #32 348 subs w1, w2, w3, asr #-1 349 subs w1, w2, w3, asr #32 350 subs x1, x2, x3, lsl #-1 351 subs x1, x2, x3, lsl #64 352 subs x1, x2, x3, lsr #-1 353 subs x1, x2, x3, lsr #64 354 subs x1, x2, x3, asr #-1 355 subs x1, x2, x3, asr #64 356 // CHECK-ERROR: error: expected integer shift amount 357 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #-1 358 // CHECK-ERROR-NEXT: ^ 359 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 360 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #32 361 // CHECK-ERROR-NEXT: ^ 362 // CHECK-ERROR-NEXT: error: expected integer shift amount 363 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #-1 364 // CHECK-ERROR-NEXT: ^ 365 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 366 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #32 367 // CHECK-ERROR-NEXT: ^ 368 // CHECK-ERROR-NEXT: error: expected integer shift amount 369 // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #-1 370 // CHECK-ERROR-NEXT: ^ 371 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 372 // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #32 373 // CHECK-ERROR-NEXT: ^ 374 // CHECK-ERROR-NEXT: error: expected integer shift amount 375 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #-1 376 // CHECK-ERROR-NEXT: ^ 377 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 378 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #64 379 // CHECK-ERROR-NEXT: ^ 380 // CHECK-ERROR-NEXT: error: expected integer shift amount 381 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #-1 382 // CHECK-ERROR-NEXT: ^ 383 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 384 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #64 385 // CHECK-ERROR-NEXT: ^ 386 // CHECK-ERROR-NEXT: error: expected integer shift amount 387 // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #-1 388 // CHECK-ERROR-NEXT: ^ 389 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 390 // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #64 391 // CHECK-ERROR-NEXT: ^ 392 393 cmn w9, w10, lsl #-1 394 cmn w9, w10, lsl #32 395 cmn w11, w12, lsr #-1 396 cmn w11, w12, lsr #32 397 cmn w19, wzr, asr #-1 398 cmn wzr, wzr, asr #32 399 cmn x9, x10, lsl #-1 400 cmn x9, x10, lsl #64 401 cmn x11, x12, lsr #-1 402 cmn x11, x12, lsr #64 403 cmn x19, xzr, asr #-1 404 cmn xzr, xzr, asr #64 405 // CHECK-ERROR: error: expected integer shift amount 406 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #-1 407 // CHECK-ERROR-NEXT: ^ 408 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 409 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #32 410 // CHECK-ERROR-NEXT: ^ 411 // CHECK-ERROR-NEXT: error: expected integer shift amount 412 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #-1 413 // CHECK-ERROR-NEXT: ^ 414 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 415 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #32 416 // CHECK-ERROR-NEXT: ^ 417 // CHECK-ERROR-NEXT: error: expected integer shift amount 418 // CHECK-ERROR-NEXT: cmn w19, wzr, asr #-1 419 // CHECK-ERROR-NEXT: ^ 420 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 421 // CHECK-ERROR-NEXT: cmn wzr, wzr, asr #32 422 // CHECK-ERROR-NEXT: ^ 423 // CHECK-ERROR-NEXT: error: expected integer shift amount 424 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #-1 425 // CHECK-ERROR-NEXT: ^ 426 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 427 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #64 428 // CHECK-ERROR-NEXT: ^ 429 // CHECK-ERROR-NEXT: error: expected integer shift amount 430 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #-1 431 // CHECK-ERROR-NEXT: ^ 432 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 433 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #64 434 // CHECK-ERROR-NEXT: ^ 435 // CHECK-ERROR-NEXT: error: expected integer shift amount 436 // CHECK-ERROR-NEXT: cmn x19, xzr, asr #-1 437 // CHECK-ERROR-NEXT: ^ 438 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 439 // CHECK-ERROR-NEXT: cmn xzr, xzr, asr #64 440 // CHECK-ERROR-NEXT: ^ 441 442 cmp w9, w10, lsl #-1 443 cmp w9, w10, lsl #32 444 cmp w11, w12, lsr #-1 445 cmp w11, w12, lsr #32 446 cmp w19, wzr, asr #-1 447 cmp wzr, wzr, asr #32 448 cmp x9, x10, lsl #-1 449 cmp x9, x10, lsl #64 450 cmp x11, x12, lsr #-1 451 cmp x11, x12, lsr #64 452 cmp x19, xzr, asr #-1 453 cmp xzr, xzr, asr #64 454 // CHECK-ERROR: error: expected integer shift amount 455 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #-1 456 // CHECK-ERROR-NEXT: ^ 457 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 458 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #32 459 // CHECK-ERROR-NEXT: ^ 460 // CHECK-ERROR-NEXT: error: expected integer shift amount 461 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #-1 462 // CHECK-ERROR-NEXT: ^ 463 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 464 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #32 465 // CHECK-ERROR-NEXT: ^ 466 // CHECK-ERROR-NEXT: error: expected integer shift amount 467 // CHECK-ERROR-NEXT: cmp w19, wzr, asr #-1 468 // CHECK-ERROR-NEXT: ^ 469 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 470 // CHECK-ERROR-NEXT: cmp wzr, wzr, asr #32 471 // CHECK-ERROR-NEXT: ^ 472 // CHECK-ERROR-NEXT: error: expected integer shift amount 473 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #-1 474 // CHECK-ERROR-NEXT: ^ 475 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 476 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #64 477 // CHECK-ERROR-NEXT: ^ 478 // CHECK-ERROR-NEXT: error: expected integer shift amount 479 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #-1 480 // CHECK-ERROR-NEXT: ^ 481 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] 482 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #64 483 // CHECK-ERROR-NEXT: ^ 484 // CHECK-ERROR-NEXT: error: expected integer shift amount 485 // CHECK-ERROR-NEXT: cmp x19, xzr, asr #-1 486 // CHECK-ERROR-NEXT: ^ 487 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 488 // CHECK-ERROR-NEXT: cmp xzr, xzr, asr #64 489 // CHECK-ERROR-NEXT: ^ 490 491 neg w9, w10, lsl #-1 492 neg w9, w10, lsl #32 493 neg w11, w12, lsr #-1 494 neg w11, w12, lsr #32 495 neg w19, wzr, asr #-1 496 neg wzr, wzr, asr #32 497 neg x9, x10, lsl #-1 498 neg x9, x10, lsl #64 499 neg x11, x12, lsr #-1 500 neg x11, x12, lsr #64 501 neg x19, xzr, asr #-1 502 neg xzr, xzr, asr #64 503 // CHECK-ERROR: error: expected integer shift amount 504 // CHECK-ERROR-NEXT: neg w9, w10, lsl #-1 505 // CHECK-ERROR-NEXT: ^ 506 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 507 // CHECK-ERROR-NEXT: neg w9, w10, lsl #32 508 // CHECK-ERROR-NEXT: ^ 509 // CHECK-ERROR-NEXT: error: expected integer shift amount 510 // CHECK-ERROR-NEXT: neg w11, w12, lsr #-1 511 // CHECK-ERROR-NEXT: ^ 512 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 513 // CHECK-ERROR-NEXT: neg w11, w12, lsr #32 514 // CHECK-ERROR-NEXT: ^ 515 // CHECK-ERROR-NEXT: error: expected integer shift amount 516 // CHECK-ERROR-NEXT: neg w19, wzr, asr #-1 517 // CHECK-ERROR-NEXT: ^ 518 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 519 // CHECK-ERROR-NEXT: neg wzr, wzr, asr #32 520 // CHECK-ERROR-NEXT: ^ 521 // CHECK-ERROR-NEXT: error: expected integer shift amount 522 // CHECK-ERROR-NEXT: neg x9, x10, lsl #-1 523 // CHECK-ERROR-NEXT: ^ 524 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 525 // CHECK-ERROR-NEXT: neg x9, x10, lsl #64 526 // CHECK-ERROR-NEXT: ^ 527 // CHECK-ERROR-NEXT: error: expected integer shift amount 528 // CHECK-ERROR-NEXT: neg x11, x12, lsr #-1 529 // CHECK-ERROR-NEXT: ^ 530 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 531 // CHECK-ERROR-NEXT: neg x11, x12, lsr #64 532 // CHECK-ERROR-NEXT: ^ 533 // CHECK-ERROR-NEXT: error: expected integer shift amount 534 // CHECK-ERROR-NEXT: neg x19, xzr, asr #-1 535 // CHECK-ERROR-NEXT: ^ 536 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 537 // CHECK-ERROR-NEXT: neg xzr, xzr, asr #64 538 // CHECK-ERROR-NEXT: ^ 539 540 negs w9, w10, lsl #-1 541 negs w9, w10, lsl #32 542 negs w11, w12, lsr #-1 543 negs w11, w12, lsr #32 544 negs w19, wzr, asr #-1 545 negs wzr, wzr, asr #32 546 negs x9, x10, lsl #-1 547 negs x9, x10, lsl #64 548 negs x11, x12, lsr #-1 549 negs x11, x12, lsr #64 550 negs x19, xzr, asr #-1 551 negs xzr, xzr, asr #64 552 // CHECK-ERROR: error: expected integer shift amount 553 // CHECK-ERROR-NEXT: negs w9, w10, lsl #-1 554 // CHECK-ERROR-NEXT: ^ 555 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 556 // CHECK-ERROR-NEXT: negs w9, w10, lsl #32 557 // CHECK-ERROR-NEXT: ^ 558 // CHECK-ERROR-NEXT: error: expected integer shift amount 559 // CHECK-ERROR-NEXT: negs w11, w12, lsr #-1 560 // CHECK-ERROR-NEXT: ^ 561 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 562 // CHECK-ERROR-NEXT: negs w11, w12, lsr #32 563 // CHECK-ERROR-NEXT: ^ 564 // CHECK-ERROR-NEXT: error: expected integer shift amount 565 // CHECK-ERROR-NEXT: negs w19, wzr, asr #-1 566 // CHECK-ERROR-NEXT: ^ 567 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 568 // CHECK-ERROR-NEXT: negs wzr, wzr, asr #32 569 // CHECK-ERROR-NEXT: ^ 570 // CHECK-ERROR-NEXT: error: expected integer shift amount 571 // CHECK-ERROR-NEXT: negs x9, x10, lsl #-1 572 // CHECK-ERROR-NEXT: ^ 573 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 574 // CHECK-ERROR-NEXT: negs x9, x10, lsl #64 575 // CHECK-ERROR-NEXT: ^ 576 // CHECK-ERROR-NEXT: error: expected integer shift amount 577 // CHECK-ERROR-NEXT: negs x11, x12, lsr #-1 578 // CHECK-ERROR-NEXT: ^ 579 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 580 // CHECK-ERROR-NEXT: negs x11, x12, lsr #64 581 // CHECK-ERROR-NEXT: ^ 582 // CHECK-ERROR-NEXT: error: expected integer shift amount 583 // CHECK-ERROR-NEXT: negs x19, xzr, asr #-1 584 // CHECK-ERROR-NEXT: ^ 585 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 586 // CHECK-ERROR-NEXT: negs xzr, xzr, asr #64 587 // CHECK-ERROR-NEXT: ^ 588 589 //------------------------------------------------------------------------------ 590 // Add-subtract (shifted register) 591 //------------------------------------------------------------------------------ 592 593 adc wsp, w3, w5 594 adc w1, wsp, w2 595 adc w0, w10, wsp 596 // CHECK-ERROR: error: invalid operand for instruction 597 // CHECK-ERROR-NEXT: adc wsp, w3, w5 598 // CHECK-ERROR-NEXT: ^ 599 // CHECK-ERROR-NEXT: error: invalid operand for instruction 600 // CHECK-ERROR-NEXT: adc w1, wsp, w2 601 // CHECK-ERROR-NEXT: ^ 602 // CHECK-ERROR-NEXT: error: invalid operand for instruction 603 // CHECK-ERROR-NEXT: adc w0, w10, wsp 604 // CHECK-ERROR-NEXT: ^ 605 606 adc sp, x3, x5 607 adc x1, sp, x2 608 adc x0, x10, sp 609 // CHECK-ERROR: error: invalid operand for instruction 610 // CHECK-ERROR-NEXT: adc sp, x3, x5 611 // CHECK-ERROR-NEXT: ^ 612 // CHECK-ERROR-NEXT: error: invalid operand for instruction 613 // CHECK-ERROR-NEXT: adc x1, sp, x2 614 // CHECK-ERROR-NEXT: ^ 615 // CHECK-ERROR-NEXT: error: invalid operand for instruction 616 // CHECK-ERROR-NEXT: adc x0, x10, sp 617 // CHECK-ERROR-NEXT: ^ 618 619 adcs wsp, w3, w5 620 adcs w1, wsp, w2 621 adcs w0, w10, wsp 622 // CHECK-ERROR: error: invalid operand for instruction 623 // CHECK-ERROR-NEXT: adcs wsp, w3, w5 624 // CHECK-ERROR-NEXT: ^ 625 // CHECK-ERROR-NEXT: error: invalid operand for instruction 626 // CHECK-ERROR-NEXT: adcs w1, wsp, w2 627 // CHECK-ERROR-NEXT: ^ 628 // CHECK-ERROR-NEXT: error: invalid operand for instruction 629 // CHECK-ERROR-NEXT: adcs w0, w10, wsp 630 // CHECK-ERROR-NEXT: ^ 631 632 adcs sp, x3, x5 633 adcs x1, sp, x2 634 adcs x0, x10, sp 635 // CHECK-ERROR: error: invalid operand for instruction 636 // CHECK-ERROR-NEXT: adcs sp, x3, x5 637 // CHECK-ERROR-NEXT: ^ 638 // CHECK-ERROR-NEXT: error: invalid operand for instruction 639 // CHECK-ERROR-NEXT: adcs x1, sp, x2 640 // CHECK-ERROR-NEXT: ^ 641 // CHECK-ERROR-NEXT: error: invalid operand for instruction 642 // CHECK-ERROR-NEXT: adcs x0, x10, sp 643 // CHECK-ERROR-NEXT: ^ 644 645 sbc wsp, w3, w5 646 sbc w1, wsp, w2 647 sbc w0, w10, wsp 648 // CHECK-ERROR: error: invalid operand for instruction 649 // CHECK-ERROR-NEXT: sbc wsp, w3, w5 650 // CHECK-ERROR-NEXT: ^ 651 // CHECK-ERROR-NEXT: error: invalid operand for instruction 652 // CHECK-ERROR-NEXT: sbc w1, wsp, w2 653 // CHECK-ERROR-NEXT: ^ 654 // CHECK-ERROR-NEXT: error: invalid operand for instruction 655 // CHECK-ERROR-NEXT: sbc w0, w10, wsp 656 // CHECK-ERROR-NEXT: ^ 657 658 sbc sp, x3, x5 659 sbc x1, sp, x2 660 sbc x0, x10, sp 661 // CHECK-ERROR: error: invalid operand for instruction 662 // CHECK-ERROR-NEXT: sbc sp, x3, x5 663 // CHECK-ERROR-NEXT: ^ 664 // CHECK-ERROR-NEXT: error: invalid operand for instruction 665 // CHECK-ERROR-NEXT: sbc x1, sp, x2 666 // CHECK-ERROR-NEXT: ^ 667 // CHECK-ERROR-NEXT: error: invalid operand for instruction 668 // CHECK-ERROR-NEXT: sbc x0, x10, sp 669 // CHECK-ERROR-NEXT: ^ 670 671 sbcs wsp, w3, w5 672 sbcs w1, wsp, w2 673 sbcs w0, w10, wsp 674 // CHECK-ERROR: error: invalid operand for instruction 675 // CHECK-ERROR-NEXT: sbcs wsp, w3, w5 676 // CHECK-ERROR-NEXT: ^ 677 // CHECK-ERROR-NEXT: error: invalid operand for instruction 678 // CHECK-ERROR-NEXT: sbcs w1, wsp, w2 679 // CHECK-ERROR-NEXT: ^ 680 // CHECK-ERROR-NEXT: error: invalid operand for instruction 681 // CHECK-ERROR-NEXT: sbcs w0, w10, wsp 682 // CHECK-ERROR-NEXT: ^ 683 684 sbcs sp, x3, x5 685 sbcs x1, sp, x2 686 sbcs x0, x10, sp 687 // CHECK-ERROR: error: invalid operand for instruction 688 // CHECK-ERROR-NEXT: sbcs sp, x3, x5 689 // CHECK-ERROR-NEXT: ^ 690 // CHECK-ERROR-NEXT: error: invalid operand for instruction 691 // CHECK-ERROR-NEXT: sbcs x1, sp, x2 692 // CHECK-ERROR-NEXT: ^ 693 // CHECK-ERROR-NEXT: error: invalid operand for instruction 694 // CHECK-ERROR-NEXT: sbcs x0, x10, sp 695 // CHECK-ERROR-NEXT: ^ 696 697 ngc wsp, w3 698 ngc w9, wsp 699 ngc sp, x9 700 ngc x2, sp 701 // CHECK-ERROR: error: invalid operand for instruction 702 // CHECK-ERROR-NEXT: ngc wsp, w3 703 // CHECK-ERROR-NEXT: ^ 704 // CHECK-ERROR-NEXT: error: invalid operand for instruction 705 // CHECK-ERROR-NEXT: ngc w9, wsp 706 // CHECK-ERROR-NEXT: ^ 707 // CHECK-ERROR-NEXT: error: invalid operand for instruction 708 // CHECK-ERROR-NEXT: ngc sp, x9 709 // CHECK-ERROR-NEXT: ^ 710 // CHECK-ERROR-NEXT: error: invalid operand for instruction 711 // CHECK-ERROR-NEXT: ngc x2, sp 712 // CHECK-ERROR-NEXT: ^ 713 714 ngcs wsp, w3 715 ngcs w9, wsp 716 ngcs sp, x9 717 ngcs x2, sp 718 // CHECK-ERROR: error: invalid operand for instruction 719 // CHECK-ERROR-NEXT: ngcs wsp, w3 720 // CHECK-ERROR-NEXT: ^ 721 // CHECK-ERROR-NEXT: error: invalid operand for instruction 722 // CHECK-ERROR-NEXT: ngcs w9, wsp 723 // CHECK-ERROR-NEXT: ^ 724 // CHECK-ERROR-NEXT: error: invalid operand for instruction 725 // CHECK-ERROR-NEXT: ngcs sp, x9 726 // CHECK-ERROR-NEXT: ^ 727 // CHECK-ERROR-NEXT: error: invalid operand for instruction 728 // CHECK-ERROR-NEXT: ngcs x2, sp 729 // CHECK-ERROR-NEXT: ^ 730 731 //------------------------------------------------------------------------------ 732 // Logical (immediates) 733 //------------------------------------------------------------------------------ 734 735 and w2, w3, #4294967296 736 eor w2, w3, #4294967296 737 orr w2, w3, #4294967296 738 ands w2, w3, #4294967296 739 // CHECK-ERROR: error: expected compatible register or logical immediate 740 // CHECK-ERROR-NEXT: and w2, w3, #4294967296 741 // CHECK-ERROR-NEXT: ^ 742 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 743 // CHECK-ERROR-NEXT: eor w2, w3, #4294967296 744 // CHECK-ERROR-NEXT: ^ 745 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 746 // CHECK-ERROR-NEXT: orr w2, w3, #4294967296 747 // CHECK-ERROR-NEXT: ^ 748 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 749 // CHECK-ERROR-NEXT: ands w2, w3, #4294967296 750 // CHECK-ERROR-NEXT: ^ 751 752 //------------------------------------------------------------------------------ 753 // Bitfield 754 //------------------------------------------------------------------------------ 755 756 sbfm x3, w13, #0, #0 757 sbfm w12, x9, #0, #0 758 sbfm sp, x3, #3, #5 759 sbfm w3, wsp, #1, #9 760 sbfm x9, x5, #-1, #0 761 sbfm x9, x5, #0, #-1 762 // CHECK-ERROR: error: invalid operand for instruction 763 // CHECK-ERROR-NEXT: sbfm x3, w13, #0, #0 764 // CHECK-ERROR-NEXT: ^ 765 // CHECK-ERROR-NEXT: error: invalid operand for instruction 766 // CHECK-ERROR-NEXT: sbfm w12, x9, #0, #0 767 // CHECK-ERROR-NEXT: ^ 768 // CHECK-ERROR-NEXT: error: invalid operand for instruction 769 // CHECK-ERROR-NEXT: sbfm sp, x3, #3, #5 770 // CHECK-ERROR-NEXT: ^ 771 // CHECK-ERROR-NEXT: error: invalid operand for instruction 772 // CHECK-ERROR-NEXT: sbfm w3, wsp, #1, #9 773 // CHECK-ERROR-NEXT: ^ 774 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 775 // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0 776 // CHECK-ERROR-NEXT: ^ 777 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 778 // CHECK-ERROR-NEXT: sbfm x9, x5, #0, #-1 779 // CHECK-ERROR-NEXT: ^ 780 781 sbfm w3, w5, #32, #1 782 sbfm w7, w11, #19, #32 783 sbfm x29, x30, #64, #0 784 sbfm x10, x20, #63, #64 785 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31] 786 // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1 787 // CHECK-ERROR-NEXT: ^ 788 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 789 // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32 790 // CHECK-ERROR-NEXT: ^ 791 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 792 // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0 793 // CHECK-ERROR-NEXT: ^ 794 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 795 // CHECK-ERROR-NEXT: sbfm x10, x20, #63, #64 796 // CHECK-ERROR-NEXT: ^ 797 798 ubfm w3, w5, #32, #1 799 ubfm w7, w11, #19, #32 800 ubfm x29, x30, #64, #0 801 ubfm x10, x20, #63, #64 802 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31] 803 // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1 804 // CHECK-ERROR-NEXT: ^ 805 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 806 // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32 807 // CHECK-ERROR-NEXT: ^ 808 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 809 // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0 810 // CHECK-ERROR-NEXT: ^ 811 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 812 // CHECK-ERROR-NEXT: ubfm x10, x20, #63, #64 813 // CHECK-ERROR-NEXT: ^ 814 815 bfm w3, w5, #32, #1 816 bfm w7, w11, #19, #32 817 bfm x29, x30, #64, #0 818 bfm x10, x20, #63, #64 819 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31] 820 // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1 821 // CHECK-ERROR-NEXT: ^ 822 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 823 // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32 824 // CHECK-ERROR-NEXT: ^ 825 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 826 // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0 827 // CHECK-ERROR-NEXT: ^ 828 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 829 // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64 830 // CHECK-ERROR-NEXT: ^ 831 832 sxtb x3, x2 833 sxth xzr, xzr 834 sxtw x3, x5 835 // CHECK-ERROR-AARCH64: error: invalid operand for instruction 836 // CHECK-ERROR-AARCH64-NEXT: sxtb x3, x2 837 // CHECK-ERROR-AARCH64-NEXT: ^ 838 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction 839 // CHECK-ERROR-AARCH64-NEXT: sxth xzr, xzr 840 // CHECK-ERROR-AARCH64-NEXT: ^ 841 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction 842 // CHECK-ERROR-AARCH64-NEXT: sxtw x3, x5 843 // CHECK-ERROR-AARCH64-NEXT: ^ 844 845 uxtb x3, x12 846 uxth x5, x9 847 uxtw x3, x5 848 uxtb x2, sp 849 uxtb sp, xzr 850 // CHECK-ERROR: error: invalid operand for instruction 851 // CHECK-ERROR-NEXT: uxtb x3, x12 852 // CHECK-ERROR-NEXT: ^ 853 // CHECK-ERROR-NEXT: error: invalid operand for instruction 854 // CHECK-ERROR-NEXT: uxth x5, x9 855 // CHECK-ERROR-NEXT: ^ 856 // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction 857 // CHECK-ERROR-AARCH64-NEXT: uxtw x3, x5 858 // CHECK-ERROR-AARCH64-NEXT: ^ 859 // CHECK-ERROR-NEXT: error: invalid operand for instruction 860 // CHECK-ERROR-NEXT: uxtb x2, sp 861 // CHECK-ERROR-NEXT: ^ 862 // CHECK-ERROR-NEXT: error: invalid operand for instruction 863 // CHECK-ERROR-NEXT: uxtb sp, xzr 864 // CHECK-ERROR-NEXT: ^ 865 866 asr x3, w2, #1 867 asr sp, x2, #1 868 asr x25, x26, #-1 869 asr x25, x26, #64 870 asr w9, w8, #32 871 // CHECK-ERROR: error: invalid operand for instruction 872 // CHECK-ERROR-NEXT: asr x3, w2, #1 873 // CHECK-ERROR-NEXT: ^ 874 // CHECK-ERROR-NEXT: error: invalid operand for instruction 875 // CHECK-ERROR-NEXT: asr sp, x2, #1 876 // CHECK-ERROR-NEXT: ^ 877 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 878 // CHECK-ERROR-NEXT: asr x25, x26, #-1 879 // CHECK-ERROR-NEXT: ^ 880 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 881 // CHECK-ERROR-NEXT: asr x25, x26, #64 882 // CHECK-ERROR-NEXT: ^ 883 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 884 // CHECK-ERROR-NEXT: asr w9, w8, #32 885 // CHECK-ERROR-NEXT: ^ 886 887 sbfiz w1, w2, #0, #0 888 sbfiz wsp, w9, #0, #1 889 sbfiz w9, w10, #32, #1 890 sbfiz w11, w12, #32, #0 891 sbfiz w9, w10, #10, #23 892 sbfiz x3, x5, #12, #53 893 sbfiz sp, x3, #7, #6 894 sbfiz w3, wsp, #10, #8 895 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 896 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 897 // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0 898 // CHECK-ERROR-NEXT: ^ 899 // CHECK-ERROR-NEXT: error: invalid operand for instruction 900 // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1 901 // CHECK-ERROR-NEXT: ^ 902 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 903 // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1 904 // CHECK-ERROR-NEXT: ^ 905 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 906 // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0 907 // CHECK-ERROR-NEXT: ^ 908 // CHECK-ERROR-NEXT: error: requested insert overflows register 909 // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23 910 // CHECK-ERROR-NEXT: ^ 911 // CHECK-ERROR-NEXT: error: requested insert overflows register 912 // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53 913 // CHECK-ERROR-NEXT: ^ 914 // CHECK-ERROR-NEXT: error: invalid operand for instruction 915 // CHECK-ERROR-NEXT: sbfiz sp, x3, #7, #6 916 // CHECK-ERROR-NEXT: ^ 917 // CHECK-ERROR-NEXT: error: invalid operand for instruction 918 // CHECK-ERROR-NEXT: sbfiz w3, wsp, #10, #8 919 // CHECK-ERROR-NEXT: ^ 920 921 sbfx w1, w2, #0, #0 922 sbfx wsp, w9, #0, #1 923 sbfx w9, w10, #32, #1 924 sbfx w11, w12, #32, #0 925 sbfx w9, w10, #10, #23 926 sbfx x3, x5, #12, #53 927 sbfx sp, x3, #7, #6 928 sbfx w3, wsp, #10, #8 929 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 930 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 931 // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0 932 // CHECK-ERROR-NEXT: ^ 933 // CHECK-ERROR-NEXT: error: invalid operand for instruction 934 // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1 935 // CHECK-ERROR-NEXT: ^ 936 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 937 // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1 938 // CHECK-ERROR-NEXT: ^ 939 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 940 // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0 941 // CHECK-ERROR-NEXT: ^ 942 // CHECK-ERROR-NEXT: error: requested extract overflows register 943 // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23 944 // CHECK-ERROR-NEXT: ^ 945 // CHECK-ERROR-NEXT: error: requested extract overflows register 946 // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53 947 // CHECK-ERROR-NEXT: ^ 948 // CHECK-ERROR-NEXT: error: invalid operand for instruction 949 // CHECK-ERROR-NEXT: sbfx sp, x3, #7, #6 950 // CHECK-ERROR-NEXT: ^ 951 // CHECK-ERROR-NEXT: error: invalid operand for instruction 952 // CHECK-ERROR-NEXT: sbfx w3, wsp, #10, #8 953 // CHECK-ERROR-NEXT: ^ 954 955 bfi w1, w2, #0, #0 956 bfi wsp, w9, #0, #1 957 bfi w9, w10, #32, #1 958 bfi w11, w12, #32, #0 959 bfi w9, w10, #10, #23 960 bfi x3, x5, #12, #53 961 bfi sp, x3, #7, #6 962 bfi w3, wsp, #10, #8 963 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 964 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 965 // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0 966 // CHECK-ERROR-NEXT: ^ 967 // CHECK-ERROR-NEXT: error: invalid operand for instruction 968 // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1 969 // CHECK-ERROR-NEXT: ^ 970 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 971 // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1 972 // CHECK-ERROR-NEXT: ^ 973 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 974 // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0 975 // CHECK-ERROR-NEXT: ^ 976 // CHECK-ERROR-NEXT: error: requested insert overflows register 977 // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23 978 // CHECK-ERROR-NEXT: ^ 979 // CHECK-ERROR-NEXT: error: requested insert overflows register 980 // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53 981 // CHECK-ERROR-NEXT: ^ 982 // CHECK-ERROR-NEXT: error: invalid operand for instruction 983 // CHECK-ERROR-NEXT: bfi sp, x3, #7, #6 984 // CHECK-ERROR-NEXT: ^ 985 // CHECK-ERROR-NEXT: error: invalid operand for instruction 986 // CHECK-ERROR-NEXT: bfi w3, wsp, #10, #8 987 // CHECK-ERROR-NEXT: ^ 988 989 bfxil w1, w2, #0, #0 990 bfxil wsp, w9, #0, #1 991 bfxil w9, w10, #32, #1 992 bfxil w11, w12, #32, #0 993 bfxil w9, w10, #10, #23 994 bfxil x3, x5, #12, #53 995 bfxil sp, x3, #7, #6 996 bfxil w3, wsp, #10, #8 997 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 998 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 999 // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0 1000 // CHECK-ERROR-NEXT: ^ 1001 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1002 // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1 1003 // CHECK-ERROR-NEXT: ^ 1004 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1005 // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1 1006 // CHECK-ERROR-NEXT: ^ 1007 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1008 // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0 1009 // CHECK-ERROR-NEXT: ^ 1010 // CHECK-ERROR-NEXT: error: requested extract overflows register 1011 // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23 1012 // CHECK-ERROR-NEXT: ^ 1013 // CHECK-ERROR-NEXT: error: requested extract overflows register 1014 // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53 1015 // CHECK-ERROR-NEXT: ^ 1016 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1017 // CHECK-ERROR-NEXT: bfxil sp, x3, #7, #6 1018 // CHECK-ERROR-NEXT: ^ 1019 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1020 // CHECK-ERROR-NEXT: bfxil w3, wsp, #10, #8 1021 // CHECK-ERROR-NEXT: ^ 1022 1023 ubfiz w1, w2, #0, #0 1024 ubfiz wsp, w9, #0, #1 1025 ubfiz w9, w10, #32, #1 1026 ubfiz w11, w12, #32, #0 1027 ubfiz w9, w10, #10, #23 1028 ubfiz x3, x5, #12, #53 1029 ubfiz sp, x3, #7, #6 1030 ubfiz w3, wsp, #10, #8 1031 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 1032 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 1033 // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0 1034 // CHECK-ERROR-NEXT: ^ 1035 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1036 // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1 1037 // CHECK-ERROR-NEXT: ^ 1038 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1039 // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1 1040 // CHECK-ERROR-NEXT: ^ 1041 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1042 // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0 1043 // CHECK-ERROR-NEXT: ^ 1044 // CHECK-ERROR-NEXT: error: requested insert overflows register 1045 // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23 1046 // CHECK-ERROR-NEXT: ^ 1047 // CHECK-ERROR-NEXT: error: requested insert overflows register 1048 // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53 1049 // CHECK-ERROR-NEXT: ^ 1050 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1051 // CHECK-ERROR-NEXT: ubfiz sp, x3, #7, #6 1052 // CHECK-ERROR-NEXT: ^ 1053 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1054 // CHECK-ERROR-NEXT: ubfiz w3, wsp, #10, #8 1055 // CHECK-ERROR-NEXT: ^ 1056 1057 ubfx w1, w2, #0, #0 1058 ubfx wsp, w9, #0, #1 1059 ubfx w9, w10, #32, #1 1060 ubfx w11, w12, #32, #0 1061 ubfx w9, w10, #10, #23 1062 ubfx x3, x5, #12, #53 1063 ubfx sp, x3, #7, #6 1064 ubfx w3, wsp, #10, #8 1065 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31] 1066 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32] 1067 // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0 1068 // CHECK-ERROR-NEXT: ^ 1069 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1070 // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1 1071 // CHECK-ERROR-NEXT: ^ 1072 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1073 // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1 1074 // CHECK-ERROR-NEXT: ^ 1075 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1076 // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0 1077 // CHECK-ERROR-NEXT: ^ 1078 // CHECK-ERROR-NEXT: error: requested extract overflows register 1079 // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23 1080 // CHECK-ERROR-NEXT: ^ 1081 // CHECK-ERROR-NEXT: error: requested extract overflows register 1082 // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53 1083 // CHECK-ERROR-NEXT: ^ 1084 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1085 // CHECK-ERROR-NEXT: ubfx sp, x3, #7, #6 1086 // CHECK-ERROR-NEXT: ^ 1087 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1088 // CHECK-ERROR-NEXT: ubfx w3, wsp, #10, #8 1089 // CHECK-ERROR-NEXT: ^ 1090 1091 bfc wsp, #3, #6 1092 bfc w4, #2, #31 1093 bfc sp, #0, #1 1094 bfc x6, #0, #0 1095 // CHECK-ERROR: error: invalid operand for instruction 1096 // CHECK-ERROR-NEXT: bfc wsp, #3, #6 1097 // CHECK-ERROR-NEXT: ^ 1098 // CHECK-ERROR-NEXT: error: requested insert overflows register 1099 // CHECK-ERROR-NEXT: bfc w4, #2, #31 1100 // CHECK-ERROR-NEXT: ^ 1101 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1102 // CHECK-ERROR-NEXT: bfc sp, #0, #1 1103 // CHECK-ERROR-NEXT: ^ 1104 // CHECK-ERROR-NEXT: error: expected integer in range [1, 32] 1105 // CHECK-ERROR-NEXT: bfc x6, #0, #0 1106 // CHECK-ERROR-NEXT: ^ 1107 1108 //------------------------------------------------------------------------------ 1109 // Compare & branch (immediate) 1110 //------------------------------------------------------------------------------ 1111 1112 cbnz wsp, lbl 1113 cbz sp, lbl 1114 cbz x3, x5 1115 // CHECK-ERROR: error: invalid operand for instruction 1116 // CHECK-ERROR-NEXT: cbnz wsp, lbl 1117 // CHECK-ERROR-NEXT: ^ 1118 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1119 // CHECK-ERROR-NEXT: cbz sp, lbl 1120 // CHECK-ERROR-NEXT: ^ 1121 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1122 // CHECK-ERROR-NEXT: cbz x3, x5 1123 // CHECK-ERROR-NEXT: ^ 1124 1125 cbz w20, #1048576 1126 cbnz xzr, #-1048580 1127 cbz x29, #1 1128 // CHECK-ERROR: error: expected label or encodable integer pc offset 1129 // CHECK-ERROR-NEXT: cbz w20, #1048576 1130 // CHECK-ERROR-NEXT: ^ 1131 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1132 // CHECK-ERROR-NEXT: cbnz xzr, #-1048580 1133 // CHECK-ERROR-NEXT: ^ 1134 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1135 // CHECK-ERROR-NEXT: cbz x29, #1 1136 // CHECK-ERROR-NEXT: ^ 1137 1138 //------------------------------------------------------------------------------ 1139 // Conditional branch (immediate) 1140 //------------------------------------------------------------------------------ 1141 1142 b.zf lbl 1143 // CHECK-ERROR: error: invalid condition code 1144 // CHECK-ERROR-NEXT: b.zf lbl 1145 // CHECK-ERROR-NEXT: ^ 1146 1147 b.eq #1048576 1148 b.ge #-1048580 1149 b.cc #1 1150 // CHECK-ERROR: error: expected label or encodable integer pc offset 1151 // CHECK-ERROR-NEXT: b.eq #1048576 1152 // CHECK-ERROR-NEXT: ^ 1153 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1154 // CHECK-ERROR-NEXT: b.ge #-1048580 1155 // CHECK-ERROR-NEXT: ^ 1156 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1157 // CHECK-ERROR-NEXT: b.cc #1 1158 // CHECK-ERROR-NEXT: ^ 1159 1160 //------------------------------------------------------------------------------ 1161 // Conditional compare (immediate) 1162 //------------------------------------------------------------------------------ 1163 1164 ccmp wsp, #4, #2, ne 1165 ccmp w25, #-1, #15, hs 1166 ccmp w3, #32, #0, ge 1167 ccmp w19, #5, #-1, lt 1168 ccmp w20, #7, #16, hs 1169 // CHECK-ERROR: error: invalid operand for instruction 1170 // CHECK-ERROR-NEXT: ccmp wsp, #4, #2, ne 1171 // CHECK-ERROR-NEXT: ^ 1172 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1173 // CHECK-ERROR-NEXT: ccmp w25, #-1, #15, hs 1174 // CHECK-ERROR-NEXT: ^ 1175 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1176 // CHECK-ERROR-NEXT: ccmp w3, #32, #0, ge 1177 // CHECK-ERROR-NEXT: ^ 1178 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1179 // CHECK-ERROR-NEXT: ccmp w19, #5, #-1, lt 1180 // CHECK-ERROR-NEXT: ^ 1181 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1182 // CHECK-ERROR-NEXT: ccmp w20, #7, #16, hs 1183 // CHECK-ERROR-NEXT: ^ 1184 1185 ccmp sp, #4, #2, ne 1186 ccmp x25, #-1, #15, hs 1187 ccmp x3, #32, #0, ge 1188 ccmp x19, #5, #-1, lt 1189 ccmp x20, #7, #16, hs 1190 // CHECK-ERROR: error: invalid operand for instruction 1191 // CHECK-ERROR-NEXT: ccmp sp, #4, #2, ne 1192 // CHECK-ERROR-NEXT: ^ 1193 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1194 // CHECK-ERROR-NEXT: ccmp x25, #-1, #15, hs 1195 // CHECK-ERROR-NEXT: ^ 1196 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1197 // CHECK-ERROR-NEXT: ccmp x3, #32, #0, ge 1198 // CHECK-ERROR-NEXT: ^ 1199 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1200 // CHECK-ERROR-NEXT: ccmp x19, #5, #-1, lt 1201 // CHECK-ERROR-NEXT: ^ 1202 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1203 // CHECK-ERROR-NEXT: ccmp x20, #7, #16, hs 1204 // CHECK-ERROR-NEXT: ^ 1205 1206 ccmn wsp, #4, #2, ne 1207 ccmn w25, #-1, #15, hs 1208 ccmn w3, #32, #0, ge 1209 ccmn w19, #5, #-1, lt 1210 ccmn w20, #7, #16, hs 1211 // CHECK-ERROR: error: invalid operand for instruction 1212 // CHECK-ERROR-NEXT: ccmn wsp, #4, #2, ne 1213 // CHECK-ERROR-NEXT: ^ 1214 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1215 // CHECK-ERROR-NEXT: ccmn w25, #-1, #15, hs 1216 // CHECK-ERROR-NEXT: ^ 1217 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1218 // CHECK-ERROR-NEXT: ccmn w3, #32, #0, ge 1219 // CHECK-ERROR-NEXT: ^ 1220 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1221 // CHECK-ERROR-NEXT: ccmn w19, #5, #-1, lt 1222 // CHECK-ERROR-NEXT: ^ 1223 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1224 // CHECK-ERROR-NEXT: ccmn w20, #7, #16, hs 1225 // CHECK-ERROR-NEXT: ^ 1226 1227 ccmn sp, #4, #2, ne 1228 ccmn x25, #-1, #15, hs 1229 ccmn x3, #32, #0, ge 1230 ccmn x19, #5, #-1, lt 1231 ccmn x20, #7, #16, hs 1232 // CHECK-ERROR: error: invalid operand for instruction 1233 // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne 1234 // CHECK-ERROR-NEXT: ^ 1235 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1236 // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs 1237 // CHECK-ERROR-NEXT: ^ 1238 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1239 // CHECK-ERROR-NEXT: ccmn x3, #32, #0, ge 1240 // CHECK-ERROR-NEXT: ^ 1241 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1242 // CHECK-ERROR-NEXT: ccmn x19, #5, #-1, lt 1243 // CHECK-ERROR-NEXT: ^ 1244 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1245 // CHECK-ERROR-NEXT: ccmn x20, #7, #16, hs 1246 // CHECK-ERROR-NEXT: ^ 1247 1248 //------------------------------------------------------------------------------ 1249 // Conditional compare (register) 1250 //------------------------------------------------------------------------------ 1251 1252 ccmp wsp, w4, #2, ne 1253 ccmp w3, wsp, #0, ge 1254 ccmp w19, w5, #-1, lt 1255 ccmp w20, w7, #16, hs 1256 // CHECK-ERROR: error: invalid operand for instruction 1257 // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne 1258 // CHECK-ERROR-NEXT: ^ 1259 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1260 // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge 1261 // CHECK-ERROR-NEXT: ^ 1262 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1263 // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt 1264 // CHECK-ERROR-NEXT: ^ 1265 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1266 // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs 1267 // CHECK-ERROR-NEXT: ^ 1268 1269 ccmp sp, x4, #2, ne 1270 ccmp x25, sp, #15, hs 1271 ccmp x19, x5, #-1, lt 1272 ccmp x20, x7, #16, hs 1273 // CHECK-ERROR: error: invalid operand for instruction 1274 // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne 1275 // CHECK-ERROR-NEXT: ^ 1276 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1277 // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs 1278 // CHECK-ERROR-NEXT: ^ 1279 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1280 // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt 1281 // CHECK-ERROR-NEXT: ^ 1282 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1283 // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs 1284 // CHECK-ERROR-NEXT: ^ 1285 1286 ccmn wsp, w4, #2, ne 1287 ccmn w25, wsp, #15, hs 1288 ccmn w19, w5, #-1, lt 1289 ccmn w20, w7, #16, hs 1290 // CHECK-ERROR: error: invalid operand for instruction 1291 // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne 1292 // CHECK-ERROR-NEXT: ^ 1293 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1294 // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs 1295 // CHECK-ERROR-NEXT: ^ 1296 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1297 // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt 1298 // CHECK-ERROR-NEXT: ^ 1299 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1300 // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs 1301 // CHECK-ERROR-NEXT: ^ 1302 1303 ccmn sp, x4, #2, ne 1304 ccmn x25, sp, #15, hs 1305 ccmn x19, x5, #-1, lt 1306 ccmn x20, x7, #16, hs 1307 // CHECK-ERROR: error: invalid operand for instruction 1308 // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne 1309 // CHECK-ERROR-NEXT: ^ 1310 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1311 // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs 1312 // CHECK-ERROR-NEXT: ^ 1313 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1314 // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt 1315 // CHECK-ERROR-NEXT: ^ 1316 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1317 // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs 1318 // CHECK-ERROR-NEXT: ^ 1319 1320 //------------------------------------------------------------------------------ 1321 // Conditional select 1322 //------------------------------------------------------------------------------ 1323 1324 csel w4, wsp, w9, eq 1325 csel wsp, w2, w3, ne 1326 csel w10, w11, wsp, ge 1327 csel w1, w2, w3, #3 1328 csel x4, sp, x9, eq 1329 csel sp, x2, x3, ne 1330 csel x10, x11, sp, ge 1331 csel x1, x2, x3, #3 1332 // CHECK-ERROR: error: invalid operand for instruction 1333 // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq 1334 // CHECK-ERROR-NEXT: ^ 1335 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1336 // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne 1337 // CHECK-ERROR-NEXT: ^ 1338 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1339 // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge 1340 // CHECK-ERROR-NEXT: ^ 1341 // CHECK-ERROR-NEXT: error: expected AArch64 condition code 1342 // CHECK-ERROR-NEXT: csel w1, w2, w3, #3 1343 // CHECK-ERROR-NEXT: ^ 1344 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1345 // CHECK-ERROR-NEXT: csel x4, sp, x9, eq 1346 // CHECK-ERROR-NEXT: ^ 1347 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1348 // CHECK-ERROR-NEXT: csel sp, x2, x3, ne 1349 // CHECK-ERROR-NEXT: ^ 1350 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1351 // CHECK-ERROR-NEXT: csel x10, x11, sp, ge 1352 // CHECK-ERROR-NEXT: ^ 1353 // CHECK-ERROR-NEXT: error: expected AArch64 condition code 1354 // CHECK-ERROR-NEXT: csel x1, x2, x3, #3 1355 // CHECK-ERROR-NEXT: ^ 1356 1357 csinc w20, w21, wsp, mi 1358 csinc sp, x30, x29, eq 1359 // CHECK-ERROR: error: invalid operand for instruction 1360 // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi 1361 // CHECK-ERROR-NEXT: ^ 1362 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1363 // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq 1364 // CHECK-ERROR-NEXT: ^ 1365 1366 csinv w20, wsp, wsp, mi 1367 csinv sp, x30, x29, le 1368 // CHECK-ERROR: error: invalid operand for instruction 1369 // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi 1370 // CHECK-ERROR-NEXT: ^ 1371 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1372 // CHECK-ERROR-NEXT: csinv sp, x30, x29, le 1373 // CHECK-ERROR-NEXT: ^ 1374 1375 csneg w20, w21, wsp, mi 1376 csneg x0, sp, x29, le 1377 // CHECK-ERROR: error: invalid operand for instruction 1378 // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi 1379 // CHECK-ERROR-NEXT: ^ 1380 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1381 // CHECK-ERROR-NEXT: csneg x0, sp, x29, le 1382 // CHECK-ERROR-NEXT: ^ 1383 1384 cset wsp, lt 1385 csetm sp, ge 1386 cset w1, al 1387 csetm x6, nv 1388 // CHECK-ERROR: error: invalid operand for instruction 1389 // CHECK-ERROR-NEXT: cset wsp, lt 1390 // CHECK-ERROR-NEXT: ^ 1391 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1392 // CHECK-ERROR-NEXT: csetm sp, ge 1393 // CHECK-ERROR-NEXT: ^ 1394 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction 1395 // CHECK-ERROR-NEXT: cset w1, al 1396 // CHECK-ERROR-NEXT: ^ 1397 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction 1398 // CHECK-ERROR-NEXT: csetm x6, nv 1399 // CHECK-ERROR-NEXT: ^ 1400 1401 cinc w3, wsp, ne 1402 cinc sp, x9, eq 1403 cinc x2, x0, nv 1404 // CHECK-ERROR: error: invalid operand for instruction 1405 // CHECK-ERROR-NEXT: cinc w3, wsp, ne 1406 // CHECK-ERROR-NEXT: ^ 1407 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1408 // CHECK-ERROR-NEXT: cinc sp, x9, eq 1409 // CHECK-ERROR-NEXT: ^ 1410 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction 1411 // CHECK-ERROR-NEXT: cinc x2, x0, nv 1412 // CHECK-ERROR-NEXT: ^ 1413 1414 cinv w3, wsp, ne 1415 cinv sp, x9, eq 1416 cinv w8, x7, nv 1417 // CHECK-ERROR: error: invalid operand for instruction 1418 // CHECK-ERROR-NEXT: cinv w3, wsp, ne 1419 // CHECK-ERROR-NEXT: ^ 1420 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1421 // CHECK-ERROR-NEXT: cinv sp, x9, eq 1422 // CHECK-ERROR-NEXT: ^ 1423 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction 1424 // CHECK-ERROR-NEXT: cinv w8, x7, nv 1425 // CHECK-ERROR-NEXT: ^ 1426 1427 cneg w3, wsp, ne 1428 cneg sp, x9, eq 1429 cneg x4, x5, al 1430 // CHECK-ERROR: error: invalid operand for instruction 1431 // CHECK-ERROR-NEXT: cneg w3, wsp, ne 1432 // CHECK-ERROR-NEXT: ^ 1433 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1434 // CHECK-ERROR-NEXT: cneg sp, x9, eq 1435 // CHECK-ERROR-NEXT: ^ 1436 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction 1437 // CHECK-ERROR-NEXT: cneg x4, x5, al 1438 // CHECK-ERROR-NEXT: ^ 1439 1440 //------------------------------------------------------------------------------ 1441 // Data Processing (1 source) 1442 //------------------------------------------------------------------------------ 1443 rbit x23, w2 1444 //CHECK-ERROR: error: invalid operand for instruction 1445 //CHECK-ERROR-NEXT: rbit x23, w2 1446 1447 cls sp, x2 1448 //CHECK-ERROR: error: invalid operand for instruction 1449 //CHECK-ERROR-NEXT: cls sp, x2 1450 1451 clz wsp, w3 1452 //CHECK-ERROR: error: invalid operand for instruction 1453 //CHECK-ERROR-NEXT: clz wsp, w3 1454 1455 //------------------------------------------------------------------------------ 1456 // Data Processing (2 sources) 1457 //------------------------------------------------------------------------------ 1458 udiv x23, w2, x18 1459 //CHECK-ERROR: error: invalid operand for instruction 1460 //CHECK-ERROR-NEXT: udiv x23, w2, x18 1461 1462 lsl sp, x2, x4 1463 //CHECK-ERROR: error: invalid operand for instruction 1464 //CHECK-ERROR-NEXT: lsl sp, x2, x4 1465 1466 asr wsp, w3, w9 1467 //CHECK-ERROR: error: invalid operand for instruction 1468 //CHECK-ERROR-NEXT: asr wsp, w3, w9 1469 1470 //------------------------------------------------------------------------------ 1471 // Data Processing (3 sources) 1472 //------------------------------------------------------------------------------ 1473 1474 madd sp, x3, x9, x10 1475 //CHECK-ERROR: error: invalid operand for instruction 1476 //CHECK-ERROR-NEXT: madd sp, x3, x9, x10 1477 1478 //------------------------------------------------------------------------------ 1479 // Exception generation 1480 //------------------------------------------------------------------------------ 1481 svc #-1 1482 hlt #65536 1483 dcps4 #43 1484 dcps4 1485 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535] 1486 // CHECK-ERROR-NEXT: svc #-1 1487 // CHECK-ERROR-NEXT: ^ 1488 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535] 1489 // CHECK-ERROR-NEXT: hlt #65536 1490 // CHECK-ERROR-NEXT: ^ 1491 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}} 1492 // CHECK-ERROR-NEXT: dcps4 #43 1493 // CHECK-ERROR-NEXT: ^ 1494 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}} 1495 // CHECK-ERROR-NEXT: dcps4 1496 // CHECK-ERROR-NEXT: ^ 1497 1498 //------------------------------------------------------------------------------ 1499 // Extract (immediate) 1500 //------------------------------------------------------------------------------ 1501 1502 extr w2, w20, w30, #-1 1503 extr w9, w19, w20, #32 1504 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1505 // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1 1506 // CHECK-ERROR-NEXT: ^ 1507 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1508 // CHECK-ERROR-NEXT: extr w9, w19, w20, #32 1509 // CHECK-ERROR-NEXT: ^ 1510 1511 extr x10, x15, x20, #-1 1512 extr x20, x25, x30, #64 1513 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 1514 // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1 1515 // CHECK-ERROR-NEXT: ^ 1516 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 1517 // CHECK-ERROR-NEXT: extr x20, x25, x30, #64 1518 // CHECK-ERROR-NEXT: ^ 1519 1520 ror w9, w10, #32 1521 ror x10, x11, #64 1522 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 1523 // CHECK-ERROR-NEXT: ror w9, w10, #32 1524 // CHECK-ERROR-NEXT: ^ 1525 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 1526 // CHECK-ERROR-NEXT: ror x10, x11, #64 1527 // CHECK-ERROR-NEXT: ^ 1528 1529 //------------------------------------------------------------------------------ 1530 // Floating-point compare 1531 //------------------------------------------------------------------------------ 1532 1533 fcmp s3, d2 1534 // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0 1535 // CHECK-ERROR-ARM64: error: invalid operand for instruction 1536 // CHECK-ERROR-NEXT: fcmp s3, d2 1537 // CHECK-ERROR-NEXT: ^ 1538 1539 fcmp s9, #-0.0 1540 fcmp d3, #-0.0 1541 fcmp s1, #1.0 1542 fcmpe s30, #-0.0 1543 // CHECK-ERROR: error: expected floating-point constant #0.0 1544 // CHECK-ERROR-NEXT: fcmp s9, #-0.0 1545 // CHECK-ERROR-NEXT: ^ 1546 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0 1547 // CHECK-ERROR-NEXT: fcmp d3, #-0.0 1548 // CHECK-ERROR-NEXT: ^ 1549 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0 1550 // CHECK-ERROR-NEXT: fcmp s1, #1.0 1551 // CHECK-ERROR-NEXT: ^ 1552 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0 1553 // CHECK-ERROR-NEXT: fcmpe s30, #-0.0 1554 // CHECK-ERROR-NEXT: ^ 1555 1556 //------------------------------------------------------------------------------ 1557 // Floating-point conditional compare 1558 //------------------------------------------------------------------------------ 1559 1560 fccmp s19, s5, #-1, lt 1561 fccmp s20, s7, #16, hs 1562 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1563 // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt 1564 // CHECK-ERROR-NEXT: ^ 1565 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1566 // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs 1567 // CHECK-ERROR-NEXT: ^ 1568 1569 fccmp d19, d5, #-1, lt 1570 fccmp d20, d7, #16, hs 1571 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1572 // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt 1573 // CHECK-ERROR-NEXT: ^ 1574 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1575 // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs 1576 // CHECK-ERROR-NEXT: ^ 1577 1578 fccmpe s19, s5, #-1, lt 1579 fccmpe s20, s7, #16, hs 1580 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1581 // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt 1582 // CHECK-ERROR-NEXT: ^ 1583 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1584 // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs 1585 // CHECK-ERROR-NEXT: ^ 1586 1587 fccmpe d19, d5, #-1, lt 1588 fccmpe d20, d7, #16, hs 1589 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1590 // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt 1591 // CHECK-ERROR-NEXT: ^ 1592 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 1593 // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs 1594 // CHECK-ERROR-NEXT: ^ 1595 1596 //------------------------------------------------------------------------------ 1597 // Floating-point conditional compare 1598 //------------------------------------------------------------------------------ 1599 1600 fcsel q3, q20, q9, pl 1601 fcsel h9, h10, h11, mi 1602 fcsel b9, b10, b11, mi 1603 // CHECK-ERROR: error: invalid operand for instruction 1604 // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl 1605 // CHECK-ERROR-NEXT: ^ 1606 // CHECK-ERROR-NEXT: error: instruction requires: fullfp16 1607 // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi 1608 // CHECK-ERROR-NEXT: ^ 1609 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1610 // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi 1611 // CHECK-ERROR-NEXT: ^ 1612 1613 //------------------------------------------------------------------------------ 1614 // Floating-point data-processing (1 source) 1615 //------------------------------------------------------------------------------ 1616 1617 fmov d0, s3 1618 fcvt d0, d1 1619 // CHECK-ERROR: error: expected compatible register or floating-point constant 1620 // CHECK-ERROR-NEXT: fmov d0, s3 1621 // CHECK-ERROR-NEXT: ^ 1622 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1623 // CHECK-ERROR-NEXT: fcvt d0, d1 1624 // CHECK-ERROR-NEXT: ^ 1625 1626 1627 //------------------------------------------------------------------------------ 1628 // Floating-point data-processing (2 sources) 1629 //------------------------------------------------------------------------------ 1630 1631 fadd s0, d3, d7 1632 fmaxnm d3, s19, d12 1633 fnmul d1, d9, s18 1634 // CHECK-ERROR: error: invalid operand for instruction 1635 // CHECK-ERROR-NEXT: fadd s0, d3, d7 1636 // CHECK-ERROR-NEXT: ^ 1637 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1638 // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12 1639 // CHECK-ERROR-NEXT: ^ 1640 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1641 // CHECK-ERROR-NEXT: fnmul d1, d9, s18 1642 // CHECK-ERROR-NEXT: ^ 1643 1644 //------------------------------------------------------------------------------ 1645 // Floating-point data-processing (3 sources) 1646 //------------------------------------------------------------------------------ 1647 1648 fmadd b3, b4, b5, b6 1649 fmsub h1, h2, h3, h4 1650 fnmadd q3, q5, q6, q7 1651 fnmsub s2, s4, d5, h9 1652 // CHECK-ERROR: error: invalid operand for instruction 1653 // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6 1654 // CHECK-ERROR-NEXT: ^ 1655 // CHECK-ERROR-NEXT: error: instruction requires: fullfp16 1656 // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4 1657 // CHECK-ERROR-NEXT: ^ 1658 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1659 // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7 1660 // CHECK-ERROR-NEXT: ^ 1661 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1662 // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9 1663 // CHECK-ERROR-NEXT: ^ 1664 1665 //------------------------------------------------------------------------------ 1666 // Floating-point conditional compare 1667 //------------------------------------------------------------------------------ 1668 1669 fcvtzs w13, s31, #0 1670 fcvtzs w19, s20, #33 1671 fcvtzs wsp, s19, #14 1672 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32] 1673 // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0 1674 // CHECK-ERROR-NEXT: ^ 1675 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32] 1676 // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33 1677 // CHECK-ERROR-NEXT: ^ 1678 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1679 // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14 1680 // CHECK-ERROR-NEXT: ^ 1681 1682 fcvtzs x13, s31, #0 1683 fcvtzs x19, s20, #65 1684 fcvtzs sp, s19, #14 1685 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64] 1686 // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0 1687 // CHECK-ERROR-NEXT: ^ 1688 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64] 1689 // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65 1690 // CHECK-ERROR-NEXT: ^ 1691 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1692 // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14 1693 // CHECK-ERROR-NEXT: ^ 1694 1695 fcvtzu w13, s31, #0 1696 fcvtzu w19, s20, #33 1697 fcvtzu wsp, s19, #14 1698 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32] 1699 // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0 1700 // CHECK-ERROR-NEXT: ^ 1701 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32] 1702 // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33 1703 // CHECK-ERROR-NEXT: ^ 1704 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1705 // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14 1706 // CHECK-ERROR-NEXT: ^ 1707 1708 fcvtzu x13, s31, #0 1709 fcvtzu x19, s20, #65 1710 fcvtzu sp, s19, #14 1711 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64] 1712 // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0 1713 // CHECK-ERROR-NEXT: ^ 1714 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64] 1715 // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65 1716 // CHECK-ERROR-NEXT: ^ 1717 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1718 // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14 1719 // CHECK-ERROR-NEXT: ^ 1720 1721 scvtf w13, s31, #0 1722 scvtf w19, s20, #33 1723 scvtf wsp, s19, #14 1724 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1725 // CHECK-ERROR-NEXT: scvtf w13, s31, #0 1726 // CHECK-ERROR-NEXT: ^ 1727 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1728 // CHECK-ERROR-NEXT: scvtf w19, s20, #33 1729 // CHECK-ERROR-NEXT: ^ 1730 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1731 // CHECK-ERROR-NEXT: scvtf wsp, s19, #14 1732 // CHECK-ERROR-NEXT: ^ 1733 1734 scvtf x13, s31, #0 1735 scvtf x19, s20, #65 1736 scvtf sp, s19, #14 1737 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1738 // CHECK-ERROR-NEXT: scvtf x13, s31, #0 1739 // CHECK-ERROR-NEXT: ^ 1740 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1741 // CHECK-ERROR-NEXT: scvtf x19, s20, #65 1742 // CHECK-ERROR-NEXT: ^ 1743 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1744 // CHECK-ERROR-NEXT: scvtf sp, s19, #14 1745 // CHECK-ERROR-NEXT: ^ 1746 1747 ucvtf w13, s31, #0 1748 ucvtf w19, s20, #33 1749 ucvtf wsp, s19, #14 1750 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1751 // CHECK-ERROR-NEXT: ucvtf w13, s31, #0 1752 // CHECK-ERROR-NEXT: ^ 1753 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1754 // CHECK-ERROR-NEXT: ucvtf w19, s20, #33 1755 // CHECK-ERROR-NEXT: ^ 1756 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1757 // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14 1758 // CHECK-ERROR-NEXT: ^ 1759 1760 ucvtf x13, s31, #0 1761 ucvtf x19, s20, #65 1762 ucvtf sp, s19, #14 1763 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1764 // CHECK-ERROR-NEXT: ucvtf x13, s31, #0 1765 // CHECK-ERROR-NEXT: ^ 1766 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1767 // CHECK-ERROR-NEXT: ucvtf x19, s20, #65 1768 // CHECK-ERROR-NEXT: ^ 1769 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1770 // CHECK-ERROR-NEXT: ucvtf sp, s19, #14 1771 // CHECK-ERROR-NEXT: ^ 1772 1773 //------------------------------------------------------------------------------ 1774 // Floating-point immediate 1775 //------------------------------------------------------------------------------ 1776 ;; Exponent too large 1777 fmov d3, #0.0625 1778 fmov s2, #32.0 1779 // CHECK-ERROR: error: expected compatible register or floating-point constant 1780 // CHECK-ERROR-NEXT: fmov d3, #0.0625 1781 // CHECK-ERROR-NEXT: ^ 1782 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant 1783 // CHECK-ERROR-NEXT: fmov s2, #32.0 1784 // CHECK-ERROR-NEXT: ^ 1785 1786 ;; Fraction too precise 1787 fmov s9, #1.03125 1788 fmov s28, #1.96875 1789 // CHECK-ERROR: error: expected compatible register or floating-point constant 1790 // CHECK-ERROR-NEXT: fmov s9, #1.03125 1791 // CHECK-ERROR-NEXT: ^ 1792 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant 1793 // CHECK-ERROR-NEXT: fmov s28, #1.96875 1794 // CHECK-ERROR-NEXT: ^ 1795 1796 ;; No particular reason, but a striking omission 1797 fmov d0, #0.0 1798 // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant 1799 // CHECK-ERROR-AARCH64-NEXT: fmov d0, #0.0 1800 // CHECK-ERROR-AARCH64-NEXT: ^ 1801 1802 //------------------------------------------------------------------------------ 1803 // Floating-point <-> integer conversion 1804 //------------------------------------------------------------------------------ 1805 1806 fmov x3, v0.d[0] 1807 fmov v29.1d[1], x2 1808 fmov x7, v0.d[2] 1809 fcvtns sp, s5 1810 scvtf s6, wsp 1811 // CHECK-ERROR: error: expected lane specifier '[1]' 1812 // CHECK-ERROR-NEXT: fmov x3, v0.d[0] 1813 // CHECK-ERROR-NEXT: ^ 1814 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout 1815 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction 1816 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2 1817 // CHECK-ERROR-NEXT: ^ 1818 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout 1819 // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]' 1820 // CHECK-ERROR-NEXT: fmov x7, v0.d[2] 1821 // CHECK-ERROR-NEXT: ^ 1822 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1823 // CHECK-ERROR-NEXT: fcvtns sp, s5 1824 // CHECK-ERROR-NEXT: ^ 1825 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1826 // CHECK-ERROR-NEXT: scvtf s6, wsp 1827 // CHECK-ERROR-NEXT: ^ 1828 1829 //------------------------------------------------------------------------------ 1830 // Load-register (literal) 1831 //------------------------------------------------------------------------------ 1832 1833 ldr sp, some_label 1834 ldrsw w3, somewhere 1835 // CHECK-ERROR: error: invalid operand for instruction 1836 // CHECK-ERROR-NEXT: ldr sp, some_label 1837 // CHECK-ERROR-NEXT: ^ 1838 // CHECK-ERROR-NEXT: error: invalid operand for instruction 1839 // CHECK-ERROR-NEXT: ldrsw w3, somewhere 1840 // CHECK-ERROR-NEXT: ^ 1841 1842 ldrsw x2, #1048576 1843 ldr q0, #-1048580 1844 ldr x0, #2 1845 // CHECK-ERROR: error: expected label or encodable integer pc offset 1846 // CHECK-ERROR-NEXT: ldrsw x2, #1048576 1847 // CHECK-ERROR-NEXT: ^ 1848 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1849 // CHECK-ERROR-NEXT: ldr q0, #-1048580 1850 // CHECK-ERROR-NEXT: ^ 1851 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 1852 // CHECK-ERROR-NEXT: ldr x0, #2 1853 // CHECK-ERROR-NEXT: ^ 1854 1855 //------------------------------------------------------------------------------ 1856 // Load/store exclusive 1857 //------------------------------------------------------------------------------ 1858 1859 stxrb w2, w3, [x4, #20] 1860 stlxrh w10, w11, [w2] 1861 // CHECK-ERROR-AARCH64: error: expected '#0' 1862 // CHECK-ERROR-ARM64: error: index must be absent or #0 1863 // CHECK-ERROR-NEXT: stxrb w2, w3, [x4, #20] 1864 // CHECK-ERROR-NEXT: ^ 1865 // CHECK-ERROR: error: invalid operand for instruction 1866 // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2] 1867 // CHECK-ERROR-NEXT: ^ 1868 1869 stlxr x20, w21, [sp] 1870 // CHECK-ERROR: error: invalid operand for instruction 1871 // CHECK-ERROR-NEXT: stlxr x20, w21, [sp] 1872 // CHECK-ERROR-NEXT: ^ 1873 1874 ldxr sp, [sp] 1875 // CHECK-ERROR: error: invalid operand for instruction 1876 // CHECK-ERROR-NEXT: ldxr sp, [sp] 1877 // CHECK-ERROR-NEXT: ^ 1878 1879 stxp x1, x2, x3, [x4] 1880 // CHECK-ERROR: error: invalid operand for instruction 1881 // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4] 1882 // CHECK-ERROR-NEXT: ^ 1883 1884 stlxp w5, x1, w4, [x5] 1885 // CHECK-ERROR: error: invalid operand for instruction 1886 // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5] 1887 // CHECK-ERROR-NEXT: ^ 1888 1889 stlxp w17, w6, x7, [x22] 1890 // CHECK-ERROR: error: invalid operand for instruction 1891 // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22] 1892 // CHECK-ERROR-NEXT: ^ 1893 1894 //------------------------------------------------------------------------------ 1895 // Load/store (unscaled immediate) 1896 //------------------------------------------------------------------------------ 1897 1898 ldurb w2, [sp, #256] 1899 sturh w17, [x1, #256] 1900 ldursw x20, [x1, #256] 1901 ldur x12, [sp, #256] 1902 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 1903 // CHECK-ERROR-NEXT: ldurb w2, [sp, #256] 1904 // CHECK-ERROR-NEXT: ^ 1905 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1906 // CHECK-ERROR-NEXT: sturh w17, [x1, #256] 1907 // CHECK-ERROR-NEXT: ^ 1908 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1909 // CHECK-ERROR-NEXT: ldursw x20, [x1, #256] 1910 // CHECK-ERROR-NEXT: ^ 1911 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1912 // CHECK-ERROR-NEXT: ldur x12, [sp, #256] 1913 // CHECK-ERROR-NEXT: ^ 1914 1915 stur h2, [x2, #-257] 1916 stur b2, [x2, #-257] 1917 ldursb x9, [sp, #-257] 1918 ldur w2, [x30, #-257] 1919 stur q9, [x20, #-257] 1920 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 1921 // CHECK-ERROR-NEXT: stur h2, [x2, #-257] 1922 // CHECK-ERROR-NEXT: ^ 1923 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1924 // CHECK-ERROR-NEXT: stur b2, [x2, #-257] 1925 // CHECK-ERROR-NEXT: ^ 1926 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1927 // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257] 1928 // CHECK-ERROR-NEXT: ^ 1929 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1930 // CHECK-ERROR-NEXT: ldur w2, [x30, #-257] 1931 // CHECK-ERROR-NEXT: ^ 1932 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1933 // CHECK-ERROR-NEXT: stur q9, [x20, #-257] 1934 // CHECK-ERROR-NEXT: ^ 1935 1936 prfum pstl3strm, [xzr] 1937 // CHECK-ERROR: error: invalid operand for instruction 1938 // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr] 1939 // CHECK-ERROR-NEXT: ^ 1940 1941 //------------------------------------------------------------------------------ 1942 // Load-store register (immediate post-indexed) 1943 //------------------------------------------------------------------------------ 1944 ldr x3, [x4, #25], #0 1945 ldr x4, [x9, #0], #4 1946 // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760] 1947 // CHECK-ERROR-ARM64: error: invalid operand for instruction 1948 // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0 1949 // CHECK-ERROR-NEXT: ^ 1950 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction 1951 // CHECK-ERROR-AARCH64-NEXT: ldr x4, [x9, #0], #4 1952 // CHECK-ERROR-AARCH64-NEXT: ^ 1953 1954 strb w1, [x19], #256 1955 strb w9, [sp], #-257 1956 strh w1, [x19], #256 1957 strh w9, [sp], #-257 1958 str w1, [x19], #256 1959 str w9, [sp], #-257 1960 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 1961 // CHECK-ERROR-NEXT: strb w1, [x19], #256 1962 // CHECK-ERROR-NEXT: ^ 1963 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1964 // CHECK-ERROR-NEXT: strb w9, [sp], #-257 1965 // CHECK-ERROR-NEXT: ^ 1966 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1967 // CHECK-ERROR-NEXT: strh w1, [x19], #256 1968 // CHECK-ERROR-NEXT: ^ 1969 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1970 // CHECK-ERROR-NEXT: strh w9, [sp], #-257 1971 // CHECK-ERROR-NEXT: ^ 1972 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1973 // CHECK-ERROR-NEXT: str w1, [x19], #256 1974 // CHECK-ERROR-NEXT: ^ 1975 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1976 // CHECK-ERROR-NEXT: str w9, [sp], #-257 1977 // CHECK-ERROR-NEXT: ^ 1978 1979 ldrb w1, [x19], #256 1980 ldrb w9, [sp], #-257 1981 ldrh w1, [x19], #256 1982 ldrh w9, [sp], #-257 1983 ldr w1, [x19], #256 1984 ldr w9, [sp], #-257 1985 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 1986 // CHECK-ERROR-NEXT: ldrb w1, [x19], #256 1987 // CHECK-ERROR-NEXT: ^ 1988 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1989 // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257 1990 // CHECK-ERROR-NEXT: ^ 1991 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1992 // CHECK-ERROR-NEXT: ldrh w1, [x19], #256 1993 // CHECK-ERROR-NEXT: ^ 1994 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1995 // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257 1996 // CHECK-ERROR-NEXT: ^ 1997 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 1998 // CHECK-ERROR-NEXT: ldr w1, [x19], #256 1999 // CHECK-ERROR-NEXT: ^ 2000 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2001 // CHECK-ERROR-NEXT: ldr w9, [sp], #-257 2002 // CHECK-ERROR-NEXT: ^ 2003 2004 ldrsb x2, [x3], #256 2005 ldrsb x22, [x13], #-257 2006 ldrsh x2, [x3], #256 2007 ldrsh x22, [x13], #-257 2008 ldrsw x2, [x3], #256 2009 ldrsw x22, [x13], #-257 2010 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2011 // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256 2012 // CHECK-ERROR-NEXT: ^ 2013 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2014 // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257 2015 // CHECK-ERROR-NEXT: ^ 2016 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2017 // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256 2018 // CHECK-ERROR-NEXT: ^ 2019 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2020 // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257 2021 // CHECK-ERROR-NEXT: ^ 2022 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2023 // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256 2024 // CHECK-ERROR-NEXT: ^ 2025 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2026 // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257 2027 // CHECK-ERROR-NEXT: ^ 2028 2029 ldrsb w2, [x3], #256 2030 ldrsb w22, [x13], #-257 2031 ldrsh w2, [x3], #256 2032 ldrsh w22, [x13], #-257 2033 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2034 // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256 2035 // CHECK-ERROR-NEXT: ^ 2036 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2037 // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257 2038 // CHECK-ERROR-NEXT: ^ 2039 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2040 // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256 2041 // CHECK-ERROR-NEXT: ^ 2042 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2043 // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257 2044 // CHECK-ERROR-NEXT: ^ 2045 2046 str b3, [x3], #256 2047 str b3, [x13], #-257 2048 str h3, [x3], #256 2049 str h3, [x13], #-257 2050 str s3, [x3], #256 2051 str s3, [x13], #-257 2052 str d3, [x3], #256 2053 str d3, [x13], #-257 2054 str q3, [x3], #256 2055 str q3, [x13], #-257 2056 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2057 // CHECK-ERROR-NEXT: str b3, [x3], #256 2058 // CHECK-ERROR-NEXT: ^ 2059 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2060 // CHECK-ERROR-NEXT: str b3, [x13], #-257 2061 // CHECK-ERROR-NEXT: ^ 2062 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2063 // CHECK-ERROR-NEXT: str h3, [x3], #256 2064 // CHECK-ERROR-NEXT: ^ 2065 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2066 // CHECK-ERROR-NEXT: str h3, [x13], #-257 2067 // CHECK-ERROR-NEXT: ^ 2068 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2069 // CHECK-ERROR-NEXT: str s3, [x3], #256 2070 // CHECK-ERROR-NEXT: ^ 2071 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2072 // CHECK-ERROR-NEXT: str s3, [x13], #-257 2073 // CHECK-ERROR-NEXT: ^ 2074 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2075 // CHECK-ERROR-NEXT: str d3, [x3], #256 2076 // CHECK-ERROR-NEXT: ^ 2077 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2078 // CHECK-ERROR-NEXT: str d3, [x13], #-257 2079 // CHECK-ERROR-NEXT: ^ 2080 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2081 // CHECK-ERROR-NEXT: str q3, [x3], #256 2082 // CHECK-ERROR-NEXT: ^ 2083 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2084 // CHECK-ERROR-NEXT: str q3, [x13], #-257 2085 // CHECK-ERROR-NEXT: ^ 2086 2087 ldr b3, [x3], #256 2088 ldr b3, [x13], #-257 2089 ldr h3, [x3], #256 2090 ldr h3, [x13], #-257 2091 ldr s3, [x3], #256 2092 ldr s3, [x13], #-257 2093 ldr d3, [x3], #256 2094 ldr d3, [x13], #-257 2095 ldr q3, [x3], #256 2096 ldr q3, [x13], #-257 2097 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2098 // CHECK-ERROR-NEXT: ldr b3, [x3], #256 2099 // CHECK-ERROR-NEXT: ^ 2100 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2101 // CHECK-ERROR-NEXT: ldr b3, [x13], #-257 2102 // CHECK-ERROR-NEXT: ^ 2103 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2104 // CHECK-ERROR-NEXT: ldr h3, [x3], #256 2105 // CHECK-ERROR-NEXT: ^ 2106 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2107 // CHECK-ERROR-NEXT: ldr h3, [x13], #-257 2108 // CHECK-ERROR-NEXT: ^ 2109 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2110 // CHECK-ERROR-NEXT: ldr s3, [x3], #256 2111 // CHECK-ERROR-NEXT: ^ 2112 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2113 // CHECK-ERROR-NEXT: ldr s3, [x13], #-257 2114 // CHECK-ERROR-NEXT: ^ 2115 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2116 // CHECK-ERROR-NEXT: ldr d3, [x3], #256 2117 // CHECK-ERROR-NEXT: ^ 2118 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2119 // CHECK-ERROR-NEXT: ldr d3, [x13], #-257 2120 // CHECK-ERROR-NEXT: ^ 2121 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2122 // CHECK-ERROR-NEXT: ldr q3, [x3], #256 2123 // CHECK-ERROR-NEXT: ^ 2124 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2125 // CHECK-ERROR-NEXT: ldr q3, [x13], #-257 2126 // CHECK-ERROR-NEXT: ^ 2127 2128 //------------------------------------------------------------------------------ 2129 // Load-store register (immediate pre-indexed) 2130 //------------------------------------------------------------------------------ 2131 2132 ldr x3, [x4]! 2133 // CHECK-ERROR: error: 2134 // CHECK-ERROR-NEXT: ldr x3, [x4]! 2135 // CHECK-ERROR-NEXT: ^ 2136 2137 strb w1, [x19, #256]! 2138 strb w9, [sp, #-257]! 2139 strh w1, [x19, #256]! 2140 strh w9, [sp, #-257]! 2141 str w1, [x19, #256]! 2142 str w9, [sp, #-257]! 2143 // CHECK-ERROR: error: invalid operand for instruction 2144 // CHECK-ERROR-NEXT: strb w1, [x19, #256]! 2145 // CHECK-ERROR-NEXT: ^ 2146 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2147 // CHECK-ERROR-NEXT: strb w9, [sp, #-257]! 2148 // CHECK-ERROR-NEXT: ^ 2149 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2150 // CHECK-ERROR-NEXT: strh w1, [x19, #256]! 2151 // CHECK-ERROR-NEXT: ^ 2152 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2153 // CHECK-ERROR-NEXT: strh w9, [sp, #-257]! 2154 // CHECK-ERROR-NEXT: ^ 2155 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2156 // CHECK-ERROR-NEXT: str w1, [x19, #256]! 2157 // CHECK-ERROR-NEXT: ^ 2158 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2159 // CHECK-ERROR-NEXT: str w9, [sp, #-257]! 2160 // CHECK-ERROR-NEXT: ^ 2161 2162 ldrb w1, [x19, #256]! 2163 ldrb w9, [sp, #-257]! 2164 ldrh w1, [x19, #256]! 2165 ldrh w9, [sp, #-257]! 2166 ldr w1, [x19, #256]! 2167 ldr w9, [sp, #-257]! 2168 // CHECK-ERROR: error: invalid operand for instruction 2169 // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]! 2170 // CHECK-ERROR-NEXT: ^ 2171 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2172 // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]! 2173 // CHECK-ERROR-NEXT: ^ 2174 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2175 // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]! 2176 // CHECK-ERROR-NEXT: ^ 2177 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2178 // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]! 2179 // CHECK-ERROR-NEXT: ^ 2180 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2181 // CHECK-ERROR-NEXT: ldr w1, [x19, #256]! 2182 // CHECK-ERROR-NEXT: ^ 2183 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2184 // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]! 2185 // CHECK-ERROR-NEXT: ^ 2186 2187 ldrsb x2, [x3, #256]! 2188 ldrsb x22, [x13, #-257]! 2189 ldrsh x2, [x3, #256]! 2190 ldrsh x22, [x13, #-257]! 2191 ldrsw x2, [x3, #256]! 2192 ldrsw x22, [x13, #-257]! 2193 // CHECK-ERROR: error: invalid operand for instruction 2194 // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]! 2195 // CHECK-ERROR-NEXT: ^ 2196 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2197 // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]! 2198 // CHECK-ERROR-NEXT: ^ 2199 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2200 // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]! 2201 // CHECK-ERROR-NEXT: ^ 2202 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2203 // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]! 2204 // CHECK-ERROR-NEXT: ^ 2205 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2206 // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]! 2207 // CHECK-ERROR-NEXT: ^ 2208 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2209 // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]! 2210 // CHECK-ERROR-NEXT: ^ 2211 2212 ldrsb w2, [x3, #256]! 2213 ldrsb w22, [x13, #-257]! 2214 ldrsh w2, [x3, #256]! 2215 ldrsh w22, [x13, #-257]! 2216 // CHECK-ERROR: error: invalid operand for instruction 2217 // CHECK-ERROR-NEXT: ldrsb w2, [x3, #256]! 2218 // CHECK-ERROR-NEXT: ^ 2219 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2220 // CHECK-ERROR-NEXT: ldrsb w22, [x13, #-257]! 2221 // CHECK-ERROR-NEXT: ^ 2222 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2223 // CHECK-ERROR-NEXT: ldrsh w2, [x3, #256]! 2224 // CHECK-ERROR-NEXT: ^ 2225 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2226 // CHECK-ERROR-NEXT: ldrsh w22, [x13, #-257]! 2227 // CHECK-ERROR-NEXT: ^ 2228 2229 str b3, [x3, #256]! 2230 str b3, [x13, #-257]! 2231 str h3, [x3, #256]! 2232 str h3, [x13, #-257]! 2233 str s3, [x3, #256]! 2234 str s3, [x13, #-257]! 2235 str d3, [x3, #256]! 2236 str d3, [x13, #-257]! 2237 // CHECK-ERROR: error: invalid operand for instruction 2238 // CHECK-ERROR-NEXT: str b3, [x3, #256]! 2239 // CHECK-ERROR-NEXT: ^ 2240 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2241 // CHECK-ERROR-NEXT: str b3, [x13, #-257]! 2242 // CHECK-ERROR-NEXT: ^ 2243 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2244 // CHECK-ERROR-NEXT: str h3, [x3, #256]! 2245 // CHECK-ERROR-NEXT: ^ 2246 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2247 // CHECK-ERROR-NEXT: str h3, [x13, #-257]! 2248 // CHECK-ERROR-NEXT: ^ 2249 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2250 // CHECK-ERROR-NEXT: str s3, [x3, #256]! 2251 // CHECK-ERROR-NEXT: ^ 2252 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2253 // CHECK-ERROR-NEXT: str s3, [x13, #-257]! 2254 // CHECK-ERROR-NEXT: ^ 2255 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2256 // CHECK-ERROR-NEXT: str d3, [x3, #256]! 2257 // CHECK-ERROR-NEXT: ^ 2258 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2259 // CHECK-ERROR-NEXT: str d3, [x13, #-257]! 2260 // CHECK-ERROR-NEXT: ^ 2261 2262 ldr b3, [x3, #256]! 2263 ldr b3, [x13, #-257]! 2264 ldr h3, [x3, #256]! 2265 ldr h3, [x13, #-257]! 2266 ldr s3, [x3, #256]! 2267 ldr s3, [x13, #-257]! 2268 ldr d3, [x3, #256]! 2269 ldr d3, [x13, #-257]! 2270 // CHECK-ERROR: error: invalid operand for instruction 2271 // CHECK-ERROR-NEXT: ldr b3, [x3, #256]! 2272 // CHECK-ERROR-NEXT: ^ 2273 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2274 // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]! 2275 // CHECK-ERROR-NEXT: ^ 2276 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2277 // CHECK-ERROR-NEXT: ldr h3, [x3, #256]! 2278 // CHECK-ERROR-NEXT: ^ 2279 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2280 // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]! 2281 // CHECK-ERROR-NEXT: ^ 2282 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2283 // CHECK-ERROR-NEXT: ldr s3, [x3, #256]! 2284 // CHECK-ERROR-NEXT: ^ 2285 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2286 // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]! 2287 // CHECK-ERROR-NEXT: ^ 2288 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2289 // CHECK-ERROR-NEXT: ldr d3, [x3, #256]! 2290 // CHECK-ERROR-NEXT: ^ 2291 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2292 // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]! 2293 // CHECK-ERROR-NEXT: ^ 2294 2295 //------------------------------------------------------------------------------ 2296 // Load/store (unprivileged) 2297 //------------------------------------------------------------------------------ 2298 2299 ldtrb w2, [sp, #256] 2300 sttrh w17, [x1, #256] 2301 ldtrsw x20, [x1, #256] 2302 ldtr x12, [sp, #256] 2303 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2304 // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256] 2305 // CHECK-ERROR-NEXT: ^ 2306 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2307 // CHECK-ERROR-NEXT: sttrh w17, [x1, #256] 2308 // CHECK-ERROR-NEXT: ^ 2309 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2310 // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256] 2311 // CHECK-ERROR-NEXT: ^ 2312 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2313 // CHECK-ERROR-NEXT: ldtr x12, [sp, #256] 2314 // CHECK-ERROR-NEXT: ^ 2315 2316 sttr h2, [x2, #-257] 2317 sttr b2, [x2, #-257] 2318 ldtrsb x9, [sp, #-257] 2319 ldtr w2, [x30, #-257] 2320 sttr q9, [x20, #-257] 2321 // CHECK-ERROR: error: invalid operand for instruction 2322 // CHECK-ERROR-NEXT: sttr h2, [x2, #-257] 2323 // CHECK-ERROR-NEXT: ^ 2324 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2325 // CHECK-ERROR-NEXT: sttr b2, [x2, #-257] 2326 // CHECK-ERROR-NEXT: ^ 2327 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2328 // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257] 2329 // CHECK-ERROR-NEXT: ^ 2330 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2331 // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257] 2332 // CHECK-ERROR-NEXT: ^ 2333 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2334 // CHECK-ERROR-NEXT: sttr q9, [x20, #-257] 2335 // CHECK-ERROR-NEXT: ^ 2336 2337 2338 //------------------------------------------------------------------------------ 2339 // Load/store (unsigned immediate) 2340 //------------------------------------------------------------------------------ 2341 2342 //// Out of range immediates 2343 ldr q0, [x11, #65536] 2344 ldr x0, [sp, #32768] 2345 ldr w0, [x4, #16384] 2346 ldrh w2, [x21, #8192] 2347 ldrb w3, [x12, #4096] 2348 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255] 2349 // CHECK-ERROR-NEXT: ldr q0, [x11, #65536] 2350 // CHECK-ERROR-NEXT: ^ 2351 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2352 // CHECK-ERROR-NEXT: ldr x0, [sp, #32768] 2353 // CHECK-ERROR-NEXT: ^ 2354 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2355 // CHECK-ERROR-NEXT: ldr w0, [x4, #16384] 2356 // CHECK-ERROR-NEXT: ^ 2357 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2358 // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192] 2359 // CHECK-ERROR-NEXT: ^ 2360 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2361 // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096] 2362 // CHECK-ERROR-NEXT: ^ 2363 2364 //// Misaligned addresses 2365 ldr w0, [x0, #2] 2366 ldrsh w2, [x0, #123] 2367 str q0, [x0, #8] 2368 // CHECK-ERROR-AARCH64: error: too few operands for instruction 2369 // CHECK-ERROR-AARCH64-NEXT: ldr w0, [x0, #2] 2370 // CHECK-ERROR-AARCH64-NEXT: ^ 2371 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction 2372 // CHECK-ERROR-AARCH64-NEXT: ldrsh w2, [x0, #123] 2373 // CHECK-ERROR-AARCH64-NEXT: ^ 2374 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction 2375 // CHECK-ERROR-AARCH64-NEXT: str q0, [x0, #8] 2376 // CHECK-ERROR-AARCH64-NEXT: ^ 2377 2378 //// 32-bit addresses 2379 ldr w0, [w20] 2380 ldrsh x3, [wsp] 2381 // CHECK-ERROR: error: invalid operand for instruction 2382 // CHECK-ERROR-NEXT: ldr w0, [w20] 2383 // CHECK-ERROR-NEXT: ^ 2384 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2385 // CHECK-ERROR-NEXT: ldrsh x3, [wsp] 2386 // CHECK-ERROR-NEXT: ^ 2387 2388 //// Store things 2389 strb w0, [wsp] 2390 strh w31, [x23, #1] 2391 str x5, [x22, #12] 2392 str w7, [x12, #16384] 2393 // CHECK-ERROR: error: invalid operand for instruction 2394 // CHECK-ERROR-NEXT: strb w0, [wsp] 2395 // CHECK-ERROR-NEXT: ^ 2396 // CHECK-ERROR-AARCH64: error: invalid operand for instruction 2397 // CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1] 2398 // CHECK-ERROR-AARCH64-NEXT: ^ 2399 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction 2400 // CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12] 2401 // CHECK-ERROR-AARCH64-NEXT: ^ 2402 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255] 2403 // CHECK-ERROR-NEXT: str w7, [x12, #16384] 2404 // CHECK-ERROR-NEXT: ^ 2405 2406 //// Bad PRFMs 2407 prfm #-1, [sp] 2408 prfm #32, [sp, #8] 2409 prfm pldl1strm, [w3, #8] 2410 prfm wibble, [sp] 2411 // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction 2412 // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected 2413 // CHECK-ERROR-NEXT: prfm #-1, [sp] 2414 // CHECK-ERROR-NEXT: ^ 2415 // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction 2416 // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected 2417 // CHECK-ERROR-NEXT: prfm #32, [sp, #8] 2418 // CHECK-ERROR-NEXT: ^ 2419 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2420 // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8] 2421 // CHECK-ERROR-NEXT: ^ 2422 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised 2423 // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected 2424 // CHECK-ERROR-NEXT: prfm wibble, [sp] 2425 // CHECK-ERROR-NEXT: ^ 2426 2427 //------------------------------------------------------------------------------ 2428 // Load/store register (register offset) 2429 //------------------------------------------------------------------------------ 2430 2431 ldr w3, [xzr, x3] 2432 ldr w4, [x0, x4, lsl] 2433 ldr w9, [x5, x5, uxtw] 2434 ldr w10, [x6, x9, sxtw #2] 2435 ldr w11, [x7, w2, lsl #2] 2436 ldr w12, [x8, w1, sxtx] 2437 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2438 // CHECK-ERROR-NEXT: ldr w3, [xzr, x3] 2439 // CHECK-ERROR-NEXT: ^ 2440 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier 2441 // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl] 2442 // CHECK-ERROR-NEXT: ^ 2443 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2 2444 // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw] 2445 // CHECK-ERROR-NEXT: ^ 2446 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2 2447 // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2] 2448 // CHECK-ERROR-NEXT: ^ 2449 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2 2450 // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2] 2451 // CHECK-ERROR-NEXT: ^ 2452 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2 2453 // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx] 2454 // CHECK-ERROR-NEXT: ^ 2455 2456 ldrsb w9, [x4, x2, lsl #-1] 2457 strb w9, [x4, x2, lsl #1] 2458 // CHECK-ERROR-NEXT: error: expected integer shift amount 2459 // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1] 2460 // CHECK-ERROR-NEXT: ^ 2461 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 2462 // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1] 2463 // CHECK-ERROR-NEXT: ^ 2464 2465 ldrsh w9, [x4, x2, lsl #-1] 2466 ldr h13, [x4, w2, uxtw #2] 2467 // CHECK-ERROR-NEXT: error: expected integer shift amount 2468 // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1] 2469 // CHECK-ERROR-NEXT: ^ 2470 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1 2471 // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2] 2472 // CHECK-ERROR-NEXT: ^ 2473 2474 str w9, [x5, w9, sxtw #-1] 2475 str s3, [sp, w9, uxtw #1] 2476 ldrsw x9, [x15, x4, sxtx #3] 2477 // CHECK-ERROR-NEXT: error: expected integer shift amount 2478 // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1] 2479 // CHECK-ERROR-NEXT: ^ 2480 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2 2481 // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1] 2482 // CHECK-ERROR-NEXT: ^ 2483 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2 2484 // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3] 2485 // CHECK-ERROR-NEXT: ^ 2486 2487 str xzr, [x5, x9, sxtx #-1] 2488 prfm pldl3keep, [sp, x20, lsl #2] 2489 ldr d3, [x20, wzr, uxtw #4] 2490 // CHECK-ERROR-NEXT: error: expected integer shift amount 2491 // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1] 2492 // CHECK-ERROR-NEXT: ^ 2493 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3 2494 // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2] 2495 // CHECK-ERROR-NEXT: ^ 2496 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3 2497 // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4] 2498 // CHECK-ERROR-NEXT: ^ 2499 2500 ldr q5, [sp, x2, lsl #-1] 2501 ldr q10, [x20, w4, uxtw #2] 2502 str q21, [x20, w4, uxtw #5] 2503 // CHECK-ERROR-NEXT: error: expected integer shift amount 2504 // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1] 2505 // CHECK-ERROR-NEXT: ^ 2506 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4 2507 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4 2508 // CHECK-ERROR-NEXT: ldr q10, [x20, w4, uxtw #2] 2509 // CHECK-ERROR-NEXT: ^ 2510 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4 2511 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4 2512 // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5] 2513 // CHECK-ERROR-NEXT: ^ 2514 2515 //------------------------------------------------------------------------------ 2516 // Load/store register pair (offset) 2517 //------------------------------------------------------------------------------ 2518 ldp w3, w2, [x4, #1] 2519 stp w1, w2, [x3, #253] 2520 stp w9, w10, [x5, #256] 2521 ldp w11, w12, [x9, #-260] 2522 stp wsp, w9, [sp] 2523 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2524 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1] 2525 // CHECK-ERROR-NEXT: ^ 2526 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2527 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253] 2528 // CHECK-ERROR-NEXT: ^ 2529 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2530 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256] 2531 // CHECK-ERROR-NEXT: ^ 2532 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2533 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260] 2534 // CHECK-ERROR-NEXT: ^ 2535 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2536 // CHECK-ERROR-NEXT: stp wsp, w9, [sp] 2537 // CHECK-ERROR-NEXT: ^ 2538 2539 ldpsw x9, x2, [sp, #2] 2540 ldpsw x1, x2, [x10, #256] 2541 ldpsw x3, x4, [x11, #-260] 2542 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2543 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2] 2544 // CHECK-ERROR-NEXT: ^ 2545 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2546 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256] 2547 // CHECK-ERROR-NEXT: ^ 2548 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2549 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260] 2550 // CHECK-ERROR-NEXT: ^ 2551 2552 ldp x2, x5, [sp, #4] 2553 ldp x5, x6, [x9, #512] 2554 stp x7, x8, [x10, #-520] 2555 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2556 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4] 2557 // CHECK-ERROR-NEXT: ^ 2558 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2559 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512] 2560 // CHECK-ERROR-NEXT: ^ 2561 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2562 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520] 2563 // CHECK-ERROR-NEXT: ^ 2564 2565 ldp sp, x3, [x10] 2566 stp x3, sp, [x9] 2567 // CHECK-ERROR: error: invalid operand for instruction 2568 // CHECK-ERROR-NEXT: ldp sp, x3, [x10] 2569 // CHECK-ERROR-NEXT: ^ 2570 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2571 // CHECK-ERROR-NEXT: stp x3, sp, [x9] 2572 // CHECK-ERROR-NEXT: ^ 2573 2574 stp s3, s5, [sp, #-2] 2575 ldp s6, s26, [x4, #-260] 2576 stp s13, s19, [x5, #256] 2577 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2578 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2] 2579 // CHECK-ERROR-NEXT: ^ 2580 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2581 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260] 2582 // CHECK-ERROR-NEXT: ^ 2583 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2584 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256] 2585 // CHECK-ERROR-NEXT: ^ 2586 2587 ldp d3, d4, [xzr] 2588 ldp d5, d6, [x0, #512] 2589 stp d7, d8, [x0, #-520] 2590 // CHECK-ERROR: error: invalid operand for instruction 2591 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr] 2592 // CHECK-ERROR-NEXT: ^ 2593 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2594 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512] 2595 // CHECK-ERROR-NEXT: ^ 2596 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2597 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520] 2598 // CHECK-ERROR-NEXT: ^ 2599 2600 ldp d3, q2, [sp] 2601 ldp q3, q5, [sp, #8] 2602 stp q20, q25, [x5, #1024] 2603 ldp q30, q15, [x23, #-1040] 2604 // CHECK-ERROR: error: invalid operand for instruction 2605 // CHECK-ERROR-NEXT: ldp d3, q2, [sp] 2606 // CHECK-ERROR-NEXT: ^ 2607 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2608 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8] 2609 // CHECK-ERROR-NEXT: ^ 2610 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2611 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024] 2612 // CHECK-ERROR-NEXT: ^ 2613 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2614 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040] 2615 // CHECK-ERROR-NEXT: ^ 2616 2617 //------------------------------------------------------------------------------ 2618 // Load/store register pair (post-indexed) 2619 //------------------------------------------------------------------------------ 2620 2621 ldp w3, w2, [x4], #1 2622 stp w1, w2, [x3], #253 2623 stp w9, w10, [x5], #256 2624 ldp w11, w12, [x9], #-260 2625 stp wsp, w9, [sp], #0 2626 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2627 // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1 2628 // CHECK-ERROR-NEXT: ^ 2629 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2630 // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253 2631 // CHECK-ERROR-NEXT: ^ 2632 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2633 // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256 2634 // CHECK-ERROR-NEXT: ^ 2635 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2636 // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260 2637 // CHECK-ERROR-NEXT: ^ 2638 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2639 // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0 2640 // CHECK-ERROR-NEXT: ^ 2641 2642 ldpsw x9, x2, [sp], #2 2643 ldpsw x1, x2, [x10], #256 2644 ldpsw x3, x4, [x11], #-260 2645 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2646 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2 2647 // CHECK-ERROR-NEXT: ^ 2648 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2649 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256 2650 // CHECK-ERROR-NEXT: ^ 2651 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2652 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260 2653 // CHECK-ERROR-NEXT: ^ 2654 2655 ldp x2, x5, [sp], #4 2656 ldp x5, x6, [x9], #512 2657 stp x7, x8, [x10], #-520 2658 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2659 // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4 2660 // CHECK-ERROR-NEXT: ^ 2661 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2662 // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512 2663 // CHECK-ERROR-NEXT: ^ 2664 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2665 // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520 2666 // CHECK-ERROR-NEXT: ^ 2667 2668 ldp sp, x3, [x10], #0 2669 stp x3, sp, [x9], #0 2670 // CHECK-ERROR: error: invalid operand for instruction 2671 // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0 2672 // CHECK-ERROR-NEXT: ^ 2673 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2674 // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0 2675 // CHECK-ERROR-NEXT: ^ 2676 2677 stp s3, s5, [sp], #-2 2678 ldp s6, s26, [x4], #-260 2679 stp s13, s19, [x5], #256 2680 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2681 // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2 2682 // CHECK-ERROR-NEXT: ^ 2683 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2684 // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260 2685 // CHECK-ERROR-NEXT: ^ 2686 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2687 // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256 2688 // CHECK-ERROR-NEXT: ^ 2689 2690 ldp d3, d4, [xzr], #0 2691 ldp d5, d6, [x0], #512 2692 stp d7, d8, [x0], #-520 2693 // CHECK-ERROR: error: invalid operand for instruction 2694 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0 2695 // CHECK-ERROR-NEXT: ^ 2696 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2697 // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512 2698 // CHECK-ERROR-NEXT: ^ 2699 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2700 // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520 2701 // CHECK-ERROR-NEXT: ^ 2702 2703 ldp d3, q2, [sp], #0 2704 ldp q3, q5, [sp], #8 2705 stp q20, q25, [x5], #1024 2706 ldp q30, q15, [x23], #-1040 2707 // CHECK-ERROR: error: invalid operand for instruction 2708 // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0 2709 // CHECK-ERROR-NEXT: ^ 2710 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2711 // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8 2712 // CHECK-ERROR-NEXT: ^ 2713 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2714 // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024 2715 // CHECK-ERROR-NEXT: ^ 2716 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2717 // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040 2718 // CHECK-ERROR-NEXT: ^ 2719 2720 //------------------------------------------------------------------------------ 2721 // Load/store register pair (pre-indexed) 2722 //------------------------------------------------------------------------------ 2723 2724 ldp w3, w2, [x4, #1]! 2725 stp w1, w2, [x3, #253]! 2726 stp w9, w10, [x5, #256]! 2727 ldp w11, w12, [x9, #-260]! 2728 stp wsp, w9, [sp, #0]! 2729 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2730 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]! 2731 // CHECK-ERROR-NEXT: ^ 2732 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2733 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]! 2734 // CHECK-ERROR-NEXT: ^ 2735 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2736 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]! 2737 // CHECK-ERROR-NEXT: ^ 2738 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2739 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]! 2740 // CHECK-ERROR-NEXT: ^ 2741 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2742 // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]! 2743 // CHECK-ERROR-NEXT: ^ 2744 2745 ldpsw x9, x2, [sp, #2]! 2746 ldpsw x1, x2, [x10, #256]! 2747 ldpsw x3, x4, [x11, #-260]! 2748 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2749 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]! 2750 // CHECK-ERROR-NEXT: ^ 2751 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2752 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]! 2753 // CHECK-ERROR-NEXT: ^ 2754 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2755 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]! 2756 // CHECK-ERROR-NEXT: ^ 2757 2758 ldp x2, x5, [sp, #4]! 2759 ldp x5, x6, [x9, #512]! 2760 stp x7, x8, [x10, #-520]! 2761 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2762 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]! 2763 // CHECK-ERROR-NEXT: ^ 2764 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2765 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]! 2766 // CHECK-ERROR-NEXT: ^ 2767 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2768 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]! 2769 // CHECK-ERROR-NEXT: ^ 2770 2771 ldp sp, x3, [x10, #0]! 2772 stp x3, sp, [x9, #0]! 2773 // CHECK-ERROR: error: invalid operand for instruction 2774 // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]! 2775 // CHECK-ERROR-NEXT: ^ 2776 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2777 // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]! 2778 // CHECK-ERROR-NEXT: ^ 2779 2780 stp s3, s5, [sp, #-2]! 2781 ldp s6, s26, [x4, #-260]! 2782 stp s13, s19, [x5, #256]! 2783 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2784 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]! 2785 // CHECK-ERROR-NEXT: ^ 2786 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2787 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]! 2788 // CHECK-ERROR-NEXT: ^ 2789 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2790 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]! 2791 // CHECK-ERROR-NEXT: ^ 2792 2793 ldp d3, d4, [xzr, #0]! 2794 ldp d5, d6, [x0, #512]! 2795 stp d7, d8, [x0, #-520]! 2796 // CHECK-ERROR: error: invalid operand for instruction 2797 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]! 2798 // CHECK-ERROR-NEXT: ^ 2799 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2800 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]! 2801 // CHECK-ERROR-NEXT: ^ 2802 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2803 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]! 2804 // CHECK-ERROR-NEXT: ^ 2805 2806 ldp d3, q2, [sp, #0]! 2807 ldp q3, q5, [sp, #8]! 2808 stp q20, q25, [x5, #1024]! 2809 ldp q30, q15, [x23, #-1040]! 2810 // CHECK-ERROR: error: invalid operand for instruction 2811 // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]! 2812 // CHECK-ERROR-NEXT: ^ 2813 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2814 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]! 2815 // CHECK-ERROR-NEXT: ^ 2816 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2817 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]! 2818 // CHECK-ERROR-NEXT: ^ 2819 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2820 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]! 2821 // CHECK-ERROR-NEXT: ^ 2822 2823 //------------------------------------------------------------------------------ 2824 // Load/store register pair (offset) 2825 //------------------------------------------------------------------------------ 2826 ldnp w3, w2, [x4, #1] 2827 stnp w1, w2, [x3, #253] 2828 stnp w9, w10, [x5, #256] 2829 ldnp w11, w12, [x9, #-260] 2830 stnp wsp, w9, [sp] 2831 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2832 // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1] 2833 // CHECK-ERROR-NEXT: ^ 2834 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2835 // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253] 2836 // CHECK-ERROR-NEXT: ^ 2837 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2838 // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256] 2839 // CHECK-ERROR-NEXT: ^ 2840 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2841 // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260] 2842 // CHECK-ERROR-NEXT: ^ 2843 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2844 // CHECK-ERROR-NEXT: stnp wsp, w9, [sp] 2845 // CHECK-ERROR-NEXT: ^ 2846 2847 ldnp x2, x5, [sp, #4] 2848 ldnp x5, x6, [x9, #512] 2849 stnp x7, x8, [x10, #-520] 2850 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2851 // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4] 2852 // CHECK-ERROR-NEXT: ^ 2853 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2854 // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512] 2855 // CHECK-ERROR-NEXT: ^ 2856 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2857 // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520] 2858 // CHECK-ERROR-NEXT: ^ 2859 2860 ldnp sp, x3, [x10] 2861 stnp x3, sp, [x9] 2862 // CHECK-ERROR: error: invalid operand for instruction 2863 // CHECK-ERROR-NEXT: ldnp sp, x3, [x10] 2864 // CHECK-ERROR-NEXT: ^ 2865 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2866 // CHECK-ERROR-NEXT: stnp x3, sp, [x9] 2867 // CHECK-ERROR-NEXT: ^ 2868 2869 stnp s3, s5, [sp, #-2] 2870 ldnp s6, s26, [x4, #-260] 2871 stnp s13, s19, [x5, #256] 2872 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2873 // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2] 2874 // CHECK-ERROR-NEXT: ^ 2875 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2876 // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260] 2877 // CHECK-ERROR-NEXT: ^ 2878 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252] 2879 // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256] 2880 // CHECK-ERROR-NEXT: ^ 2881 2882 ldnp d3, d4, [xzr] 2883 ldnp d5, d6, [x0, #512] 2884 stnp d7, d8, [x0, #-520] 2885 // CHECK-ERROR: error: invalid operand for instruction 2886 // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr] 2887 // CHECK-ERROR-NEXT: ^ 2888 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2889 // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512] 2890 // CHECK-ERROR-NEXT: ^ 2891 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504] 2892 // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520] 2893 // CHECK-ERROR-NEXT: ^ 2894 2895 ldnp d3, q2, [sp] 2896 ldnp q3, q5, [sp, #8] 2897 stnp q20, q25, [x5, #1024] 2898 ldnp q30, q15, [x23, #-1040] 2899 // CHECK-ERROR: error: invalid operand for instruction 2900 // CHECK-ERROR-NEXT: ldnp d3, q2, [sp] 2901 // CHECK-ERROR-NEXT: ^ 2902 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2903 // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8] 2904 // CHECK-ERROR-NEXT: ^ 2905 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2906 // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024] 2907 // CHECK-ERROR-NEXT: ^ 2908 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008] 2909 // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040] 2910 // CHECK-ERROR-NEXT: ^ 2911 2912 //------------------------------------------------------------------------------ 2913 // Logical (shifted register) 2914 //------------------------------------------------------------------------------ 2915 orr w0, w1, #0xffffffff 2916 and x3, x5, #0xffffffffffffffff 2917 // CHECK-ERROR: error: expected compatible register or logical immediate 2918 // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff 2919 // CHECK-ERROR-NEXT: ^ 2920 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 2921 // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff 2922 // CHECK-ERROR-NEXT: ^ 2923 2924 ands w3, w9, #0x0 2925 eor x2, x0, #0x0 2926 // CHECK-ERROR: error: expected compatible register or logical immediate 2927 // CHECK-ERROR-NEXT: ands w3, w9, #0x0 2928 // CHECK-ERROR-NEXT: ^ 2929 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 2930 // CHECK-ERROR-NEXT: eor x2, x0, #0x0 2931 // CHECK-ERROR-NEXT: ^ 2932 2933 eor w3, w5, #0x83 2934 eor x9, x20, #0x1234 2935 // CHECK-ERROR: error: expected compatible register or logical immediate 2936 // CHECK-ERROR-NEXT: eor w3, w5, #0x83 2937 // CHECK-ERROR-NEXT: ^ 2938 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 2939 // CHECK-ERROR-NEXT: eor x9, x20, #0x1234 2940 // CHECK-ERROR-NEXT: ^ 2941 2942 and wzr, w4, 0xffff0000 2943 eor xzr, x9, #0xffff0000ffff0000 2944 // CHECK-ERROR: error: invalid operand for instruction 2945 // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000 2946 // CHECK-ERROR-NEXT: ^ 2947 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2948 // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000 2949 // CHECK-ERROR-NEXT: ^ 2950 2951 orr w3, wsp, #0xf0f0f0f0 2952 ands x3, sp, #0xaaaaaaaaaaaaaaaa 2953 // CHECK-ERROR: error: invalid operand for instruction 2954 // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0 2955 // CHECK-ERROR-NEXT: ^ 2956 // CHECK-ERROR-NEXT: error: invalid operand for instruction 2957 // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa 2958 // CHECK-ERROR-NEXT: ^ 2959 2960 tst sp, #0xe0e0e0e0e0e0e0e0 2961 // CHECK-ERROR: error: invalid operand for instruction 2962 // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0 2963 // CHECK-ERROR-NEXT: ^ 2964 2965 // movi has been removed from the specification. Make sure it's really gone. 2966 movi wzr, #0x44444444 2967 movi w3, #0xffff 2968 movi x9, #0x0000ffff00000000 2969 // CHECK-ERROR: error: invalid operand for instruction 2970 // CHECK-ERROR-NEXT: movi wzr, #0x44444444 2971 // CHECK-ERROR-NEXT: ^ 2972 // CHECK-ERROR: error: invalid operand for instruction 2973 // CHECK-ERROR-NEXT: movi w3, #0xffff 2974 // CHECK-ERROR-NEXT: ^ 2975 // CHECK-ERROR: error: invalid operand for instruction 2976 // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000 2977 // CHECK-ERROR-NEXT: ^ 2978 2979 //------------------------------------------------------------------------------ 2980 // Logical (shifted register) 2981 //------------------------------------------------------------------------------ 2982 2983 //// Out of range shifts 2984 and w2, w24, w6, lsl #-1 2985 and w4, w6, w12, lsl #32 2986 and x4, x6, x12, lsl #64 2987 and x2, x5, x11, asr 2988 // CHECK-ERROR: error: expected integer shift amount 2989 // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1 2990 // CHECK-ERROR-NEXT: ^ 2991 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] 2992 // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32 2993 // CHECK-ERROR-NEXT: ^ 2994 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63] 2995 // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64 2996 // CHECK-ERROR-NEXT: ^ 2997 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier 2998 // CHECK-ERROR-NEXT: and x2, x5, x11, asr 2999 // CHECK-ERROR-NEXT: ^ 3000 3001 //// sp not allowed 3002 orn wsp, w3, w5 3003 bics x20, sp, x9, lsr #0 3004 orn x2, x6, sp, lsl #3 3005 // FIXME: the diagnostic we get for 'orn wsp, w3, w5' is from the orn alias, 3006 // which is a better match than the genuine ORNWri, whereas it would be better 3007 // to get the ORNWri diagnostic when the alias did not match, i.e. the 3008 // alias' diagnostics should have a lower priority. 3009 // CHECK-ERROR: error: expected compatible register or logical immediate 3010 // CHECK-ERROR-NEXT: orn wsp, w3, w5 3011 // CHECK-ERROR-NEXT: ^ 3012 // CHECK-ERROR-NEXT: error: invalid operand for instruction 3013 // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0 3014 // CHECK-ERROR-NEXT: ^ 3015 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 3016 // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3 3017 // CHECK-ERROR-NEXT: ^ 3018 3019 //// Mismatched registers 3020 and x3, w2, w1 3021 ands w1, x12, w2 3022 and x4, x5, w6, lsl #12 3023 orr w2, w5, x7, asr #0 3024 // CHECK-ERROR: error: invalid operand for instruction 3025 // CHECK-ERROR-NEXT: and x3, w2, w1 3026 // CHECK-ERROR-NEXT: ^ 3027 // CHECK-ERROR-NEXT: error: invalid operand for instruction 3028 // CHECK-ERROR-NEXT: ands w1, x12, w2 3029 // CHECK-ERROR-NEXT: ^ 3030 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 3031 // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12 3032 // CHECK-ERROR-NEXT: ^ 3033 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate 3034 // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0 3035 // CHECK-ERROR-NEXT: ^ 3036 3037 //// Shifts should not be allowed on mov 3038 mov w3, w7, lsl #13 3039 // CHECK-ERROR: error: invalid operand for instruction 3040 // CHECK-ERROR-NEXT: mov w3, w7, lsl #13 3041 // CHECK-ERROR-NEXT: ^ 3042 3043 //------------------------------------------------------------------------------ 3044 // Move wide (immediate) 3045 //------------------------------------------------------------------------------ 3046 3047 movz w3, #65536, lsl #0 3048 movz w4, #65536 3049 movn w1, #2, lsl #1 3050 movk w3, #0, lsl #-1 3051 movn w2, #-1, lsl #0 3052 movz x3, #-1 3053 movk w3, #1, lsl #32 3054 movn x2, #12, lsl #64 3055 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3056 // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0 3057 // CHECK-ERROR-NEXT: ^ 3058 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3059 // CHECK-ERROR-NEXT: movz w4, #65536 3060 // CHECK-ERROR-NEXT: ^ 3061 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535] 3062 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16 3063 // CHECK-ERROR-NEXT: movn w1, #2, lsl #1 3064 // CHECK-ERROR-NEXT: ^ 3065 // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate 3066 // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount 3067 // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1 3068 // CHECK-ERROR-NEXT: ^ 3069 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3070 // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0 3071 // CHECK-ERROR-NEXT: ^ 3072 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3073 // CHECK-ERROR-NEXT: movz x3, #-1 3074 // CHECK-ERROR-NEXT: ^ 3075 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535] 3076 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16 3077 // CHECK-ERROR-NEXT: movk w3, #1, lsl #32 3078 // CHECK-ERROR-NEXT: ^ 3079 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535] 3080 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48 3081 // CHECK-ERROR-NEXT: movn x2, #12, lsl #64 3082 // CHECK-ERROR-NEXT: ^ 3083 3084 movz x12, #:abs_g0:sym, lsl #16 3085 movz x12, #:abs_g0:sym, lsl #0 3086 movn x2, #:abs_g0:sym 3087 movk w3, #:abs_g0:sym 3088 movz x3, #:abs_g0_nc:sym 3089 movn x4, #:abs_g0_nc:sym 3090 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3091 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16 3092 // CHECK-ERROR-NEXT: ^ 3093 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3094 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0 3095 // CHECK-ERROR-NEXT: ^ 3096 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3097 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g0:sym 3098 // CHECK-ERROR-AARCH64-NEXT: ^ 3099 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3100 // CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym 3101 // CHECK-ERROR-NEXT: ^ 3102 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3103 // CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym 3104 // CHECK-ERROR-NEXT: ^ 3105 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3106 // CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym 3107 // CHECK-ERROR-NEXT: ^ 3108 3109 movn x2, #:abs_g1:sym 3110 movk w3, #:abs_g1:sym 3111 movz x3, #:abs_g1_nc:sym 3112 movn x4, #:abs_g1_nc:sym 3113 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3114 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g1:sym 3115 // CHECK-ERROR-AARCH64-NEXT: ^ 3116 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3117 // CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym 3118 // CHECK-ERROR-NEXT: ^ 3119 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3120 // CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym 3121 // CHECK-ERROR-NEXT: ^ 3122 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3123 // CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym 3124 // CHECK-ERROR-NEXT: ^ 3125 3126 movz w12, #:abs_g2:sym 3127 movn x12, #:abs_g2:sym 3128 movk x13, #:abs_g2:sym 3129 movk w3, #:abs_g2_nc:sym 3130 movz x13, #:abs_g2_nc:sym 3131 movn x24, #:abs_g2_nc:sym 3132 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3133 // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym 3134 // CHECK-ERROR-NEXT: ^ 3135 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3136 // CHECK-ERROR-AARCH64-NEXT: movn x12, #:abs_g2:sym 3137 // CHECK-ERROR-AARCH64-NEXT: ^ 3138 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3139 // CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym 3140 // CHECK-ERROR-NEXT: ^ 3141 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3142 // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym 3143 // CHECK-ERROR-NEXT: ^ 3144 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3145 // CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym 3146 // CHECK-ERROR-NEXT: ^ 3147 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3148 // CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym 3149 // CHECK-ERROR-NEXT: ^ 3150 3151 movn x19, #:abs_g3:sym 3152 movz w20, #:abs_g3:sym 3153 movk w21, #:abs_g3:sym 3154 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3155 // CHECK-ERROR-AARCH64-NEXT: movn x19, #:abs_g3:sym 3156 // CHECK-ERROR-AARCH64-NEXT: ^ 3157 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3158 // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym 3159 // CHECK-ERROR-NEXT: ^ 3160 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3161 // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym 3162 // CHECK-ERROR-NEXT: ^ 3163 3164 movk x19, #:abs_g0_s:sym 3165 movk w23, #:abs_g0_s:sym 3166 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3167 // CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym 3168 // CHECK-ERROR-NEXT: ^ 3169 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3170 // CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym 3171 // CHECK-ERROR-NEXT: ^ 3172 3173 movk x19, #:abs_g1_s:sym 3174 movk w23, #:abs_g1_s:sym 3175 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3176 // CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym 3177 // CHECK-ERROR-NEXT: ^ 3178 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3179 // CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym 3180 // CHECK-ERROR-NEXT: ^ 3181 3182 movz w2, #:abs_g2_s:sym 3183 movn w29, #:abs_g2_s:sym 3184 movk x19, #:abs_g2_s:sym 3185 movk w23, #:abs_g2_s:sym 3186 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3187 // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym 3188 // CHECK-ERROR-NEXT: ^ 3189 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3190 // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym 3191 // CHECK-ERROR-NEXT: ^ 3192 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3193 // CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym 3194 // CHECK-ERROR-NEXT: ^ 3195 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] 3196 // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym 3197 // CHECK-ERROR-NEXT: ^ 3198 3199 //------------------------------------------------------------------------------ 3200 // PC-relative addressing 3201 //------------------------------------------------------------------------------ 3202 3203 adr sp, loc // expects xzr 3204 adrp x3, #20 // Immediate unaligned 3205 adrp w2, loc // 64-bit register needed 3206 // CHECK-ERROR: error: invalid operand for instruction 3207 // CHECK-ERROR-NEXT: adr sp, loc 3208 // CHECK-ERROR-NEXT: ^ 3209 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3210 // CHECK-ERROR-NEXT: adrp x3, #20 3211 // CHECK-ERROR-NEXT: ^ 3212 // CHECK-ERROR-NEXT: error: invalid operand for instruction 3213 // CHECK-ERROR-NEXT: adrp w2, loc 3214 // CHECK-ERROR-NEXT: ^ 3215 3216 adr x9, #1048576 3217 adr x2, #-1048577 3218 adrp x9, #4294967296 3219 adrp x20, #-4294971392 3220 // CHECK-ERROR: error: expected label or encodable integer pc offset 3221 // CHECK-ERROR-NEXT: adr x9, #1048576 3222 // CHECK-ERROR-NEXT: ^ 3223 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3224 // CHECK-ERROR-NEXT: adr x2, #-1048577 3225 // CHECK-ERROR-NEXT: ^ 3226 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3227 // CHECK-ERROR-NEXT: adrp x9, #4294967296 3228 // CHECK-ERROR-NEXT: ^ 3229 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3230 // CHECK-ERROR-NEXT: adrp x20, #-4294971392 3231 // CHECK-ERROR-NEXT: ^ 3232 3233 //------------------------------------------------------------------------------ 3234 // System 3235 //------------------------------------------------------------------------------ 3236 3237 hint #-1 3238 hint #128 3239 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127] 3240 // CHECK-ERROR-NEXT: hint #-1 3241 // CHECK-ERROR-NEXT: ^ 3242 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127] 3243 // CHECK-ERROR-NEXT: hint #128 3244 // CHECK-ERROR-NEXT: ^ 3245 3246 clrex #-1 3247 clrex #16 3248 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 3249 // CHECK-ERROR-NEXT: clrex #-1 3250 // CHECK-ERROR-NEXT: ^ 3251 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 3252 // CHECK-ERROR-NEXT: clrex #16 3253 // CHECK-ERROR-NEXT: ^ 3254 3255 dsb #-1 3256 dsb #16 3257 dmb #-1 3258 dmb #16 3259 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3260 // CHECK-ERROR-NEXT: dsb #-1 3261 // CHECK-ERROR-NEXT: ^ 3262 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3263 // CHECK-ERROR-NEXT: dsb #16 3264 // CHECK-ERROR-NEXT: ^ 3265 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3266 // CHECK-ERROR-NEXT: dmb #-1 3267 // CHECK-ERROR-NEXT: ^ 3268 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3269 // CHECK-ERROR-NEXT: dmb #16 3270 // CHECK-ERROR-NEXT: ^ 3271 3272 isb #-1 3273 isb #16 3274 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3275 // CHECK-ERROR-NEXT: isb #-1 3276 // CHECK-ERROR-NEXT: ^ 3277 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}} 3278 // CHECK-ERROR-NEXT: isb #16 3279 // CHECK-ERROR-NEXT: ^ 3280 3281 msr daifset, x4 3282 msr spsel, #-1 3283 msr spsel #-1 3284 msr daifclr, #16 3285 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 3286 // CHECK-ERROR-NEXT: msr daifset, x4 3287 // CHECK-ERROR-NEXT: ^ 3288 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 3289 // CHECK-ERROR-NEXT: msr spsel, #-1 3290 // CHECK-ERROR-NEXT: ^ 3291 // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}} 3292 // CHECK-ERROR-NEXT: msr spsel #-1 3293 // CHECK-ERROR-NEXT: ^ 3294 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15] 3295 // CHECK-ERROR-NEXT: msr daifclr, #16 3296 // CHECK-ERROR-NEXT: ^ 3297 3298 sys #8, c1, c2, #7, x9 3299 sys #3, c16, c2, #3, x10 3300 sys #2, c11, c16, #5 3301 sys #4, c9, c8, #8, xzr 3302 sysl x11, #8, c1, c2, #7 3303 sysl x13, #3, c16, c2, #3 3304 sysl x9, #2, c11, c16, #5 3305 sysl x4, #4, c9, c8, #8 3306 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7] 3307 // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9 3308 // CHECK-ERROR-NEXT: ^ 3309 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15 3310 // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10 3311 // CHECK-ERROR-NEXT: ^ 3312 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15 3313 // CHECK-ERROR-NEXT: sys #2, c11, c16, #5 3314 // CHECK-ERROR-NEXT: ^ 3315 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7] 3316 // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr 3317 // CHECK-ERROR-NEXT: ^ 3318 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7] 3319 // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7 3320 // CHECK-ERROR-NEXT: ^ 3321 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15 3322 // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3 3323 // CHECK-ERROR-NEXT: ^ 3324 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15 3325 // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5 3326 // CHECK-ERROR-NEXT: ^ 3327 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7] 3328 // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8 3329 // CHECK-ERROR-NEXT: ^ 3330 3331 ic ialluis, x2 3332 ic allu, x7 3333 ic ivau 3334 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register 3335 // CHECK-ERROR-NEXT: ic ialluis, x2 3336 // CHECK-ERROR-NEXT: ^ 3337 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised 3338 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction 3339 // CHECK-ERROR-NEXT: ic allu, x7 3340 // CHECK-ERROR-NEXT: ^ 3341 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register 3342 // CHECK-ERROR-NEXT: ic ivau 3343 // CHECK-ERROR-NEXT: ^ 3344 3345 tlbi IPAS2E1IS 3346 tlbi IPAS2LE1IS 3347 tlbi VMALLE1IS, x12 3348 tlbi ALLE2IS, x11 3349 tlbi ALLE3IS, x20 3350 tlbi VAE1IS 3351 tlbi VAE2IS 3352 tlbi VAE3IS 3353 tlbi ASIDE1IS 3354 tlbi VAAE1IS 3355 tlbi ALLE1IS, x0 3356 tlbi VALE1IS 3357 tlbi VALE2IS 3358 tlbi VALE3IS 3359 tlbi VMALLS12E1IS, xzr 3360 tlbi VAALE1IS 3361 tlbi IPAS2E1 3362 tlbi IPAS2LE1 3363 tlbi VMALLE1, x9 3364 tlbi ALLE2, x10 3365 tlbi ALLE3, x11 3366 tlbi VAE1 3367 tlbi VAE2 3368 tlbi VAE3 3369 tlbi ASIDE1 3370 tlbi VAAE1 3371 tlbi ALLE1, x25 3372 tlbi VALE1 3373 tlbi VALE2 3374 tlbi VALE3 3375 tlbi VMALLS12E1, x15 3376 tlbi VAALE1 3377 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3378 // CHECK-ERROR-NEXT: tlbi IPAS2E1IS 3379 // CHECK-ERROR-NEXT: ^ 3380 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3381 // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS 3382 // CHECK-ERROR-NEXT: ^ 3383 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3384 // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12 3385 // CHECK-ERROR-NEXT: ^ 3386 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3387 // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11 3388 // CHECK-ERROR-NEXT: ^ 3389 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3390 // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20 3391 // CHECK-ERROR-NEXT: ^ 3392 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3393 // CHECK-ERROR-NEXT: tlbi VAE1IS 3394 // CHECK-ERROR-NEXT: ^ 3395 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3396 // CHECK-ERROR-NEXT: tlbi VAE2IS 3397 // CHECK-ERROR-NEXT: ^ 3398 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3399 // CHECK-ERROR-NEXT: tlbi VAE3IS 3400 // CHECK-ERROR-NEXT: ^ 3401 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3402 // CHECK-ERROR-NEXT: tlbi ASIDE1IS 3403 // CHECK-ERROR-NEXT: ^ 3404 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3405 // CHECK-ERROR-NEXT: tlbi VAAE1IS 3406 // CHECK-ERROR-NEXT: ^ 3407 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3408 // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0 3409 // CHECK-ERROR-NEXT: ^ 3410 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3411 // CHECK-ERROR-NEXT: tlbi VALE1IS 3412 // CHECK-ERROR-NEXT: ^ 3413 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3414 // CHECK-ERROR-NEXT: tlbi VALE2IS 3415 // CHECK-ERROR-NEXT: ^ 3416 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3417 // CHECK-ERROR-NEXT: tlbi VALE3IS 3418 // CHECK-ERROR-NEXT: ^ 3419 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3420 // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr 3421 // CHECK-ERROR-NEXT: ^ 3422 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3423 // CHECK-ERROR-NEXT: tlbi VAALE1IS 3424 // CHECK-ERROR-NEXT: ^ 3425 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3426 // CHECK-ERROR-NEXT: tlbi IPAS2E1 3427 // CHECK-ERROR-NEXT: ^ 3428 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3429 // CHECK-ERROR-NEXT: tlbi IPAS2LE1 3430 // CHECK-ERROR-NEXT: ^ 3431 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3432 // CHECK-ERROR-NEXT: tlbi VMALLE1, x9 3433 // CHECK-ERROR-NEXT: ^ 3434 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3435 // CHECK-ERROR-NEXT: tlbi ALLE2, x10 3436 // CHECK-ERROR-NEXT: ^ 3437 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3438 // CHECK-ERROR-NEXT: tlbi ALLE3, x11 3439 // CHECK-ERROR-NEXT: ^ 3440 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3441 // CHECK-ERROR-NEXT: tlbi VAE1 3442 // CHECK-ERROR-NEXT: ^ 3443 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3444 // CHECK-ERROR-NEXT: tlbi VAE2 3445 // CHECK-ERROR-NEXT: ^ 3446 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3447 // CHECK-ERROR-NEXT: tlbi VAE3 3448 // CHECK-ERROR-NEXT: ^ 3449 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3450 // CHECK-ERROR-NEXT: tlbi ASIDE1 3451 // CHECK-ERROR-NEXT: ^ 3452 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3453 // CHECK-ERROR-NEXT: tlbi VAAE1 3454 // CHECK-ERROR-NEXT: ^ 3455 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3456 // CHECK-ERROR-NEXT: tlbi ALLE1, x25 3457 // CHECK-ERROR-NEXT: ^ 3458 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3459 // CHECK-ERROR-NEXT: tlbi VALE1 3460 // CHECK-ERROR-NEXT: ^ 3461 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3462 // CHECK-ERROR-NEXT: tlbi VALE2 3463 // CHECK-ERROR-NEXT: ^ 3464 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3465 // CHECK-ERROR-NEXT: tlbi VALE3 3466 // CHECK-ERROR-NEXT: ^ 3467 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register 3468 // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15 3469 // CHECK-ERROR-NEXT: ^ 3470 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register 3471 // CHECK-ERROR-NEXT: tlbi VAALE1 3472 // CHECK-ERROR-NEXT: ^ 3473 3474 // For the MSR/MRS instructions, first make sure read-only and 3475 // write-only registers actually are. 3476 msr MDCCSR_EL0, x12 3477 msr DBGDTRRX_EL0, x12 3478 msr MDRAR_EL1, x12 3479 msr OSLSR_EL1, x12 3480 msr DBGAUTHSTATUS_EL1, x12 3481 msr MIDR_EL1, x12 3482 msr CCSIDR_EL1, x12 3483 msr CLIDR_EL1, x12 3484 msr CTR_EL0, x12 3485 msr MPIDR_EL1, x12 3486 msr REVIDR_EL1, x12 3487 msr AIDR_EL1, x12 3488 msr DCZID_EL0, x12 3489 msr ID_PFR0_EL1, x12 3490 msr ID_PFR1_EL1, x12 3491 msr ID_DFR0_EL1, x12 3492 msr ID_AFR0_EL1, x12 3493 msr ID_MMFR0_EL1, x12 3494 msr ID_MMFR1_EL1, x12 3495 msr ID_MMFR2_EL1, x12 3496 msr ID_MMFR3_EL1, x12 3497 msr ID_MMFR4_EL1, x12 3498 msr ID_ISAR0_EL1, x12 3499 msr ID_ISAR1_EL1, x12 3500 msr ID_ISAR2_EL1, x12 3501 msr ID_ISAR3_EL1, x12 3502 msr ID_ISAR4_EL1, x12 3503 msr ID_ISAR5_EL1, x12 3504 msr MVFR0_EL1, x12 3505 msr MVFR1_EL1, x12 3506 msr MVFR2_EL1, x12 3507 msr ID_AA64PFR0_EL1, x12 3508 msr ID_AA64PFR1_EL1, x12 3509 msr ID_AA64DFR0_EL1, x12 3510 msr ID_AA64DFR1_EL1, x12 3511 msr ID_AA64AFR0_EL1, x12 3512 msr ID_AA64AFR1_EL1, x12 3513 msr ID_AA64ISAR0_EL1, x12 3514 msr ID_AA64ISAR1_EL1, x12 3515 msr ID_AA64MMFR0_EL1, x12 3516 msr ID_AA64MMFR1_EL1, x12 3517 msr PMCEID0_EL0, x12 3518 msr PMCEID1_EL0, x12 3519 msr RVBAR_EL1, x12 3520 msr RVBAR_EL2, x12 3521 msr RVBAR_EL3, x12 3522 msr ISR_EL1, x12 3523 msr CNTPCT_EL0, x12 3524 msr CNTVCT_EL0, x12 3525 msr PMEVCNTR31_EL0, x12 3526 msr PMEVTYPER31_EL0, x12 3527 // CHECK-ERROR: error: expected writable system register or pstate 3528 // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12 3529 // CHECK-ERROR-NEXT: ^ 3530 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3531 // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12 3532 // CHECK-ERROR-NEXT: ^ 3533 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3534 // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12 3535 // CHECK-ERROR-NEXT: ^ 3536 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3537 // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12 3538 // CHECK-ERROR-NEXT: ^ 3539 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3540 // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12 3541 // CHECK-ERROR-NEXT: ^ 3542 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3543 // CHECK-ERROR-NEXT: msr MIDR_EL1, x12 3544 // CHECK-ERROR-NEXT: ^ 3545 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3546 // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12 3547 // CHECK-ERROR-NEXT: ^ 3548 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3549 // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12 3550 // CHECK-ERROR-NEXT: ^ 3551 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3552 // CHECK-ERROR-NEXT: msr CTR_EL0, x12 3553 // CHECK-ERROR-NEXT: ^ 3554 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3555 // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12 3556 // CHECK-ERROR-NEXT: ^ 3557 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3558 // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12 3559 // CHECK-ERROR-NEXT: ^ 3560 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3561 // CHECK-ERROR-NEXT: msr AIDR_EL1, x12 3562 // CHECK-ERROR-NEXT: ^ 3563 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3564 // CHECK-ERROR-NEXT: msr DCZID_EL0, x12 3565 // CHECK-ERROR-NEXT: ^ 3566 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3567 // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12 3568 // CHECK-ERROR-NEXT: ^ 3569 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3570 // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12 3571 // CHECK-ERROR-NEXT: ^ 3572 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3573 // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12 3574 // CHECK-ERROR-NEXT: ^ 3575 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3576 // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12 3577 // CHECK-ERROR-NEXT: ^ 3578 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3579 // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12 3580 // CHECK-ERROR-NEXT: ^ 3581 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3582 // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12 3583 // CHECK-ERROR-NEXT: ^ 3584 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3585 // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12 3586 // CHECK-ERROR-NEXT: ^ 3587 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3588 // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12 3589 // CHECK-ERROR-NEXT: ^ 3590 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3591 // CHECK-ERROR-NEXT: msr ID_MMFR4_EL1, x12 3592 // CHECK-ERROR-NEXT: ^ 3593 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3594 // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12 3595 // CHECK-ERROR-NEXT: ^ 3596 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3597 // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12 3598 // CHECK-ERROR-NEXT: ^ 3599 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3600 // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12 3601 // CHECK-ERROR-NEXT: ^ 3602 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3603 // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12 3604 // CHECK-ERROR-NEXT: ^ 3605 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3606 // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12 3607 // CHECK-ERROR-NEXT: ^ 3608 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3609 // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12 3610 // CHECK-ERROR-NEXT: ^ 3611 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3612 // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12 3613 // CHECK-ERROR-NEXT: ^ 3614 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3615 // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12 3616 // CHECK-ERROR-NEXT: ^ 3617 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3618 // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12 3619 // CHECK-ERROR-NEXT: ^ 3620 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3621 // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12 3622 // CHECK-ERROR-NEXT: ^ 3623 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3624 // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12 3625 // CHECK-ERROR-NEXT: ^ 3626 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3627 // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12 3628 // CHECK-ERROR-NEXT: ^ 3629 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3630 // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12 3631 // CHECK-ERROR-NEXT: ^ 3632 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3633 // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12 3634 // CHECK-ERROR-NEXT: ^ 3635 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3636 // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12 3637 // CHECK-ERROR-NEXT: ^ 3638 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3639 // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12 3640 // CHECK-ERROR-NEXT: ^ 3641 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3642 // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12 3643 // CHECK-ERROR-NEXT: ^ 3644 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3645 // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12 3646 // CHECK-ERROR-NEXT: ^ 3647 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3648 // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12 3649 // CHECK-ERROR-NEXT: ^ 3650 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3651 // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12 3652 // CHECK-ERROR-NEXT: ^ 3653 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3654 // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12 3655 // CHECK-ERROR-NEXT: ^ 3656 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3657 // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12 3658 // CHECK-ERROR-NEXT: ^ 3659 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3660 // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12 3661 // CHECK-ERROR-NEXT: ^ 3662 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3663 // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12 3664 // CHECK-ERROR-NEXT: ^ 3665 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3666 // CHECK-ERROR-NEXT: msr ISR_EL1, x12 3667 // CHECK-ERROR-NEXT: ^ 3668 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3669 // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12 3670 // CHECK-ERROR-NEXT: ^ 3671 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3672 // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12 3673 // CHECK-ERROR-NEXT: ^ 3674 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3675 // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12 3676 // CHECK-ERROR-NEXT: ^ 3677 // CHECK-ERROR-NEXT: error: expected writable system register or pstate 3678 // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12 3679 // CHECK-ERROR-NEXT: ^ 3680 3681 mrs x9, DBGDTRTX_EL0 3682 mrs x9, OSLAR_EL1 3683 mrs x9, PMSWINC_EL0 3684 mrs x9, PMEVCNTR31_EL0 3685 mrs x9, PMEVTYPER31_EL0 3686 // CHECK-ERROR: error: expected readable system register 3687 // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0 3688 // CHECK-ERROR-NEXT: ^ 3689 // CHECK-ERROR-NEXT: error: expected readable system register 3690 // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1 3691 // CHECK-ERROR-NEXT: ^ 3692 // CHECK-ERROR-NEXT: error: expected readable system register 3693 // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0 3694 // CHECK-ERROR-NEXT: ^ 3695 // CHECK-ERROR-NEXT: error: expected readable system register 3696 // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0 3697 // CHECK-ERROR-NEXT: ^ 3698 // CHECK-ERROR-NEXT: error: expected readable system register 3699 // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0 3700 // CHECK-ERROR-NEXT: ^ 3701 3702 // Now check some invalid generic names 3703 mrs x12, s3_8_c11_c13_2 3704 mrs x19, s3_2_c15_c16_2 3705 mrs x30, s3_2_c15_c1_8 3706 mrs x4, s4_7_c15_c15_7 3707 mrs x14, s3_7_c16_c15_7 3708 // CHECK-ERROR-NEXT: error: expected readable system register 3709 // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2 3710 // CHECK-ERROR-NEXT: ^ 3711 // CHECK-ERROR-NEXT: error: expected readable system register 3712 // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2 3713 // CHECK-ERROR-NEXT: ^ 3714 // CHECK-ERROR-NEXT: error: expected readable system register 3715 // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8 3716 // CHECK-ERROR-NEXT: ^ 3717 // CHECK-ERROR-NEXT: error: expected readable system register 3718 // CHECK-ERROR-NEXT: mrs x4, s4_7_c15_c15_7 3719 // CHECK-ERROR-NEXT: ^ 3720 // CHECK-ERROR-NEXT: error: expected readable system register 3721 // CHECK-ERROR-NEXT: mrs x14, s3_7_c16_c15_7 3722 // CHECK-ERROR-NEXT: ^ 3723 3724 //------------------------------------------------------------------------------ 3725 // Test and branch (immediate) 3726 //------------------------------------------------------------------------------ 3727 3728 tbz w3, #-1, addr 3729 tbz w3, #32, nowhere 3730 tbz x9, #-1, there 3731 tbz x20, #64, dont 3732 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31] 3733 // CHECK-ERROR-NEXT: tbz w3, #-1, addr 3734 // CHECK-ERROR-NEXT: ^ 3735 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 3736 // CHECK-ERROR-NEXT: tbz w3, #32, nowhere 3737 // CHECK-ERROR-NEXT: ^ 3738 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 3739 // CHECK-ERROR-NEXT: tbz x9, #-1, there 3740 // CHECK-ERROR-NEXT: ^ 3741 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 3742 // CHECK-ERROR-NEXT: tbz x20, #64, dont 3743 // CHECK-ERROR-NEXT: ^ 3744 3745 tbnz w3, #-1, addr 3746 tbnz w3, #32, nowhere 3747 tbnz x9, #-1, there 3748 tbnz x20, #64, dont 3749 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 3750 // CHECK-ERROR-NEXT: tbnz w3, #-1, addr 3751 // CHECK-ERROR-NEXT: ^ 3752 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31] 3753 // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere 3754 // CHECK-ERROR-NEXT: ^ 3755 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 3756 // CHECK-ERROR-NEXT: tbnz x9, #-1, there 3757 // CHECK-ERROR-NEXT: ^ 3758 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63] 3759 // CHECK-ERROR-NEXT: tbnz x20, #64, dont 3760 3761 //------------------------------------------------------------------------------ 3762 // Unconditional branch (immediate) 3763 //------------------------------------------------------------------------------ 3764 3765 b #134217728 3766 b #-134217732 3767 b #1 3768 // CHECK-ERROR: error: expected label or encodable integer pc offset 3769 // CHECK-ERROR-NEXT: b #134217728 3770 // CHECK-ERROR-NEXT: ^ 3771 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3772 // CHECK-ERROR-NEXT: b #-134217732 3773 // CHECK-ERROR-NEXT: ^ 3774 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset 3775 // CHECK-ERROR-NEXT: b #1 3776 // CHECK-ERROR-NEXT: ^ 3777 3778 //------------------------------------------------------------------------------ 3779 // Unconditional branch (register) 3780 //------------------------------------------------------------------------------ 3781 3782 br w2 3783 br sp 3784 // CHECK-ERROR: error: invalid operand for instruction 3785 // CHECK-ERROR-NEXT: br w2 3786 // CHECK-ERROR-NEXT: ^ 3787 // CHECK-ERROR-NEXT: error: invalid operand for instruction 3788 // CHECK-ERROR-NEXT: br sp 3789 // CHECK-ERROR-NEXT: ^ 3790 3791 //// These ones shouldn't allow any registers 3792 eret x2 3793 drps x2 3794 // CHECK-ERROR: error: invalid operand for instruction 3795 // CHECK-ERROR-NEXT: eret x2 3796 // CHECK-ERROR-NEXT: ^ 3797 // CHECK-ERROR-NEXT: error: invalid operand for instruction 3798 // CHECK-ERROR-NEXT: drps x2 3799 // CHECK-ERROR-NEXT: ^ 3800 3801