1*659ca502SLuke Geeson// RUN: not llvm-mc -triple armv8a -show-encoding -mattr=+i8mm < %s 2>&1 | FileCheck %s 2*659ca502SLuke Geeson// RUN: not llvm-mc -triple thumbv8a -show-encoding -mattr=+i8mm < %s 2>&1 | FileCheck %s 3*659ca502SLuke Geeson 4*659ca502SLuke Geeson 5*659ca502SLuke Geeson// VSMMLA, VUMMLA, VUSMMLA 6*659ca502SLuke Geeson 7*659ca502SLuke Geeson// Data type specifier must match instruction 8*659ca502SLuke Geeson 9*659ca502SLuke Geesonvsmmla.u8 q0, q1, q2 10*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 11*659ca502SLuke Geeson// CHECK-NEXT: vsmmla.u8 q0, q1, q2 12*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 13*659ca502SLuke Geeson 14*659ca502SLuke Geesonvummla.s8 q0, q1, q2 15*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 16*659ca502SLuke Geeson// CHECK-NEXT: vummla.s8 q0, q1, q2 17*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 18*659ca502SLuke Geeson 19*659ca502SLuke Geesonvusmmla.u8 q0, q1, q2 20*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 21*659ca502SLuke Geeson// CHECK-NEXT: vusmmla.u8 q0, q1, q2 22*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 23*659ca502SLuke Geeson 24*659ca502SLuke Geeson 25*659ca502SLuke Geeson// Incorrect register type 26*659ca502SLuke Geeson 27*659ca502SLuke Geesonvsmmla.s8 d0, q1, q2 28*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [q0, q15] 29*659ca502SLuke Geeson// CHECK-NEXT: vsmmla.s8 d0, q1, q2 30*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 31*659ca502SLuke Geeson 32*659ca502SLuke Geesonvummla.u8 q0, d1, q2 33*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [q0, q15] 34*659ca502SLuke Geeson// CHECK-NEXT: vummla.u8 q0, d1, q2 35*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 36*659ca502SLuke Geeson 37*659ca502SLuke Geesonvusmmla.s8 q0, q1, d2 38*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [q0, q15] 39*659ca502SLuke Geeson// CHECK-NEXT: vusmmla.s8 q0, q1, d2 40*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 41*659ca502SLuke Geeson 42*659ca502SLuke Geeson 43*659ca502SLuke Geeson// VUSDOT (vector) 44*659ca502SLuke Geeson 45*659ca502SLuke Geeson// Data type specifier must match instruction 46*659ca502SLuke Geeson 47*659ca502SLuke Geesonvusdot.u8 q0, q1, q2 48*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 49*659ca502SLuke Geeson// CHECK-NEXT: vusdot.u8 q0, q1, q2 50*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 51*659ca502SLuke Geeson 52*659ca502SLuke Geeson// Mis-matched register types 53*659ca502SLuke Geeson 54*659ca502SLuke Geesonvusdot.s8 q0, d1, d2 55*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [d0, d31] 56*659ca502SLuke Geesonvusdot.s8 d0, q1, d2 57*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [d0, d31] 58*659ca502SLuke Geesonvusdot.s8 d0, d1, q2 59*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [d0, d31] 60*659ca502SLuke Geeson 61*659ca502SLuke Geeson 62*659ca502SLuke Geeson// VUSDOT, VSUDOT (by scalar) 63*659ca502SLuke Geeson 64*659ca502SLuke Geeson// Data type specifier must match instruction 65*659ca502SLuke Geeson 66*659ca502SLuke Geesonvusdot.u8 d0, d1, d2[0] 67*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 68*659ca502SLuke Geeson// CHECK-NEXT: vusdot.u8 d0, d1, d2[0] 69*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 70*659ca502SLuke Geeson 71*659ca502SLuke Geesonvsudot.s8 d0, d1, d2[0] 72*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 73*659ca502SLuke Geeson// CHECK-NEXT: vsudot.s8 d0, d1, d2[0] 74*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 75*659ca502SLuke Geeson 76*659ca502SLuke Geeson// Incorrect register types 77*659ca502SLuke Geeson 78*659ca502SLuke Geesonvusdot.s8 q0, d1, d2[0] 79*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this: 80*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, d1, d2[0] 81*659ca502SLuke Geeson// CHECK: [[@LINE-3]]:{{[0-9]+}}: note: operand must be a register in range [d0, d31] 82*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, d1, d2[0] 83*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 84*659ca502SLuke Geeson// CHECK: [[@LINE-6]]:{{[0-9]+}}: note: operand must be a register in range [q0, q15] 85*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, d1, d2[0] 86*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 87*659ca502SLuke Geeson 88*659ca502SLuke Geesonvusdot.s8 d0, q1, d2[0] 89*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this: 90*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 d0, q1, d2[0] 91*659ca502SLuke Geeson// CHECK: [[@LINE-3]]:{{[0-9]+}}: note: operand must be a register in range [d0, d31] 92*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 d0, q1, d2[0] 93*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 94*659ca502SLuke Geeson// CHECK: [[@LINE-6]]:{{[0-9]+}}: note: operand must be a register in range [q0, q15] 95*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 d0, q1, d2[0] 96*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 97*659ca502SLuke Geeson 98*659ca502SLuke Geesonvusdot.s8 q0, q1, q2[0] 99*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this: 100*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, q1, q2[0] 101*659ca502SLuke Geeson// CHECK: [[@LINE-3]]:{{[0-9]+}}: note: operand must be a register in range [d0, d15] 102*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, q1, q2[0] 103*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 104*659ca502SLuke Geeson// CHECK: [[@LINE-6]]:{{[0-9]+}}: note: too many operands for instruction 105*659ca502SLuke Geeson// CHECK-NEXT: vusdot.s8 q0, q1, q2[0] 106*659ca502SLuke Geeson// CHECK-NEXT: {{^ \^}} 107*659ca502SLuke Geeson 108*659ca502SLuke Geeson// Out of range lane index 109*659ca502SLuke Geeson 110*659ca502SLuke Geesonvusdot.s8 d0, d1, d2[2] 111*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 112*659ca502SLuke Geesonvsudot.u8 q0, q1, d2[2] 113*659ca502SLuke Geeson// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction 114