1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme 2>&1 < %s| FileCheck %s 2 3// ------------------------------------------------------------------------- // 4// Invalid predicate (expected: p0-p7) 5 6mova z0.b, p8/m, za0h.b[w12, 0] 7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix) 8// CHECK-NEXT: mova z0.b, p8/m, za0h.b[w12, 0] 9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 10 11// ------------------------------------------------------------------------- // 12// Invalid tile 13 14// tile-to-vector 15 16mova z0.b, p0/m, za1h.b[w12, 0] 17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 18// CHECK-NEXT: mova z0.b, p0/m, za1h.b[w12, 0] 19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 20 21mova z0.h, p0/m, za2h.h[w12, 0] 22// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 23// CHECK-NEXT: mova z0.h, p0/m, za2h.h[w12, 0] 24// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 25 26mova z0.s, p0/m, za4h.s[w12, 0] 27// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 28// CHECK-NEXT: mova z0.s, p0/m, za4h.s[w12, 0] 29// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 30 31mova z0.d, p0/m, za8h.d[w12, 0] 32// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 33// CHECK-NEXT: mova z0.d, p0/m, za8h.d[w12, 0] 34// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 35 36mova z0.q, p0/m, za16h.q[w12, 0] 37// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 38// CHECK-NEXT: mova z0.q, p0/m, za16h.q[w12, 0] 39// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 40 41// vector-to-tile 42 43mova za1h.b[w12, 0], p0/m, z0.b 44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 45// CHECK-NEXT: mova za1h.b[w12, 0], p0/m, z0.b 46// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 47 48mova za2h.h[w12, 0], p0/m, z0.h 49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 50// CHECK-NEXT: mova za2h.h[w12, 0], p0/m, z0.h 51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 52 53mova za4h.s[w12, 0], p0/m, z0.s 54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 55// CHECK-NEXT: mova za4h.s[w12, 0], p0/m, z0.s 56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 57 58mova za8h.d[w12, 0], p0/m, z0.d 59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 60// CHECK-NEXT: mova za8h.d[w12, 0], p0/m, z0.d 61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 62 63mova za16h.q[w12, 0], p0/m, z0.q 64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list 65// CHECK-NEXT: mova za16h.q[w12, 0], p0/m, z0.q 66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 67 68// ------------------------------------------------------------------------- // 69// Invalid matrix operand 70 71// tile-to-vector 72 73mova z0.b, p0/m, za0h.h[w12, 0] 74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za0h.b or za0v.b 75// CHECK-NEXT: mova z0.b, p0/m, za0h.h[w12, 0] 76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 77 78mova z0.h, p0/m, za[w12, 0] 79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za[0-1]h.h or za[0-1]v.h 80// CHECK-NEXT: mova z0.h, p0/m, za[w12, 0] 81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 82 83mova z0.s, p0/m, za2.s[w12, 0] 84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za[0-3]h.s or za[0-3]v.s 85// CHECK-NEXT: mova z0.s, p0/m, za2.s[w12, 0] 86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 87 88mova z0.d, p0/m, za2v.s[w12, 0] 89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za[0-7]h.d or za[0-7]v.d 90// CHECK-NEXT: mova z0.d, p0/m, za2v.s[w12, 0] 91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 92 93mova z0.q, p0/m, za0h.b[w12, 0] 94// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za[0-15]h.q or za[0-15]v.q 95// CHECK-NEXT: mova z0.q, p0/m, za0h.b[w12, 0] 96// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 97 98// vector-to-tile, only one test here since the intended instruction variant is 99// ambiguous when failing to match on the first operand. 100 101mova za[w12, 0], p0/m, z0.b 102// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected za[0-15]h.q or za[0-15]v.q 103// CHECK-NEXT: mova za[w12, 0], p0/m, z0.b 104// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 105 106// ------------------------------------------------------------------------- // 107// Invalid vector select register (expected: w12-w15) 108 109mova z0.h, p0/m, za0h.h[w11, 0] 110// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w12, w15] 111// CHECK-NEXT: mova z0.h, p0/m, za0h.h[w11, 0] 112// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 113 114mova z0.s, p0/m, za0h.s[w16, 0] 115// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w12, w15] 116// CHECK-NEXT: mova z0.s, p0/m, za0h.s[w16, 0] 117// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 118 119mova za0h.d[w11, 0], p0/m, z0.d 120// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w12, w15] 121// CHECK-NEXT: mova za0h.d[w11, 0], p0/m, z0.d 122// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 123 124mova za0h.q[w16, 0], p0/m, z0.q 125// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w12, w15] 126// CHECK-NEXT: mova za0h.q[w16, 0], p0/m, z0.q 127// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 128 129// ------------------------------------------------------------------------- // 130// Invalid vector select offset 131// 132// expected: .b => 0-15, .h => 0-7, .s => 0-3, .d => 0-1, .q => NONE 133 134// tile-to-vector 135 136mova z0.b, p0/m, za0h.b[w12, 16] 137// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15]. 138// CHECK-NEXT: mova z0.b, p0/m, za0h.b[w12, 16] 139// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 140 141mova z0.h, p0/m, za0h.h[w12, 8] 142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 143// CHECK-NEXT: mova z0.h, p0/m, za0h.h[w12, 8] 144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 145 146mova z0.s, p0/m, za0h.s[w12, 4] 147// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3]. 148// CHECK-NEXT: mova z0.s, p0/m, za0h.s[w12, 4] 149// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 150 151mova z0.d, p0/m, za0h.d[w12, 2] 152// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1]. 153// CHECK-NEXT: mova z0.d, p0/m, za0h.d[w12, 2] 154// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 155 156mova z0.q, p0/m, za0h.q[w12, 1] 157// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be 0. 158// CHECK-NEXT: mova z0.q, p0/m, za0h.q[w12, 1] 159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 160 161mov z0.b, p0/m, za0h.b[w12, 16] 162// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15]. 163// CHECK-NEXT: mov z0.b, p0/m, za0h.b[w12, 16] 164// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 165 166mov z0.h, p0/m, za0h.h[w12, 8] 167// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 168// CHECK-NEXT: mov z0.h, p0/m, za0h.h[w12, 8] 169// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 170 171mov z0.s, p0/m, za0h.s[w12, 4] 172// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3]. 173// CHECK-NEXT: mov z0.s, p0/m, za0h.s[w12, 4] 174// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 175 176mov z0.d, p0/m, za0h.d[w12, 2] 177// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1]. 178// CHECK-NEXT: mov z0.d, p0/m, za0h.d[w12, 2] 179// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 180 181mov z0.q, p0/m, za0h.q[w12, 1] 182// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be 0. 183// CHECK-NEXT: mov z0.q, p0/m, za0h.q[w12, 1] 184// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 185 186// vector-to-tile 187 188mova za0h.b[w12, 16], p0/m, z0.b 189// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15]. 190// CHECK-NEXT: mova za0h.b[w12, 16], p0/m, z0.b 191// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 192 193mova za0h.h[w12, 8], p0/m, z0.h 194// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 195// CHECK-NEXT: mova za0h.h[w12, 8], p0/m, z0.h 196// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 197 198mova za0h.s[w12, 4], p0/m, z0.s 199// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3]. 200// CHECK-NEXT: mova za0h.s[w12, 4], p0/m, z0.s 201// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 202 203mova za0h.d[w12, 2], p0/m, z0.d 204// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1]. 205// CHECK-NEXT: mova za0h.d[w12, 2], p0/m, z0.d 206// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 207 208mova za0h.q[w12, 1], p0/m, z0.q 209// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be 0. 210// CHECK-NEXT: mova za0h.q[w12, 1], p0/m, z0.q 211// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 212 213mov za0h.b[w12, 16], p0/m, z0.b 214// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15]. 215// CHECK-NEXT: mov za0h.b[w12, 16], p0/m, z0.b 216// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 217 218mov za0h.h[w12, 8], p0/m, z0.h 219// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 220// CHECK-NEXT: mov za0h.h[w12, 8], p0/m, z0.h 221// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 222 223mov za0h.s[w12, 4], p0/m, z0.s 224// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3]. 225// CHECK-NEXT: mov za0h.s[w12, 4], p0/m, z0.s 226// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 227 228mov za0h.d[w12, 2], p0/m, z0.d 229// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1]. 230// CHECK-NEXT: mov za0h.d[w12, 2], p0/m, z0.d 231// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 232 233mov za0h.q[w12, 1], p0/m, z0.q 234// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be 0. 235// CHECK-NEXT: mov za0h.q[w12, 1], p0/m, z0.q 236// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 237 238// ------------------------------------------------------------------------- // 239// Invalid ZPR element width 240 241mova za0h.b[w12, 0], p0/m, z0.h 242// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 243// CHECK-NEXT: mova za0h.b[w12, 0], p0/m, z0.h 244// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 245 246mova za0h.h[w12, 0], p0/m, z0.s 247// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 248// CHECK-NEXT: mova za0h.h[w12, 0], p0/m, z0.s 249// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 250 251mova za0h.s[w12, 0], p0/m, z0.d 252// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 253// CHECK-NEXT: mova za0h.s[w12, 0], p0/m, z0.d 254// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 255 256mova za0h.d[w12, 0], p0/m, z0.q 257// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 258// CHECK-NEXT: mova za0h.d[w12, 0], p0/m, z0.q 259// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 260 261mova za0h.q[w12, 0], p0/m, z0.b 262// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 263// CHECK-NEXT: mova za0h.q[w12, 0], p0/m, z0.b 264// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 265