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