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