diff --git a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td --- a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td @@ -270,6 +270,18 @@ defm ADD_VG2_2ZZ : sme2_sqdmulh_add_vector_vg2_single<"add", 0b011000>; defm ADD_VG4_4ZZ : sme2_sqdmulh_add_vector_vg4_single<"add", 0b011000>; +defm ADDA_VG2_M2Z2Z_S : sme2_multivec_accum_add_sub_vg2_S<"add", 0b10>; +defm ADDA_VG4_M4Z4Z_S : sme2_multivec_accum_add_sub_vg4_S<"add", 0b10>; + +defm SUBA_VG2_M2Z2Z_S : sme2_multivec_accum_add_sub_vg2_S<"sub", 0b11>; +defm SUBA_VG4_M4Z4Z_S : sme2_multivec_accum_add_sub_vg4_S<"sub", 0b11>; + +defm FADD_VG2_M2Z2Z_S : sme2_multivec_accum_add_sub_vg2_S<"fadd", 0b00>; +defm FADD_VG4_M4Z4Z_S : sme2_multivec_accum_add_sub_vg4_S<"fadd", 0b00>; + +defm FSUB_VG2_M2Z2Z_S : sme2_multivec_accum_add_sub_vg2_S<"fsub", 0b01>; +defm FSUB_VG4_M4Z4Z_S : sme2_multivec_accum_add_sub_vg4_S<"fsub", 0b01>; + defm SQDMULH_2ZZ : sme2_sqdmulh_add_vector_vg2_single<"sqdmulh", 0b100000>; defm SQDMULH_4ZZ : sme2_sqdmulh_add_vector_vg4_single<"sqdmulh", 0b100000>; @@ -373,6 +385,12 @@ defm SUB_VG4_M4ZZ_D : sme2_mla_add_sub_array_vg4_single_D<"sub", 0b11>; defm SUB_VG2_M2Z2Z_D : sme2_mla_add_sub_array_vg2_multi_D<"sub", 0b11>; defm SUB_VG4_M4Z4Z_D : sme2_mla_add_sub_array_vg4_multi_D<"sub", 0b11>; + +defm ADDA_VG2_M2Z2Z_D : sme2_multivec_accum_add_sub_vg2_D<"add", 0b10>; +defm ADDA_VG4_M4Z4Z_D : sme2_multivec_accum_add_sub_vg4_D<"add", 0b10>; + +defm SUBA_VG2_M2Z2Z_D : sme2_multivec_accum_add_sub_vg2_D<"sub", 0b11>; +defm SUBA_VG4_M4Z4Z_D : sme2_multivec_accum_add_sub_vg4_D<"sub", 0b11>; } let Predicates = [HasSME2, HasSMEF64F64] in { @@ -385,4 +403,10 @@ defm FMLS_VG4_M4ZZ_D : sme2_mla_add_sub_array_vg4_single_D<"fmls", 0b01>; defm FMLS_VG2_M2Z2Z_D : sme2_mla_add_sub_array_vg2_multi_D<"fmls", 0b01>; defm FMLS_VG4_M4Z4Z_D : sme2_mla_add_sub_array_vg4_multi_D<"fmls", 0b01>; + +defm FADD_VG2_M2Z2Z_D : sme2_multivec_accum_add_sub_vg2_D<"fadd", 0b00>; +defm FADD_VG4_M4Z4Z_D : sme2_multivec_accum_add_sub_vg4_D<"fadd", 0b00>; + +defm FSUB_VG2_M2Z2Z_D : sme2_multivec_accum_add_sub_vg2_D<"fsub", 0b01>; +defm FSUB_VG4_M4Z4Z_D : sme2_multivec_accum_add_sub_vg4_D<"fsub", 0b01>; } diff --git a/llvm/lib/Target/AArch64/SMEInstrFormats.td b/llvm/lib/Target/AArch64/SMEInstrFormats.td --- a/llvm/lib/Target/AArch64/SMEInstrFormats.td +++ b/llvm/lib/Target/AArch64/SMEInstrFormats.td @@ -1338,6 +1338,86 @@ (!cast(NAME) MatrixOp64:$ZAd, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, ZZZZ_d_mul_r:$Zn, ZZZZ_d_mul_r:$Zm), 0>; } +//===----------------------------------------------------------------------===// +// SME2 multiple vectors binary two or four registers + +class sme2_multivec_accum_add_sub + : I<(outs matrix_ty:$ZAdn), + (ins matrix_ty:$_ZAdn, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, vector_ty:$Zm), + mnemonic, "\t$ZAdn[$Rv, $imm3, " # vg_acronym # "], $Zm", + "", []>, Sched<[]> { + bits<2> Rv; + bits<3> imm3; + let Inst{31-23} = 0b110000011; + let Inst{22} = sz; + let Inst{21-17} = 0b10000; + let Inst{15} = 0b0; + let Inst{14-13} = Rv; + let Inst{12-10} = 0b111; + let Inst{5} = 0b0; + let Inst{4} = is_int; + let Inst{3} = s; + let Inst{2-0} = imm3; + + let Constraints = "$ZAdn = $_ZAdn"; +} + +class sme2_multivec_accum_add_sub_vg2 + : sme2_multivec_accum_add_sub { + bits<4> Zm; + let Inst{16} = 0b0; + let Inst{9-6} = Zm; +} + + +multiclass sme2_multivec_accum_add_sub_vg2_S op> { + def NAME : sme2_multivec_accum_add_sub_vg2; + + def : InstAlias(NAME) MatrixOp32:$ZAdn, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, ZZ_s_mul_r:$Zm), 0>; +} + +multiclass sme2_multivec_accum_add_sub_vg2_D op> { + def NAME : sme2_multivec_accum_add_sub_vg2; + def : InstAlias(NAME) MatrixOp64:$ZAdn, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, ZZ_d_mul_r:$Zm), 0>; + +} + +class sme2_multivec_accum_add_sub_vg4 + : sme2_multivec_accum_add_sub { + bits<3> Zm; + let Inst{16} = 0b1; + let Inst{9-7} = Zm; + let Inst{6} = 0b0; +} + +multiclass sme2_multivec_accum_add_sub_vg4_S op> { + def NAME : sme2_multivec_accum_add_sub_vg4; + + def : InstAlias(NAME) MatrixOp32:$ZAdn, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, ZZZZ_s_mul_r:$Zm), 0>; +} + +multiclass sme2_multivec_accum_add_sub_vg4_D op> { + def NAME : sme2_multivec_accum_add_sub_vg4; + def : InstAlias(NAME) MatrixOp64:$ZAdn, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, ZZZZ_d_mul_r:$Zm), 0>; +} + //===----------------------------------------------------------------------===// // SME2 Multi-vector - Multiple and Single SVE Destructive // Two and Four registers diff --git a/llvm/test/MC/AArch64/SME2/add-diagnostics.s b/llvm/test/MC/AArch64/SME2/add-diagnostics.s --- a/llvm/test/MC/AArch64/SME2/add-diagnostics.s +++ b/llvm/test/MC/AArch64/SME2/add-diagnostics.s @@ -23,6 +23,17 @@ // CHECK-NEXT: add za.s[w8, -1], {z0.s - z3.s}, {z4.s - z7.s} // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: +add za.d[w8, 8, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: za.d[w8, 8, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +add za.d[w8, -1, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: za.d[w8, -1, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + // --------------------------------------------------------------------------// // Invalid vector select register @@ -49,6 +60,11 @@ // CHECK-NEXT: add za.h[w8, #0], {z0.h-z3.h}, z4.h // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: +add za.h[w8, 0, vgx2], {z0.s, z1.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .d +// CHECK-NEXT: za.h[w8, 0, vgx2], {z0.s, z1.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + // --------------------------------------------------------------------------// // Invalid vector grouping diff --git a/llvm/test/MC/AArch64/SME2/add.s b/llvm/test/MC/AArch64/SME2/add.s --- a/llvm/test/MC/AArch64/SME2/add.s +++ b/llvm/test/MC/AArch64/SME2/add.s @@ -37,6 +37,142 @@ // CHECK-UNKNOWN: c16fa31e +add za.s[w8, 0, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00010000 +// CHECK-INST: add za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x10,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c10 + +add za.s[w8, 0], {z0.s, z1.s} // 11000001-10100000-00011100-00010000 +// CHECK-INST: add za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x10,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c10 + +add za.s[w10, 5, vgx2], {z10.s, z11.s} // 11000001-10100000-01011101-01010101 +// CHECK-INST: add za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x55,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d55 + +add za.s[w10, 5], {z10.s, z11.s} // 11000001-10100000-01011101-01010101 +// CHECK-INST: add za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x55,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d55 + +add za.s[w11, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-01111101-10010111 +// CHECK-INST: add za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x97,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d97 + +add za.s[w11, 7], {z12.s, z13.s} // 11000001-10100000-01111101-10010111 +// CHECK-INST: add za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x97,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d97 + +add za.s[w11, 7, vgx2], {z30.s, z31.s} // 11000001-10100000-01111111-11010111 +// CHECK-INST: add za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xd7,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fd7 + +add za.s[w11, 7], {z30.s, z31.s} // 11000001-10100000-01111111-11010111 +// CHECK-INST: add za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xd7,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fd7 + +add za.s[w8, 5, vgx2], {z16.s, z17.s} // 11000001-10100000-00011110-00010101 +// CHECK-INST: add za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x15,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e15 + +add za.s[w8, 5], {z16.s, z17.s} // 11000001-10100000-00011110-00010101 +// CHECK-INST: add za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x15,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e15 + +add za.s[w8, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00010001 +// CHECK-INST: add za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x11,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c11 + +add za.s[w8, 1], {z0.s, z1.s} // 11000001-10100000-00011100-00010001 +// CHECK-INST: add za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x11,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c11 + +add za.s[w10, 0, vgx2], {z18.s, z19.s} // 11000001-10100000-01011110-01010000 +// CHECK-INST: add za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x50,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e50 + +add za.s[w10, 0], {z18.s, z19.s} // 11000001-10100000-01011110-01010000 +// CHECK-INST: add za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x50,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 + +add za.s[w8, 0], {z12.s, z13.s} // 11000001-10100000-00011101-10010000 +// CHECK-INST: add za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x90,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d90 + +add za.s[w10, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-01011100-00010001 +// CHECK-INST: add za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x11,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c11 + +add za.s[w10, 1], {z0.s, z1.s} // 11000001-10100000-01011100-00010001 +// CHECK-INST: add za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x11,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c11 + +add za.s[w8, 5, vgx2], {z22.s, z23.s} // 11000001-10100000-00011110-11010101 +// CHECK-INST: add za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xd5,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ed5 + +add za.s[w8, 5], {z22.s, z23.s} // 11000001-10100000-00011110-11010101 +// CHECK-INST: add za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xd5,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ed5 + +add za.s[w11, 2, vgx2], {z8.s, z9.s} // 11000001-10100000-01111101-00010010 +// CHECK-INST: add za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x12,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d12 + +add za.s[w11, 2], {z8.s, z9.s} // 11000001-10100000-01111101-00010010 +// CHECK-INST: add za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x12,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d12 + +add za.s[w9, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-00111101-10010111 +// CHECK-INST: add za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x97,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d97 + +add za.s[w9, 7], {z12.s, z13.s} // 11000001-10100000-00111101-10010111 +// CHECK-INST: add za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x97,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d97 add za.s[w8, 0, vgx2], {z0.s, z1.s}, z0.s // 11000001, 00100000, 00011000, 00010000 // CHECK-INST: add za.s[w8, 0, vgx2], { z0.s, z1.s }, z0.s // CHECK-ENCODING: [0x10,0x18,0x20,0xc1] @@ -352,6 +488,151 @@ // CHECK-UNKNOWN: c1aa3997 +add za.d[w8, 0, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00010000 +// CHECK-INST: add za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x10,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c10 + +add za.d[w8, 0], {z0.d, z1.d} // 11000001-11100000-00011100-00010000 +// CHECK-INST: add za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x10,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c10 + +add za.d[w10, 5, vgx2], {z10.d, z11.d} // 11000001-11100000-01011101-01010101 +// CHECK-INST: add za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x55,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05d55 + +add za.d[w10, 5], {z10.d, z11.d} // 11000001-11100000-01011101-01010101 +// CHECK-INST: add za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x55,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05d55 + +add za.d[w11, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-01111101-10010111 +// CHECK-INST: add za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x97,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d97 + +add za.d[w11, 7], {z12.d, z13.d} // 11000001-11100000-01111101-10010111 +// CHECK-INST: add za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x97,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d97 + +add za.d[w11, 7, vgx2], {z30.d, z31.d} // 11000001-11100000-01111111-11010111 +// CHECK-INST: add za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xd7,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07fd7 + +add za.d[w11, 7], {z30.d, z31.d} // 11000001-11100000-01111111-11010111 +// CHECK-INST: add za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xd7,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07fd7 + +add za.d[w8, 5, vgx2], {z16.d, z17.d} // 11000001-11100000-00011110-00010101 +// CHECK-INST: add za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x15,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01e15 + +add za.d[w8, 5], {z16.d, z17.d} // 11000001-11100000-00011110-00010101 +// CHECK-INST: add za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x15,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01e15 + +add za.d[w8, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00010001 +// CHECK-INST: add za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x11,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c11 + +add za.d[w8, 1], {z0.d, z1.d} // 11000001-11100000-00011100-00010001 +// CHECK-INST: add za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x11,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c11 + +add za.d[w10, 0, vgx2], {z18.d, z19.d} // 11000001-11100000-01011110-01010000 +// CHECK-INST: add za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x50,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05e50 + +add za.d[w10, 0], {z18.d, z19.d} // 11000001-11100000-01011110-01010000 +// CHECK-INST: add za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x50,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05e50 + +add za.d[w8, 0, vgx2], {z12.d, z13.d} // 11000001-11100000-00011101-10010000 +// CHECK-INST: add za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x90,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01d90 + +add za.d[w8, 0], {z12.d, z13.d} // 11000001-11100000-00011101-10010000 +// CHECK-INST: add za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x90,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01d90 + +add za.d[w10, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-01011100-00010001 +// CHECK-INST: add za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x11,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05c11 + +add za.d[w10, 1], {z0.d, z1.d} // 11000001-11100000-01011100-00010001 +// CHECK-INST: add za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x11,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05c11 + +add za.d[w8, 5, vgx2], {z22.d, z23.d} // 11000001-11100000-00011110-11010101 +// CHECK-INST: add za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xd5,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01ed5 + +add za.d[w8, 5], {z22.d, z23.d} // 11000001-11100000-00011110-11010101 +// CHECK-INST: add za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xd5,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01ed5 + +add za.d[w11, 2, vgx2], {z8.d, z9.d} // 11000001-11100000-01111101-00010010 +// CHECK-INST: add za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x12,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d12 + +add za.d[w11, 2], {z8.d, z9.d} // 11000001-11100000-01111101-00010010 +// CHECK-INST: add za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x12,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d12 + +add za.d[w9, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-00111101-10010111 +// CHECK-INST: add za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x97,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e03d97 + +add za.d[w9, 7], {z12.d, z13.d} // 11000001-11100000-00111101-10010111 +// CHECK-INST: add za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x97,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e03d97 + + add za.d[w8, 0, vgx2], {z0.d, z1.d}, z0.d // 11000001, 01100000, 00011000, 00010000 // CHECK-INST: add za.d[w8, 0, vgx2], { z0.d, z1.d }, z0.d // CHECK-ENCODING: [0x10,0x18,0x60,0xc1] @@ -718,7 +999,152 @@ // CHECK-UNKNOWN: c16fab1c -add za.s[w8, 0, vgx4], {z0.s-z3.s}, z0.s // 11000001-00110000-00011000-00010000 +add za.s[w8, 0, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00010000 +// CHECK-INST: add za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x10,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c10 + +add za.s[w8, 0], {z0.s - z3.s} // 11000001-10100001-00011100-00010000 +// CHECK-INST: add za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x10,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c10 + +add za.s[w10, 5, vgx4], {z8.s - z11.s} // 11000001-10100001-01011101-00010101 +// CHECK-INST: add za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x15,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d15 + +add za.s[w10, 5], {z8.s - z11.s} // 11000001-10100001-01011101-00010101 +// CHECK-INST: add za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x15,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d15 + +add za.s[w11, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-01111101-10010111 +// CHECK-INST: add za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x97,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d97 + +add za.s[w11, 7], {z12.s - z15.s} // 11000001-10100001-01111101-10010111 +// CHECK-INST: add za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x97,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d97 + +add za.s[w11, 7, vgx4], {z28.s - z31.s} // 11000001-10100001-01111111-10010111 +// CHECK-INST: add za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x97,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f97 + +add za.s[w11, 7], {z28.s - z31.s} // 11000001-10100001-01111111-10010111 +// CHECK-INST: add za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x97,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f97 + +add za.s[w8, 5, vgx4], {z16.s - z19.s} // 11000001-10100001-00011110-00010101 +// CHECK-INST: add za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x15,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e15 + +add za.s[w8, 5], {z16.s - z19.s} // 11000001-10100001-00011110-00010101 +// CHECK-INST: add za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x15,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e15 + +add za.s[w8, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00010001 +// CHECK-INST: add za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x11,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c11 + +add za.s[w8, 1], {z0.s - z3.s} // 11000001-10100001-00011100-00010001 +// CHECK-INST: add za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x11,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c11 + +add za.s[w10, 0, vgx4], {z16.s - z19.s} // 11000001-10100001-01011110-00010000 +// CHECK-INST: add za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x10,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e10 + +add za.s[w10, 0], {z16.s - z19.s} // 11000001-10100001-01011110-00010000 +// CHECK-INST: add za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x10,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e10 + +add za.s[w8, 0, vgx4], {z12.s - z15.s} // 11000001-10100001-00011101-10010000 +// CHECK-INST: add za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x90,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d90 + +add za.s[w8, 0], {z12.s - z15.s} // 11000001-10100001-00011101-10010000 +// CHECK-INST: add za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x90,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d90 + +add za.s[w10, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-01011100-00010001 +// CHECK-INST: add za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x11,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c11 + +add za.s[w10, 1], {z0.s - z3.s} // 11000001-10100001-01011100-00010001 +// CHECK-INST: add za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x11,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c11 + +add za.s[w8, 5, vgx4], {z20.s - z23.s} // 11000001-10100001-00011110-10010101 +// CHECK-INST: add za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x95,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e95 + +add za.s[w8, 5], {z20.s - z23.s} // 11000001-10100001-00011110-10010101 +// CHECK-INST: add za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x95,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e95 + +add za.s[w11, 2, vgx4], {z8.s - z11.s} // 11000001-10100001-01111101-00010010 +// CHECK-INST: add za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x12,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d12 + +add za.s[w11, 2], {z8.s - z11.s} // 11000001-10100001-01111101-00010010 +// CHECK-INST: add za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x12,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d12 + +add za.s[w9, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-00111101-10010111 +// CHECK-INST: add za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x97,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d97 + +add za.s[w9, 7], {z12.s - z15.s} // 11000001-10100001-00111101-10010111 +// CHECK-INST: add za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x97,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d97 + + +add za.s[w8, 0, vgx4], {z0.s - z3.s}, z0.s // 11000001-00110000-00011000-00010000 // CHECK-INST: add za.s[w8, 0, vgx4], { z0.s - z3.s }, z0.s // CHECK-ENCODING: [0x10,0x18,0x30,0xc1] // CHECK-ERROR: instruction requires: sme2 @@ -1033,6 +1459,151 @@ // CHECK-UNKNOWN: c1a93997 +add za.d[w8, 0, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00010000 +// CHECK-INST: add za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x10,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c10 + +add za.d[w8, 0], {z0.d - z3.d} // 11000001-11100001-00011100-00010000 +// CHECK-INST: add za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x10,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c10 + +add za.d[w10, 5, vgx4], {z8.d - z11.d} // 11000001-11100001-01011101-00010101 +// CHECK-INST: add za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x15,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15d15 + +add za.d[w10, 5], {z8.d - z11.d} // 11000001-11100001-01011101-00010101 +// CHECK-INST: add za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x15,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15d15 + +add za.d[w11, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-01111101-10010111 +// CHECK-INST: add za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x97,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d97 + +add za.d[w11, 7], {z12.d - z15.d} // 11000001-11100001-01111101-10010111 +// CHECK-INST: add za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x97,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d97 + +add za.d[w11, 7, vgx4], {z28.d - z31.d} // 11000001-11100001-01111111-10010111 +// CHECK-INST: add za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x97,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17f97 + +add za.d[w11, 7], {z28.d - z31.d} // 11000001-11100001-01111111-10010111 +// CHECK-INST: add za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x97,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17f97 + +add za.d[w8, 5, vgx4], {z16.d - z19.d} // 11000001-11100001-00011110-00010101 +// CHECK-INST: add za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x15,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e15 + +add za.d[w8, 5], {z16.d - z19.d} // 11000001-11100001-00011110-00010101 +// CHECK-INST: add za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x15,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e15 + +add za.d[w8, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00010001 +// CHECK-INST: add za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x11,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c11 + +add za.d[w8, 1], {z0.d - z3.d} // 11000001-11100001-00011100-00010001 +// CHECK-INST: add za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x11,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c11 + +add za.d[w10, 0, vgx4], {z16.d - z19.d} // 11000001-11100001-01011110-00010000 +// CHECK-INST: add za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x10,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15e10 + +add za.d[w10, 0], {z16.d - z19.d} // 11000001-11100001-01011110-00010000 +// CHECK-INST: add za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x10,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15e10 + +add za.d[w8, 0, vgx4], {z12.d - z15.d} // 11000001-11100001-00011101-10010000 +// CHECK-INST: add za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x90,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11d90 + +add za.d[w8, 0], {z12.d - z15.d} // 11000001-11100001-00011101-10010000 +// CHECK-INST: add za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x90,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11d90 + +add za.d[w10, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-01011100-00010001 +// CHECK-INST: add za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x11,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15c11 + +add za.d[w10, 1], {z0.d - z3.d} // 11000001-11100001-01011100-00010001 +// CHECK-INST: add za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x11,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15c11 + +add za.d[w8, 5, vgx4], {z20.d - z23.d} // 11000001-11100001-00011110-10010101 +// CHECK-INST: add za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x95,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e95 + +add za.d[w8, 5], {z20.d - z23.d} // 11000001-11100001-00011110-10010101 +// CHECK-INST: add za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x95,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e95 + +add za.d[w11, 2, vgx4], {z8.d - z11.d} // 11000001-11100001-01111101-00010010 +// CHECK-INST: add za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x12,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d12 + +add za.d[w11, 2], {z8.d - z11.d} // 11000001-11100001-01111101-00010010 +// CHECK-INST: add za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x12,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d12 + +add za.d[w9, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-00111101-10010111 +// CHECK-INST: add za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x97,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e13d97 + +add za.d[w9, 7], {z12.d - z15.d} // 11000001-11100001-00111101-10010111 +// CHECK-INST: add za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x97,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e13d97 + + add za.d[w8, 0, vgx4], {z0.d - z3.d}, z0.d // 11000001-01110000-00011000-00010000 // CHECK-INST: add za.d[w8, 0, vgx4], { z0.d - z3.d }, z0.d // CHECK-ENCODING: [0x10,0x18,0x70,0xc1] @@ -1348,7 +1919,7 @@ // CHECK-UNKNOWN: c1efab1c -add za.d[w8, 0, vgx4], {z0.d-z3.d}, {z0.d-z3.d} // 11000001-11100001-00011000-00010000 +add za.d[w8, 0, vgx4], {z0.d - z3.d}, {z0.d - z3.d} // 11000001-11100001-00011000-00010000 // CHECK-INST: add za.d[w8, 0, vgx4], { z0.d - z3.d }, { z0.d - z3.d } // CHECK-ENCODING: [0x10,0x18,0xe1,0xc1] // CHECK-ERROR: instruction requires: sme2 diff --git a/llvm/test/MC/AArch64/SME2/fadd-diagnostics.s b/llvm/test/MC/AArch64/SME2/fadd-diagnostics.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AArch64/SME2/fadd-diagnostics.s @@ -0,0 +1,46 @@ +// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 2>&1 < %s | FileCheck %s + +// --------------------------------------------------------------------------// +// Out of range index offset + +fadd za.d[w8, 8, vgx2], {z0.d, z1.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: fadd za.d[w8, 8, vgx2], {z0.d, z1.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fadd za.s[w8, -1, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: fadd za.s[w8, -1, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +// --------------------------------------------------------------------------// +// Invalid vector select register + +fadd za.d[w7, 7, vgx4], {z0.d-z3.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] +// CHECK-NEXT: fadd za.d[w7, 7, vgx4], {z0.d-z3.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fadd za.s[w12, 7, vgx2], {z0.s, z1.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] +// CHECK-NEXT: fadd za.s[w12, 7, vgx2], {z0.s, z1.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +// --------------------------------------------------------------------------// +// Invalid vector list + +fadd za.d[w8, 0, vgx4], {z0.d-z4.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors +// CHECK-NEXT: fadd za.d[w8, 0, vgx4], {z0.d-z4.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fadd za.s[w8, 0, vgx2], {z1.s-z2.s} +// 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 +// CHECK-NEXT: fadd za.s[w8, 0, vgx2], {z1.s-z2.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fadd za.s[w8, 0, vgx4], {z1.s-z4.s} +// 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 +// CHECK-NEXT: fadd za.s[w8, 0, vgx4], {z1.s-z4.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + diff --git a/llvm/test/MC/AArch64/SME2/fadd.s b/llvm/test/MC/AArch64/SME2/fadd.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AArch64/SME2/fadd.s @@ -0,0 +1,593 @@ +// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-ERROR +// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | llvm-objdump -d --mattr=+sme2,+sme-f64f64 - | FileCheck %s --check-prefix=CHECK-INST +// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN +// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \ +// RUN: | llvm-mc -triple=aarch64 -mattr=+sme2,+sme-f64f64 -disassemble -show-encoding \ +// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST + + +fadd za.d[w8, 0, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00000000 +// CHECK-INST: fadd za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x00,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c00 + +fadd za.d[w8, 0], {z0.d, z1.d} // 11000001-11100000-00011100-00000000 +// CHECK-INST: fadd za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x00,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c00 + +fadd za.d[w10, 5, vgx2], {z10.d, z11.d} // 11000001-11100000-01011101-01000101 +// CHECK-INST: fadd za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x45,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05d45 + +fadd za.d[w10, 5], {z10.d, z11.d} // 11000001-11100000-01011101-01000101 +// CHECK-INST: fadd za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x45,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05d45 + +fadd za.d[w11, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-01111101-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x87,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d87 + +fadd za.d[w11, 7], {z12.d, z13.d} // 11000001-11100000-01111101-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x87,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d87 + +fadd za.d[w11, 7, vgx2], {z30.d, z31.d} // 11000001-11100000-01111111-11000111 +// CHECK-INST: fadd za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xc7,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07fc7 + +fadd za.d[w11, 7], {z30.d, z31.d} // 11000001-11100000-01111111-11000111 +// CHECK-INST: fadd za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xc7,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07fc7 + +fadd za.d[w8, 5, vgx2], {z16.d, z17.d} // 11000001-11100000-00011110-00000101 +// CHECK-INST: fadd za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x05,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01e05 + +fadd za.d[w8, 5], {z16.d, z17.d} // 11000001-11100000-00011110-00000101 +// CHECK-INST: fadd za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x05,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01e05 + +fadd za.d[w8, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00000001 +// CHECK-INST: fadd za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x01,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c01 + +fadd za.d[w8, 1], {z0.d, z1.d} // 11000001-11100000-00011100-00000001 +// CHECK-INST: fadd za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x01,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c01 + +fadd za.d[w10, 0, vgx2], {z18.d, z19.d} // 11000001-11100000-01011110-01000000 +// CHECK-INST: fadd za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x40,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05e40 + +fadd za.d[w10, 0], {z18.d, z19.d} // 11000001-11100000-01011110-01000000 +// CHECK-INST: fadd za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x40,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05e40 + +fadd za.d[w8, 0, vgx2], {z12.d, z13.d} // 11000001-11100000-00011101-10000000 +// CHECK-INST: fadd za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x80,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01d80 + +fadd za.d[w8, 0], {z12.d, z13.d} // 11000001-11100000-00011101-10000000 +// CHECK-INST: fadd za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x80,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01d80 + +fadd za.d[w10, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-01011100-00000001 +// CHECK-INST: fadd za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x01,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05c01 + +fadd za.d[w10, 1], {z0.d, z1.d} // 11000001-11100000-01011100-00000001 +// CHECK-INST: fadd za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x01,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05c01 + +fadd za.d[w8, 5, vgx2], {z22.d, z23.d} // 11000001-11100000-00011110-11000101 +// CHECK-INST: fadd za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xc5,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01ec5 + +fadd za.d[w8, 5], {z22.d, z23.d} // 11000001-11100000-00011110-11000101 +// CHECK-INST: fadd za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xc5,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01ec5 + +fadd za.d[w11, 2, vgx2], {z8.d, z9.d} // 11000001-11100000-01111101-00000010 +// CHECK-INST: fadd za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x02,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d02 + +fadd za.d[w11, 2], {z8.d, z9.d} // 11000001-11100000-01111101-00000010 +// CHECK-INST: fadd za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x02,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d02 + +fadd za.d[w9, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-00111101-10000111 +// CHECK-INST: fadd za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x87,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e03d87 + +fadd za.d[w9, 7], {z12.d, z13.d} // 11000001-11100000-00111101-10000111 +// CHECK-INST: fadd za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x87,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e03d87 + + +fadd za.s[w8, 0, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00000000 +// CHECK-INST: fadd za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x00,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c00 + +fadd za.s[w8, 0], {z0.s, z1.s} // 11000001-10100000-00011100-00000000 +// CHECK-INST: fadd za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x00,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c00 + +fadd za.s[w10, 5, vgx2], {z10.s, z11.s} // 11000001-10100000-01011101-01000101 +// CHECK-INST: fadd za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x45,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d45 + +fadd za.s[w10, 5], {z10.s, z11.s} // 11000001-10100000-01011101-01000101 +// CHECK-INST: fadd za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x45,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d45 + +fadd za.s[w11, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-01111101-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x87,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d87 + +fadd za.s[w11, 7], {z12.s, z13.s} // 11000001-10100000-01111101-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x87,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d87 + +fadd za.s[w11, 7, vgx2], {z30.s, z31.s} // 11000001-10100000-01111111-11000111 +// CHECK-INST: fadd za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xc7,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fc7 + +fadd za.s[w11, 7], {z30.s, z31.s} // 11000001-10100000-01111111-11000111 +// CHECK-INST: fadd za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xc7,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fc7 + +fadd za.s[w8, 5, vgx2], {z16.s, z17.s} // 11000001-10100000-00011110-00000101 +// CHECK-INST: fadd za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x05,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e05 + +fadd za.s[w8, 5], {z16.s, z17.s} // 11000001-10100000-00011110-00000101 +// CHECK-INST: fadd za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x05,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e05 + +fadd za.s[w8, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00000001 +// CHECK-INST: fadd za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x01,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c01 + +fadd za.s[w8, 1], {z0.s, z1.s} // 11000001-10100000-00011100-00000001 +// CHECK-INST: fadd za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x01,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c01 + +fadd za.s[w10, 0, vgx2], {z18.s, z19.s} // 11000001-10100000-01011110-01000000 +// CHECK-INST: fadd za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x40,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e40 + +fadd za.s[w10, 0], {z18.s, z19.s} // 11000001-10100000-01011110-01000000 +// CHECK-INST: fadd za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x40,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e40 + +fadd za.s[w8, 0, vgx2], {z12.s, z13.s} // 11000001-10100000-00011101-10000000 +// CHECK-INST: fadd za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x80,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d80 + +fadd za.s[w8, 0], {z12.s, z13.s} // 11000001-10100000-00011101-10000000 +// CHECK-INST: fadd za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x80,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d80 + +fadd za.s[w10, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-01011100-00000001 +// CHECK-INST: fadd za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x01,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c01 + +fadd za.s[w10, 1], {z0.s, z1.s} // 11000001-10100000-01011100-00000001 +// CHECK-INST: fadd za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x01,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c01 + +fadd za.s[w8, 5, vgx2], {z22.s, z23.s} // 11000001-10100000-00011110-11000101 +// CHECK-INST: fadd za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xc5,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ec5 + +fadd za.s[w8, 5], {z22.s, z23.s} // 11000001-10100000-00011110-11000101 +// CHECK-INST: fadd za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xc5,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ec5 + +fadd za.s[w11, 2, vgx2], {z8.s, z9.s} // 11000001-10100000-01111101-00000010 +// CHECK-INST: fadd za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x02,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d02 + +fadd za.s[w11, 2], {z8.s, z9.s} // 11000001-10100000-01111101-00000010 +// CHECK-INST: fadd za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x02,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d02 + +fadd za.s[w9, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-00111101-10000111 +// CHECK-INST: fadd za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x87,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d87 + +fadd za.s[w9, 7], {z12.s, z13.s} // 11000001-10100000-00111101-10000111 +// CHECK-INST: fadd za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x87,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d87 + + +fadd za.d[w8, 0, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00000000 +// CHECK-INST: fadd za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x00,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c00 + +fadd za.d[w8, 0], {z0.d - z3.d} // 11000001-11100001-00011100-00000000 +// CHECK-INST: fadd za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x00,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c00 + +fadd za.d[w10, 5, vgx4], {z8.d - z11.d} // 11000001-11100001-01011101-00000101 +// CHECK-INST: fadd za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x05,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15d05 + +fadd za.d[w10, 5], {z8.d - z11.d} // 11000001-11100001-01011101-00000101 +// CHECK-INST: fadd za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x05,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15d05 + +fadd za.d[w11, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-01111101-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x87,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d87 + +fadd za.d[w11, 7], {z12.d - z15.d} // 11000001-11100001-01111101-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x87,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d87 + +fadd za.d[w11, 7, vgx4], {z28.d - z31.d} // 11000001-11100001-01111111-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x87,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17f87 + +fadd za.d[w11, 7], {z28.d - z31.d} // 11000001-11100001-01111111-10000111 +// CHECK-INST: fadd za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x87,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17f87 + +fadd za.d[w8, 5, vgx4], {z16.d - z19.d} // 11000001-11100001-00011110-00000101 +// CHECK-INST: fadd za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x05,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e05 + +fadd za.d[w8, 5], {z16.d - z19.d} // 11000001-11100001-00011110-00000101 +// CHECK-INST: fadd za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x05,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e05 + +fadd za.d[w8, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00000001 +// CHECK-INST: fadd za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x01,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c01 + +fadd za.d[w8, 1], {z0.d - z3.d} // 11000001-11100001-00011100-00000001 +// CHECK-INST: fadd za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x01,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c01 + +fadd za.d[w10, 0, vgx4], {z16.d - z19.d} // 11000001-11100001-01011110-00000000 +// CHECK-INST: fadd za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x00,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15e00 + +fadd za.d[w10, 0], {z16.d - z19.d} // 11000001-11100001-01011110-00000000 +// CHECK-INST: fadd za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x00,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15e00 + +fadd za.d[w8, 0, vgx4], {z12.d - z15.d} // 11000001-11100001-00011101-10000000 +// CHECK-INST: fadd za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x80,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11d80 + +fadd za.d[w8, 0], {z12.d - z15.d} // 11000001-11100001-00011101-10000000 +// CHECK-INST: fadd za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x80,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11d80 + +fadd za.d[w10, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-01011100-00000001 +// CHECK-INST: fadd za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x01,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15c01 + +fadd za.d[w10, 1], {z0.d - z3.d} // 11000001-11100001-01011100-00000001 +// CHECK-INST: fadd za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x01,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15c01 + +fadd za.d[w8, 5, vgx4], {z20.d - z23.d} // 11000001-11100001-00011110-10000101 +// CHECK-INST: fadd za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x85,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e85 + +fadd za.d[w8, 5], {z20.d - z23.d} // 11000001-11100001-00011110-10000101 +// CHECK-INST: fadd za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x85,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e85 + +fadd za.d[w11, 2, vgx4], {z8.d - z11.d} // 11000001-11100001-01111101-00000010 +// CHECK-INST: fadd za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x02,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d02 + +fadd za.d[w11, 2], {z8.d - z11.d} // 11000001-11100001-01111101-00000010 +// CHECK-INST: fadd za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x02,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d02 + +fadd za.d[w9, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-00111101-10000111 +// CHECK-INST: fadd za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x87,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e13d87 + +fadd za.d[w9, 7], {z12.d - z15.d} // 11000001-11100001-00111101-10000111 +// CHECK-INST: fadd za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x87,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e13d87 + + +fadd za.s[w8, 0, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00000000 +// CHECK-INST: fadd za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x00,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c00 + +fadd za.s[w8, 0], {z0.s - z3.s} // 11000001-10100001-00011100-00000000 +// CHECK-INST: fadd za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x00,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c00 + +fadd za.s[w10, 5, vgx4], {z8.s - z11.s} // 11000001-10100001-01011101-00000101 +// CHECK-INST: fadd za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x05,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d05 + +fadd za.s[w10, 5], {z8.s - z11.s} // 11000001-10100001-01011101-00000101 +// CHECK-INST: fadd za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x05,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d05 + +fadd za.s[w11, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-01111101-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x87,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d87 + +fadd za.s[w11, 7], {z12.s - z15.s} // 11000001-10100001-01111101-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x87,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d87 + +fadd za.s[w11, 7, vgx4], {z28.s - z31.s} // 11000001-10100001-01111111-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x87,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f87 + +fadd za.s[w11, 7], {z28.s - z31.s} // 11000001-10100001-01111111-10000111 +// CHECK-INST: fadd za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x87,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f87 + +fadd za.s[w8, 5, vgx4], {z16.s - z19.s} // 11000001-10100001-00011110-00000101 +// CHECK-INST: fadd za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x05,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e05 + +fadd za.s[w8, 5], {z16.s - z19.s} // 11000001-10100001-00011110-00000101 +// CHECK-INST: fadd za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x05,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e05 + +fadd za.s[w8, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00000001 +// CHECK-INST: fadd za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x01,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c01 + +fadd za.s[w8, 1], {z0.s - z3.s} // 11000001-10100001-00011100-00000001 +// CHECK-INST: fadd za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x01,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c01 + +fadd za.s[w10, 0, vgx4], {z16.s - z19.s} // 11000001-10100001-01011110-00000000 +// CHECK-INST: fadd za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x00,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e00 + +fadd za.s[w10, 0], {z16.s - z19.s} // 11000001-10100001-01011110-00000000 +// CHECK-INST: fadd za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x00,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e00 + +fadd za.s[w8, 0, vgx4], {z12.s - z15.s} // 11000001-10100001-00011101-10000000 +// CHECK-INST: fadd za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x80,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d80 + +fadd za.s[w8, 0], {z12.s - z15.s} // 11000001-10100001-00011101-10000000 +// CHECK-INST: fadd za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x80,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d80 + +fadd za.s[w10, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-01011100-00000001 +// CHECK-INST: fadd za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x01,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c01 + +fadd za.s[w10, 1], {z0.s - z3.s} // 11000001-10100001-01011100-00000001 +// CHECK-INST: fadd za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x01,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c01 + +fadd za.s[w8, 5, vgx4], {z20.s - z23.s} // 11000001-10100001-00011110-10000101 +// CHECK-INST: fadd za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x85,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e85 + +fadd za.s[w8, 5], {z20.s - z23.s} // 11000001-10100001-00011110-10000101 +// CHECK-INST: fadd za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x85,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e85 + +fadd za.s[w11, 2, vgx4], {z8.s - z11.s} // 11000001-10100001-01111101-00000010 +// CHECK-INST: fadd za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x02,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d02 + +fadd za.s[w11, 2], {z8.s - z11.s} // 11000001-10100001-01111101-00000010 +// CHECK-INST: fadd za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x02,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d02 + +fadd za.s[w9, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-00111101-10000111 +// CHECK-INST: fadd za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x87,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d87 + +fadd za.s[w9, 7], {z12.s - z15.s} // 11000001-10100001-00111101-10000111 +// CHECK-INST: fadd za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x87,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d87 + diff --git a/llvm/test/MC/AArch64/SME2/fsub-diagnostics.s b/llvm/test/MC/AArch64/SME2/fsub-diagnostics.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AArch64/SME2/fsub-diagnostics.s @@ -0,0 +1,46 @@ +// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 2>&1 < %s | FileCheck %s + +// --------------------------------------------------------------------------// +// Out of range index offset + +fsub za.d[w8, 8, vgx2], {z0.d, z1.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: fsub za.d[w8, 8, vgx2], {z0.d, z1.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fsub za.s[w8, -1, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: fsub za.s[w8, -1, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +// --------------------------------------------------------------------------// +// Invalid vector select register + +fsub za.d[w7, 7, vgx4], {z0.d-z3.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] +// CHECK-NEXT: fsub za.d[w7, 7, vgx4], {z0.d-z3.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fsub za.s[w12, 7, vgx2], {z0.s, z1.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must be a register in range [w8, w11] +// CHECK-NEXT: fsub za.s[w12, 7, vgx2], {z0.s, z1.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +// --------------------------------------------------------------------------// +// Invalid vector list + +fsub za.d[w8, 0, vgx4], {z0.d-z4.d} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid number of vectors +// CHECK-NEXT: fsub za.d[w8, 0, vgx4], {z0.d-z4.d} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fsub za.s[w8, 0, vgx2], {z1.s-z2.s} +// 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 +// CHECK-NEXT: fsub za.s[w8, 0, vgx2], {z1.s-z2.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +fsub za.s[w8, 0, vgx4], {z1.s-z4.s} +// 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 +// CHECK-NEXT: fsub za.s[w8, 0, vgx4], {z1.s-z4.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + diff --git a/llvm/test/MC/AArch64/SME2/fsub.s b/llvm/test/MC/AArch64/SME2/fsub.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AArch64/SME2/fsub.s @@ -0,0 +1,593 @@ +// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-ERROR +// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | llvm-objdump -d --mattr=+sme2,+sme-f64f64 - | FileCheck %s --check-prefix=CHECK-INST +// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN +// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2,+sme-f64f64 < %s \ +// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \ +// RUN: | llvm-mc -triple=aarch64 -mattr=+sme2,+sme-f64f64 -disassemble -show-encoding \ +// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST + + +fsub za.d[w8, 0, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00001000 +// CHECK-INST: fsub za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x08,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c08 + +fsub za.d[w8, 0], {z0.d, z1.d} // 11000001-11100000-00011100-00001000 +// CHECK-INST: fsub za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x08,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c08 + +fsub za.d[w10, 5, vgx2], {z10.d, z11.d} // 11000001-11100000-01011101-01001101 +// CHECK-INST: fsub za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x4d,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05d4d + +fsub za.d[w10, 5], {z10.d, z11.d} // 11000001-11100000-01011101-01001101 +// CHECK-INST: fsub za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x4d,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05d4d + +fsub za.d[w11, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-01111101-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x8f,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d8f + +fsub za.d[w11, 7], {z12.d, z13.d} // 11000001-11100000-01111101-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x8f,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d8f + +fsub za.d[w11, 7, vgx2], {z30.d, z31.d} // 11000001-11100000-01111111-11001111 +// CHECK-INST: fsub za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xcf,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07fcf + +fsub za.d[w11, 7], {z30.d, z31.d} // 11000001-11100000-01111111-11001111 +// CHECK-INST: fsub za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xcf,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07fcf + +fsub za.d[w8, 5, vgx2], {z16.d, z17.d} // 11000001-11100000-00011110-00001101 +// CHECK-INST: fsub za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x0d,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01e0d + +fsub za.d[w8, 5], {z16.d, z17.d} // 11000001-11100000-00011110-00001101 +// CHECK-INST: fsub za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x0d,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01e0d + +fsub za.d[w8, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00001001 +// CHECK-INST: fsub za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x09,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c09 + +fsub za.d[w8, 1], {z0.d, z1.d} // 11000001-11100000-00011100-00001001 +// CHECK-INST: fsub za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x09,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01c09 + +fsub za.d[w10, 0, vgx2], {z18.d, z19.d} // 11000001-11100000-01011110-01001000 +// CHECK-INST: fsub za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x48,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05e48 + +fsub za.d[w10, 0], {z18.d, z19.d} // 11000001-11100000-01011110-01001000 +// CHECK-INST: fsub za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x48,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05e48 + +fsub za.d[w8, 0, vgx2], {z12.d, z13.d} // 11000001-11100000-00011101-10001000 +// CHECK-INST: fsub za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x88,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01d88 + +fsub za.d[w8, 0], {z12.d, z13.d} // 11000001-11100000-00011101-10001000 +// CHECK-INST: fsub za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x88,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01d88 + +fsub za.d[w10, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-01011100-00001001 +// CHECK-INST: fsub za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x09,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05c09 + +fsub za.d[w10, 1], {z0.d, z1.d} // 11000001-11100000-01011100-00001001 +// CHECK-INST: fsub za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x09,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e05c09 + +fsub za.d[w8, 5, vgx2], {z22.d, z23.d} // 11000001-11100000-00011110-11001101 +// CHECK-INST: fsub za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xcd,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01ecd + +fsub za.d[w8, 5], {z22.d, z23.d} // 11000001-11100000-00011110-11001101 +// CHECK-INST: fsub za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xcd,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e01ecd + +fsub za.d[w11, 2, vgx2], {z8.d, z9.d} // 11000001-11100000-01111101-00001010 +// CHECK-INST: fsub za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x0a,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d0a + +fsub za.d[w11, 2], {z8.d, z9.d} // 11000001-11100000-01111101-00001010 +// CHECK-INST: fsub za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x0a,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e07d0a + +fsub za.d[w9, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-00111101-10001111 +// CHECK-INST: fsub za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x8f,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e03d8f + +fsub za.d[w9, 7], {z12.d, z13.d} // 11000001-11100000-00111101-10001111 +// CHECK-INST: fsub za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x8f,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e03d8f + + +fsub za.s[w8, 0, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00001000 +// CHECK-INST: fsub za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x08,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c08 + +fsub za.s[w8, 0], {z0.s, z1.s} // 11000001-10100000-00011100-00001000 +// CHECK-INST: fsub za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x08,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c08 + +fsub za.s[w10, 5, vgx2], {z10.s, z11.s} // 11000001-10100000-01011101-01001101 +// CHECK-INST: fsub za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x4d,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d4d + +fsub za.s[w10, 5], {z10.s, z11.s} // 11000001-10100000-01011101-01001101 +// CHECK-INST: fsub za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x4d,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d4d + +fsub za.s[w11, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-01111101-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x8f,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d8f + +fsub za.s[w11, 7], {z12.s, z13.s} // 11000001-10100000-01111101-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x8f,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d8f + +fsub za.s[w11, 7, vgx2], {z30.s, z31.s} // 11000001-10100000-01111111-11001111 +// CHECK-INST: fsub za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xcf,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fcf + +fsub za.s[w11, 7], {z30.s, z31.s} // 11000001-10100000-01111111-11001111 +// CHECK-INST: fsub za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xcf,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fcf + +fsub za.s[w8, 5, vgx2], {z16.s, z17.s} // 11000001-10100000-00011110-00001101 +// CHECK-INST: fsub za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x0d,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e0d + +fsub za.s[w8, 5], {z16.s, z17.s} // 11000001-10100000-00011110-00001101 +// CHECK-INST: fsub za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x0d,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e0d + +fsub za.s[w8, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00001001 +// CHECK-INST: fsub za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x09,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c09 + +fsub za.s[w8, 1], {z0.s, z1.s} // 11000001-10100000-00011100-00001001 +// CHECK-INST: fsub za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x09,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c09 + +fsub za.s[w10, 0, vgx2], {z18.s, z19.s} // 11000001-10100000-01011110-01001000 +// CHECK-INST: fsub za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x48,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e48 + +fsub za.s[w10, 0], {z18.s, z19.s} // 11000001-10100000-01011110-01001000 +// CHECK-INST: fsub za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x48,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e48 + +fsub za.s[w8, 0, vgx2], {z12.s, z13.s} // 11000001-10100000-00011101-10001000 +// CHECK-INST: fsub za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x88,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d88 + +fsub za.s[w8, 0], {z12.s, z13.s} // 11000001-10100000-00011101-10001000 +// CHECK-INST: fsub za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x88,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d88 + +fsub za.s[w10, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-01011100-00001001 +// CHECK-INST: fsub za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x09,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c09 + +fsub za.s[w10, 1], {z0.s, z1.s} // 11000001-10100000-01011100-00001001 +// CHECK-INST: fsub za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x09,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c09 + +fsub za.s[w8, 5, vgx2], {z22.s, z23.s} // 11000001-10100000-00011110-11001101 +// CHECK-INST: fsub za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xcd,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ecd + +fsub za.s[w8, 5], {z22.s, z23.s} // 11000001-10100000-00011110-11001101 +// CHECK-INST: fsub za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xcd,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01ecd + +fsub za.s[w11, 2, vgx2], {z8.s, z9.s} // 11000001-10100000-01111101-00001010 +// CHECK-INST: fsub za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x0a,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d0a + +fsub za.s[w11, 2], {z8.s, z9.s} // 11000001-10100000-01111101-00001010 +// CHECK-INST: fsub za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x0a,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d0a + +fsub za.s[w9, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-00111101-10001111 +// CHECK-INST: fsub za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x8f,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d8f + +fsub za.s[w9, 7], {z12.s, z13.s} // 11000001-10100000-00111101-10001111 +// CHECK-INST: fsub za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x8f,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d8f + + +fsub za.d[w8, 0, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00001000 +// CHECK-INST: fsub za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x08,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c08 + +fsub za.d[w8, 0], {z0.d - z3.d} // 11000001-11100001-00011100-00001000 +// CHECK-INST: fsub za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x08,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c08 + +fsub za.d[w10, 5, vgx4], {z8.d - z11.d} // 11000001-11100001-01011101-00001101 +// CHECK-INST: fsub za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x0d,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15d0d + +fsub za.d[w10, 5], {z8.d - z11.d} // 11000001-11100001-01011101-00001101 +// CHECK-INST: fsub za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x0d,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15d0d + +fsub za.d[w11, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-01111101-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x8f,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d8f + +fsub za.d[w11, 7], {z12.d - z15.d} // 11000001-11100001-01111101-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x8f,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d8f + +fsub za.d[w11, 7, vgx4], {z28.d - z31.d} // 11000001-11100001-01111111-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x8f,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17f8f + +fsub za.d[w11, 7], {z28.d - z31.d} // 11000001-11100001-01111111-10001111 +// CHECK-INST: fsub za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x8f,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17f8f + +fsub za.d[w8, 5, vgx4], {z16.d - z19.d} // 11000001-11100001-00011110-00001101 +// CHECK-INST: fsub za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x0d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e0d + +fsub za.d[w8, 5], {z16.d - z19.d} // 11000001-11100001-00011110-00001101 +// CHECK-INST: fsub za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x0d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e0d + +fsub za.d[w8, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00001001 +// CHECK-INST: fsub za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x09,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c09 + +fsub za.d[w8, 1], {z0.d - z3.d} // 11000001-11100001-00011100-00001001 +// CHECK-INST: fsub za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x09,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11c09 + +fsub za.d[w10, 0, vgx4], {z16.d - z19.d} // 11000001-11100001-01011110-00001000 +// CHECK-INST: fsub za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x08,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15e08 + +fsub za.d[w10, 0], {z16.d - z19.d} // 11000001-11100001-01011110-00001000 +// CHECK-INST: fsub za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x08,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15e08 + +fsub za.d[w8, 0, vgx4], {z12.d - z15.d} // 11000001-11100001-00011101-10001000 +// CHECK-INST: fsub za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x88,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11d88 + +fsub za.d[w8, 0], {z12.d - z15.d} // 11000001-11100001-00011101-10001000 +// CHECK-INST: fsub za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x88,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11d88 + +fsub za.d[w10, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-01011100-00001001 +// CHECK-INST: fsub za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x09,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15c09 + +fsub za.d[w10, 1], {z0.d - z3.d} // 11000001-11100001-01011100-00001001 +// CHECK-INST: fsub za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x09,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e15c09 + +fsub za.d[w8, 5, vgx4], {z20.d - z23.d} // 11000001-11100001-00011110-10001101 +// CHECK-INST: fsub za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x8d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e8d + +fsub za.d[w8, 5], {z20.d - z23.d} // 11000001-11100001-00011110-10001101 +// CHECK-INST: fsub za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x8d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e11e8d + +fsub za.d[w11, 2, vgx4], {z8.d - z11.d} // 11000001-11100001-01111101-00001010 +// CHECK-INST: fsub za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x0a,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d0a + +fsub za.d[w11, 2], {z8.d - z11.d} // 11000001-11100001-01111101-00001010 +// CHECK-INST: fsub za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x0a,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e17d0a + +fsub za.d[w9, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-00111101-10001111 +// CHECK-INST: fsub za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x8f,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e13d8f + +fsub za.d[w9, 7], {z12.d - z15.d} // 11000001-11100001-00111101-10001111 +// CHECK-INST: fsub za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x8f,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 sme-f64f64 +// CHECK-UNKNOWN: c1e13d8f + + +fsub za.s[w8, 0, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00001000 +// CHECK-INST: fsub za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x08,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c08 + +fsub za.s[w8, 0], {z0.s - z3.s} // 11000001-10100001-00011100-00001000 +// CHECK-INST: fsub za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x08,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c08 + +fsub za.s[w10, 5, vgx4], {z8.s - z11.s} // 11000001-10100001-01011101-00001101 +// CHECK-INST: fsub za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x0d,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d0d + +fsub za.s[w10, 5], {z8.s - z11.s} // 11000001-10100001-01011101-00001101 +// CHECK-INST: fsub za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x0d,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d0d + +fsub za.s[w11, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-01111101-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x8f,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d8f + +fsub za.s[w11, 7], {z12.s - z15.s} // 11000001-10100001-01111101-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x8f,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d8f + +fsub za.s[w11, 7, vgx4], {z28.s - z31.s} // 11000001-10100001-01111111-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x8f,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f8f + +fsub za.s[w11, 7], {z28.s - z31.s} // 11000001-10100001-01111111-10001111 +// CHECK-INST: fsub za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x8f,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f8f + +fsub za.s[w8, 5, vgx4], {z16.s - z19.s} // 11000001-10100001-00011110-00001101 +// CHECK-INST: fsub za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x0d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e0d + +fsub za.s[w8, 5], {z16.s - z19.s} // 11000001-10100001-00011110-00001101 +// CHECK-INST: fsub za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x0d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e0d + +fsub za.s[w8, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00001001 +// CHECK-INST: fsub za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x09,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c09 + +fsub za.s[w8, 1], {z0.s - z3.s} // 11000001-10100001-00011100-00001001 +// CHECK-INST: fsub za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x09,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c09 + +fsub za.s[w10, 0, vgx4], {z16.s - z19.s} // 11000001-10100001-01011110-00001000 +// CHECK-INST: fsub za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x08,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e08 + +fsub za.s[w10, 0], {z16.s - z19.s} // 11000001-10100001-01011110-00001000 +// CHECK-INST: fsub za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x08,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e08 + +fsub za.s[w8, 0, vgx4], {z12.s - z15.s} // 11000001-10100001-00011101-10001000 +// CHECK-INST: fsub za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x88,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d88 + +fsub za.s[w8, 0], {z12.s - z15.s} // 11000001-10100001-00011101-10001000 +// CHECK-INST: fsub za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x88,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d88 + +fsub za.s[w10, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-01011100-00001001 +// CHECK-INST: fsub za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x09,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c09 + +fsub za.s[w10, 1], {z0.s - z3.s} // 11000001-10100001-01011100-00001001 +// CHECK-INST: fsub za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x09,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c09 + +fsub za.s[w8, 5, vgx4], {z20.s - z23.s} // 11000001-10100001-00011110-10001101 +// CHECK-INST: fsub za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x8d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e8d + +fsub za.s[w8, 5], {z20.s - z23.s} // 11000001-10100001-00011110-10001101 +// CHECK-INST: fsub za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x8d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e8d + +fsub za.s[w11, 2, vgx4], {z8.s - z11.s} // 11000001-10100001-01111101-00001010 +// CHECK-INST: fsub za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x0a,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d0a + +fsub za.s[w11, 2], {z8.s - z11.s} // 11000001-10100001-01111101-00001010 +// CHECK-INST: fsub za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x0a,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d0a + +fsub za.s[w9, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-00111101-10001111 +// CHECK-INST: fsub za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x8f,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d8f + +fsub za.s[w9, 7], {z12.s - z15.s} // 11000001-10100001-00111101-10001111 +// CHECK-INST: fsub za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x8f,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d8f + diff --git a/llvm/test/MC/AArch64/SME2/sub-diagnostics.s b/llvm/test/MC/AArch64/SME2/sub-diagnostics.s --- a/llvm/test/MC/AArch64/SME2/sub-diagnostics.s +++ b/llvm/test/MC/AArch64/SME2/sub-diagnostics.s @@ -13,6 +13,16 @@ // CHECK-NEXT: sub za.d[w8, -1, vgx4], {z0.s-z3.s}, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: +sub za.d[w8, 8, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: za.d[w8, 8, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +sub za.d[w8, -1, vgx4], {z0.s-z3.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7]. +// CHECK-NEXT: za.d[w8, -1, vgx4], {z0.s-z3.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + // --------------------------------------------------------------------------// // Invalid vector select register @@ -34,6 +44,10 @@ // CHECK-NEXT: sub za.h[w8, #0], {z0.h-z3.h}, z4.h // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: +sub za.h[w8, 0, vgx2], {z0.s, z1.s} +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .d +// CHECK-NEXT: za.h[w8, 0, vgx2], {z0.s, z1.s} +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: // --------------------------------------------------------------------------// // Invalid vector grouping @@ -75,3 +89,4 @@ // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction // CHECK-NEXT: sub za.d[w11, 7], {z28.h - z31.h}, {z28.h - z31.h} // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + diff --git a/llvm/test/MC/AArch64/SME2/sub.s b/llvm/test/MC/AArch64/SME2/sub.s --- a/llvm/test/MC/AArch64/SME2/sub.s +++ b/llvm/test/MC/AArch64/SME2/sub.s @@ -12,6 +12,151 @@ // RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +sub za.s[w8, 0, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00011000 +// CHECK-INST: sub za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x18,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c18 + +sub za.s[w8, 0], {z0.s, z1.s} // 11000001-10100000-00011100-00011000 +// CHECK-INST: sub za.s[w8, 0, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x18,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c18 + +sub za.s[w10, 5, vgx2], {z10.s, z11.s} // 11000001-10100000-01011101-01011101 +// CHECK-INST: sub za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x5d,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d5d + +sub za.s[w10, 5], {z10.s, z11.s} // 11000001-10100000-01011101-01011101 +// CHECK-INST: sub za.s[w10, 5, vgx2], { z10.s, z11.s } +// CHECK-ENCODING: [0x5d,0x5d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05d5d + +sub za.s[w11, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-01111101-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x9f,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d9f + +sub za.s[w11, 7], {z12.s, z13.s} // 11000001-10100000-01111101-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x9f,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d9f + +sub za.s[w11, 7, vgx2], {z30.s, z31.s} // 11000001-10100000-01111111-11011111 +// CHECK-INST: sub za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xdf,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fdf + +sub za.s[w11, 7], {z30.s, z31.s} // 11000001-10100000-01111111-11011111 +// CHECK-INST: sub za.s[w11, 7, vgx2], { z30.s, z31.s } +// CHECK-ENCODING: [0xdf,0x7f,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07fdf + +sub za.s[w8, 5, vgx2], {z16.s, z17.s} // 11000001-10100000-00011110-00011101 +// CHECK-INST: sub za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x1d,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e1d + +sub za.s[w8, 5], {z16.s, z17.s} // 11000001-10100000-00011110-00011101 +// CHECK-INST: sub za.s[w8, 5, vgx2], { z16.s, z17.s } +// CHECK-ENCODING: [0x1d,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01e1d + +sub za.s[w8, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-00011100-00011001 +// CHECK-INST: sub za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x19,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c19 + +sub za.s[w8, 1], {z0.s, z1.s} // 11000001-10100000-00011100-00011001 +// CHECK-INST: sub za.s[w8, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x19,0x1c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01c19 + +sub za.s[w10, 0, vgx2], {z18.s, z19.s} // 11000001-10100000-01011110-01011000 +// CHECK-INST: sub za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x58,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e58 + +sub za.s[w10, 0], {z18.s, z19.s} // 11000001-10100000-01011110-01011000 +// CHECK-INST: sub za.s[w10, 0, vgx2], { z18.s, z19.s } +// CHECK-ENCODING: [0x58,0x5e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05e58 + +sub za.s[w8, 0, vgx2], {z12.s, z13.s} // 11000001-10100000-00011101-10011000 +// CHECK-INST: sub za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x98,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d98 + +sub za.s[w8, 0], {z12.s, z13.s} // 11000001-10100000-00011101-10011000 +// CHECK-INST: sub za.s[w8, 0, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x98,0x1d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01d98 + +sub za.s[w10, 1, vgx2], {z0.s, z1.s} // 11000001-10100000-01011100-00011001 +// CHECK-INST: sub za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x19,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c19 + +sub za.s[w10, 1], {z0.s, z1.s} // 11000001-10100000-01011100-00011001 +// CHECK-INST: sub za.s[w10, 1, vgx2], { z0.s, z1.s } +// CHECK-ENCODING: [0x19,0x5c,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a05c19 + +sub za.s[w8, 5, vgx2], {z22.s, z23.s} // 11000001-10100000-00011110-11011101 +// CHECK-INST: sub za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xdd,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01edd + +sub za.s[w8, 5], {z22.s, z23.s} // 11000001-10100000-00011110-11011101 +// CHECK-INST: sub za.s[w8, 5, vgx2], { z22.s, z23.s } +// CHECK-ENCODING: [0xdd,0x1e,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a01edd + +sub za.s[w11, 2, vgx2], {z8.s, z9.s} // 11000001-10100000-01111101-00011010 +// CHECK-INST: sub za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x1a,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d1a + +sub za.s[w11, 2], {z8.s, z9.s} // 11000001-10100000-01111101-00011010 +// CHECK-INST: sub za.s[w11, 2, vgx2], { z8.s, z9.s } +// CHECK-ENCODING: [0x1a,0x7d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a07d1a + +sub za.s[w9, 7, vgx2], {z12.s, z13.s} // 11000001-10100000-00111101-10011111 +// CHECK-INST: sub za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x9f,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d9f + +sub za.s[w9, 7], {z12.s, z13.s} // 11000001-10100000-00111101-10011111 +// CHECK-INST: sub za.s[w9, 7, vgx2], { z12.s, z13.s } +// CHECK-ENCODING: [0x9f,0x3d,0xa0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a03d9f + + sub za.s[w8, 0, vgx2], {z0.s, z1.s}, z0.s // 11000001, 00100000, 00011000, 00011000 // CHECK-INST: sub za.s[w8, 0, vgx2], { z0.s, z1.s }, z0.s // CHECK-ENCODING: [0x18,0x18,0x20,0xc1] @@ -302,6 +447,150 @@ // CHECK-UNKNOWN: c1aa399f +sub za.d[w8, 0, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00011000 +// CHECK-INST: sub za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x18,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c18 + +sub za.d[w8, 0], {z0.d, z1.d} // 11000001-11100000-00011100-00011000 +// CHECK-INST: sub za.d[w8, 0, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x18,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c18 + +sub za.d[w10, 5, vgx2], {z10.d, z11.d} // 11000001-11100000-01011101-01011101 +// CHECK-INST: sub za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x5d,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05d5d + +sub za.d[w10, 5], {z10.d, z11.d} // 11000001-11100000-01011101-01011101 +// CHECK-INST: sub za.d[w10, 5, vgx2], { z10.d, z11.d } +// CHECK-ENCODING: [0x5d,0x5d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05d5d + +sub za.d[w11, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-01111101-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x9f,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d9f + +sub za.d[w11, 7], {z12.d, z13.d} // 11000001-11100000-01111101-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x9f,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d9f + +sub za.d[w11, 7, vgx2], {z30.d, z31.d} // 11000001-11100000-01111111-11011111 +// CHECK-INST: sub za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xdf,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07fdf + +sub za.d[w11, 7], {z30.d, z31.d} // 11000001-11100000-01111111-11011111 +// CHECK-INST: sub za.d[w11, 7, vgx2], { z30.d, z31.d } +// CHECK-ENCODING: [0xdf,0x7f,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07fdf + +sub za.d[w8, 5, vgx2], {z16.d, z17.d} // 11000001-11100000-00011110-00011101 +// CHECK-INST: sub za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x1d,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01e1d + +sub za.d[w8, 5], {z16.d, z17.d} // 11000001-11100000-00011110-00011101 +// CHECK-INST: sub za.d[w8, 5, vgx2], { z16.d, z17.d } +// CHECK-ENCODING: [0x1d,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01e1d + +sub za.d[w8, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-00011100-00011001 +// CHECK-INST: sub za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x19,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c19 + +sub za.d[w8, 1], {z0.d, z1.d} // 11000001-11100000-00011100-00011001 +// CHECK-INST: sub za.d[w8, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x19,0x1c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01c19 + +sub za.d[w10, 0, vgx2], {z18.d, z19.d} // 11000001-11100000-01011110-01011000 +// CHECK-INST: sub za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x58,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05e58 + +sub za.d[w10, 0], {z18.d, z19.d} // 11000001-11100000-01011110-01011000 +// CHECK-INST: sub za.d[w10, 0, vgx2], { z18.d, z19.d } +// CHECK-ENCODING: [0x58,0x5e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05e58 + +sub za.d[w8, 0, vgx2], {z12.d, z13.d} // 11000001-11100000-00011101-10011000 +// CHECK-INST: sub za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x98,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01d98 + +sub za.d[w8, 0], {z12.d, z13.d} // 11000001-11100000-00011101-10011000 +// CHECK-INST: sub za.d[w8, 0, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x98,0x1d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01d98 + +sub za.d[w10, 1, vgx2], {z0.d, z1.d} // 11000001-11100000-01011100-00011001 +// CHECK-INST: sub za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x19,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05c19 + +sub za.d[w10, 1], {z0.d, z1.d} // 11000001-11100000-01011100-00011001 +// CHECK-INST: sub za.d[w10, 1, vgx2], { z0.d, z1.d } +// CHECK-ENCODING: [0x19,0x5c,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e05c19 + +sub za.d[w8, 5, vgx2], {z22.d, z23.d} // 11000001-11100000-00011110-11011101 +// CHECK-INST: sub za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xdd,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01edd + +sub za.d[w8, 5], {z22.d, z23.d} // 11000001-11100000-00011110-11011101 +// CHECK-INST: sub za.d[w8, 5, vgx2], { z22.d, z23.d } +// CHECK-ENCODING: [0xdd,0x1e,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e01edd + +sub za.d[w11, 2, vgx2], {z8.d, z9.d} // 11000001-11100000-01111101-00011010 +// CHECK-INST: sub za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x1a,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d1a + +sub za.d[w11, 2], {z8.d, z9.d} // 11000001-11100000-01111101-00011010 +// CHECK-INST: sub za.d[w11, 2, vgx2], { z8.d, z9.d } +// CHECK-ENCODING: [0x1a,0x7d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e07d1a + +sub za.d[w9, 7, vgx2], {z12.d, z13.d} // 11000001-11100000-00111101-10011111 +// CHECK-INST: sub za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x9f,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e03d9f + +sub za.d[w9, 7], {z12.d, z13.d} // 11000001-11100000-00111101-10011111 +// CHECK-INST: sub za.d[w9, 7, vgx2], { z12.d, z13.d } +// CHECK-ENCODING: [0x9f,0x3d,0xe0,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e03d9f + sub za.d[w8, 0, vgx2], {z0.d, z1.d}, z0.d // 11000001, 01100000, 00011000, 00011000 // CHECK-INST: sub za.d[w8, 0, vgx2], { z0.d, z1.d }, z0.d // CHECK-ENCODING: [0x18,0x18,0x60,0xc1] @@ -592,6 +881,151 @@ // CHECK-UNKNOWN: c1ea399f +sub za.s[w8, 0, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00011000 +// CHECK-INST: sub za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x18,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c18 + +sub za.s[w8, 0], {z0.s - z3.s} // 11000001-10100001-00011100-00011000 +// CHECK-INST: sub za.s[w8, 0, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x18,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c18 + +sub za.s[w10, 5, vgx4], {z8.s - z11.s} // 11000001-10100001-01011101-00011101 +// CHECK-INST: sub za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x1d,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d1d + +sub za.s[w10, 5], {z8.s - z11.s} // 11000001-10100001-01011101-00011101 +// CHECK-INST: sub za.s[w10, 5, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x1d,0x5d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15d1d + +sub za.s[w11, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-01111101-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x9f,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d9f + +sub za.s[w11, 7], {z12.s - z15.s} // 11000001-10100001-01111101-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x9f,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d9f + +sub za.s[w11, 7, vgx4], {z28.s - z31.s} // 11000001-10100001-01111111-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x9f,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f9f + +sub za.s[w11, 7], {z28.s - z31.s} // 11000001-10100001-01111111-10011111 +// CHECK-INST: sub za.s[w11, 7, vgx4], { z28.s - z31.s } +// CHECK-ENCODING: [0x9f,0x7f,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17f9f + +sub za.s[w8, 5, vgx4], {z16.s - z19.s} // 11000001-10100001-00011110-00011101 +// CHECK-INST: sub za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x1d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e1d + +sub za.s[w8, 5], {z16.s - z19.s} // 11000001-10100001-00011110-00011101 +// CHECK-INST: sub za.s[w8, 5, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x1d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e1d + +sub za.s[w8, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-00011100-00011001 +// CHECK-INST: sub za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x19,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c19 + +sub za.s[w8, 1], {z0.s - z3.s} // 11000001-10100001-00011100-00011001 +// CHECK-INST: sub za.s[w8, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x19,0x1c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11c19 + +sub za.s[w10, 0, vgx4], {z16.s - z19.s} // 11000001-10100001-01011110-00011000 +// CHECK-INST: sub za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x18,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e18 + +sub za.s[w10, 0], {z16.s - z19.s} // 11000001-10100001-01011110-00011000 +// CHECK-INST: sub za.s[w10, 0, vgx4], { z16.s - z19.s } +// CHECK-ENCODING: [0x18,0x5e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15e18 + +sub za.s[w8, 0, vgx4], {z12.s - z15.s} // 11000001-10100001-00011101-10011000 +// CHECK-INST: sub za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x98,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d98 + +sub za.s[w8, 0], {z12.s - z15.s} // 11000001-10100001-00011101-10011000 +// CHECK-INST: sub za.s[w8, 0, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x98,0x1d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11d98 + +sub za.s[w10, 1, vgx4], {z0.s - z3.s} // 11000001-10100001-01011100-00011001 +// CHECK-INST: sub za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x19,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c19 + +sub za.s[w10, 1], {z0.s - z3.s} // 11000001-10100001-01011100-00011001 +// CHECK-INST: sub za.s[w10, 1, vgx4], { z0.s - z3.s } +// CHECK-ENCODING: [0x19,0x5c,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a15c19 + +sub za.s[w8, 5, vgx4], {z20.s - z23.s} // 11000001-10100001-00011110-10011101 +// CHECK-INST: sub za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x9d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e9d + +sub za.s[w8, 5], {z20.s - z23.s} // 11000001-10100001-00011110-10011101 +// CHECK-INST: sub za.s[w8, 5, vgx4], { z20.s - z23.s } +// CHECK-ENCODING: [0x9d,0x1e,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a11e9d + +sub za.s[w11, 2, vgx4], {z8.s - z11.s} // 11000001-10100001-01111101-00011010 +// CHECK-INST: sub za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x1a,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d1a + +sub za.s[w11, 2], {z8.s - z11.s} // 11000001-10100001-01111101-00011010 +// CHECK-INST: sub za.s[w11, 2, vgx4], { z8.s - z11.s } +// CHECK-ENCODING: [0x1a,0x7d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a17d1a + +sub za.s[w9, 7, vgx4], {z12.s - z15.s} // 11000001-10100001-00111101-10011111 +// CHECK-INST: sub za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x9f,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d9f + +sub za.s[w9, 7], {z12.s - z15.s} // 11000001-10100001-00111101-10011111 +// CHECK-INST: sub za.s[w9, 7, vgx4], { z12.s - z15.s } +// CHECK-ENCODING: [0x9f,0x3d,0xa1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1a13d9f + + sub za.s[w8, 0, vgx4], {z0.s - z3.s}, z0.s // 11000001-00110000-00011000-00011000 // CHECK-INST: sub za.s[w8, 0, vgx4], { z0.s - z3.s }, z0.s // CHECK-ENCODING: [0x18,0x18,0x30,0xc1] @@ -882,6 +1316,150 @@ // CHECK-UNKNOWN: c1a9399f +sub za.d[w8, 0, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00011000 +// CHECK-INST: sub za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x18,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c18 + +sub za.d[w8, 0], {z0.d - z3.d} // 11000001-11100001-00011100-00011000 +// CHECK-INST: sub za.d[w8, 0, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x18,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c18 + +sub za.d[w10, 5, vgx4], {z8.d - z11.d} // 11000001-11100001-01011101-00011101 +// CHECK-INST: sub za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x1d,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15d1d + +sub za.d[w10, 5], {z8.d - z11.d} // 11000001-11100001-01011101-00011101 +// CHECK-INST: sub za.d[w10, 5, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x1d,0x5d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15d1d + +sub za.d[w11, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-01111101-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x9f,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d9f + +sub za.d[w11, 7], {z12.d - z15.d} // 11000001-11100001-01111101-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x9f,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d9f + +sub za.d[w11, 7, vgx4], {z28.d - z31.d} // 11000001-11100001-01111111-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x9f,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17f9f + +sub za.d[w11, 7], {z28.d - z31.d} // 11000001-11100001-01111111-10011111 +// CHECK-INST: sub za.d[w11, 7, vgx4], { z28.d - z31.d } +// CHECK-ENCODING: [0x9f,0x7f,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17f9f + +sub za.d[w8, 5, vgx4], {z16.d - z19.d} // 11000001-11100001-00011110-00011101 +// CHECK-INST: sub za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x1d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e1d + +sub za.d[w8, 5], {z16.d - z19.d} // 11000001-11100001-00011110-00011101 +// CHECK-INST: sub za.d[w8, 5, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x1d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e1d + +sub za.d[w8, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-00011100-00011001 +// CHECK-INST: sub za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x19,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c19 + +sub za.d[w8, 1], {z0.d - z3.d} // 11000001-11100001-00011100-00011001 +// CHECK-INST: sub za.d[w8, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x19,0x1c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11c19 + +sub za.d[w10, 0, vgx4], {z16.d - z19.d} // 11000001-11100001-01011110-00011000 +// CHECK-INST: sub za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x18,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15e18 + +sub za.d[w10, 0], {z16.d - z19.d} // 11000001-11100001-01011110-00011000 +// CHECK-INST: sub za.d[w10, 0, vgx4], { z16.d - z19.d } +// CHECK-ENCODING: [0x18,0x5e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15e18 + +sub za.d[w8, 0, vgx4], {z12.d - z15.d} // 11000001-11100001-00011101-10011000 +// CHECK-INST: sub za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x98,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11d98 + +sub za.d[w8, 0], {z12.d - z15.d} // 11000001-11100001-00011101-10011000 +// CHECK-INST: sub za.d[w8, 0, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x98,0x1d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11d98 + +sub za.d[w10, 1, vgx4], {z0.d - z3.d} // 11000001-11100001-01011100-00011001 +// CHECK-INST: sub za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x19,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15c19 + +sub za.d[w10, 1], {z0.d - z3.d} // 11000001-11100001-01011100-00011001 +// CHECK-INST: sub za.d[w10, 1, vgx4], { z0.d - z3.d } +// CHECK-ENCODING: [0x19,0x5c,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e15c19 + +sub za.d[w8, 5, vgx4], {z20.d - z23.d} // 11000001-11100001-00011110-10011101 +// CHECK-INST: sub za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x9d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e9d + +sub za.d[w8, 5], {z20.d - z23.d} // 11000001-11100001-00011110-10011101 +// CHECK-INST: sub za.d[w8, 5, vgx4], { z20.d - z23.d } +// CHECK-ENCODING: [0x9d,0x1e,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e11e9d + +sub za.d[w11, 2, vgx4], {z8.d - z11.d} // 11000001-11100001-01111101-00011010 +// CHECK-INST: sub za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x1a,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d1a + +sub za.d[w11, 2], {z8.d - z11.d} // 11000001-11100001-01111101-00011010 +// CHECK-INST: sub za.d[w11, 2, vgx4], { z8.d - z11.d } +// CHECK-ENCODING: [0x1a,0x7d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e17d1a + +sub za.d[w9, 7, vgx4], {z12.d - z15.d} // 11000001-11100001-00111101-10011111 +// CHECK-INST: sub za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x9f,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e13d9f + +sub za.d[w9, 7], {z12.d - z15.d} // 11000001-11100001-00111101-10011111 +// CHECK-INST: sub za.d[w9, 7, vgx4], { z12.d - z15.d } +// CHECK-ENCODING: [0x9f,0x3d,0xe1,0xc1] +// CHECK-ERROR: instruction requires: sme2 +// CHECK-UNKNOWN: c1e13d9f + sub za.d[w8, 0, vgx4], {z0.d - z3.d}, z0.d // 11000001-01110000-00011000-00011000 // CHECK-INST: sub za.d[w8, 0, vgx4], { z0.d - z3.d }, z0.d // CHECK-ENCODING: [0x18,0x18,0x70,0xc1]