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