1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme-f8f16,+sme-f8f32 2>&1 < %s | FileCheck %s 2 3// --------------------------------------------------------------------------// 4// Invalid vector select register 5 6fdot za.h[w8, 0, vgx2], {z0.h-z1.h}, z0.b 7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 8// CHECK-NEXT: fdot za.h[w8, 0, vgx2], {z0.h-z1.h}, z0.b 9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 10 11fdot za.h[w11, 7], {z31.b-z2.b}, z15 12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand 13// CHECK-NEXT: fdot za.h[w11, 7], {z31.b-z2.b}, z15 14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 15 16fdot za.h[w11, 7, vgx2], {z28.b-z31.b}, {z0.b-z3.b} 17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 18// CHECK-NEXT: fdot za.h[w11, 7, vgx2], {z28.b-z31.b}, {z0.b-z3.b} 19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 20 21fdot za.s[w11, 7], {z29.b-z30.b}, {z30.b-z31.b} 22// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 23// CHECK-NEXT: fdot za.s[w11, 7], {z29.b-z30.b}, {z30.b-z31.b} 24// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 25 26fdot za.h[w11, 7], {z30.b-z0.b}, z15.b 27// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 28// CHECK-NEXT: fdot za.h[w11, 7], {z30.b-z0.b}, z15. 29// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 30 31 32// --------------------------------------------------------------------------// 33// Invalid vector select offset 34 35fvdott za.s[w11, -1, vgx4], {z30.b-z31.b}, z15.b[3] 36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 37// CHECK-NEXT: fvdott za.s[w11, -1, vgx4], {z30.b-z31.b}, z15.b[3] 38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 39 40fvdott za.s[w8, -1, vgx4], {z0.b-z1.b}, z0.b[0] 41// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 42// CHECK-NEXT: fvdott za.s[w8, -1, vgx4], {z0.b-z1.b}, z0.b[0] 43// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 44 45fvdot za.h[w11, -1], {z30.b-z31.b}, z15.b[7] 46// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 47// CHECK-NEXT: fvdot za.h[w11, -1], {z30.b-z31.b}, z15.b[7] 48// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 49 50fdot za.s[w11, -1], {z28.b-z31.b}, z15.b[3] 51// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 52// CHECK-NEXT: fdot za.s[w11, -1], {z28.b-z31.b}, z15.b[3] 53// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 54 55fvdott za.s[w11, 8, vgx4], {z30.b-z31.b}, z15.b[3] 56// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 57// CHECK-NEXT: fvdott za.s[w11, 8, vgx4], {z30.b-z31.b}, z15.b[3] 58// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 59 60fvdott za.s[w8, 8, vgx4], {z0.b-z1.b}, z0.b[0] 61// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 62// CHECK-NEXT: fvdott za.s[w8, 8, vgx4], {z0.b-z1.b}, z0.b[0] 63// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 64 65fvdot za.h[w11, 8], {z30.b-z31.b}, z15.b[7] 66// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 67// CHECK-NEXT: fvdot za.h[w11, 8], {z30.b-z31.b}, z15.b[7] 68// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 69 70fdot za.s[w11, 8], {z28.b-z31.b}, z15.b[3] 71// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. 72// CHECK-NEXT: fdot za.s[w11, 8], {z28.b-z31.b}, z15.b[3] 73// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 74 75// --------------------------------------------------------------------------// 76// Invalid vector list 77 78fdot za.s[w11, 7, vgx4], {z29.b-z1.b}, {z29.b-z1.b} 79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors 80// CHECK-NEXT: fdot za.s[w11, 7, vgx4], {z29.b-z1.b}, {z29.b-z1.b} 81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 82 83fdot za.h[w11, 7], {z30.b-z2.b}, {z0.b-z3.b} 84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors 85// CHECK-NEXT: fdot za.h[w11, 7], {z30.b-z2.b}, {z0.b-z3.b} 86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 87 88fdot za.s[w8, 0], {z31.b-z3.b}, {z31.b-z3.b} 89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors 90// CHECK-NEXT: fdot za.s[w8, 0], {z31.b-z3.b}, {z31.b-z3.b} 91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 92 93fdot za.s[w11, 7, vgx2], {z30.b-z31.b}, {z0.b-z4.b} 94// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors 95// CHECK-NEXT: fdot za.s[w11, 7, vgx2], {z30.b-z31.b}, {z0.b-z4.b} 96// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 97 98// --------------------------------------------------------------------------// 99// Invalid Register Suffix 100fdot za.d[w11, 7, vgx4], {z31.b-z2.b}, z15.b 101// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 102// CHECK-NEXT: fdot za.d[w11, 7, vgx4], {z31.b-z2.b}, z15.b 103// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 104 105fdot za[w11, 7], {z28.b-z31.b}, {z28.b-z31.b} 106// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 107// CHECK-NEXT: fdot za[w11, 7], {z28.b-z31.b}, {z28.b-z31.b} 108// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 109 110fdot za.b[w11, 7], {z31.b-z0.b}, z15.b 111// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 112// CHECK-NEXT: fdot za.b[w11, 7], {z31.b-z0.b}, z15.b 113// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 114 115fdot za.b[w11, 7, vgx2], {z30.h-z31.h}, {z30.h-z31.h} 116// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 117// CHECK-NEXT: fdot za.b[w11, 7, vgx2], {z30.h-z31.h}, {z30.h-z31.h} 118// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 119 120fdot za[w11, 7, vgx4], {z31.b-z2.b}, z15.b 121// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 122// CHECK-NEXT: fdot za[w11, 7, vgx4], {z31.b-z2.b}, z15.b 123// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 124 125fdot za.d[w11, 7], {z28.b-z31.b}, {z28.b-z31.b} 126// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s 127// CHECK-NEXT: fdot za.d[w11, 7], {z28.b-z31.b}, {z28.b-z31.b} 128// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 129 130// --------------------------------------------------------------------------// 131// Invalid vector select register 132 133fdot za.h[w7, 7, vgx4], {z31.b-z2.b}, z15.b 134// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] 135// CHECK-NEXT: fdot za.h[w7, 7, vgx4], {z31.b-z2.b}, z15.b 136// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 137 138fdot za.h[w, 0, vgx2], {z0.b-z1.b}, z0.b[0] 139// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] 140// CHECK-NEXT: fdot za.h[w, 0, vgx2], {z0.b-z1.b}, z0.b[0] 141// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 142 143fdot za.s[w12, 0], {z0.b-z3.b}, {z0.b-z3.b} 144// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] 145// CHECK-NEXT: fdot za.s[w12, 0], {z0.b-z3.b}, {z0.b-z3.b} 146// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 147 148// --------------------------------------------------------------------------// 149// Invalid indexed-vector or single-vector register 150 151fdot za.h[w8, 0], {z0.b-z1.b}, z16.b[0] 152// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.b..z15.b 153// CHECK-NEXT: fdot za.h[w8, 0], {z0.b-z1.b}, z16.b[0] 154// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 155 156fdot za.s[w8, 0], {z0.b-z1.b}, z16.b[0] 157// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.b..z15.b 158// CHECK-NEXT: fdot za.s[w8, 0], {z0.b-z1.b}, z16.b[0] 159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 160 161// --------------------------------------------------------------------------// 162// Invalid vector grouping 163 164fdot za.h[w11, 7], {z28.b-z31.b}, {z0.b-z2.b} 165// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 166// CHECK-NEXT: fdot za.h[w11, 7], {z28.b-z31.b}, {z0.b-z2.b} 167// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 168 169fdot za.h[w11, 7, vgx4], {z31.b-z0.b}, z15.b 170// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 171// CHECK-NEXT: fdot za.h[w11, 7, vgx4], {z31.b-z0.b}, z15.b 172// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 173 174// --------------------------------------------------------------------------// 175// Invalid lane index 176 177fdot za.h[w8, 0, vgx2], {z0.b-z1.b}, z0.b[-1] 178// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. 179// CHECK-NEXT: fdot za.h[w8, 0, vgx2], {z0.b-z1.b}, z0.b[-1] 180// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 181 182fdot za.h[w11, 7], {z30.b-z31.b}, z15.b[8] 183// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. 184// CHECK-NEXT: fdot za.h[w11, 7], {z30.b-z31.b}, z15.b[8] 185// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 186 187fdot za.s[w8, 0], {z0.b-z1.b}, z0.b[-1] 188// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. 189// CHECK-NEXT: fdot za.s[w8, 0], {z0.b-z1.b}, z0.b[-1] 190// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 191 192fdot za.s[w11, 7], {z30.b-z31.b}, z15.b[4] 193// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. 194// CHECK-NEXT: fdot za.s[w11, 7], {z30.b-z31.b}, z15.b[4] 195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 196 197fvdot za.h[w8, 0, vgx2], {z0.b-z1.b}, z0.b[-1] 198// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. 199// CHECK-NEXT: fvdot za.h[w8, 0, vgx2], {z0.b-z1.b}, z0.b[-1] 200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 201 202fvdot za.h[w11, 7], {z30.b-z31.b}, z15.b[8] 203// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. 204// CHECK-NEXT: fvdot za.h[w11, 7], {z30.b-z31.b}, z15.b[8] 205// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 206 207fvdotb za.s[w8, 0, vgx4], {z0.b-z1.b}, z0.b[-1] 208// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. 209// CHECK-NEXT: fvdotb za.s[w8, 0, vgx4], {z0.b-z1.b}, z0.b[-1] 210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 211 212fvdott za.s[w11, 7, vgx4], {z30.b-z31.b}, z15.b[4] 213// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. 214// CHECK-NEXT: fvdott za.s[w11, 7, vgx4], {z30.b-z31.b}, z15.b[4] 215// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 216