Skip to content

Commit d4197f3

Browse files
[LLVM][AArch64] Add assembly/disassembly for MUL/BFMUL SME instructions (#113535)
According to https://developer.arm.com/documentation/ddi0602 Co-authored-by: Momchil-Velikov [email protected]
1 parent 7544d3a commit d4197f3

File tree

6 files changed

+696
-0
lines changed

6 files changed

+696
-0
lines changed

llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,11 @@ let Predicates = [HasSME2p2] in {
10071007

10081008
defm BFMOP4A : sme2_bfmop4as_widening<0, "bfmop4a">;
10091009
defm BFMOP4S : sme2_bfmop4as_widening<1, "bfmop4s">;
1010+
1011+
defm FMUL_2ZZ : sme2_multi2_fmul_sm<"fmul">;
1012+
defm FMUL_2Z2Z : sme2_multi2_fmul_mm< "fmul">;
1013+
defm FMUL_4ZZ : sme2_multi4_fmul_sm<"fmul">;
1014+
defm FMUL_4Z4Z : sme2_multi4_fmul_mm< "fmul">;
10101015
} // [HasSME2p2]
10111016

10121017
let Predicates = [HasSME2p2, HasSMEB16B16] in {
@@ -1024,3 +1029,8 @@ let Predicates = [HasSME2p2, HasSMEF8F16], Uses = [FPMR, FPCR] in {
10241029
let Predicates = [HasSME2p2, HasSMEF16F16] in {
10251030
def FTMOPA_M2ZZZI_HtoH : sme_tmopa_16b<0b10001, ZZ_h_mul_r, ZPR16, "ftmopa">;
10261031
} // [HasSME2p2, HasSMEF16F16]
1032+
1033+
let Predicates = [HasSME2, HasSVEBFSCALE] in {
1034+
defm BFMUL : sme2_bfmul_single<"bfmul">;
1035+
defm BFMUL : sme2_bfmul_multi<"bfmul">;
1036+
} //[HasSME2, HasSVEBFSCALE]

llvm/lib/Target/AArch64/SMEInstrFormats.td

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5225,3 +5225,113 @@ multiclass sme2_bfmop4as_widening<bit S, string mnemonic> {
52255225
// Multiple vectors
52265226
def _M2Z2Z_S : sme2_bf16_fp32_quarter_tile_outer_product<1, 1, S, mnemonic, ZZ_h_mul_r_Lo, ZZ_h_mul_r_Hi>;
52275227
}
5228+
5229+
class sme2_multi2_fmul_sm<bits<2> size, string mnemonic, RegisterOperand vector_ty, RegisterOperand zpr_ty>
5230+
: I<(outs vector_ty:$Zd), (ins vector_ty:$Zn, zpr_ty:$Zm),
5231+
mnemonic, "\t$Zd, $Zn, $Zm",
5232+
"", []>, Sched<[]> {
5233+
bits<4> Zd;
5234+
bits<4> Zn;
5235+
bits<4> Zm;
5236+
5237+
let Inst{31-24} = 0b11000001;
5238+
let Inst{23-22} = size;
5239+
let Inst{21} = 0b1;
5240+
let Inst{20-17} = Zm;
5241+
let Inst{16-10} = 0b0111010;
5242+
let Inst{9-6} = Zn;
5243+
let Inst{5} = 0b0;
5244+
let Inst{4-1} = Zd;
5245+
let Inst{0} = 0b0;
5246+
}
5247+
5248+
multiclass sme2_multi2_fmul_sm<string mnemonic> {
5249+
def _H : sme2_multi2_fmul_sm<0b01, mnemonic, ZZ_h_mul_r, ZPR4b16>;
5250+
def _S : sme2_multi2_fmul_sm<0b10, mnemonic, ZZ_s_mul_r, ZPR4b32>;
5251+
def _D : sme2_multi2_fmul_sm<0b11, mnemonic, ZZ_d_mul_r, ZPR4b64>;
5252+
}
5253+
5254+
class sme2_multi4_fmul_sm<bits<2> size, string mnemonic, RegisterOperand vector_ty, RegisterOperand zpr_ty>
5255+
: I<(outs vector_ty:$Zd), (ins vector_ty:$Zn, zpr_ty:$Zm),
5256+
mnemonic, "\t$Zd, $Zn, $Zm",
5257+
"", []>, Sched<[]> {
5258+
bits<3> Zd;
5259+
bits<3> Zn;
5260+
bits<4> Zm;
5261+
5262+
let Inst{31-24} = 0b11000001;
5263+
let Inst{23-22} = size;
5264+
let Inst{21} = 0b1;
5265+
let Inst{20-17} = Zm;
5266+
let Inst{16-10} = 0b1111010;
5267+
let Inst{9-7} = Zn;
5268+
let Inst{6-5} = 0b00;
5269+
let Inst{4-2} = Zd;
5270+
let Inst{1-0} = 0b00;
5271+
}
5272+
5273+
multiclass sme2_multi4_fmul_sm<string mnemonic> {
5274+
def _H : sme2_multi4_fmul_sm<0b01, mnemonic, ZZZZ_h_mul_r, ZPR4b16>;
5275+
def _S : sme2_multi4_fmul_sm<0b10, mnemonic, ZZZZ_s_mul_r, ZPR4b32>;
5276+
def _D : sme2_multi4_fmul_sm<0b11, mnemonic, ZZZZ_d_mul_r, ZPR4b64>;
5277+
}
5278+
5279+
multiclass sme2_bfmul_single<string mnemonic> {
5280+
def _2ZZ : sme2_multi2_fmul_sm<0b00, mnemonic, ZZ_h_mul_r, ZPR4b16>;
5281+
def _4ZZ : sme2_multi4_fmul_sm<0b00, mnemonic, ZZZZ_h_mul_r, ZPR4b16>;
5282+
}
5283+
5284+
class sme2_multi2_fmul_mm<bits<2> size, string mnemonic, RegisterOperand vector_ty>
5285+
: I<(outs vector_ty:$Zd), (ins vector_ty:$Zn, vector_ty:$Zm),
5286+
mnemonic, "\t$Zd, $Zn, $Zm",
5287+
"", []>, Sched<[]> {
5288+
bits<4> Zd;
5289+
bits<4> Zn;
5290+
bits<4> Zm;
5291+
5292+
let Inst{31-24} = 0b11000001;
5293+
let Inst{23-22} = size;
5294+
let Inst{21} = 0b1;
5295+
let Inst{20-17} = Zm;
5296+
let Inst{16-10} = 0b0111001;
5297+
let Inst{9-6} = Zn;
5298+
let Inst{5} = 0b0;
5299+
let Inst{4-1} = Zd;
5300+
let Inst{0} = 0b0;
5301+
}
5302+
5303+
multiclass sme2_multi2_fmul_mm<string mnemonic> {
5304+
def _H : sme2_multi2_fmul_mm<0b01, mnemonic, ZZ_h_mul_r>;
5305+
def _S : sme2_multi2_fmul_mm<0b10, mnemonic, ZZ_s_mul_r>;
5306+
def _D : sme2_multi2_fmul_mm<0b11, mnemonic, ZZ_d_mul_r>;
5307+
}
5308+
5309+
class sme2_multi4_fmul_mm<bits<2> size, string mnemonic, RegisterOperand vector_ty>
5310+
: I<(outs vector_ty:$Zd), (ins vector_ty:$Zn, vector_ty:$Zm),
5311+
mnemonic, "\t$Zd, $Zn, $Zm",
5312+
"", []>, Sched<[]> {
5313+
bits<3> Zd;
5314+
bits<3> Zn;
5315+
bits<3> Zm;
5316+
5317+
let Inst{31-24} = 0b11000001;
5318+
let Inst{23-22} = size;
5319+
let Inst{21} = 0b1;
5320+
let Inst{20-18} = Zm;
5321+
let Inst{17-10} = 0b01111001;
5322+
let Inst{9-7} = Zn;
5323+
let Inst{6-5} = 0b00;
5324+
let Inst{4-2} = Zd;
5325+
let Inst{1-0} = 0b00;
5326+
}
5327+
5328+
multiclass sme2_multi4_fmul_mm<string mnemonic> {
5329+
def _H : sme2_multi4_fmul_mm<0b01, mnemonic, ZZZZ_h_mul_r>;
5330+
def _S : sme2_multi4_fmul_mm<0b10, mnemonic, ZZZZ_s_mul_r>;
5331+
def _D : sme2_multi4_fmul_mm<0b11, mnemonic, ZZZZ_d_mul_r>;
5332+
}
5333+
5334+
multiclass sme2_bfmul_multi<string mnemonic> {
5335+
def _2Z2Z : sme2_multi2_fmul_mm<0b00, mnemonic, ZZ_h_mul_r>;
5336+
def _4Z4Z : sme2_multi4_fmul_mm<0b00, mnemonic, ZZZZ_h_mul_r>;
5337+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// RUN: not llvm-mc -triple=aarch64 -mattr=+sme2,+sve-bfscale 2>&1 < %s| FileCheck %s
2+
3+
// Multiple and single, 2 regs
4+
5+
bfmul {z0.s-z1.s}, {z0.h-z1.h}, z0.h
6+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
7+
8+
bfmul {z1.h-z2.h}, {z0.h-z1.h}, z0.h
9+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types
10+
11+
bfmul {z0.h-z2.h}, {z0.h-z1.h}, z0.h
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
13+
14+
bfmul {z0.h-z1.h}, {z0.s-z1.s}, z0.h
15+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
16+
17+
bfmul {z0.h-z1.h}, {z1.h-z2.h}, z0.h
18+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types
19+
20+
bfmul {z0.h-z1.h}, {z0.h-z2.h}, z0.h
21+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
22+
23+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, z0.s
24+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.h..z15.h
25+
26+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, z16.h
27+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.h..z15.h
28+
29+
// Multiple and single, 4 regs
30+
31+
bfmul {z0.s-z3.s}, {z0.h-z3.h}, z0.h
32+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
33+
34+
bfmul {z1.h-z4.h}, {z0.h-z3.h}, z0.h
35+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types
36+
37+
bfmul {z0.h-z4.h}, {z0.h-z3.h}, z0.h
38+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors
39+
40+
bfmul {z0.h-z3.h}, {z0.s-z3.s}, z0.h
41+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
42+
43+
bfmul {z0.h-z3.h}, {z1.h-z4.h}, z0.h
44+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types
45+
46+
bfmul {z0.h-z3.h}, {z0.h-z4.h}, z0.h
47+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors
48+
49+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, z0.s
50+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.h..z15.h
51+
52+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, z16.h
53+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid restricted vector register, expected z0.h..z15.h
54+
55+
// Multiple, 2 regs
56+
57+
bfmul {z0.s-z1.s}, {z0.h-z1.h}, {z0.h-z1.h}
58+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
59+
60+
bfmul {z1.h-z2.h}, {z0.h-z1.h}, {z0.h-z1.h}
61+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types
62+
63+
bfmul {z0.h-z2.h}, {z0.h-z1.h}, {z0.h-z1.h}
64+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
65+
66+
bfmul {z0.h-z1.h}, {z0.s-z1.s}, {z0.h-z1.h}
67+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
68+
69+
bfmul {z0.h-z1.h}, {z1.h-z2.h}, {z0.h-z1.h}
70+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types
71+
72+
bfmul {z0.h-z1.h}, {z0.h-z2.h}, {z0.h-z1.h}
73+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
74+
75+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, {z0.s-z1.s}
76+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
77+
78+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, {z1.h-z2.h}
79+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types
80+
81+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, {z0.h-z2.h}
82+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
83+
84+
// Multiple, 4 regs
85+
86+
bfmul {z0.s-z3.s}, {z0.h-z3.h}, {z0.h-z3.h}
87+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
88+
89+
bfmul {z1.h-z4.h}, {z0.h-z3.h}, {z0.h-z3.h}
90+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types
91+
92+
bfmul {z0.h-z4.h}, {z0.h-z3.h}, {z0.h-z3.h}
93+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors
94+
95+
bfmul {z0.h-z3.h}, {z0.s-z3.s}, {z0.h-z3.h}
96+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
97+
98+
bfmul {z0.h-z3.h}, {z1.h-z4.h}, {z0.h-z3.h}
99+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types
100+
101+
bfmul {z0.h-z3.h}, {z0.h-z4.h}, {z0.h-z3.h}
102+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors
103+
104+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, {z0.s-z3.s}
105+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
106+
107+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, {z1.h-z4.h}
108+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types
109+
110+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, {z0.h-z4.h}
111+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors

llvm/test/MC/AArch64/SME2/bfmul.s

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sve-bfscale < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
4+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
5+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sve-bfscale < %s \
6+
// RUN: | llvm-objdump -d --mattr=+sme2,+sve-bfscale - | FileCheck %s --check-prefix=CHECK-INST
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sve-bfscale < %s \
8+
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
9+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
10+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sve-bfscale < %s \
11+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
12+
// RUN: | llvm-mc -triple=aarch64 -mattr=+sme2,+sve-bfscale -disassemble -show-encoding \
13+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
14+
15+
// Multiple and single, 2 regs
16+
17+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, z0.h // 11000001-00100000-11101000-00000000
18+
// CHECK-INST: bfmul { z0.h, z1.h }, { z0.h, z1.h }, z0.h
19+
// CHECK-ENCODING: [0x00,0xe8,0x20,0xc1]
20+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
21+
// CHECK-UNKNOWN: c120e800 <unknown>
22+
23+
bfmul {z20.h-z21.h}, {z10.h-z11.h}, z10.h // 11000001-00110100-11101001-01010100
24+
// CHECK-INST: bfmul { z20.h, z21.h }, { z10.h, z11.h }, z10.h
25+
// CHECK-ENCODING: [0x54,0xe9,0x34,0xc1]
26+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
27+
// CHECK-UNKNOWN: c134e954 <unknown>
28+
29+
bfmul {z30.h-z31.h}, {z30.h-z31.h}, z15.h // 11000001-00111110-11101011-11011110
30+
// CHECK-INST: bfmul { z30.h, z31.h }, { z30.h, z31.h }, z15.h
31+
// CHECK-ENCODING: [0xde,0xeb,0x3e,0xc1]
32+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
33+
// CHECK-UNKNOWN: c13eebde <unknown>
34+
35+
// Multiple and single, 4 regs
36+
37+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, z0.h // 11000001-00100001-11101000-00000000
38+
// CHECK-INST: bfmul { z0.h - z3.h }, { z0.h - z3.h }, z0.h
39+
// CHECK-ENCODING: [0x00,0xe8,0x21,0xc1]
40+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
41+
// CHECK-UNKNOWN: c121e800 <unknown>
42+
43+
bfmul {z20.h-z23.h}, {z8.h-z11.h}, z10.h // 11000001-00110101-11101001-00010100
44+
// CHECK-INST: bfmul { z20.h - z23.h }, { z8.h - z11.h }, z10.h
45+
// CHECK-ENCODING: [0x14,0xe9,0x35,0xc1]
46+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
47+
// CHECK-UNKNOWN: c135e914 <unknown>
48+
49+
bfmul {z28.h-z31.h}, {z28.h-z31.h}, z15.h // 11000001-00111111-11101011-10011100
50+
// CHECK-INST: bfmul { z28.h - z31.h }, { z28.h - z31.h }, z15.h
51+
// CHECK-ENCODING: [0x9c,0xeb,0x3f,0xc1]
52+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
53+
// CHECK-UNKNOWN: c13feb9c <unknown>
54+
55+
// Multiple, 2 regs
56+
bfmul {z0.h-z1.h}, {z0.h-z1.h}, {z0.h-z1.h} // 11000001-00100000-11100100-00000000
57+
// CHECK-INST: bfmul { z0.h, z1.h }, { z0.h, z1.h }, { z0.h, z1.h }
58+
// CHECK-ENCODING: [0x00,0xe4,0x20,0xc1]
59+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
60+
// CHECK-UNKNOWN: c120e400 <unknown>
61+
62+
bfmul {z20.h-z21.h}, {z10.h-z11.h}, {z20.h-z21.h} // 11000001-00110100-11100101-01010100
63+
// CHECK-INST: bfmul { z20.h, z21.h }, { z10.h, z11.h }, { z20.h, z21.h }
64+
// CHECK-ENCODING: [0x54,0xe5,0x34,0xc1]
65+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
66+
// CHECK-UNKNOWN: c134e554 <unknown>
67+
68+
bfmul {z30.h-z31.h}, {z30.h-z31.h}, {z30.h-z31.h} // 11000001-00111110-11100111-11011110
69+
// CHECK-INST: bfmul { z30.h, z31.h }, { z30.h, z31.h }, { z30.h, z31.h }
70+
// CHECK-ENCODING: [0xde,0xe7,0x3e,0xc1]
71+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
72+
// CHECK-UNKNOWN: c13ee7de <unknown>
73+
74+
// Multiple, 4 regs
75+
76+
bfmul {z0.h-z3.h}, {z0.h-z3.h}, {z0.h-z3.h} // 11000001-00100001-11100100-00000000
77+
// CHECK-INST: bfmul { z0.h - z3.h }, { z0.h - z3.h }, { z0.h - z3.h }
78+
// CHECK-ENCODING: [0x00,0xe4,0x21,0xc1]
79+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
80+
// CHECK-UNKNOWN: c121e400 <unknown>
81+
82+
bfmul {z20.h-z23.h}, {z8.h-z11.h}, {z20.h-z23.h} // 11000001-00110101-11100101-00010100
83+
// CHECK-INST: bfmul { z20.h - z23.h }, { z8.h - z11.h }, { z20.h - z23.h }
84+
// CHECK-ENCODING: [0x14,0xe5,0x35,0xc1]
85+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
86+
// CHECK-UNKNOWN: c135e514 <unknown>
87+
88+
bfmul {z28.h-z31.h}, {z28.h-z31.h}, {z28.h-z31.h} // 11000001-00111101-11100111-10011100
89+
// CHECK-INST: bfmul { z28.h - z31.h }, { z28.h - z31.h }, { z28.h - z31.h }
90+
// CHECK-ENCODING: [0x9c,0xe7,0x3d,0xc1]
91+
// CHECK-ERROR: instruction requires: sme2 sve-bfscale
92+
// CHECK-UNKNOWN: c13de79c <unknown>

0 commit comments

Comments
 (0)