1fe6060f1SDimitry Andric//=- AArch64SMEInstrInfo.td - AArch64 SME Instructions -*- tablegen -*-----=// 2fe6060f1SDimitry Andric// 3fe6060f1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4fe6060f1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5fe6060f1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fe6060f1SDimitry Andric// 7fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 8fe6060f1SDimitry Andric// 9fe6060f1SDimitry Andric// AArch64 Scalable Matrix Extension (SME) Instruction definitions. 10fe6060f1SDimitry Andric// 11fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 12fe6060f1SDimitry Andric 13*0fca6ea1SDimitry Andricdef AArch64_smstart : SDNode<"AArch64ISD::SMSTART", SDTypeProfile<0, 2, 14*0fca6ea1SDimitry Andric [SDTCisInt<0>, SDTCisInt<0>]>, 15bdd1243dSDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPVariadic, 16bdd1243dSDimitry Andric SDNPOptInGlue, SDNPOutGlue]>; 17*0fca6ea1SDimitry Andricdef AArch64_smstop : SDNode<"AArch64ISD::SMSTOP", SDTypeProfile<0, 2, 18*0fca6ea1SDimitry Andric [SDTCisInt<0>, SDTCisInt<0>]>, 19bdd1243dSDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPVariadic, 20bdd1243dSDimitry Andric SDNPOptInGlue, SDNPOutGlue]>; 21bdd1243dSDimitry Andricdef AArch64_restore_za : SDNode<"AArch64ISD::RESTORE_ZA", SDTypeProfile<0, 3, 22bdd1243dSDimitry Andric [SDTCisInt<0>, SDTCisPtrTy<1>]>, 23bdd1243dSDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPVariadic, 24bdd1243dSDimitry Andric SDNPOptInGlue]>; 257a6dacacSDimitry Andricdef AArch64_restore_zt : SDNode<"AArch64ISD::RESTORE_ZT", SDTypeProfile<0, 2, 267a6dacacSDimitry Andric [SDTCisInt<0>, SDTCisPtrTy<1>]>, 277a6dacacSDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPMayLoad]>; 287a6dacacSDimitry Andricdef AArch64_save_zt : SDNode<"AArch64ISD::SAVE_ZT", SDTypeProfile<0, 2, 297a6dacacSDimitry Andric [SDTCisInt<0>, SDTCisPtrTy<1>]>, 307a6dacacSDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPMayStore]>; 31b3edf446SDimitry Andricdef AArch64CoalescerBarrier 32*0fca6ea1SDimitry Andric : SDNode<"AArch64ISD::COALESCER_BARRIER", SDTypeProfile<1, 1, []>, [SDNPOptInGlue, SDNPOutGlue]>; 33*0fca6ea1SDimitry Andric 34*0fca6ea1SDimitry Andricdef AArch64VGSave : SDNode<"AArch64ISD::VG_SAVE", SDTypeProfile<0, 0, []>, 35*0fca6ea1SDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPOptInGlue, SDNPOutGlue]>; 36*0fca6ea1SDimitry Andric 37*0fca6ea1SDimitry Andricdef AArch64VGRestore : SDNode<"AArch64ISD::VG_RESTORE", SDTypeProfile<0, 0, []>, 38*0fca6ea1SDimitry Andric [SDNPHasChain, SDNPSideEffect, SDNPOptInGlue, SDNPOutGlue]>; 39*0fca6ea1SDimitry Andric 40*0fca6ea1SDimitry Andricdef AArch64AllocateZABuffer : SDNode<"AArch64ISD::ALLOCATE_ZA_BUFFER", SDTypeProfile<1, 1, 41*0fca6ea1SDimitry Andric [SDTCisInt<0>, SDTCisInt<1>]>, 42*0fca6ea1SDimitry Andric [SDNPHasChain, SDNPSideEffect]>; 43*0fca6ea1SDimitry Andriclet usesCustomInserter = 1, Defs = [SP], Uses = [SP] in { 44*0fca6ea1SDimitry Andric def AllocateZABuffer : Pseudo<(outs GPR64sp:$dst), (ins GPR64:$size), []>, Sched<[WriteI]> {} 45*0fca6ea1SDimitry Andric} 46*0fca6ea1SDimitry Andricdef : Pat<(i64 (AArch64AllocateZABuffer GPR64:$size)), 47*0fca6ea1SDimitry Andric (AllocateZABuffer $size)>; 48*0fca6ea1SDimitry Andric 49*0fca6ea1SDimitry Andricdef AArch64InitTPIDR2Obj : SDNode<"AArch64ISD::INIT_TPIDR2OBJ", SDTypeProfile<0, 1, 50*0fca6ea1SDimitry Andric [SDTCisInt<0>]>, [SDNPHasChain, SDNPMayStore]>; 51*0fca6ea1SDimitry Andriclet usesCustomInserter = 1 in { 52*0fca6ea1SDimitry Andric def InitTPIDR2Obj : Pseudo<(outs), (ins GPR64:$buffer), [(AArch64InitTPIDR2Obj GPR64:$buffer)]>, Sched<[WriteI]> {} 53*0fca6ea1SDimitry Andric} 54bdd1243dSDimitry Andric 55bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 56bdd1243dSDimitry Andric// Instruction naming conventions. 57bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 58bdd1243dSDimitry Andric 59bdd1243dSDimitry Andric// M = SME array register (ZA) 60bdd1243dSDimitry Andric// P = Predicate register 61bdd1243dSDimitry Andric// C = Predicate-as-counter register 62bdd1243dSDimitry Andric// I = immediate 63bdd1243dSDimitry Andric// Z = SVE vector register 64bdd1243dSDimitry Andric// T = ZT0 register 65bdd1243dSDimitry Andric// 66bdd1243dSDimitry Andric 67fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 68fe6060f1SDimitry Andric// Add vector elements horizontally or vertically to ZA tile. 69fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 70fe6060f1SDimitry Andric 7181ad6265SDimitry Andricdef SDT_AArch64RDSVL : SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisInt<1>]>; 7281ad6265SDimitry Andricdef AArch64rdsvl : SDNode<"AArch64ISD::RDSVL", SDT_AArch64RDSVL>; 7381ad6265SDimitry Andric 74*0fca6ea1SDimitry Andriclet Predicates = [HasSMEandIsNonStreamingSafe] in { 7581ad6265SDimitry Andricdef RDSVLI_XI : sve_int_read_vl_a<0b0, 0b11111, "rdsvl", /*streaming_sve=*/0b1>; 7681ad6265SDimitry Andricdef ADDSPL_XXI : sve_int_arith_vl<0b1, "addspl", /*streaming_sve=*/0b1>; 7781ad6265SDimitry Andricdef ADDSVL_XXI : sve_int_arith_vl<0b0, "addsvl", /*streaming_sve=*/0b1>; 7881ad6265SDimitry Andric 79*0fca6ea1SDimitry Andricdef : Pat<(AArch64rdsvl (i32 simm6_32b:$imm)), (RDSVLI_XI simm6_32b:$imm)>; 80*0fca6ea1SDimitry Andric} 81*0fca6ea1SDimitry Andric 82*0fca6ea1SDimitry Andriclet Predicates = [HasSME] in { 83bdd1243dSDimitry Andricdefm ADDHA_MPPZ_S : sme_add_vector_to_tile_u32<0b0, "addha", int_aarch64_sme_addha>; 84bdd1243dSDimitry Andricdefm ADDVA_MPPZ_S : sme_add_vector_to_tile_u32<0b1, "addva", int_aarch64_sme_addva>; 85fe6060f1SDimitry Andric} 86fe6060f1SDimitry Andric 87bdd1243dSDimitry Andriclet Predicates = [HasSMEI16I64] in { 88bdd1243dSDimitry Andricdefm ADDHA_MPPZ_D : sme_add_vector_to_tile_u64<0b0, "addha", int_aarch64_sme_addha>; 89bdd1243dSDimitry Andricdefm ADDVA_MPPZ_D : sme_add_vector_to_tile_u64<0b1, "addva", int_aarch64_sme_addva>; 90fe6060f1SDimitry Andric} 91fe6060f1SDimitry Andric 92fe6060f1SDimitry Andriclet Predicates = [HasSME] in { 93fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 94fe6060f1SDimitry Andric// Outer products 95fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 96fe6060f1SDimitry Andric 97bdd1243dSDimitry Andricdefm BFMOPA_MPPZZ : sme_bf16_outer_product<0b000, "bfmopa", int_aarch64_sme_mopa_wide>; 98bdd1243dSDimitry Andricdefm BFMOPS_MPPZZ : sme_bf16_outer_product<0b001, "bfmops", int_aarch64_sme_mops_wide>; 99fe6060f1SDimitry Andric 1005f757f3fSDimitry Andricdefm FMOPA_MPPZZ_S : sme_outer_product_fp32<0b0, 0b00, ZPR32, "fmopa", int_aarch64_sme_mopa>; 1015f757f3fSDimitry Andricdefm FMOPS_MPPZZ_S : sme_outer_product_fp32<0b1, 0b00, ZPR32, "fmops", int_aarch64_sme_mops>; 102fe6060f1SDimitry Andric} 103fe6060f1SDimitry Andric 104bdd1243dSDimitry Andriclet Predicates = [HasSMEF64F64] in { 10581ad6265SDimitry Andricdefm FMOPA_MPPZZ_D : sme_outer_product_fp64<0b0, "fmopa", int_aarch64_sme_mopa>; 10681ad6265SDimitry Andricdefm FMOPS_MPPZZ_D : sme_outer_product_fp64<0b1, "fmops", int_aarch64_sme_mops>; 107fe6060f1SDimitry Andric} 108fe6060f1SDimitry Andric 109fe6060f1SDimitry Andriclet Predicates = [HasSME] in { 110bdd1243dSDimitry Andricdefm FMOPAL_MPPZZ : sme_f16_outer_product<0b010, "fmopa", int_aarch64_sme_mopa_wide>; 111bdd1243dSDimitry Andricdefm FMOPSL_MPPZZ : sme_f16_outer_product<0b011, "fmops", int_aarch64_sme_mops_wide>; 112fe6060f1SDimitry Andric 11381ad6265SDimitry Andricdefm SMOPA_MPPZZ_S : sme_int_outer_product_i32<0b000, "smopa", int_aarch64_sme_smopa_wide>; 11481ad6265SDimitry Andricdefm SMOPS_MPPZZ_S : sme_int_outer_product_i32<0b001, "smops", int_aarch64_sme_smops_wide>; 11581ad6265SDimitry Andricdefm UMOPA_MPPZZ_S : sme_int_outer_product_i32<0b110, "umopa", int_aarch64_sme_umopa_wide>; 11681ad6265SDimitry Andricdefm UMOPS_MPPZZ_S : sme_int_outer_product_i32<0b111, "umops", int_aarch64_sme_umops_wide>; 11781ad6265SDimitry Andricdefm SUMOPA_MPPZZ_S : sme_int_outer_product_i32<0b010, "sumopa", int_aarch64_sme_sumopa_wide>; 11881ad6265SDimitry Andricdefm SUMOPS_MPPZZ_S : sme_int_outer_product_i32<0b011, "sumops", int_aarch64_sme_sumops_wide>; 11981ad6265SDimitry Andricdefm USMOPA_MPPZZ_S : sme_int_outer_product_i32<0b100, "usmopa", int_aarch64_sme_usmopa_wide>; 12081ad6265SDimitry Andricdefm USMOPS_MPPZZ_S : sme_int_outer_product_i32<0b101, "usmops", int_aarch64_sme_usmops_wide>; 121fe6060f1SDimitry Andric} 122fe6060f1SDimitry Andric 123bdd1243dSDimitry Andriclet Predicates = [HasSMEI16I64] in { 12481ad6265SDimitry Andricdefm SMOPA_MPPZZ_D : sme_int_outer_product_i64<0b000, "smopa", int_aarch64_sme_smopa_wide>; 12581ad6265SDimitry Andricdefm SMOPS_MPPZZ_D : sme_int_outer_product_i64<0b001, "smops", int_aarch64_sme_smops_wide>; 12681ad6265SDimitry Andricdefm UMOPA_MPPZZ_D : sme_int_outer_product_i64<0b110, "umopa", int_aarch64_sme_umopa_wide>; 12781ad6265SDimitry Andricdefm UMOPS_MPPZZ_D : sme_int_outer_product_i64<0b111, "umops", int_aarch64_sme_umops_wide>; 12881ad6265SDimitry Andricdefm SUMOPA_MPPZZ_D : sme_int_outer_product_i64<0b010, "sumopa", int_aarch64_sme_sumopa_wide>; 12981ad6265SDimitry Andricdefm SUMOPS_MPPZZ_D : sme_int_outer_product_i64<0b011, "sumops", int_aarch64_sme_sumops_wide>; 13081ad6265SDimitry Andricdefm USMOPA_MPPZZ_D : sme_int_outer_product_i64<0b100, "usmopa", int_aarch64_sme_usmopa_wide>; 13181ad6265SDimitry Andricdefm USMOPS_MPPZZ_D : sme_int_outer_product_i64<0b101, "usmops", int_aarch64_sme_usmops_wide>; 132fe6060f1SDimitry Andric} 133fe6060f1SDimitry Andric 134fe6060f1SDimitry Andriclet Predicates = [HasSME] in { 135fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 136fe6060f1SDimitry Andric// Loads and stores 137fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 138fe6060f1SDimitry Andric 139fe6060f1SDimitry Andricdefm LD1_MXIPXX : sme_mem_ld_ss<"ld1">; 140fe6060f1SDimitry Andricdefm ST1_MXIPXX : sme_mem_st_ss<"st1">; 141fe6060f1SDimitry Andric 142fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 143fe6060f1SDimitry Andric// Move instructions 144fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 145fe6060f1SDimitry Andric 146fe6060f1SDimitry Andricdefm INSERT_MXIPZ : sme_vector_to_tile<"mova">; 147fe6060f1SDimitry Andricdefm EXTRACT_ZPMXI : sme_tile_to_vector<"mova">; 148*0fca6ea1SDimitry Andric} // End let Predicates = [HasSME] 149*0fca6ea1SDimitry Andric 150*0fca6ea1SDimitry Andriclet Predicates = [HasSMEandIsNonStreamingSafe] in { 151*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 152*0fca6ea1SDimitry Andric// Spill + fill 153*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 154*0fca6ea1SDimitry Andric 155*0fca6ea1SDimitry Andricdefm LDR_ZA : sme_fill<"ldr">; 156*0fca6ea1SDimitry Andricdefm STR_ZA : sme_spill<"str">; 157fe6060f1SDimitry Andric 158fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 159fe6060f1SDimitry Andric// Zero instruction 160fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 161fe6060f1SDimitry Andric 162fe6060f1SDimitry Andricdefm ZERO_M : sme_zero<"zero">; 163fe6060f1SDimitry Andric 164fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 165fe6060f1SDimitry Andric// Mode selection and state access instructions 166fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 167fe6060f1SDimitry Andric 168bdd1243dSDimitry Andric// Pseudo to conditionally restore ZA state. This expands: 169bdd1243dSDimitry Andric// 170bdd1243dSDimitry Andric// pseudonode tpidr2_el0, tpidr2obj, restore_routine 171bdd1243dSDimitry Andric// 172bdd1243dSDimitry Andric// Into: 173bdd1243dSDimitry Andric// 174bdd1243dSDimitry Andric// if (tpidr2_el0 == 0) 175bdd1243dSDimitry Andric// BL restore_routine, implicit-use tpidr2obj 176bdd1243dSDimitry Andric// 177bdd1243dSDimitry Andricdef RestoreZAPseudo : 178bdd1243dSDimitry Andric Pseudo<(outs), 179bdd1243dSDimitry Andric (ins GPR64:$tpidr2_el0, GPR64sp:$tpidr2obj, i64imm:$restore_routine, variable_ops), []>, 180bdd1243dSDimitry Andric Sched<[]>; 181bdd1243dSDimitry Andric 182bdd1243dSDimitry Andricdef : Pat<(AArch64_restore_za 183bdd1243dSDimitry Andric (i64 GPR64:$tpidr2_el0), (i64 GPR64sp:$tpidr2obj), (i64 texternalsym:$restore_routine)), 184bdd1243dSDimitry Andric (RestoreZAPseudo GPR64:$tpidr2_el0, GPR64sp:$tpidr2obj, texternalsym:$restore_routine)>; 185bdd1243dSDimitry Andric 18681ad6265SDimitry Andric// Read and write TPIDR2_EL0 18781ad6265SDimitry Andricdef : Pat<(int_aarch64_sme_set_tpidr2 i64:$val), 18881ad6265SDimitry Andric (MSR 0xde85, GPR64:$val)>; 18981ad6265SDimitry Andricdef : Pat<(i64 (int_aarch64_sme_get_tpidr2)), 19081ad6265SDimitry Andric (MRS 0xde85)>; 191b3edf446SDimitry Andric 192*0fca6ea1SDimitry Andric} // End let Predicates = [HasSMEandIsNonStreamingSafe] 193*0fca6ea1SDimitry Andric 194b3edf446SDimitry Andricmulticlass CoalescerBarrierPseudo<RegisterClass rc, list<ValueType> vts> { 195b3edf446SDimitry Andric def NAME : Pseudo<(outs rc:$dst), (ins rc:$src), []>, Sched<[]> { 196b3edf446SDimitry Andric let Constraints = "$dst = $src"; 197b3edf446SDimitry Andric } 198b3edf446SDimitry Andric foreach vt = vts in { 199b3edf446SDimitry Andric def : Pat<(vt (AArch64CoalescerBarrier (vt rc:$src))), 200b3edf446SDimitry Andric (!cast<Instruction>(NAME) rc:$src)>; 201b3edf446SDimitry Andric } 202b3edf446SDimitry Andric} 203b3edf446SDimitry Andric 204b3edf446SDimitry Andricmulticlass CoalescerBarriers { 205b3edf446SDimitry Andric defm _FPR16 : CoalescerBarrierPseudo<FPR16, [bf16, f16]>; 206b3edf446SDimitry Andric defm _FPR32 : CoalescerBarrierPseudo<FPR32, [f32]>; 207b3edf446SDimitry Andric defm _FPR64 : CoalescerBarrierPseudo<FPR64, [f64, v8i8, v4i16, v2i32, v1i64, v4f16, v2f32, v1f64, v4bf16]>; 208b3edf446SDimitry Andric defm _FPR128 : CoalescerBarrierPseudo<FPR128, [f128, v16i8, v8i16, v4i32, v2i64, v8f16, v4f32, v2f64, v8bf16]>; 209b3edf446SDimitry Andric} 210b3edf446SDimitry Andric 211b3edf446SDimitry Andricdefm COALESCER_BARRIER : CoalescerBarriers; 212b3edf446SDimitry Andric 2135f757f3fSDimitry Andric// Pseudo to match to smstart/smstop. This expands: 2145f757f3fSDimitry Andric// 2155f757f3fSDimitry Andric// pseudonode (pstate_za|pstate_sm), before_call, expected_value 2165f757f3fSDimitry Andric// 2175f757f3fSDimitry Andric// Into: 2185f757f3fSDimitry Andric// 2195f757f3fSDimitry Andric// if (before_call != expected_value) 2205f757f3fSDimitry Andric// node (pstate_za|pstate_sm) 2215f757f3fSDimitry Andric// 2225f757f3fSDimitry Andric// where node can be either 'smstart' or 'smstop'. 2235f757f3fSDimitry Andric// 2245f757f3fSDimitry Andric// This pseudo and corresponding patterns don't need to be predicated by SME, 2255f757f3fSDimitry Andric// because when they're emitted for streaming-compatible functions and run 2265f757f3fSDimitry Andric// in a non-SME context the generated code-paths will never execute any 2275f757f3fSDimitry Andric// SME instructions. 2285f757f3fSDimitry Andricdef MSRpstatePseudo : 2295f757f3fSDimitry Andric Pseudo<(outs), 230*0fca6ea1SDimitry Andric (ins svcr_op:$pstatefield, timm0_1:$imm, timm0_31:$condition, variable_ops), []>, 2315f757f3fSDimitry Andric Sched<[WriteSys]> { 2325f757f3fSDimitry Andric let hasPostISelHook = 1; 233*0fca6ea1SDimitry Andric let Uses = [VG]; 234*0fca6ea1SDimitry Andric let Defs = [VG]; 2355f757f3fSDimitry Andric} 2365f757f3fSDimitry Andric 237*0fca6ea1SDimitry Andricdef : Pat<(AArch64_smstart (i32 svcr_op:$pstate), (i64 timm0_31:$condition)), 238*0fca6ea1SDimitry Andric (MSRpstatePseudo svcr_op:$pstate, 0b1, timm0_31:$condition)>; 239*0fca6ea1SDimitry Andricdef : Pat<(AArch64_smstop (i32 svcr_op:$pstate), (i64 timm0_31:$condition)), 240*0fca6ea1SDimitry Andric (MSRpstatePseudo svcr_op:$pstate, 0b0, timm0_31:$condition)>; 241*0fca6ea1SDimitry Andric 242*0fca6ea1SDimitry Andric// Unconditional start/stop 243*0fca6ea1SDimitry Andricdef : Pat<(AArch64_smstart (i32 svcr_op:$pstate), (i64 /*AArch64SME::Always*/0)), 244*0fca6ea1SDimitry Andric (MSRpstatesvcrImm1 svcr_op:$pstate, 0b1)>; 245*0fca6ea1SDimitry Andricdef : Pat<(AArch64_smstop (i32 svcr_op:$pstate), (i64 /*AArch64SME::Always*/0)), 246*0fca6ea1SDimitry Andric (MSRpstatesvcrImm1 svcr_op:$pstate, 0b0)>; 247*0fca6ea1SDimitry Andric 248*0fca6ea1SDimitry Andric 249*0fca6ea1SDimitry Andric// Pseudo to insert cfi_offset/cfi_restore instructions. Used to save or restore 250*0fca6ea1SDimitry Andric// the streaming value of VG around streaming-mode changes in locally-streaming 251*0fca6ea1SDimitry Andric// functions. 252*0fca6ea1SDimitry Andricdef VGSavePseudo : Pseudo<(outs), (ins), []>, Sched<[]>; 253*0fca6ea1SDimitry Andricdef : Pat<(AArch64VGSave), (VGSavePseudo)>; 254*0fca6ea1SDimitry Andric 255*0fca6ea1SDimitry Andricdef VGRestorePseudo : Pseudo<(outs), (ins), []>, Sched<[]>; 256*0fca6ea1SDimitry Andricdef : Pat<(AArch64VGRestore), (VGRestorePseudo)>; 2575f757f3fSDimitry Andric 258bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 259bdd1243dSDimitry Andric// SME2 Instructions 260bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 261bdd1243dSDimitry Andriclet Predicates = [HasSME2] in { 262bdd1243dSDimitry Andricdefm ADD_VG2_M2ZZ_S : sme2_dot_mla_add_sub_array_vg2_single<"add", 0b0011010, MatrixOp32, ZZ_s, ZPR4b32, nxv4i32, int_aarch64_sme_add_write_single_za_vg1x2>; 263bdd1243dSDimitry Andricdefm ADD_VG4_M4ZZ_S : sme2_dot_mla_add_sub_array_vg4_single<"add", 0b0111010, MatrixOp32, ZZZZ_s, ZPR4b32, nxv4i32, int_aarch64_sme_add_write_single_za_vg1x4>; 2645f757f3fSDimitry Andricdefm ADD_VG2_M2Z2Z_S : sme2_dot_mla_add_sub_array_vg2_multi<"add", 0b0110010, MatrixOp32, ZZ_s_mul_r, nxv4i32, int_aarch64_sme_add_write_za_vg1x2>; 2655f757f3fSDimitry Andricdefm ADD_VG4_M4Z4Z_S : sme2_dot_mla_add_sub_array_vg4_multi<"add", 0b0110010, MatrixOp32, ZZZZ_s_mul_r, nxv4i32, int_aarch64_sme_add_write_za_vg1x4>; 266bdd1243dSDimitry Andric 267bdd1243dSDimitry Andricdefm ADD_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"add", 0b0110000>; 268bdd1243dSDimitry Andricdefm ADD_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"add", 0b0110000>; 269bdd1243dSDimitry Andric 270bdd1243dSDimitry Andricdefm SUB_VG2_M2ZZ_S : sme2_dot_mla_add_sub_array_vg2_single<"sub", 0b0011011, MatrixOp32, ZZ_s, ZPR4b32, nxv4i32, int_aarch64_sme_sub_write_single_za_vg1x2>; 271bdd1243dSDimitry Andricdefm SUB_VG4_M4ZZ_S : sme2_dot_mla_add_sub_array_vg4_single<"sub", 0b0111011, MatrixOp32, ZZZZ_s, ZPR4b32, nxv4i32, int_aarch64_sme_sub_write_single_za_vg1x4>; 2725f757f3fSDimitry Andricdefm SUB_VG2_M2Z2Z_S : sme2_dot_mla_add_sub_array_vg2_multi<"sub", 0b0110011, MatrixOp32, ZZ_s_mul_r, nxv4i32, int_aarch64_sme_sub_write_za_vg1x2>; 2735f757f3fSDimitry Andricdefm SUB_VG4_M4Z4Z_S : sme2_dot_mla_add_sub_array_vg4_multi<"sub", 0b0110011, MatrixOp32, ZZZZ_s_mul_r, nxv4i32, int_aarch64_sme_sub_write_za_vg1x4>; 274bdd1243dSDimitry Andric 275bdd1243dSDimitry Andricdefm FMLA_VG2_M2ZZ_S : sme2_dot_mla_add_sub_array_vg2_single<"fmla", 0b0011000, MatrixOp32, ZZ_s, ZPR4b32, nxv4f32, int_aarch64_sme_fmla_single_vg1x2>; 276bdd1243dSDimitry Andricdefm FMLA_VG4_M4ZZ_S : sme2_dot_mla_add_sub_array_vg4_single<"fmla", 0b0111000, MatrixOp32, ZZZZ_s, ZPR4b32, nxv4f32, int_aarch64_sme_fmla_single_vg1x4>; 2775f757f3fSDimitry Andricdefm FMLA_VG2_M2Z2Z_S : sme2_dot_mla_add_sub_array_vg2_multi<"fmla", 0b0110000, MatrixOp32, ZZ_s_mul_r, nxv4f32, int_aarch64_sme_fmla_vg1x2>; 2785f757f3fSDimitry Andricdefm FMLA_VG4_M4Z4Z_S : sme2_dot_mla_add_sub_array_vg4_multi<"fmla", 0b0110000, MatrixOp32, ZZZZ_s_mul_r, nxv4f32, int_aarch64_sme_fmla_vg1x4>; 2795f757f3fSDimitry Andricdefm FMLA_VG2_M2ZZI_S : sme2_multi_vec_array_vg2_index_32b<"fmla", 0b01, 0b0000, ZZ_s_mul_r, ZPR4b32, nxv4f32, int_aarch64_sme_fmla_lane_vg1x2>; 280bdd1243dSDimitry Andricdefm FMLA_VG4_M4ZZI_S : sme2_multi_vec_array_vg4_index_32b<"fmla", 0b0000, ZZZZ_s_mul_r, ZPR4b32, nxv4f32, int_aarch64_sme_fmla_lane_vg1x4>; 281bdd1243dSDimitry Andric 282bdd1243dSDimitry Andricdefm FMLS_VG2_M2ZZ_S : sme2_dot_mla_add_sub_array_vg2_single<"fmls", 0b0011001, MatrixOp32, ZZ_s, ZPR4b32, nxv4f32, int_aarch64_sme_fmls_single_vg1x2>; 283bdd1243dSDimitry Andricdefm FMLS_VG4_M4ZZ_S : sme2_dot_mla_add_sub_array_vg4_single<"fmls", 0b0111001, MatrixOp32, ZZZZ_s, ZPR4b32, nxv4f32, int_aarch64_sme_fmls_single_vg1x4>; 2845f757f3fSDimitry Andricdefm FMLS_VG2_M2Z2Z_S : sme2_dot_mla_add_sub_array_vg2_multi<"fmls", 0b0110001, MatrixOp32, ZZ_s_mul_r, nxv4f32, int_aarch64_sme_fmls_vg1x2>; 2855f757f3fSDimitry Andricdefm FMLS_VG4_M4Z4Z_S : sme2_dot_mla_add_sub_array_vg4_multi<"fmls", 0b0110001, MatrixOp32, ZZZZ_s_mul_r, nxv4f32, int_aarch64_sme_fmls_vg1x4>; 2865f757f3fSDimitry Andricdefm FMLS_VG2_M2ZZI_S : sme2_multi_vec_array_vg2_index_32b<"fmls", 0b01, 0b0010, ZZ_s_mul_r, ZPR4b32, nxv4f32, int_aarch64_sme_fmls_lane_vg1x2>; 287bdd1243dSDimitry Andricdefm FMLS_VG4_M4ZZI_S : sme2_multi_vec_array_vg4_index_32b<"fmls", 0b0010, ZZZZ_s_mul_r, ZPR4b32, nxv4f32, int_aarch64_sme_fmls_lane_vg1x4>; 288bdd1243dSDimitry Andric 28906c3fb27SDimitry Andricdefm ADD_VG2_M2Z_S : sme2_multivec_accum_add_sub_vg2<"add", 0b0010, MatrixOp32, ZZ_s_mul_r, nxv4i32, int_aarch64_sme_add_za32_vg1x2>; 29006c3fb27SDimitry Andricdefm ADD_VG4_M4Z_S : sme2_multivec_accum_add_sub_vg4<"add", 0b0010, MatrixOp32, ZZZZ_s_mul_r, nxv4i32, int_aarch64_sme_add_za32_vg1x4>; 291bdd1243dSDimitry Andric 29206c3fb27SDimitry Andricdefm SUB_VG2_M2Z_S : sme2_multivec_accum_add_sub_vg2<"sub", 0b0011, MatrixOp32, ZZ_s_mul_r, nxv4i32, int_aarch64_sme_sub_za32_vg1x2>; 29306c3fb27SDimitry Andricdefm SUB_VG4_M4Z_S : sme2_multivec_accum_add_sub_vg4<"sub", 0b0011, MatrixOp32, ZZZZ_s_mul_r, nxv4i32, int_aarch64_sme_sub_za32_vg1x4>; 294bdd1243dSDimitry Andric 29506c3fb27SDimitry Andricdefm FADD_VG2_M2Z_S : sme2_multivec_accum_add_sub_vg2<"fadd", 0b0000, MatrixOp32, ZZ_s_mul_r, nxv4f32, int_aarch64_sme_add_za32_vg1x2>; 29606c3fb27SDimitry Andricdefm FADD_VG4_M4Z_S : sme2_multivec_accum_add_sub_vg4<"fadd", 0b0000, MatrixOp32, ZZZZ_s_mul_r, nxv4f32, int_aarch64_sme_add_za32_vg1x4>; 297bdd1243dSDimitry Andric 29806c3fb27SDimitry Andricdefm FSUB_VG2_M2Z_S : sme2_multivec_accum_add_sub_vg2<"fsub", 0b0001, MatrixOp32, ZZ_s_mul_r, nxv4f32, int_aarch64_sme_sub_za32_vg1x2>; 29906c3fb27SDimitry Andricdefm FSUB_VG4_M4Z_S : sme2_multivec_accum_add_sub_vg4<"fsub", 0b0001, MatrixOp32, ZZZZ_s_mul_r, nxv4f32, int_aarch64_sme_sub_za32_vg1x4>; 300bdd1243dSDimitry Andric 301bdd1243dSDimitry Andricdefm SQDMULH_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"sqdmulh", 0b1000000>; 302bdd1243dSDimitry Andricdefm SQDMULH_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"sqdmulh", 0b1000000>; 303bdd1243dSDimitry Andricdefm SQDMULH_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"sqdmulh", 0b1000000>; 304bdd1243dSDimitry Andricdefm SQDMULH_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"sqdmulh", 0b1000000>; 305bdd1243dSDimitry Andric 306bdd1243dSDimitry Andricdefm FMLAL_MZZI : sme2_mla_long_array_index<"fmlal", 0b10, 0b00, nxv8f16, int_aarch64_sme_fmlal_lane_vg2x1>; 307bdd1243dSDimitry Andricdefm FMLAL_VG2_M2ZZI : sme2_fp_mla_long_array_vg2_index<"fmlal", 0b00, nxv8f16, int_aarch64_sme_fmlal_lane_vg2x2>; 308bdd1243dSDimitry Andricdefm FMLAL_VG4_M4ZZI : sme2_fp_mla_long_array_vg4_index<"fmlal", 0b00, nxv8f16, int_aarch64_sme_fmlal_lane_vg2x4>; 309bdd1243dSDimitry Andricdefm FMLAL_MZZ : sme2_mla_long_array_single<"fmlal", 0b00, 0b00, nxv8f16, int_aarch64_sme_fmlal_single_vg2x1>; 3105f757f3fSDimitry Andricdefm FMLAL_VG2_M2ZZ_HtoS : sme2_fp_mla_long_array_vg2_single<"fmlal", 0b000, MatrixOp32, ZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmlal_single_vg2x2>; 3115f757f3fSDimitry Andricdefm FMLAL_VG4_M4ZZ_HtoS : sme2_fp_mla_long_array_vg4_single<"fmlal", 0b000, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmlal_single_vg2x4>; 3125f757f3fSDimitry Andricdefm FMLAL_VG2_M2Z2Z_HtoS : sme2_fp_mla_long_array_vg2_multi<"fmlal", 0b000, MatrixOp32, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmlal_vg2x2>; 3135f757f3fSDimitry Andricdefm FMLAL_VG4_M4Z4Z_HtoS : sme2_fp_mla_long_array_vg4_multi<"fmlal", 0b000, MatrixOp32, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmlal_vg2x4>; 314bdd1243dSDimitry Andric 315bdd1243dSDimitry Andricdefm FMLSL_MZZI : sme2_mla_long_array_index<"fmlsl", 0b10, 0b01, nxv8f16, int_aarch64_sme_fmlsl_lane_vg2x1>; 316bdd1243dSDimitry Andricdefm FMLSL_VG2_M2ZZI : sme2_fp_mla_long_array_vg2_index<"fmlsl", 0b01, nxv8f16, int_aarch64_sme_fmlsl_lane_vg2x2>; 317bdd1243dSDimitry Andricdefm FMLSL_VG4_M4ZZI : sme2_fp_mla_long_array_vg4_index<"fmlsl", 0b01, nxv8f16, int_aarch64_sme_fmlsl_lane_vg2x4>; 318bdd1243dSDimitry Andricdefm FMLSL_MZZ : sme2_mla_long_array_single<"fmlsl", 0b00, 0b01, nxv8f16, int_aarch64_sme_fmlsl_single_vg2x1>; 3195f757f3fSDimitry Andricdefm FMLSL_VG2_M2ZZ_HtoS : sme2_fp_mla_long_array_vg2_single<"fmlsl", 0b010, MatrixOp32, ZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmlsl_single_vg2x2>; 3205f757f3fSDimitry Andricdefm FMLSL_VG4_M4ZZ_HtoS : sme2_fp_mla_long_array_vg4_single<"fmlsl", 0b010, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmlsl_single_vg2x4>; 3215f757f3fSDimitry Andricdefm FMLSL_VG2_M2Z2Z_HtoS : sme2_fp_mla_long_array_vg2_multi<"fmlsl", 0b001, MatrixOp32, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmlsl_vg2x2>; 3225f757f3fSDimitry Andricdefm FMLSL_VG4_M4Z4Z_HtoS : sme2_fp_mla_long_array_vg4_multi<"fmlsl", 0b001, MatrixOp32, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmlsl_vg2x4>; 323bdd1243dSDimitry Andric 324bdd1243dSDimitry Andricdefm BFMLAL_MZZI : sme2_mla_long_array_index<"bfmlal", 0b10, 0b10, nxv8bf16, int_aarch64_sme_fmlal_lane_vg2x1>; 325bdd1243dSDimitry Andricdefm BFMLAL_VG2_M2ZZI : sme2_fp_mla_long_array_vg2_index<"bfmlal", 0b10, nxv8bf16, int_aarch64_sme_fmlal_lane_vg2x2>; 326bdd1243dSDimitry Andricdefm BFMLAL_VG4_M4ZZI : sme2_fp_mla_long_array_vg4_index<"bfmlal", 0b10, nxv8bf16, int_aarch64_sme_fmlal_lane_vg2x4>; 327bdd1243dSDimitry Andricdefm BFMLAL_MZZ : sme2_mla_long_array_single<"bfmlal", 0b00, 0b10, nxv8bf16, int_aarch64_sme_fmlal_single_vg2x1>; 3285f757f3fSDimitry Andricdefm BFMLAL_VG2_M2ZZ_HtoS : sme2_fp_mla_long_array_vg2_single<"bfmlal", 0b100, MatrixOp32, ZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmlal_single_vg2x2>; 3295f757f3fSDimitry Andricdefm BFMLAL_VG4_M4ZZ_HtoS : sme2_fp_mla_long_array_vg4_single<"bfmlal", 0b100, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmlal_single_vg2x4>; 3305f757f3fSDimitry Andricdefm BFMLAL_VG2_M2Z2Z_HtoS : sme2_fp_mla_long_array_vg2_multi<"bfmlal", 0b010, MatrixOp32, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmlal_vg2x2>; 3315f757f3fSDimitry Andricdefm BFMLAL_VG4_M4Z4Z_HtoS : sme2_fp_mla_long_array_vg4_multi<"bfmlal", 0b010, MatrixOp32, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmlal_vg2x4>; 332bdd1243dSDimitry Andric 333bdd1243dSDimitry Andricdefm BFMLSL_MZZI : sme2_mla_long_array_index<"bfmlsl", 0b10, 0b11, nxv8bf16, int_aarch64_sme_fmlsl_lane_vg2x1>; 334bdd1243dSDimitry Andricdefm BFMLSL_VG2_M2ZZI : sme2_fp_mla_long_array_vg2_index<"bfmlsl", 0b11, nxv8bf16, int_aarch64_sme_fmlsl_lane_vg2x2>; 335bdd1243dSDimitry Andricdefm BFMLSL_VG4_M4ZZI : sme2_fp_mla_long_array_vg4_index<"bfmlsl", 0b11, nxv8bf16, int_aarch64_sme_fmlsl_lane_vg2x4>; 336bdd1243dSDimitry Andricdefm BFMLSL_MZZ : sme2_mla_long_array_single<"bfmlsl", 0b00, 0b11, nxv8bf16, int_aarch64_sme_fmlsl_single_vg2x1>; 3375f757f3fSDimitry Andricdefm BFMLSL_VG2_M2ZZ_HtoS : sme2_fp_mla_long_array_vg2_single<"bfmlsl", 0b110, MatrixOp32, ZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmlsl_single_vg2x2>; 3385f757f3fSDimitry Andricdefm BFMLSL_VG4_M4ZZ_HtoS : sme2_fp_mla_long_array_vg4_single<"bfmlsl", 0b110, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmlsl_single_vg2x4>; 3395f757f3fSDimitry Andricdefm BFMLSL_VG2_M2Z2Z_HtoS : sme2_fp_mla_long_array_vg2_multi<"bfmlsl", 0b011, MatrixOp32, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmlsl_vg2x2>; 3405f757f3fSDimitry Andricdefm BFMLSL_VG4_M4Z4Z_HtoS : sme2_fp_mla_long_array_vg4_multi<"bfmlsl", 0b011, MatrixOp32, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmlsl_vg2x4>; 341bdd1243dSDimitry Andric 342bdd1243dSDimitry Andricdefm SMLAL_MZZI : sme2_mla_long_array_index<"smlal", 0b11, 0b00, nxv8i16, int_aarch64_sme_smlal_lane_vg2x1>; 343bdd1243dSDimitry Andricdefm SMLAL_VG2_M2ZZI : sme2_int_mla_long_array_vg2_index<"smlal", 0b00, int_aarch64_sme_smlal_lane_vg2x2>; 344bdd1243dSDimitry Andricdefm SMLAL_VG4_M4ZZI : sme2_int_mla_long_array_vg4_index<"smlal", 0b00, int_aarch64_sme_smlal_lane_vg2x4>; 345bdd1243dSDimitry Andricdefm SMLAL_MZZ : sme2_mla_long_array_single<"smlal",0b01, 0b00, nxv8i16, int_aarch64_sme_smlal_single_vg2x1>; 346bdd1243dSDimitry Andricdefm SMLAL_VG2_M2ZZ : sme2_int_mla_long_array_vg2_single<"smlal", 0b00, int_aarch64_sme_smlal_single_vg2x2>; 347bdd1243dSDimitry Andricdefm SMLAL_VG4_M4ZZ : sme2_int_mla_long_array_vg4_single<"smlal", 0b00, int_aarch64_sme_smlal_single_vg2x4>; 348bdd1243dSDimitry Andricdefm SMLAL_VG2_M2Z2Z : sme2_int_mla_long_array_vg2_multi<"smlal", 0b00, int_aarch64_sme_smlal_vg2x2>; 349bdd1243dSDimitry Andricdefm SMLAL_VG4_M4Z4Z : sme2_int_mla_long_array_vg4_multi<"smlal", 0b00, int_aarch64_sme_smlal_vg2x4>; 350bdd1243dSDimitry Andric 351bdd1243dSDimitry Andricdefm SMLSL_MZZI : sme2_mla_long_array_index<"smlsl", 0b11, 0b01, nxv8i16, int_aarch64_sme_smlsl_lane_vg2x1>; 352bdd1243dSDimitry Andricdefm SMLSL_VG2_M2ZZI : sme2_int_mla_long_array_vg2_index<"smlsl", 0b01, int_aarch64_sme_smlsl_lane_vg2x2>; 353bdd1243dSDimitry Andricdefm SMLSL_VG4_M4ZZI : sme2_int_mla_long_array_vg4_index<"smlsl", 0b01, int_aarch64_sme_smlsl_lane_vg2x4>; 354bdd1243dSDimitry Andricdefm SMLSL_MZZ : sme2_mla_long_array_single<"smlsl",0b01, 0b01, nxv8i16, int_aarch64_sme_smlsl_single_vg2x1>; 355bdd1243dSDimitry Andricdefm SMLSL_VG2_M2ZZ : sme2_int_mla_long_array_vg2_single<"smlsl", 0b01, int_aarch64_sme_smlsl_single_vg2x2>; 356bdd1243dSDimitry Andricdefm SMLSL_VG4_M4ZZ : sme2_int_mla_long_array_vg4_single<"smlsl", 0b01, int_aarch64_sme_smlsl_single_vg2x4>; 357bdd1243dSDimitry Andricdefm SMLSL_VG2_M2Z2Z : sme2_int_mla_long_array_vg2_multi<"smlsl", 0b01, int_aarch64_sme_smlsl_vg2x2>; 358bdd1243dSDimitry Andricdefm SMLSL_VG4_M4Z4Z : sme2_int_mla_long_array_vg4_multi<"smlsl", 0b01, int_aarch64_sme_smlsl_vg2x4>; 359bdd1243dSDimitry Andric 360bdd1243dSDimitry Andricdefm UMLAL_MZZI : sme2_mla_long_array_index<"umlal", 0b11, 0b10, nxv8i16, int_aarch64_sme_umlal_lane_vg2x1>; 361bdd1243dSDimitry Andricdefm UMLAL_VG2_M2ZZI : sme2_int_mla_long_array_vg2_index<"umlal", 0b10, int_aarch64_sme_umlal_lane_vg2x2>; 362bdd1243dSDimitry Andricdefm UMLAL_VG4_M4ZZI : sme2_int_mla_long_array_vg4_index<"umlal", 0b10, int_aarch64_sme_umlal_lane_vg2x4>; 363bdd1243dSDimitry Andricdefm UMLAL_MZZ : sme2_mla_long_array_single<"umlal",0b01, 0b10, nxv8i16, int_aarch64_sme_umlal_single_vg2x1>; 364bdd1243dSDimitry Andricdefm UMLAL_VG2_M2ZZ : sme2_int_mla_long_array_vg2_single<"umlal", 0b10, int_aarch64_sme_umlal_single_vg2x2>; 365bdd1243dSDimitry Andricdefm UMLAL_VG4_M4ZZ : sme2_int_mla_long_array_vg4_single<"umlal", 0b10, int_aarch64_sme_umlal_single_vg2x4>; 366bdd1243dSDimitry Andricdefm UMLAL_VG2_M2Z2Z : sme2_int_mla_long_array_vg2_multi<"umlal", 0b10, int_aarch64_sme_umlal_vg2x2>; 367bdd1243dSDimitry Andricdefm UMLAL_VG4_M4Z4Z : sme2_int_mla_long_array_vg4_multi<"umlal", 0b10, int_aarch64_sme_umlal_vg2x4>; 368bdd1243dSDimitry Andric 369bdd1243dSDimitry Andricdefm UMLSL_MZZI : sme2_mla_long_array_index<"umlsl", 0b11, 0b11, nxv8i16, int_aarch64_sme_umlsl_lane_vg2x1>; 370bdd1243dSDimitry Andricdefm UMLSL_VG2_M2ZZI : sme2_int_mla_long_array_vg2_index<"umlsl", 0b11, int_aarch64_sme_umlsl_lane_vg2x2>; 371bdd1243dSDimitry Andricdefm UMLSL_VG4_M4ZZI : sme2_int_mla_long_array_vg4_index<"umlsl", 0b11, int_aarch64_sme_umlsl_lane_vg2x4>; 372bdd1243dSDimitry Andricdefm UMLSL_MZZ : sme2_mla_long_array_single<"umlsl",0b01, 0b11, nxv8i16, int_aarch64_sme_umlsl_single_vg2x1>; 373bdd1243dSDimitry Andricdefm UMLSL_VG2_M2ZZ : sme2_int_mla_long_array_vg2_single<"umlsl", 0b11, int_aarch64_sme_umlsl_single_vg2x2>; 374bdd1243dSDimitry Andricdefm UMLSL_VG4_M4ZZ : sme2_int_mla_long_array_vg4_single<"umlsl", 0b11, int_aarch64_sme_umlsl_single_vg2x4>; 375bdd1243dSDimitry Andricdefm UMLSL_VG2_M2Z2Z : sme2_int_mla_long_array_vg2_multi<"umlsl", 0b11, int_aarch64_sme_umlsl_vg2x2>; 376bdd1243dSDimitry Andricdefm UMLSL_VG4_M4Z4Z : sme2_int_mla_long_array_vg4_multi<"umlsl", 0b11, int_aarch64_sme_umlsl_vg2x4>; 377bdd1243dSDimitry Andric 3785f757f3fSDimitry Andricdefm FCVT_Z2Z_StoH : sme2_cvt_vg2_single<"fcvt", 0b00000, nxv8f16, nxv4f32, int_aarch64_sve_fcvt_x2>; 3795f757f3fSDimitry Andricdefm FCVTN_Z2Z_StoH : sme2_cvt_vg2_single<"fcvtn", 0b00001, nxv8f16, nxv4f32, int_aarch64_sve_fcvtn_x2>; 3805f757f3fSDimitry Andricdefm BFCVT_Z2Z_StoH : sme2_cvt_vg2_single<"bfcvt", 0b10000, nxv8bf16, nxv4f32, int_aarch64_sve_bfcvt_x2>; 3815f757f3fSDimitry Andricdefm BFCVTN_Z2Z_StoH : sme2_cvt_vg2_single<"bfcvtn", 0b10001, nxv8bf16, nxv4f32, int_aarch64_sve_bfcvtn_x2>; 382bdd1243dSDimitry Andric 3835f757f3fSDimitry Andricdefm SQCVT_Z2Z_StoH : sme2_cvt_vg2_single<"sqcvt", 0b00110, nxv8i16, nxv4i32, int_aarch64_sve_sqcvt_x2>; 3845f757f3fSDimitry Andricdefm UQCVT_Z2Z_StoH : sme2_cvt_vg2_single<"uqcvt", 0b00111, nxv8i16, nxv4i32, int_aarch64_sve_uqcvt_x2>; 3855f757f3fSDimitry Andricdefm SQCVTU_Z2Z_StoH : sme2_cvt_vg2_single<"sqcvtu", 0b10110, nxv8i16, nxv4i32, int_aarch64_sve_sqcvtu_x2>; 386bdd1243dSDimitry Andricdefm SQCVT_Z4Z : sme2_int_cvt_vg4_single<"sqcvt", 0b000, int_aarch64_sve_sqcvt_x4>; 387bdd1243dSDimitry Andricdefm UQCVT_Z4Z : sme2_int_cvt_vg4_single<"uqcvt", 0b001, int_aarch64_sve_uqcvt_x4>; 388bdd1243dSDimitry Andricdefm SQCVTU_Z4Z : sme2_int_cvt_vg4_single<"sqcvtu", 0b100, int_aarch64_sve_sqcvtu_x4>; 389bdd1243dSDimitry Andricdefm SQCVTN_Z4Z : sme2_int_cvt_vg4_single<"sqcvtn", 0b010, int_aarch64_sve_sqcvtn_x4>; 390bdd1243dSDimitry Andricdefm SQCVTUN_Z4Z : sme2_int_cvt_vg4_single<"sqcvtun", 0b110, int_aarch64_sve_sqcvtun_x4>; 391bdd1243dSDimitry Andricdefm UQCVTN_Z4Z : sme2_int_cvt_vg4_single<"uqcvtn", 0b011, int_aarch64_sve_uqcvtn_x4>; 392bdd1243dSDimitry Andric 393bdd1243dSDimitry Andricdefm FCVTZS_2Z2Z_StoS : sme2_fp_cvt_vg2_multi<"fcvtzs", 0b00010>; 394bdd1243dSDimitry Andricdefm FCVTZS_4Z4Z_StoS : sme2_fp_cvt_vg4_multi<"fcvtzs", 0b0001000>; 395bdd1243dSDimitry Andricdefm FCVTZU_2Z2Z_StoS : sme2_fp_cvt_vg2_multi<"fcvtzu", 0b00011>; 396bdd1243dSDimitry Andricdefm FCVTZU_4Z4Z_StoS : sme2_fp_cvt_vg4_multi<"fcvtzu", 0b0001010>; 397bdd1243dSDimitry Andricdefm SCVTF_2Z2Z_StoS : sme2_fp_cvt_vg2_multi<"scvtf", 0b00100>; 398bdd1243dSDimitry Andricdefm SCVTF_4Z4Z_StoS : sme2_fp_cvt_vg4_multi<"scvtf", 0b0010000>; 399bdd1243dSDimitry Andricdefm UCVTF_2Z2Z_StoS : sme2_fp_cvt_vg2_multi<"ucvtf", 0b00101>; 400bdd1243dSDimitry Andricdefm UCVTF_4Z4Z_StoS : sme2_fp_cvt_vg4_multi<"ucvtf", 0b0010010>; 401bdd1243dSDimitry Andric 402bdd1243dSDimitry Andricdefm SMAX_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"smax", 0b0000000>; 403bdd1243dSDimitry Andricdefm SMAX_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"smax", 0b0000000>; 404bdd1243dSDimitry Andricdefm SMAX_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"smax", 0b0000000>; 405bdd1243dSDimitry Andricdefm SMAX_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"smax", 0b0000000>; 406bdd1243dSDimitry Andric 407bdd1243dSDimitry Andricdefm UMAX_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"umax", 0b0000001>; 408bdd1243dSDimitry Andricdefm UMAX_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"umax", 0b0000001>; 409bdd1243dSDimitry Andricdefm UMAX_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"umax", 0b0000001>; 410bdd1243dSDimitry Andricdefm UMAX_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"umax", 0b0000001>; 411bdd1243dSDimitry Andric 412bdd1243dSDimitry Andricdefm SMIN_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"smin", 0b0000010>; 413bdd1243dSDimitry Andricdefm SMIN_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"smin", 0b0000010>; 414bdd1243dSDimitry Andricdefm SMIN_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"smin", 0b0000010>; 415bdd1243dSDimitry Andricdefm SMIN_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"smin", 0b0000010>; 416bdd1243dSDimitry Andric 417bdd1243dSDimitry Andricdefm UMIN_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"umin", 0b0000011>; 418bdd1243dSDimitry Andricdefm UMIN_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"umin", 0b0000011>; 419bdd1243dSDimitry Andricdefm UMIN_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"umin", 0b0000011>; 420bdd1243dSDimitry Andricdefm UMIN_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"umin", 0b0000011>; 421bdd1243dSDimitry Andric 422bdd1243dSDimitry Andricdefm FMAX_VG2_2ZZ : sme2_fp_sve_destructive_vector_vg2_single<"fmax", 0b0010000>; 423bdd1243dSDimitry Andricdefm FMAX_VG4_4ZZ : sme2_fp_sve_destructive_vector_vg4_single<"fmax", 0b0010000>; 424bdd1243dSDimitry Andricdefm FMAX_VG2_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"fmax", 0b0010000>; 425bdd1243dSDimitry Andricdefm FMAX_VG4_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fmax", 0b0010000>; 426bdd1243dSDimitry Andric 427bdd1243dSDimitry Andricdefm FMIN_VG2_2ZZ : sme2_fp_sve_destructive_vector_vg2_single<"fmin", 0b0010001>; 428bdd1243dSDimitry Andricdefm FMIN_VG4_4ZZ : sme2_fp_sve_destructive_vector_vg4_single<"fmin", 0b0010001>; 429bdd1243dSDimitry Andricdefm FMIN_VG2_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"fmin", 0b0010001>; 430bdd1243dSDimitry Andricdefm FMIN_VG4_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fmin", 0b0010001>; 431bdd1243dSDimitry Andric 432bdd1243dSDimitry Andricdefm FMAXNM_VG2_2ZZ : sme2_fp_sve_destructive_vector_vg2_single<"fmaxnm", 0b0010010>; 433bdd1243dSDimitry Andricdefm FMAXNM_VG4_4ZZ : sme2_fp_sve_destructive_vector_vg4_single<"fmaxnm", 0b0010010>; 434bdd1243dSDimitry Andricdefm FMAXNM_VG2_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"fmaxnm", 0b0010010>; 435bdd1243dSDimitry Andricdefm FMAXNM_VG4_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fmaxnm", 0b0010010>; 436bdd1243dSDimitry Andric 437bdd1243dSDimitry Andricdefm FMINNM_VG2_2ZZ : sme2_fp_sve_destructive_vector_vg2_single<"fminnm", 0b0010011>; 438bdd1243dSDimitry Andricdefm FMINNM_VG4_4ZZ : sme2_fp_sve_destructive_vector_vg4_single<"fminnm", 0b0010011>; 439bdd1243dSDimitry Andricdefm FMINNM_VG2_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"fminnm", 0b0010011>; 440bdd1243dSDimitry Andricdefm FMINNM_VG4_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fminnm", 0b0010011>; 441bdd1243dSDimitry Andric 442bdd1243dSDimitry Andricdefm SRSHL_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"srshl", 0b0100010>; 443bdd1243dSDimitry Andricdefm SRSHL_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"srshl", 0b0100010>; 444bdd1243dSDimitry Andricdefm SRSHL_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"srshl", 0b0100010>; 445bdd1243dSDimitry Andricdefm SRSHL_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"srshl", 0b0100010>; 446bdd1243dSDimitry Andric 447bdd1243dSDimitry Andricdefm URSHL_VG2_2ZZ : sme2_int_sve_destructive_vector_vg2_single<"urshl", 0b0100011>; 448bdd1243dSDimitry Andricdefm URSHL_VG4_4ZZ : sme2_int_sve_destructive_vector_vg4_single<"urshl", 0b0100011>; 449bdd1243dSDimitry Andricdefm URSHL_VG2_2Z2Z : sme2_int_sve_destructive_vector_vg2_multi<"urshl", 0b0100011>; 450bdd1243dSDimitry Andricdefm URSHL_VG4_4Z4Z : sme2_int_sve_destructive_vector_vg4_multi<"urshl", 0b0100011>; 451bdd1243dSDimitry Andric 452bdd1243dSDimitry Andricdefm FCLAMP_VG2_2Z2Z : sme2_fp_clamp_vector_vg2_multi<"fclamp">; 453bdd1243dSDimitry Andricdefm FCLAMP_VG4_4Z4Z : sme2_fp_clamp_vector_vg4_multi<"fclamp">; 454bdd1243dSDimitry Andric 455bdd1243dSDimitry Andricdefm SCLAMP_VG2_2Z2Z : sme2_int_clamp_vector_vg2_multi<"sclamp", 0b0>; 456bdd1243dSDimitry Andricdefm SCLAMP_VG4_4Z4Z : sme2_int_clamp_vector_vg4_multi<"sclamp", 0b0>; 457bdd1243dSDimitry Andric 458bdd1243dSDimitry Andricdefm UCLAMP_VG2_2Z2Z : sme2_int_clamp_vector_vg2_multi<"uclamp", 0b1>; 459bdd1243dSDimitry Andricdefm UCLAMP_VG4_4Z4Z : sme2_int_clamp_vector_vg4_multi<"uclamp", 0b1>; 460bdd1243dSDimitry Andric 4615f757f3fSDimitry Andricdefm FDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"fdot", 0b01, 0b1001, ZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fdot_lane_za32_vg1x2>; 46206c3fb27SDimitry Andricdefm FDOT_VG4_M4ZZI_HtoS : sme2_multi_vec_array_vg4_index_32b<"fdot", 0b1001, ZZZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fdot_lane_za32_vg1x4>; 46306c3fb27SDimitry Andricdefm FDOT_VG2_M2ZZ_HtoS : sme2_dot_mla_add_sub_array_vg2_single<"fdot", 0b0010000, MatrixOp32, ZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fdot_single_za32_vg1x2>; 46406c3fb27SDimitry Andricdefm FDOT_VG4_M4ZZ_HtoS : sme2_dot_mla_add_sub_array_vg4_single<"fdot", 0b0110000, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fdot_single_za32_vg1x4>; 4655f757f3fSDimitry Andricdefm FDOT_VG2_M2Z2Z_HtoS : sme2_dot_mla_add_sub_array_vg2_multi<"fdot", 0b0100000, MatrixOp32, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fdot_za32_vg1x2>; 4665f757f3fSDimitry Andricdefm FDOT_VG4_M4Z4Z_HtoS : sme2_dot_mla_add_sub_array_vg4_multi<"fdot", 0b0100000, MatrixOp32, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fdot_za32_vg1x4>; 467bdd1243dSDimitry Andric 4685f757f3fSDimitry Andricdefm BFDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"bfdot", 0b01, 0b1011, ZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fdot_lane_za32_vg1x2>; 46906c3fb27SDimitry Andricdefm BFDOT_VG4_M4ZZI_HtoS : sme2_multi_vec_array_vg4_index_32b<"bfdot", 0b1011, ZZZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fdot_lane_za32_vg1x4>; 47006c3fb27SDimitry Andricdefm BFDOT_VG2_M2ZZ_HtoS : sme2_dot_mla_add_sub_array_vg2_single<"bfdot", 0b0010010, MatrixOp32, ZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fdot_single_za32_vg1x2>; 47106c3fb27SDimitry Andricdefm BFDOT_VG4_M4ZZ_HtoS : sme2_dot_mla_add_sub_array_vg4_single<"bfdot", 0b0110010, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fdot_single_za32_vg1x4>; 4725f757f3fSDimitry Andricdefm BFDOT_VG2_M2Z2Z_HtoS : sme2_dot_mla_add_sub_array_vg2_multi<"bfdot", 0b0100010, MatrixOp32, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fdot_za32_vg1x2>; 4735f757f3fSDimitry Andricdefm BFDOT_VG4_M4Z4Z_HtoS : sme2_dot_mla_add_sub_array_vg4_multi<"bfdot", 0b0100010, MatrixOp32, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fdot_za32_vg1x4>; 474bdd1243dSDimitry Andric 4755f757f3fSDimitry Andricdefm BFVDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"bfvdot", 0b01, 0b0011, ZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fvdot_lane_za32_vg1x2>; 476bdd1243dSDimitry Andric 4775f757f3fSDimitry Andricdefm FVDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"fvdot", 0b01, 0b0001, ZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fvdot_lane_za32_vg1x2>; 478bdd1243dSDimitry Andric 4795f757f3fSDimitry Andricdefm SDOT_VG2_M2ZZI_HToS : sme2_multi_vec_array_vg2_index_32b<"sdot", 0b01, 0b1000, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_lane_za32_vg1x2>; 4805f757f3fSDimitry Andricdefm SDOT_VG2_M2ZZI_BToS : sme2_multi_vec_array_vg2_index_32b<"sdot", 0b01, 0b1100, ZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_sdot_lane_za32_vg1x2>; 48106c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZI_HToS : sme2_multi_vec_array_vg4_index_32b<"sdot", 0b1000, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_lane_za32_vg1x4>; 48206c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZI_BToS : sme2_multi_vec_array_vg4_index_32b<"sdot", 0b1100, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_sdot_lane_za32_vg1x4>; 48306c3fb27SDimitry Andricdefm SDOT_VG2_M2ZZ_HtoS : sme2_dot_mla_add_sub_array_vg2_single<"sdot", 0b1010101, MatrixOp32, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_single_za32_vg1x2>; 48406c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZ_HtoS : sme2_dot_mla_add_sub_array_vg4_single<"sdot", 0b1110101, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_single_za32_vg1x4>; 4855f757f3fSDimitry Andricdefm SDOT_VG2_M2Z2Z_HtoS : sme2_dot_mla_add_sub_array_vg2_multi<"sdot", 0b1101001, MatrixOp32, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_sdot_za32_vg1x2>; 4865f757f3fSDimitry Andricdefm SDOT_VG4_M4Z4Z_HtoS : sme2_dot_mla_add_sub_array_vg4_multi<"sdot", 0b1101001, MatrixOp32, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_sdot_za32_vg1x4>; 48706c3fb27SDimitry Andricdefm SDOT_VG2_M2ZZ_BtoS : sme2_dot_mla_add_sub_array_vg2_single<"sdot", 0b0010100, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sdot_single_za32_vg1x2>; 48806c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZ_BtoS : sme2_dot_mla_add_sub_array_vg4_single<"sdot", 0b0110100, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sdot_single_za32_vg1x4>; 4895f757f3fSDimitry Andricdefm SDOT_VG2_M2Z2Z_BtoS : sme2_dot_mla_add_sub_array_vg2_multi<"sdot", 0b0101000, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_sdot_za32_vg1x2>; 4905f757f3fSDimitry Andricdefm SDOT_VG4_M4Z4Z_BtoS : sme2_dot_mla_add_sub_array_vg4_multi<"sdot", 0b0101000, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_sdot_za32_vg1x4>; 491bdd1243dSDimitry Andric 4925f757f3fSDimitry Andricdefm SUDOT_VG2_M2ZZI_BToS : sme2_multi_vec_array_vg2_index_32b<"sudot", 0b01, 0b1111, ZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_sudot_lane_za32_vg1x2>; 49306c3fb27SDimitry Andricdefm SUDOT_VG4_M4ZZI_BToS : sme2_multi_vec_array_vg4_index_32b<"sudot", 0b1111, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_sudot_lane_za32_vg1x4>; 49406c3fb27SDimitry Andricdefm SUDOT_VG2_M2ZZ_BToS : sme2_dot_mla_add_sub_array_vg2_single<"sudot", 0b0010111, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sudot_single_za32_vg1x2>; 49506c3fb27SDimitry Andricdefm SUDOT_VG4_M4ZZ_BToS : sme2_dot_mla_add_sub_array_vg4_single<"sudot", 0b0110111, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sudot_single_za32_vg1x4>; 496bdd1243dSDimitry Andric 4975f757f3fSDimitry Andricdefm SVDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"svdot", 0b01, 0b0100, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_svdot_lane_za32_vg1x2>; 498bdd1243dSDimitry Andricdefm SVDOT_VG4_M4ZZI_BtoS : sme2_multi_vec_array_vg4_index_32b<"svdot", 0b0100, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_svdot_lane_za32_vg1x4>; 499bdd1243dSDimitry Andric 500bdd1243dSDimitry Andricdefm SUVDOT_VG4_M4ZZI_BToS : sme2_multi_vec_array_vg4_index_32b<"suvdot", 0b0111, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_suvdot_lane_za32_vg1x4>; 501bdd1243dSDimitry Andric 5025f757f3fSDimitry Andricdefm UDOT_VG2_M2ZZI_HToS : sme2_multi_vec_array_vg2_index_32b<"udot", 0b01, 0b1010, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_udot_lane_za32_vg1x2>; 5035f757f3fSDimitry Andricdefm UDOT_VG2_M2ZZI_BToS : sme2_multi_vec_array_vg2_index_32b<"udot", 0b01, 0b1110, ZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_udot_lane_za32_vg1x2>; 50406c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZI_BtoS : sme2_multi_vec_array_vg4_index_32b<"udot", 0b1110, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_udot_lane_za32_vg1x4>; 50506c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZI_HToS : sme2_multi_vec_array_vg4_index_32b<"udot", 0b1010, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_udot_lane_za32_vg1x4>; 50606c3fb27SDimitry Andricdefm UDOT_VG2_M2ZZ_HtoS : sme2_dot_mla_add_sub_array_vg2_single<"udot", 0b1010111, MatrixOp32, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_udot_single_za32_vg1x2>; 50706c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZ_HtoS : sme2_dot_mla_add_sub_array_vg4_single<"udot", 0b1110111, MatrixOp32, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_udot_single_za32_vg1x4>; 5085f757f3fSDimitry Andricdefm UDOT_VG2_M2Z2Z_HtoS : sme2_dot_mla_add_sub_array_vg2_multi<"udot", 0b1101011, MatrixOp32, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_udot_za32_vg1x2>; 5095f757f3fSDimitry Andricdefm UDOT_VG4_M4Z4Z_HtoS : sme2_dot_mla_add_sub_array_vg4_multi<"udot", 0b1101011, MatrixOp32, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_udot_za32_vg1x4>; 51006c3fb27SDimitry Andricdefm UDOT_VG2_M2ZZ_BtoS : sme2_dot_mla_add_sub_array_vg2_single<"udot", 0b0010110, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_udot_single_za32_vg1x2>; 51106c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZ_BtoS : sme2_dot_mla_add_sub_array_vg4_single<"udot", 0b0110110, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_udot_single_za32_vg1x4>; 5125f757f3fSDimitry Andricdefm UDOT_VG2_M2Z2Z_BtoS : sme2_dot_mla_add_sub_array_vg2_multi<"udot", 0b0101010, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_udot_za32_vg1x2>; 5135f757f3fSDimitry Andricdefm UDOT_VG4_M4Z4Z_BtoS : sme2_dot_mla_add_sub_array_vg4_multi<"udot", 0b0101010, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_udot_za32_vg1x4>; 514bdd1243dSDimitry Andric 5155f757f3fSDimitry Andricdefm USDOT_VG2_M2ZZI_BToS: sme2_multi_vec_array_vg2_index_32b<"usdot", 0b01, 0b1101, ZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_usdot_lane_za32_vg1x2>; 51606c3fb27SDimitry Andricdefm USDOT_VG4_M4ZZI_BToS: sme2_multi_vec_array_vg4_index_32b<"usdot", 0b1101, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_usdot_lane_za32_vg1x4>; 51706c3fb27SDimitry Andricdefm USDOT_VG2_M2ZZ_BToS : sme2_dot_mla_add_sub_array_vg2_single<"usdot", 0b0010101, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_usdot_single_za32_vg1x2>; 51806c3fb27SDimitry Andricdefm USDOT_VG4_M4ZZ_BToS : sme2_dot_mla_add_sub_array_vg4_single<"usdot", 0b0110101, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_usdot_single_za32_vg1x4>; 5195f757f3fSDimitry Andricdefm USDOT_VG2_M2Z2Z_BToS : sme2_dot_mla_add_sub_array_vg2_multi<"usdot", 0b0101001, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_usdot_za32_vg1x2>; 5205f757f3fSDimitry Andricdefm USDOT_VG4_M4Z4Z_BToS : sme2_dot_mla_add_sub_array_vg4_multi<"usdot", 0b0101001, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_usdot_za32_vg1x4>; 521bdd1243dSDimitry Andric 522bdd1243dSDimitry Andricdefm USVDOT_VG4_M4ZZI_BToS : sme2_multi_vec_array_vg4_index_32b<"usvdot", 0b0101, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_usvdot_lane_za32_vg1x4>; 523bdd1243dSDimitry Andric 5245f757f3fSDimitry Andricdefm UVDOT_VG2_M2ZZI_HtoS : sme2_multi_vec_array_vg2_index_32b<"uvdot", 0b01, 0b0110, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_uvdot_lane_za32_vg1x2>; 525bdd1243dSDimitry Andricdefm UVDOT_VG4_M4ZZI_BtoS : sme2_multi_vec_array_vg4_index_32b<"uvdot", 0b0110, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, int_aarch64_sme_uvdot_lane_za32_vg1x4>; 526bdd1243dSDimitry Andric 5275f757f3fSDimitry Andricdefm SMLALL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"smlall", 0b00, 0b000, int_aarch64_sme_smla_za32_lane_vg4x1>; 5285f757f3fSDimitry Andricdefm SMLALL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"smlall", 0b00, 0b000, int_aarch64_sme_smla_za32_lane_vg4x2>; 5295f757f3fSDimitry Andricdefm SMLALL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"smlall", 0b00, 0b0000, int_aarch64_sme_smla_za32_lane_vg4x4>; 5305f757f3fSDimitry Andricdefm SMLALL_MZZ_BtoS : sme2_mla_ll_array_single<"smlall", 0b00000, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, int_aarch64_sme_smla_za32_single_vg4x1>; 53106c3fb27SDimitry Andricdefm SMLALL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"smlall", 0b00000, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_smla_za32_single_vg4x2>; 53206c3fb27SDimitry Andricdefm SMLALL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"smlall", 0b01000, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_smla_za32_single_vg4x4>; 5335f757f3fSDimitry Andricdefm SMLALL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"smlall", 0b00000, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_smla_za32_vg4x2>; 5345f757f3fSDimitry Andricdefm SMLALL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"smlall", 0b00000, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_smla_za32_vg4x4>; 535bdd1243dSDimitry Andric 5365f757f3fSDimitry Andricdefm USMLALL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"usmlall", 0b00, 0b001, int_aarch64_sme_usmla_za32_lane_vg4x1>; 5375f757f3fSDimitry Andricdefm USMLALL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"usmlall", 0b00, 0b100, int_aarch64_sme_usmla_za32_lane_vg4x2>; 5385f757f3fSDimitry Andricdefm USMLALL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"usmlall", 0b00, 0b0100, int_aarch64_sme_usmla_za32_lane_vg4x4>; 5395f757f3fSDimitry Andricdefm USMLALL_MZZ_BtoS : sme2_mla_ll_array_single<"usmlall", 0b00001, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, int_aarch64_sme_usmla_za32_single_vg4x1>; 54006c3fb27SDimitry Andricdefm USMLALL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"usmlall", 0b00001, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_usmla_za32_single_vg4x2>; 54106c3fb27SDimitry Andricdefm USMLALL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"usmlall", 0b01001, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_usmla_za32_single_vg4x4>; 5425f757f3fSDimitry Andricdefm USMLALL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"usmlall", 0b00001, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_usmla_za32_vg4x2>; 5435f757f3fSDimitry Andricdefm USMLALL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"usmlall", 0b00001, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_usmla_za32_vg4x4>; 544bdd1243dSDimitry Andric 5455f757f3fSDimitry Andricdefm SMLSLL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"smlsll", 0b00, 0b010, int_aarch64_sme_smls_za32_lane_vg4x1>; 5465f757f3fSDimitry Andricdefm SMLSLL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"smlsll", 0b00, 0b001, int_aarch64_sme_smls_za32_lane_vg4x2>; 5475f757f3fSDimitry Andricdefm SMLSLL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"smlsll", 0b00, 0b0001, int_aarch64_sme_smls_za32_lane_vg4x4>; 5485f757f3fSDimitry Andricdefm SMLSLL_MZZ_BtoS : sme2_mla_ll_array_single<"smlsll", 0b00010, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, int_aarch64_sme_smls_za32_single_vg4x1>; 54906c3fb27SDimitry Andricdefm SMLSLL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"smlsll", 0b00010, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_smls_za32_single_vg4x2>; 55006c3fb27SDimitry Andricdefm SMLSLL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"smlsll", 0b01010, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_smls_za32_single_vg4x4>; 5515f757f3fSDimitry Andricdefm SMLSLL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"smlsll", 0b00010, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_smls_za32_vg4x2>; 5525f757f3fSDimitry Andricdefm SMLSLL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"smlsll", 0b00010, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_smls_za32_vg4x4>; 553bdd1243dSDimitry Andric 5545f757f3fSDimitry Andricdefm UMLALL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"umlall", 0b00, 0b100, int_aarch64_sme_umla_za32_lane_vg4x1>; 5555f757f3fSDimitry Andricdefm UMLALL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"umlall", 0b00, 0b010, int_aarch64_sme_umla_za32_lane_vg4x2>; 5565f757f3fSDimitry Andricdefm UMLALL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"umlall", 0b00, 0b0010, int_aarch64_sme_umla_za32_lane_vg4x4>; 5575f757f3fSDimitry Andricdefm UMLALL_MZZ_BtoS : sme2_mla_ll_array_single<"umlall", 0b00100, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, int_aarch64_sme_umla_za32_single_vg4x1>; 55806c3fb27SDimitry Andricdefm UMLALL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"umlall", 0b00100, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_umla_za32_single_vg4x2>; 55906c3fb27SDimitry Andricdefm UMLALL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"umlall", 0b01100, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_umla_za32_single_vg4x4>; 5605f757f3fSDimitry Andricdefm UMLALL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"umlall", 0b00100, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_umla_za32_vg4x2>; 5615f757f3fSDimitry Andricdefm UMLALL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"umlall", 0b00100, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_umla_za32_vg4x4>; 562bdd1243dSDimitry Andric 5635f757f3fSDimitry Andricdefm SUMLALL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"sumlall", 0b00, 0b101, int_aarch64_sme_sumla_za32_lane_vg4x1>; 5645f757f3fSDimitry Andricdefm SUMLALL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"sumlall", 0b00, 0b110, int_aarch64_sme_sumla_za32_lane_vg4x2>; 5655f757f3fSDimitry Andricdefm SUMLALL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"sumlall", 0b00, 0b0110, int_aarch64_sme_sumla_za32_lane_vg4x4>; 56606c3fb27SDimitry Andricdefm SUMLALL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"sumlall", 0b00101, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sumla_za32_single_vg4x2>; 56706c3fb27SDimitry Andricdefm SUMLALL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"sumlall", 0b01101, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_sumla_za32_single_vg4x4>; 568bdd1243dSDimitry Andric 5695f757f3fSDimitry Andricdefm UMLSLL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"umlsll", 0b00, 0b110, int_aarch64_sme_umls_za32_lane_vg4x1>; 5705f757f3fSDimitry Andricdefm UMLSLL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"umlsll", 0b00, 0b011, int_aarch64_sme_umls_za32_lane_vg4x2>; 5715f757f3fSDimitry Andricdefm UMLSLL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"umlsll", 0b00, 0b0011, int_aarch64_sme_umls_za32_lane_vg4x4>; 5725f757f3fSDimitry Andricdefm UMLSLL_MZZ_BtoS : sme2_mla_ll_array_single<"umlsll", 0b00110, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, int_aarch64_sme_umls_za32_single_vg4x1>; 57306c3fb27SDimitry Andricdefm UMLSLL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg2_single<"umlsll", 0b00110, MatrixOp32, ZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_umls_za32_single_vg4x2>; 57406c3fb27SDimitry Andricdefm UMLSLL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg4_single<"umlsll", 0b01110, MatrixOp32, ZZZZ_b, ZPR4b8, nxv16i8, int_aarch64_sme_umls_za32_single_vg4x4>; 5755f757f3fSDimitry Andricdefm UMLSLL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"umlsll", 0b00110, MatrixOp32, ZZ_b_mul_r, nxv16i8, int_aarch64_sme_umls_za32_vg4x2>; 5765f757f3fSDimitry Andricdefm UMLSLL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"umlsll", 0b00110, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, int_aarch64_sme_umls_za32_vg4x4>; 577bdd1243dSDimitry Andric 57806c3fb27SDimitry Andricdefm BMOPA_MPPZZ_S : sme2_int_bmopx_tile<"bmopa", 0b100, int_aarch64_sme_bmopa_za32>; 57906c3fb27SDimitry Andricdefm BMOPS_MPPZZ_S : sme2_int_bmopx_tile<"bmops", 0b101, int_aarch64_sme_bmops_za32>; 580bdd1243dSDimitry Andric 58106c3fb27SDimitry Andricdefm SMOPA_MPPZZ_HtoS : sme2_int_mopx_tile<"smopa", 0b000, int_aarch64_sme_smopa_za32>; 58206c3fb27SDimitry Andricdefm SMOPS_MPPZZ_HtoS : sme2_int_mopx_tile<"smops", 0b001, int_aarch64_sme_smops_za32>; 583bdd1243dSDimitry Andric 58406c3fb27SDimitry Andricdefm UMOPA_MPPZZ_HtoS : sme2_int_mopx_tile<"umopa", 0b100, int_aarch64_sme_umopa_za32>; 58506c3fb27SDimitry Andricdefm UMOPS_MPPZZ_HtoS : sme2_int_mopx_tile<"umops", 0b101, int_aarch64_sme_umops_za32>; 586bdd1243dSDimitry Andric 587bdd1243dSDimitry Andricdef MOVT_XTI : sme2_movt_zt_to_scalar<"movt", 0b0011111>; 588bdd1243dSDimitry Andricdef MOVT_TIX : sme2_movt_scalar_to_zt<"movt", 0b0011111>; 589bdd1243dSDimitry Andric 5905f757f3fSDimitry Andricdefm LUTI2_ZTZI : sme2_luti2_vector_index<"luti2", int_aarch64_sme_luti2_lane_zt>; 591bdd1243dSDimitry Andricdefm LUTI2_2ZTZI : sme2_luti2_vector_vg2_index<"luti2">; 592bdd1243dSDimitry Andricdefm LUTI2_4ZTZI : sme2_luti2_vector_vg4_index<"luti2">; 593bdd1243dSDimitry Andric 5945f757f3fSDimitry Andricdefm LUTI4_ZTZI : sme2_luti4_vector_index<"luti4", int_aarch64_sme_luti4_lane_zt>; 595bdd1243dSDimitry Andricdefm LUTI4_2ZTZI : sme2_luti4_vector_vg2_index<"luti4">; 596bdd1243dSDimitry Andricdefm LUTI4_4ZTZI : sme2_luti4_vector_vg4_index<"luti4">; 597bdd1243dSDimitry Andric 598bdd1243dSDimitry Andricdefm SUNPK_VG2_2ZZ : sme2_unpk_vector_vg2<"sunpk", 0b0>; 599bdd1243dSDimitry Andricdefm SUNPK_VG4_4Z2Z : sme2_unpk_vector_vg4<"sunpk", 0b0>; 600bdd1243dSDimitry Andricdefm UUNPK_VG2_2ZZ : sme2_unpk_vector_vg2<"uunpk", 0b1>; 601bdd1243dSDimitry Andricdefm UUNPK_VG4_4Z2Z : sme2_unpk_vector_vg4<"uunpk", 0b1>; 602bdd1243dSDimitry Andric 603bdd1243dSDimitry Andricdefm ZIP_VG2_2ZZZ : sme2_zip_vector_vg2<"zip", 0b0>; 604bdd1243dSDimitry Andricdefm UZP_VG2_2ZZZ : sme2_zip_vector_vg2<"uzp", 0b1>; 605bdd1243dSDimitry Andricdefm ZIP_VG4_4Z4Z : sme2_zip_vector_vg4<"zip", 0b0110000>; 606bdd1243dSDimitry Andricdefm UZP_VG4_4Z4Z : sme2_zip_vector_vg4<"uzp", 0b0110001>; 607bdd1243dSDimitry Andricdefm ZIP_VG4_4Z4Z_Q : sme2_zip_vector_vg4_Q<"zip", 0b0111000>; 608bdd1243dSDimitry Andricdefm UZP_VG4_4Z4Z_Q : sme2_zip_vector_vg4_Q<"uzp", 0b0111001>; 609bdd1243dSDimitry Andric 610bdd1243dSDimitry Andricdefm FRINTA_2Z2Z: sme2_frint_vector_vg2_multi<"frinta", 0b11000>; 611bdd1243dSDimitry Andricdefm FRINTA_4Z4Z: sme2_frint_vector_vg4_multi<"frinta", 0b1100000>; 612bdd1243dSDimitry Andricdefm FRINTM_2Z2Z: sme2_frint_vector_vg2_multi<"frintm", 0b10100>; 613bdd1243dSDimitry Andricdefm FRINTM_4Z4Z: sme2_frint_vector_vg4_multi<"frintm", 0b1010000>; 614bdd1243dSDimitry Andricdefm FRINTN_2Z2Z: sme2_frint_vector_vg2_multi<"frintn", 0b10000>; 615bdd1243dSDimitry Andricdefm FRINTN_4Z4Z: sme2_frint_vector_vg4_multi<"frintn", 0b1000000>; 616bdd1243dSDimitry Andricdefm FRINTP_2Z2Z: sme2_frint_vector_vg2_multi<"frintp", 0b10010>; 617bdd1243dSDimitry Andricdefm FRINTP_4Z4Z: sme2_frint_vector_vg4_multi<"frintp", 0b1001000>; 618bdd1243dSDimitry Andric 61906c3fb27SDimitry Andricdefm MOVA_MXI2Z : sme2_mova_vec_to_tile_vg2_multi<"mova", int_aarch64_sme_write_hor_vg2, int_aarch64_sme_write_ver_vg2>; 62006c3fb27SDimitry Andricdefm MOVA_MXI4Z : sme2_mova_vec_to_tile_vg4_multi<"mova", int_aarch64_sme_write_hor_vg4, int_aarch64_sme_write_ver_vg4>; 621bdd1243dSDimitry Andricdefm MOVA_2ZMXI : sme2_mova_tile_to_vec_vg2_multi<"mova">; 622bdd1243dSDimitry Andricdefm MOVA_4ZMXI : sme2_mova_tile_to_vec_vg4_multi<"mova">; 623bdd1243dSDimitry Andric 62406c3fb27SDimitry Andricdefm MOVA_VG2_MXI2Z : sme2_mova_vec_to_array_vg2_multi<"mova", int_aarch64_sme_write_vg1x2>; 62506c3fb27SDimitry Andricdefm MOVA_VG4_MXI4Z : sme2_mova_vec_to_array_vg4_multi<"mova", int_aarch64_sme_write_vg1x4>; 626bdd1243dSDimitry Andricdefm MOVA_VG2_2ZMXI : sme2_mova_array_to_vec_vg2_multi<0b000, "mova">; 627bdd1243dSDimitry Andricdefm MOVA_VG4_4ZMXI : sme2_mova_array_to_vec_vg4_multi<0b1000, "mova">; 628bdd1243dSDimitry Andric 62906c3fb27SDimitry Andricdefm SQRSHR_VG2_Z2ZI : sme2_sat_shift_vector_vg2<"sqrshr", 0b0, 0b0, int_aarch64_sve_sqrshr_x2>; 63006c3fb27SDimitry Andricdefm SQRSHR_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"sqrshr", 0b000, int_aarch64_sve_sqrshr_x4>; 631bdd1243dSDimitry Andric 63206c3fb27SDimitry Andricdefm UQRSHR_VG2_Z2ZI : sme2_sat_shift_vector_vg2<"uqrshr", 0b0, 0b1, int_aarch64_sve_uqrshr_x2>; 63306c3fb27SDimitry Andricdefm UQRSHR_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"uqrshr", 0b001, int_aarch64_sve_uqrshr_x4>; 634bdd1243dSDimitry Andric 63506c3fb27SDimitry Andricdefm SQRSHRU_VG2_Z2ZI : sme2_sat_shift_vector_vg2<"sqrshru", 0b1, 0b0, int_aarch64_sve_sqrshru_x2>; 63606c3fb27SDimitry Andricdefm SQRSHRU_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"sqrshru", 0b010, int_aarch64_sve_sqrshru_x4>; 637bdd1243dSDimitry Andric 63806c3fb27SDimitry Andricdefm SQRSHRN_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"sqrshrn", 0b100, int_aarch64_sve_sqrshrn_x4>; 63906c3fb27SDimitry Andricdefm UQRSHRN_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"uqrshrn", 0b101, int_aarch64_sve_uqrshrn_x4>; 64006c3fb27SDimitry Andricdefm SQRSHRUN_VG4_Z4ZI : sme2_sat_shift_vector_vg4<"sqrshrun", 0b110, int_aarch64_sve_sqrshrun_x4>; 641bdd1243dSDimitry Andric 64206c3fb27SDimitry Andricdefm SEL_VG2_2ZC2Z2Z: sme2_sel_vector_vg2<"sel">; 64306c3fb27SDimitry Andricdefm SEL_VG4_4ZC4Z4Z: sme2_sel_vector_vg4<"sel">; 644bdd1243dSDimitry Andric 64506c3fb27SDimitry Andricdef LD1B_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b00, 0b0, ZZ_b_strided, GPR64shifted8, "ld1b">; 64606c3fb27SDimitry Andricdef LD1B_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b00, 0b0, ZZZZ_b_strided, GPR64shifted8, "ld1b">; 64706c3fb27SDimitry Andricdefm LD1B_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b00, 0b0, ZZ_b_strided, simm4s2, "ld1b">; 64806c3fb27SDimitry Andricdefm LD1B_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b00, 0b0, ZZZZ_b_strided, simm4s4, "ld1b">; 64906c3fb27SDimitry Andricdef LD1H_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b01, 0b0, ZZ_h_strided, GPR64shifted16, "ld1h">; 65006c3fb27SDimitry Andricdef LD1H_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b01, 0b0, ZZZZ_h_strided, GPR64shifted16, "ld1h">; 65106c3fb27SDimitry Andricdefm LD1H_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b01, 0b0, ZZ_h_strided, simm4s2, "ld1h">; 65206c3fb27SDimitry Andricdefm LD1H_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b01, 0b0, ZZZZ_h_strided, simm4s4, "ld1h">; 65306c3fb27SDimitry Andricdef LD1W_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b10, 0b0, ZZ_s_strided, GPR64shifted32, "ld1w">; 65406c3fb27SDimitry Andricdef LD1W_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b10, 0b0, ZZZZ_s_strided, GPR64shifted32, "ld1w">; 65506c3fb27SDimitry Andricdefm LD1W_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b10, 0b0, ZZ_s_strided, simm4s2, "ld1w">; 65606c3fb27SDimitry Andricdefm LD1W_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b10, 0b0, ZZZZ_s_strided, simm4s4, "ld1w">; 65706c3fb27SDimitry Andricdef LD1D_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b11, 0b0, ZZ_d_strided, GPR64shifted64, "ld1d">; 65806c3fb27SDimitry Andricdef LD1D_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b11, 0b0, ZZZZ_d_strided, GPR64shifted64, "ld1d">; 65906c3fb27SDimitry Andricdefm LD1D_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b11, 0b0, ZZ_d_strided, simm4s2, "ld1d">; 66006c3fb27SDimitry Andricdefm LD1D_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b11, 0b0, ZZZZ_d_strided, simm4s4, "ld1d">; 661bdd1243dSDimitry Andric 66206c3fb27SDimitry Andricdef LDNT1B_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b00, 0b1, ZZ_b_strided, GPR64shifted8, "ldnt1b">; 66306c3fb27SDimitry Andricdef LDNT1B_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b00, 0b1, ZZZZ_b_strided, GPR64shifted8, "ldnt1b">; 66406c3fb27SDimitry Andricdefm LDNT1B_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b00, 0b1, ZZ_b_strided, simm4s2, "ldnt1b">; 66506c3fb27SDimitry Andricdefm LDNT1B_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b00, 0b1, ZZZZ_b_strided, simm4s4, "ldnt1b">; 66606c3fb27SDimitry Andricdef LDNT1H_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b01, 0b1, ZZ_h_strided, GPR64shifted16, "ldnt1h">; 66706c3fb27SDimitry Andricdef LDNT1H_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b01, 0b1, ZZZZ_h_strided, GPR64shifted16, "ldnt1h">; 66806c3fb27SDimitry Andricdefm LDNT1H_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b01, 0b1, ZZ_h_strided, simm4s2, "ldnt1h">; 66906c3fb27SDimitry Andricdefm LDNT1H_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b01, 0b1, ZZZZ_h_strided, simm4s4, "ldnt1h">; 67006c3fb27SDimitry Andricdef LDNT1W_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b10, 0b1, ZZ_s_strided, GPR64shifted32, "ldnt1w">; 67106c3fb27SDimitry Andricdef LDNT1W_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b10, 0b1, ZZZZ_s_strided, GPR64shifted32, "ldnt1w">; 67206c3fb27SDimitry Andricdefm LDNT1W_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b10, 0b1, ZZ_s_strided, simm4s2, "ldnt1w">; 67306c3fb27SDimitry Andricdefm LDNT1W_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b10, 0b1, ZZZZ_s_strided, simm4s4, "ldnt1w">; 67406c3fb27SDimitry Andricdef LDNT1D_2Z_STRIDED : sme2_ld_vector_vg2_multi_scalar_scalar<0b11, 0b1, ZZ_d_strided, GPR64shifted64, "ldnt1d">; 67506c3fb27SDimitry Andricdef LDNT1D_4Z_STRIDED : sme2_ld_vector_vg4_multi_scalar_scalar<0b11, 0b1, ZZZZ_d_strided, GPR64shifted64, "ldnt1d">; 67606c3fb27SDimitry Andricdefm LDNT1D_2Z_STRIDED_IMM : sme2_ld_vector_vg2_multi_scalar_immediate<0b11, 0b1, ZZ_d_strided, simm4s2, "ldnt1d">; 67706c3fb27SDimitry Andricdefm LDNT1D_4Z_STRIDED_IMM : sme2_ld_vector_vg4_multi_scalar_immediate<0b11, 0b1, ZZZZ_d_strided, simm4s4, "ldnt1d">; 678bdd1243dSDimitry Andric 67906c3fb27SDimitry Andricdef ST1B_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b00, 0b0, ZZ_b_strided, GPR64shifted8, "st1b">; 68006c3fb27SDimitry Andricdef ST1B_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b00, 0b0, ZZZZ_b_strided, GPR64shifted8, "st1b">; 68106c3fb27SDimitry Andricdefm ST1B_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b00, 0b0, ZZ_b_strided, simm4s2, "st1b">; 68206c3fb27SDimitry Andricdefm ST1B_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b00, 0b0, ZZZZ_b_strided, simm4s4, "st1b">; 68306c3fb27SDimitry Andricdef ST1H_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b01, 0b0, ZZ_h_strided, GPR64shifted16, "st1h">; 68406c3fb27SDimitry Andricdef ST1H_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b01, 0b0, ZZZZ_h_strided, GPR64shifted16, "st1h">; 68506c3fb27SDimitry Andricdefm ST1H_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b01, 0b0, ZZ_h_strided, simm4s2, "st1h">; 68606c3fb27SDimitry Andricdefm ST1H_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b01, 0b0, ZZZZ_h_strided, simm4s4, "st1h">; 68706c3fb27SDimitry Andricdef ST1W_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b10, 0b0, ZZ_s_strided, GPR64shifted32, "st1w">; 68806c3fb27SDimitry Andricdef ST1W_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b10, 0b0, ZZZZ_s_strided, GPR64shifted32, "st1w">; 68906c3fb27SDimitry Andricdefm ST1W_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b10, 0b0, ZZ_s_strided, simm4s2, "st1w">; 69006c3fb27SDimitry Andricdefm ST1W_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b10, 0b0, ZZZZ_s_strided, simm4s4, "st1w">; 69106c3fb27SDimitry Andricdef ST1D_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b11, 0b0, ZZ_d_strided, GPR64shifted64, "st1d">; 69206c3fb27SDimitry Andricdef ST1D_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b11, 0b0, ZZZZ_d_strided, GPR64shifted64, "st1d">; 69306c3fb27SDimitry Andricdefm ST1D_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b11, 0b0, ZZ_d_strided, simm4s2, "st1d">; 69406c3fb27SDimitry Andricdefm ST1D_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b11, 0b0, ZZZZ_d_strided, simm4s4, "st1d">; 695bdd1243dSDimitry Andric 69606c3fb27SDimitry Andricdef STNT1B_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b00, 0b1, ZZ_b_strided, GPR64shifted8, "stnt1b">; 69706c3fb27SDimitry Andricdef STNT1B_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b00, 0b1, ZZZZ_b_strided, GPR64shifted8, "stnt1b">; 69806c3fb27SDimitry Andricdefm STNT1B_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b00, 0b1, ZZ_b_strided, simm4s2, "stnt1b">; 69906c3fb27SDimitry Andricdefm STNT1B_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b00, 0b1, ZZZZ_b_strided, simm4s4, "stnt1b">; 70006c3fb27SDimitry Andricdef STNT1H_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b01, 0b1, ZZ_h_strided, GPR64shifted16, "stnt1h">; 70106c3fb27SDimitry Andricdef STNT1H_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b01, 0b1, ZZZZ_h_strided, GPR64shifted16, "stnt1h">; 70206c3fb27SDimitry Andricdefm STNT1H_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b01, 0b1, ZZ_h_strided, simm4s2, "stnt1h">; 70306c3fb27SDimitry Andricdefm STNT1H_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b01, 0b1, ZZZZ_h_strided, simm4s4, "stnt1h">; 70406c3fb27SDimitry Andricdef STNT1W_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b10, 0b1, ZZ_s_strided, GPR64shifted32, "stnt1w">; 70506c3fb27SDimitry Andricdef STNT1W_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b10, 0b1, ZZZZ_s_strided, GPR64shifted32, "stnt1w">; 70606c3fb27SDimitry Andricdefm STNT1W_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b10, 0b1, ZZ_s_strided, simm4s2, "stnt1w">; 70706c3fb27SDimitry Andricdefm STNT1W_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b10, 0b1, ZZZZ_s_strided, simm4s4, "stnt1w">; 70806c3fb27SDimitry Andricdef STNT1D_2Z_STRIDED : sme2_st_vector_vg2_multi_scalar_scalar<0b11, 0b1, ZZ_d_strided, GPR64shifted64, "stnt1d">; 70906c3fb27SDimitry Andricdef STNT1D_4Z_STRIDED : sme2_st_vector_vg4_multi_scalar_scalar<0b11, 0b1, ZZZZ_d_strided, GPR64shifted64, "stnt1d">; 71006c3fb27SDimitry Andricdefm STNT1D_2Z_STRIDED_IMM : sme2_st_vector_vg2_multi_scalar_immediate<0b11, 0b1, ZZ_d_strided, simm4s2, "stnt1d">; 71106c3fb27SDimitry Andricdefm STNT1D_4Z_STRIDED_IMM : sme2_st_vector_vg4_multi_scalar_immediate<0b11, 0b1, ZZZZ_d_strided, simm4s4, "stnt1d">; 712*0fca6ea1SDimitry Andric} // End let Predicates = [HasSME2] 713*0fca6ea1SDimitry Andric 714*0fca6ea1SDimitry Andric 715*0fca6ea1SDimitry Andriclet Predicates = [HasSME2andIsNonStreamingSafe] in { 716*0fca6ea1SDimitry Andricdefm ZERO_T : sme2_zero_zt<"zero", 0b0001>; 717*0fca6ea1SDimitry Andric 718*0fca6ea1SDimitry Andricdefm LDR_TX : sme2_spill_fill_vector<"ldr", 0b01111100, AArch64_restore_zt>; 719*0fca6ea1SDimitry Andricdefm STR_TX : sme2_spill_fill_vector<"str", 0b11111100, AArch64_save_zt>; 720*0fca6ea1SDimitry Andric} // End let Predicates = [HasSME2andIsNonStreamingSafe] 721bdd1243dSDimitry Andric 722bdd1243dSDimitry Andriclet Predicates = [HasSME2, HasSMEI16I64] in { 723bdd1243dSDimitry Andricdefm ADD_VG2_M2ZZ_D : sme2_dot_mla_add_sub_array_vg2_single<"add", 0b1011010, MatrixOp64, ZZ_d, ZPR4b64, nxv2i64, int_aarch64_sme_add_write_single_za_vg1x2>; 724bdd1243dSDimitry Andricdefm ADD_VG4_M4ZZ_D : sme2_dot_mla_add_sub_array_vg4_single<"add", 0b1111010, MatrixOp64, ZZZZ_d, ZPR4b64, nxv2i64, int_aarch64_sme_add_write_single_za_vg1x4>; 7255f757f3fSDimitry Andricdefm ADD_VG2_M2Z2Z_D : sme2_dot_mla_add_sub_array_vg2_multi<"add", 0b1110010, MatrixOp64, ZZ_d_mul_r, nxv2i64, int_aarch64_sme_add_write_za_vg1x2>; 7265f757f3fSDimitry Andricdefm ADD_VG4_M4Z4Z_D : sme2_dot_mla_add_sub_array_vg4_multi<"add", 0b1110010, MatrixOp64, ZZZZ_d_mul_r, nxv2i64, int_aarch64_sme_add_write_za_vg1x4>; 727bdd1243dSDimitry Andric 728bdd1243dSDimitry Andricdefm SUB_VG2_M2ZZ_D : sme2_dot_mla_add_sub_array_vg2_single<"sub", 0b1011011, MatrixOp64, ZZ_d, ZPR4b64, nxv2i64, int_aarch64_sme_sub_write_single_za_vg1x2>; 729bdd1243dSDimitry Andricdefm SUB_VG4_M4ZZ_D : sme2_dot_mla_add_sub_array_vg4_single<"sub", 0b1111011, MatrixOp64, ZZZZ_d, ZPR4b64, nxv2i64, int_aarch64_sme_sub_write_single_za_vg1x4>; 7305f757f3fSDimitry Andricdefm SUB_VG2_M2Z2Z_D : sme2_dot_mla_add_sub_array_vg2_multi<"sub", 0b1110011, MatrixOp64, ZZ_d_mul_r, nxv2i64, int_aarch64_sme_sub_write_za_vg1x2>; 7315f757f3fSDimitry Andricdefm SUB_VG4_M4Z4Z_D : sme2_dot_mla_add_sub_array_vg4_multi<"sub", 0b1110011, MatrixOp64, ZZZZ_d_mul_r, nxv2i64, int_aarch64_sme_sub_write_za_vg1x4>; 732bdd1243dSDimitry Andric 73306c3fb27SDimitry Andricdefm ADD_VG2_M2Z_D : sme2_multivec_accum_add_sub_vg2<"add", 0b1010, MatrixOp64, ZZ_d_mul_r, nxv2i64, int_aarch64_sme_add_za64_vg1x2>; 73406c3fb27SDimitry Andricdefm ADD_VG4_M4Z_D : sme2_multivec_accum_add_sub_vg4<"add", 0b1010, MatrixOp64, ZZZZ_d_mul_r, nxv2i64, int_aarch64_sme_add_za64_vg1x4>; 735bdd1243dSDimitry Andric 73606c3fb27SDimitry Andricdefm SUB_VG2_M2Z_D : sme2_multivec_accum_add_sub_vg2<"sub", 0b1011, MatrixOp64, ZZ_d_mul_r, nxv2i64, int_aarch64_sme_sub_za64_vg1x2>; 73706c3fb27SDimitry Andricdefm SUB_VG4_M4Z_D : sme2_multivec_accum_add_sub_vg4<"sub", 0b1011, MatrixOp64, ZZZZ_d_mul_r, nxv2i64, int_aarch64_sme_sub_za64_vg1x4>; 738bdd1243dSDimitry Andric 73906c3fb27SDimitry Andricdefm SDOT_VG2_M2ZZI_HtoD : sme2_multi_vec_array_vg2_index_64b<"sdot", 0b01, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_lane_za64_vg1x2>; 74006c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZI_HtoD : sme2_multi_vec_array_vg4_index_64b<"sdot", 0b001, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_lane_za64_vg1x4>; 74106c3fb27SDimitry Andricdefm SDOT_VG2_M2ZZ_HtoD : sme2_dot_mla_add_sub_array_vg2_single<"sdot", 0b1010100, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_single_za64_vg1x2>; 74206c3fb27SDimitry Andricdefm SDOT_VG4_M4ZZ_HtoD : sme2_dot_mla_add_sub_array_vg4_single<"sdot", 0b1110100, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_sdot_single_za64_vg1x4>; 7435f757f3fSDimitry Andricdefm SDOT_VG2_M2Z2Z_HtoD : sme2_dot_mla_add_sub_array_vg2_multi<"sdot", 0b1101000, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_sdot_za64_vg1x2>; 7445f757f3fSDimitry Andricdefm SDOT_VG4_M4Z4Z_HtoD : sme2_dot_mla_add_sub_array_vg4_multi<"sdot", 0b1101000, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_sdot_za64_vg1x4>; 745bdd1243dSDimitry Andric 746bdd1243dSDimitry Andricdefm SVDOT_VG4_M4ZZI_HtoD : sme2_multi_vec_array_vg4_index_64b<"svdot", 0b101, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_svdot_lane_za64_vg1x4>; 747bdd1243dSDimitry Andric 74806c3fb27SDimitry Andricdefm UDOT_VG2_M2ZZI_HtoD : sme2_multi_vec_array_vg2_index_64b<"udot", 0b11, ZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_udot_lane_za64_vg1x2>; 74906c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZI_HtoD : sme2_multi_vec_array_vg4_index_64b<"udot", 0b011, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_udot_lane_za64_vg1x4>; 75006c3fb27SDimitry Andricdefm UDOT_VG2_M2ZZ_HtoD : sme2_dot_mla_add_sub_array_vg2_single<"udot", 0b1010110, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_udot_single_za64_vg1x2>; 75106c3fb27SDimitry Andricdefm UDOT_VG4_M4ZZ_HtoD : sme2_dot_mla_add_sub_array_vg4_single<"udot", 0b1110110, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_udot_single_za64_vg1x4>; 7525f757f3fSDimitry Andricdefm UDOT_VG2_M2Z2Z_HtoD : sme2_dot_mla_add_sub_array_vg2_multi<"udot", 0b1101010, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_udot_za64_vg1x2>; 7535f757f3fSDimitry Andricdefm UDOT_VG4_M4Z4Z_HtoD : sme2_dot_mla_add_sub_array_vg4_multi<"udot", 0b1101010, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_udot_za64_vg1x4>; 754bdd1243dSDimitry Andric 755bdd1243dSDimitry Andricdefm UVDOT_VG4_M4ZZI_HtoD : sme2_multi_vec_array_vg4_index_64b<"uvdot", 0b111, ZZZZ_h_mul_r, ZPR4b16, nxv8i16, int_aarch64_sme_uvdot_lane_za64_vg1x4>; 756bdd1243dSDimitry Andric 75706c3fb27SDimitry Andricdefm SMLALL_MZZI_HtoD : sme2_mla_ll_array_index_64b<"smlall", 0b00, int_aarch64_sme_smla_za64_lane_vg4x1>; 75806c3fb27SDimitry Andricdefm SMLALL_VG2_M2ZZI_HtoD : sme2_mla_ll_array_vg2_index_64b<"smlall", 0b00, int_aarch64_sme_smla_za64_lane_vg4x2>; 75906c3fb27SDimitry Andricdefm SMLALL_VG4_M4ZZI_HtoD : sme2_mla_ll_array_vg4_index_64b<"smlall", 0b00, int_aarch64_sme_smla_za64_lane_vg4x4>; 7605f757f3fSDimitry Andricdefm SMLALL_MZZ_HtoD : sme2_mla_ll_array_single<"smlall", 0b10000, MatrixOp64, ZPR16, ZPR4b16, nxv8i16, int_aarch64_sme_smla_za64_single_vg4x1>; 76106c3fb27SDimitry Andricdefm SMLALL_VG2_M2ZZ_HtoD : sme2_mla_ll_array_vg2_single<"smlall", 0b10000, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_smla_za64_single_vg4x2>; 76206c3fb27SDimitry Andricdefm SMLALL_VG4_M4ZZ_HtoD : sme2_mla_ll_array_vg4_single<"smlall", 0b11000, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_smla_za64_single_vg4x4>; 7635f757f3fSDimitry Andricdefm SMLALL_VG2_M2Z2Z_HtoD : sme2_mla_ll_array_vg2_multi<"smlall", 0b10000, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_smla_za64_vg4x2>; 7645f757f3fSDimitry Andricdefm SMLALL_VG4_M4Z4Z_HtoD : sme2_mla_ll_array_vg4_multi<"smlall", 0b10000, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_smla_za64_vg4x4>; 765bdd1243dSDimitry Andric 76606c3fb27SDimitry Andricdefm SMLSLL_MZZI_HtoD : sme2_mla_ll_array_index_64b<"smlsll", 0b01, int_aarch64_sme_smls_za64_lane_vg4x1>; 76706c3fb27SDimitry Andricdefm SMLSLL_VG2_M2ZZI_HtoD : sme2_mla_ll_array_vg2_index_64b<"smlsll", 0b01, int_aarch64_sme_smls_za64_lane_vg4x2>; 76806c3fb27SDimitry Andricdefm SMLSLL_VG4_M4ZZI_HtoD : sme2_mla_ll_array_vg4_index_64b<"smlsll", 0b01, int_aarch64_sme_smls_za64_lane_vg4x4>; 7695f757f3fSDimitry Andricdefm SMLSLL_MZZ_HtoD : sme2_mla_ll_array_single<"smlsll", 0b10010, MatrixOp64, ZPR16, ZPR4b16, nxv8i16, int_aarch64_sme_smls_za64_single_vg4x1>; 77006c3fb27SDimitry Andricdefm SMLSLL_VG2_M2ZZ_HtoD : sme2_mla_ll_array_vg2_single<"smlsll", 0b10010, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_smls_za64_single_vg4x2>; 77106c3fb27SDimitry Andricdefm SMLSLL_VG4_M4ZZ_HtoD : sme2_mla_ll_array_vg4_single<"smlsll", 0b11010, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_smls_za64_single_vg4x4>; 7725f757f3fSDimitry Andricdefm SMLSLL_VG2_M2Z2Z_HtoD : sme2_mla_ll_array_vg2_multi<"smlsll", 0b10010, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_smls_za64_vg4x2>; 7735f757f3fSDimitry Andricdefm SMLSLL_VG4_M4Z4Z_HtoD : sme2_mla_ll_array_vg4_multi<"smlsll", 0b10010, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_smls_za64_vg4x4>; 774bdd1243dSDimitry Andric 77506c3fb27SDimitry Andricdefm UMLALL_MZZI_HtoD : sme2_mla_ll_array_index_64b<"umlall", 0b10, int_aarch64_sme_umla_za64_lane_vg4x1>; 77606c3fb27SDimitry Andricdefm UMLALL_VG2_M2ZZI_HtoD : sme2_mla_ll_array_vg2_index_64b<"umlall", 0b10, int_aarch64_sme_umla_za64_lane_vg4x2>; 77706c3fb27SDimitry Andricdefm UMLALL_VG4_M4ZZI_HtoD : sme2_mla_ll_array_vg4_index_64b<"umlall", 0b10, int_aarch64_sme_umla_za64_lane_vg4x4>; 7785f757f3fSDimitry Andricdefm UMLALL_MZZ_HtoD : sme2_mla_ll_array_single<"umlall", 0b10100, MatrixOp64, ZPR16, ZPR4b16, nxv8i16, int_aarch64_sme_umla_za64_single_vg4x1>; 77906c3fb27SDimitry Andricdefm UMLALL_VG2_M2ZZ_HtoD : sme2_mla_ll_array_vg2_single<"umlall", 0b10100, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_umla_za64_single_vg4x2>; 78006c3fb27SDimitry Andricdefm UMLALL_VG4_M4ZZ_HtoD : sme2_mla_ll_array_vg4_single<"umlall", 0b11100, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_umla_za64_single_vg4x4>; 7815f757f3fSDimitry Andricdefm UMLALL_VG2_M2Z2Z_HtoD : sme2_mla_ll_array_vg2_multi<"umlall", 0b10100, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_umla_za64_vg4x2>; 7825f757f3fSDimitry Andricdefm UMLALL_VG4_M4Z4Z_HtoD : sme2_mla_ll_array_vg4_multi<"umlall", 0b10100, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_umla_za64_vg4x4>; 783bdd1243dSDimitry Andric 78406c3fb27SDimitry Andricdefm UMLSLL_MZZI_HtoD : sme2_mla_ll_array_index_64b<"umlsll", 0b11, int_aarch64_sme_umls_za64_lane_vg4x1>; 78506c3fb27SDimitry Andricdefm UMLSLL_VG2_M2ZZI_HtoD : sme2_mla_ll_array_vg2_index_64b<"umlsll", 0b11, int_aarch64_sme_umls_za64_lane_vg4x2>; 78606c3fb27SDimitry Andricdefm UMLSLL_VG4_M4ZZI_HtoD : sme2_mla_ll_array_vg4_index_64b<"umlsll", 0b11, int_aarch64_sme_umls_za64_lane_vg4x4>; 7875f757f3fSDimitry Andricdefm UMLSLL_MZZ_HtoD : sme2_mla_ll_array_single<"umlsll", 0b10110, MatrixOp64, ZPR16, ZPR4b16, nxv8i16, int_aarch64_sme_umls_za64_single_vg4x1>; 78806c3fb27SDimitry Andricdefm UMLSLL_VG2_M2ZZ_HtoD : sme2_mla_ll_array_vg2_single<"umlsll", 0b10110, MatrixOp64, ZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_umls_za64_single_vg4x2>; 78906c3fb27SDimitry Andricdefm UMLSLL_VG4_M4ZZ_HtoD : sme2_mla_ll_array_vg4_single<"umlsll", 0b11110, MatrixOp64, ZZZZ_h, ZPR4b16, nxv8i16, int_aarch64_sme_umls_za64_single_vg4x4>; 7905f757f3fSDimitry Andricdefm UMLSLL_VG2_M2Z2Z_HtoD : sme2_mla_ll_array_vg2_multi<"umlsll", 0b10110, MatrixOp64, ZZ_h_mul_r, nxv8i16, int_aarch64_sme_umls_za64_vg4x2>; 7915f757f3fSDimitry Andricdefm UMLSLL_VG4_M4Z4Z_HtoD : sme2_mla_ll_array_vg4_multi<"umlsll", 0b10110, MatrixOp64, ZZZZ_h_mul_r, nxv8i16, int_aarch64_sme_umls_za64_vg4x4>; 792bdd1243dSDimitry Andric} 793bdd1243dSDimitry Andric 794bdd1243dSDimitry Andriclet Predicates = [HasSME2, HasSMEF64F64] in { 795bdd1243dSDimitry Andricdefm FMLA_VG2_M2ZZI_D : sme2_multi_vec_array_vg2_index_64b<"fmla", 0b00, ZZ_d_mul_r, ZPR4b64, nxv2f64, int_aarch64_sme_fmla_lane_vg1x2>; 796bdd1243dSDimitry Andricdefm FMLA_VG4_M4ZZI_D : sme2_multi_vec_array_vg4_index_64b<"fmla", 0b000, ZZZZ_d_mul_r, ZPR4b64, nxv2f64, int_aarch64_sme_fmla_lane_vg1x4>; 797bdd1243dSDimitry Andricdefm FMLA_VG2_M2ZZ_D : sme2_dot_mla_add_sub_array_vg2_single<"fmla", 0b1011000, MatrixOp64, ZZ_d, ZPR4b64, nxv2f64, int_aarch64_sme_fmla_single_vg1x2>; 798bdd1243dSDimitry Andricdefm FMLA_VG4_M4ZZ_D : sme2_dot_mla_add_sub_array_vg4_single<"fmla", 0b1111000, MatrixOp64, ZZZZ_d, ZPR4b64, nxv2f64, int_aarch64_sme_fmla_single_vg1x4>; 7995f757f3fSDimitry Andricdefm FMLA_VG2_M2Z2Z_D : sme2_dot_mla_add_sub_array_vg2_multi<"fmla", 0b1110000, MatrixOp64, ZZ_d_mul_r, nxv2f64, int_aarch64_sme_fmla_vg1x2>; 8005f757f3fSDimitry Andricdefm FMLA_VG4_M4Z4Z_D : sme2_dot_mla_add_sub_array_vg4_multi<"fmla", 0b1110000, MatrixOp64, ZZZZ_d_mul_r, nxv2f64, int_aarch64_sme_fmla_vg1x4>; 801bdd1243dSDimitry Andric 802bdd1243dSDimitry Andricdefm FMLS_VG2_M2ZZI_D : sme2_multi_vec_array_vg2_index_64b<"fmls", 0b10, ZZ_d_mul_r, ZPR4b64, nxv2f64, int_aarch64_sme_fmls_lane_vg1x2>; 803bdd1243dSDimitry Andricdefm FMLS_VG4_M4ZZI_D : sme2_multi_vec_array_vg4_index_64b<"fmls", 0b010, ZZZZ_d_mul_r, ZPR4b64, nxv2f64, int_aarch64_sme_fmls_lane_vg1x4>; 804bdd1243dSDimitry Andricdefm FMLS_VG2_M2ZZ_D : sme2_dot_mla_add_sub_array_vg2_single<"fmls", 0b1011001, MatrixOp64, ZZ_d, ZPR4b64, nxv2f64, int_aarch64_sme_fmls_single_vg1x2>; 805bdd1243dSDimitry Andricdefm FMLS_VG4_M4ZZ_D : sme2_dot_mla_add_sub_array_vg4_single<"fmls", 0b1111001, MatrixOp64, ZZZZ_d, ZPR4b64, nxv2f64, int_aarch64_sme_fmls_single_vg1x4>; 8065f757f3fSDimitry Andricdefm FMLS_VG2_M2Z2Z_D : sme2_dot_mla_add_sub_array_vg2_multi<"fmls", 0b1110001, MatrixOp64, ZZ_d_mul_r, nxv2f64, int_aarch64_sme_fmls_vg1x2>; 8075f757f3fSDimitry Andricdefm FMLS_VG4_M4Z4Z_D : sme2_dot_mla_add_sub_array_vg4_multi<"fmls", 0b1110001, MatrixOp64, ZZZZ_d_mul_r, nxv2f64, int_aarch64_sme_fmls_vg1x4>; 808bdd1243dSDimitry Andric 80906c3fb27SDimitry Andricdefm FADD_VG2_M2Z_D : sme2_multivec_accum_add_sub_vg2<"fadd", 0b1000, MatrixOp64, ZZ_d_mul_r, nxv2f64, int_aarch64_sme_add_za64_vg1x2>; 81006c3fb27SDimitry Andricdefm FADD_VG4_M4Z_D : sme2_multivec_accum_add_sub_vg4<"fadd", 0b1000, MatrixOp64, ZZZZ_d_mul_r, nxv2f64, int_aarch64_sme_add_za64_vg1x4>; 811bdd1243dSDimitry Andric 81206c3fb27SDimitry Andricdefm FSUB_VG2_M2Z_D : sme2_multivec_accum_add_sub_vg2<"fsub", 0b1001, MatrixOp64, ZZ_d_mul_r, nxv2f64, int_aarch64_sme_sub_za64_vg1x2>; 81306c3fb27SDimitry Andricdefm FSUB_VG4_M4Z_D : sme2_multivec_accum_add_sub_vg4<"fsub", 0b1001, MatrixOp64, ZZZZ_d_mul_r, nxv2f64, int_aarch64_sme_sub_za64_vg1x4>; 814bdd1243dSDimitry Andric} 815bdd1243dSDimitry Andric 816bdd1243dSDimitry Andriclet Predicates = [HasSME2p1] in { 817*0fca6ea1SDimitry Andricdefm MOVAZ_ZMI : sme2p1_movaz_tile_to_vec<"movaz", int_aarch64_sme_readz_horiz, int_aarch64_sme_readz_vert, 818*0fca6ea1SDimitry Andric int_aarch64_sme_readz_q_horiz, int_aarch64_sme_readz_q_vert>; 819bdd1243dSDimitry Andricdefm MOVAZ_2ZMI : sme2p1_movaz_tile_to_vec_vg2<"movaz">; 820bdd1243dSDimitry Andricdefm MOVAZ_4ZMI : sme2p1_movaz_tile_to_vec_vg4<"movaz">; 821*0fca6ea1SDimitry Andricdefm MOVAZ_VG2_2ZMXI : sme2_movaz_array_to_vec_vg2_multi<"movaz">; 822*0fca6ea1SDimitry Andricdefm MOVAZ_VG4_4ZMXI : sme2_movaz_array_to_vec_vg4_multi<"movaz">; 823bdd1243dSDimitry Andric 824bdd1243dSDimitry Andricdefm ZERO_MXI : sme2p1_zero_matrix<"zero">; 825bdd1243dSDimitry Andric 826bdd1243dSDimitry Andricdefm LUTI2_S_2ZTZI : sme2p1_luti2_vector_vg2_index<"luti2">; 827bdd1243dSDimitry Andricdefm LUTI2_S_4ZTZI : sme2p1_luti2_vector_vg4_index<"luti2">; 828bdd1243dSDimitry Andric 829bdd1243dSDimitry Andricdefm LUTI4_S_2ZTZI : sme2p1_luti4_vector_vg2_index<"luti4">; 830bdd1243dSDimitry Andricdefm LUTI4_S_4ZTZI : sme2p1_luti4_vector_vg4_index<"luti4">; 831bdd1243dSDimitry Andric} 832bdd1243dSDimitry Andric 833*0fca6ea1SDimitry Andriclet Predicates = [HasSMEF16F16orSMEF8F16] in { 834*0fca6ea1SDimitry Andricdefm FADD_VG2_M2Z_H : sme2_multivec_accum_add_sub_vg2<"fadd", 0b0100, MatrixOp16, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_add_za16_vg1x2>; 835*0fca6ea1SDimitry Andricdefm FADD_VG4_M4Z_H : sme2_multivec_accum_add_sub_vg4<"fadd", 0b0100, MatrixOp16, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_add_za16_vg1x4>; 836*0fca6ea1SDimitry Andricdefm FSUB_VG2_M2Z_H : sme2_multivec_accum_add_sub_vg2<"fsub", 0b0101, MatrixOp16, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_sub_za16_vg1x2>; 837*0fca6ea1SDimitry Andricdefm FSUB_VG4_M4Z_H : sme2_multivec_accum_add_sub_vg4<"fsub", 0b0101, MatrixOp16, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_sub_za16_vg1x4>; 838bdd1243dSDimitry Andric 839*0fca6ea1SDimitry Andricdefm FMLA_VG2_M2ZZI_H : sme2p1_multi_vec_array_vg2_index_16b<"fmla", 0b00, 0b100, ZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fmla_lane_vg1x2>; 840*0fca6ea1SDimitry Andricdefm FMLA_VG4_M4ZZI_H : sme2p1_multi_vec_array_vg4_index_16b<"fmla", 0b000, ZZZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fmla_lane_vg1x4>; 841*0fca6ea1SDimitry Andricdefm FMLA_VG2_M2ZZ_H : sme2_dot_mla_add_sub_array_vg2_single<"fmla", 0b0011100, MatrixOp16, ZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmla_single_vg1x2>; 842*0fca6ea1SDimitry Andricdefm FMLA_VG4_M4ZZ_H : sme2_dot_mla_add_sub_array_vg4_single<"fmla", 0b0111100, MatrixOp16, ZZZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmla_single_vg1x4>; 843*0fca6ea1SDimitry Andricdefm FMLA_VG2_M2Z4Z_H : sme2_dot_mla_add_sub_array_vg2_multi<"fmla", 0b0100001, MatrixOp16, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmla_vg1x2>; 844*0fca6ea1SDimitry Andricdefm FMLA_VG4_M4Z4Z_H : sme2_dot_mla_add_sub_array_vg4_multi<"fmla", 0b0100001, MatrixOp16, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmla_vg1x4>; 845bdd1243dSDimitry Andric 846*0fca6ea1SDimitry Andricdefm FMLS_VG2_M2ZZI_H : sme2p1_multi_vec_array_vg2_index_16b<"fmls", 0b00, 0b101, ZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fmls_lane_vg1x2>; 847*0fca6ea1SDimitry Andricdefm FMLS_VG4_M4ZZI_H : sme2p1_multi_vec_array_vg4_index_16b<"fmls", 0b001, ZZZZ_h_mul_r, ZPR4b16, nxv8f16, int_aarch64_sme_fmls_lane_vg1x4>; 848*0fca6ea1SDimitry Andricdefm FMLS_VG2_M2ZZ_H : sme2_dot_mla_add_sub_array_vg2_single<"fmls", 0b0011101, MatrixOp16, ZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmls_single_vg1x2>; 849*0fca6ea1SDimitry Andricdefm FMLS_VG4_M4ZZ_H : sme2_dot_mla_add_sub_array_vg4_single<"fmls", 0b0111101, MatrixOp16, ZZZZ_h, ZPR4b16, nxv8f16, int_aarch64_sme_fmls_single_vg1x4>; 850*0fca6ea1SDimitry Andricdefm FMLS_VG2_M2Z2Z_H : sme2_dot_mla_add_sub_array_vg2_multi<"fmls", 0b0100011, MatrixOp16, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmls_vg1x2>; 851*0fca6ea1SDimitry Andricdefm FMLS_VG4_M4Z2Z_H : sme2_dot_mla_add_sub_array_vg4_multi<"fmls", 0b0100011, MatrixOp16, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmls_vg1x4>; 852bdd1243dSDimitry Andric 853bdd1243dSDimitry Andricdefm FCVT_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvt", 0b0>; 854bdd1243dSDimitry Andricdefm FCVTL_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvtl", 0b1>; 855bdd1243dSDimitry Andric 856*0fca6ea1SDimitry Andricdefm FMOPA_MPPZZ_H : sme2p1_fmop_tile_fp16<"fmopa", 0b0, 0b0, nxv8f16, int_aarch64_sme_mopa>; 857*0fca6ea1SDimitry Andricdefm FMOPS_MPPZZ_H : sme2p1_fmop_tile_fp16<"fmops", 0b0, 0b1, nxv8f16, int_aarch64_sme_mops>; 858bdd1243dSDimitry Andric} 859bdd1243dSDimitry Andric 8601db9f3b2SDimitry Andriclet Predicates = [HasSME2, HasB16B16] in { 861*0fca6ea1SDimitry Andricdefm BFADD_VG2_M2Z_H : sme2_multivec_accum_add_sub_vg2<"bfadd", 0b1100, MatrixOp16, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_add_za16_vg1x2>; 862*0fca6ea1SDimitry Andricdefm BFADD_VG4_M4Z_H : sme2_multivec_accum_add_sub_vg4<"bfadd", 0b1100, MatrixOp16, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_add_za16_vg1x4>; 863*0fca6ea1SDimitry Andricdefm BFSUB_VG2_M2Z_H : sme2_multivec_accum_add_sub_vg2<"bfsub", 0b1101, MatrixOp16, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_sub_za16_vg1x2>; 864*0fca6ea1SDimitry Andricdefm BFSUB_VG4_M4Z_H : sme2_multivec_accum_add_sub_vg4<"bfsub", 0b1101, MatrixOp16, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_sub_za16_vg1x4>; 865bdd1243dSDimitry Andric 866*0fca6ea1SDimitry Andricdefm BFMLA_VG2_M2ZZI : sme2p1_multi_vec_array_vg2_index_16b<"bfmla", 0b00, 0b110, ZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fmla_lane_vg1x2>; 867*0fca6ea1SDimitry Andricdefm BFMLA_VG4_M4ZZI : sme2p1_multi_vec_array_vg4_index_16b<"bfmla", 0b010, ZZZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fmla_lane_vg1x4>; 868*0fca6ea1SDimitry Andricdefm BFMLA_VG2_M2ZZ : sme2_dot_mla_add_sub_array_vg2_single<"bfmla", 0b1011100, MatrixOp16, ZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmla_single_vg1x2>; 869*0fca6ea1SDimitry Andricdefm BFMLA_VG4_M4ZZ : sme2_dot_mla_add_sub_array_vg4_single<"bfmla", 0b1111100, MatrixOp16, ZZZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmla_single_vg1x4>; 870*0fca6ea1SDimitry Andricdefm BFMLA_VG2_M2Z2Z : sme2_dot_mla_add_sub_array_vg2_multi<"bfmla", 0b1100001, MatrixOp16, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmla_vg1x2>; 871*0fca6ea1SDimitry Andricdefm BFMLA_VG4_M4Z4Z : sme2_dot_mla_add_sub_array_vg4_multi<"bfmla", 0b1100001, MatrixOp16, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmla_vg1x4>; 872bdd1243dSDimitry Andric 873*0fca6ea1SDimitry Andricdefm BFMLS_VG2_M2ZZI : sme2p1_multi_vec_array_vg2_index_16b<"bfmls", 0b00, 0b111, ZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fmls_lane_vg1x2>; 874*0fca6ea1SDimitry Andricdefm BFMLS_VG4_M4ZZI : sme2p1_multi_vec_array_vg4_index_16b<"bfmls", 0b011, ZZZZ_h_mul_r, ZPR4b16, nxv8bf16, int_aarch64_sme_fmls_lane_vg1x4>; 875*0fca6ea1SDimitry Andricdefm BFMLS_VG2_M2ZZ : sme2_dot_mla_add_sub_array_vg2_single<"bfmls", 0b1011101, MatrixOp16, ZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmls_single_vg1x2>; 876*0fca6ea1SDimitry Andricdefm BFMLS_VG4_M4ZZ : sme2_dot_mla_add_sub_array_vg4_single<"bfmls", 0b1111101, MatrixOp16, ZZZZ_h, ZPR4b16, nxv8bf16, int_aarch64_sme_fmls_single_vg1x4>; 877*0fca6ea1SDimitry Andricdefm BFMLS_VG2_M2Z2Z : sme2_dot_mla_add_sub_array_vg2_multi<"bfmls", 0b1100011, MatrixOp16, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmls_vg1x2>; 878*0fca6ea1SDimitry Andricdefm BFMLS_VG4_M4Z4Z : sme2_dot_mla_add_sub_array_vg4_multi<"bfmls", 0b1100011, MatrixOp16, ZZZZ_h_mul_r, nxv8bf16, int_aarch64_sme_fmls_vg1x4>; 879bdd1243dSDimitry Andric 880bdd1243dSDimitry Andricdefm BFMAX_VG2_2ZZ : sme2p1_bf_max_min_vector_vg2_single<"bfmax", 0b0010000>; 881bdd1243dSDimitry Andricdefm BFMAX_VG4_4ZZ : sme2p1_bf_max_min_vector_vg4_single<"bfmax", 0b0010000>; 882bdd1243dSDimitry Andricdefm BFMAX_VG2_2Z2Z : sme2p1_bf_max_min_vector_vg2_multi<"bfmax", 0b0010000>; 883bdd1243dSDimitry Andricdefm BFMAX_VG4_4Z2Z : sme2p1_bf_max_min_vector_vg4_multi<"bfmax", 0b0010000>; 884bdd1243dSDimitry Andric 885bdd1243dSDimitry Andricdefm BFMIN_VG2_2ZZ : sme2p1_bf_max_min_vector_vg2_single<"bfmin", 0b0010001>; 886bdd1243dSDimitry Andricdefm BFMIN_VG4_4ZZ : sme2p1_bf_max_min_vector_vg4_single<"bfmin", 0b0010001>; 887bdd1243dSDimitry Andricdefm BFMIN_VG2_2Z2Z : sme2p1_bf_max_min_vector_vg2_multi<"bfmin", 0b0010001>; 888bdd1243dSDimitry Andricdefm BFMIN_VG4_4Z2Z : sme2p1_bf_max_min_vector_vg4_multi<"bfmin", 0b0010001>; 889bdd1243dSDimitry Andric 890bdd1243dSDimitry Andricdefm BFMAXNM_VG2_2ZZ : sme2p1_bf_max_min_vector_vg2_single<"bfmaxnm", 0b0010010>; 891bdd1243dSDimitry Andricdefm BFMAXNM_VG4_4ZZ : sme2p1_bf_max_min_vector_vg4_single<"bfmaxnm", 0b0010010>; 892bdd1243dSDimitry Andricdefm BFMAXNM_VG2_2Z2Z : sme2p1_bf_max_min_vector_vg2_multi<"bfmaxnm", 0b0010010>; 893bdd1243dSDimitry Andricdefm BFMAXNM_VG4_4Z2Z : sme2p1_bf_max_min_vector_vg4_multi<"bfmaxnm", 0b0010010>; 894bdd1243dSDimitry Andric 895bdd1243dSDimitry Andricdefm BFMINNM_VG2_2ZZ : sme2p1_bf_max_min_vector_vg2_single<"bfminnm", 0b0010011>; 896bdd1243dSDimitry Andricdefm BFMINNM_VG4_4ZZ : sme2p1_bf_max_min_vector_vg4_single<"bfminnm", 0b0010011>; 897bdd1243dSDimitry Andricdefm BFMINNM_VG2_2Z2Z : sme2p1_bf_max_min_vector_vg2_multi<"bfminnm", 0b0010011>; 898bdd1243dSDimitry Andricdefm BFMINNM_VG4_4Z2Z : sme2p1_bf_max_min_vector_vg4_multi<"bfminnm", 0b0010011>; 899bdd1243dSDimitry Andric 900bdd1243dSDimitry Andricdefm BFCLAMP_VG2_2ZZZ: sme2p1_bfclamp_vector_vg2_multi<"bfclamp">; 901bdd1243dSDimitry Andricdefm BFCLAMP_VG4_4ZZZ: sme2p1_bfclamp_vector_vg4_multi<"bfclamp">; 902bdd1243dSDimitry Andric 903*0fca6ea1SDimitry Andricdefm BFMOPA_MPPZZ_H : sme2p1_fmop_tile_fp16<"bfmopa", 0b1, 0b0, nxv8bf16, int_aarch64_sme_mopa>; 904*0fca6ea1SDimitry Andricdefm BFMOPS_MPPZZ_H : sme2p1_fmop_tile_fp16<"bfmops", 0b1, 0b1, nxv8bf16, int_aarch64_sme_mops>; 905bdd1243dSDimitry Andric} 9065f757f3fSDimitry Andric 9075f757f3fSDimitry Andriclet Predicates = [HasSME2, HasFP8] in { 9085f757f3fSDimitry Andricdefm F1CVT_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"f1cvt", 0b00, 0b0>; 9095f757f3fSDimitry Andricdefm F1CVTL_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"f1cvtl", 0b00, 0b1>; 9105f757f3fSDimitry Andricdefm BF1CVT_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"bf1cvt", 0b01, 0b0>; 9115f757f3fSDimitry Andricdefm BF1CVTL_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"bf1cvtl", 0b01, 0b1>; 9125f757f3fSDimitry Andricdefm F2CVT_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"f2cvt", 0b10, 0b0>; 9135f757f3fSDimitry Andricdefm F2CVTL_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"f2cvtl", 0b10, 0b1>; 9145f757f3fSDimitry Andricdefm BF2CVT_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"bf2cvt", 0b11, 0b0>; 9155f757f3fSDimitry Andricdefm BF2CVTL_2ZZ_BtoH : sme2p1_fp8_cvt_vector_vg2_single<"bf2cvtl", 0b11, 0b1>; 9165f757f3fSDimitry Andric 9175f757f3fSDimitry Andricdefm FCVT_Z2Z_HtoB : sme2_fp8_cvt_vg2_single<"fcvt", 0b0>; 9185f757f3fSDimitry Andricdefm BFCVT_Z2Z_HtoB : sme2_fp8_cvt_vg2_single<"bfcvt", 0b1>; 9195f757f3fSDimitry Andricdefm FCVT_Z4Z_StoB : sme2_fp8_cvt_vg4_single<"fcvt", 0b0>; 9205f757f3fSDimitry Andricdefm FCVTN_Z4Z_StoB : sme2_fp8_cvt_vg4_single<"fcvtn", 0b1>; 9215f757f3fSDimitry Andric 9225f757f3fSDimitry Andricdefm FSCALE_2ZZ : sme2_fp_sve_destructive_vector_vg2_single<"fscale", 0b0011000>; 9235f757f3fSDimitry Andricdefm FSCALE_4ZZ : sme2_fp_sve_destructive_vector_vg4_single<"fscale", 0b0011000>; 9245f757f3fSDimitry Andricdefm FSCALE_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"fscale", 0b0011000>; 9255f757f3fSDimitry Andricdefm FSCALE_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fscale", 0b0011000>; 9265f757f3fSDimitry Andric 9275f757f3fSDimitry Andric} // [HasSME2, HasFP8] 9285f757f3fSDimitry Andric 9295f757f3fSDimitry Andriclet Predicates = [HasSME2, HasFAMINMAX] in { 9305f757f3fSDimitry Andricdefm FAMAX_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"famax", 0b0010100>; 9315f757f3fSDimitry Andricdefm FAMIN_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"famin", 0b0010101>; 9325f757f3fSDimitry Andric 9335f757f3fSDimitry Andricdefm FAMAX_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"famax", 0b0010100>; 9345f757f3fSDimitry Andricdefm FAMIN_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"famin", 0b0010101>; 9355f757f3fSDimitry Andric} //[HasSME2, HasFAMINMAX] 9365f757f3fSDimitry Andric 9375f757f3fSDimitry Andriclet Predicates = [HasSME2, HasSME_LUTv2] in { 9385f757f3fSDimitry Andricdefm MOVT : sme2_movt_zt_to_zt<"movt", 0b0011111>; 9395f757f3fSDimitry Andricdef LUTI4_4ZZT2Z : sme2_luti4_vector_vg4<0b00, 0b00,"luti4">; 9405f757f3fSDimitry Andric} //[HasSME2, HasSME_LUTv2] 9415f757f3fSDimitry Andric 9425f757f3fSDimitry Andriclet Predicates = [HasSME2p1, HasSME_LUTv2] in { 9435f757f3fSDimitry Andricdef LUTI4_S_4ZZT2Z : sme2_luti4_vector_vg4_strided<0b00, 0b00, "luti4">; 9445f757f3fSDimitry Andric} //[HasSME2p1, HasSME_LUTv2] 9455f757f3fSDimitry Andric 9465f757f3fSDimitry Andriclet Predicates = [HasSMEF8F16] in { 947*0fca6ea1SDimitry Andricdefm FVDOT_VG2_M2ZZI_BtoH : sme2p1_multi_vec_array_vg2_index_f8f16<"fvdot", 0b11, 0b110, ZZ_b_mul_r, ZPR4b8>; 948*0fca6ea1SDimitry Andricdefm FDOT_VG2_M2ZZI_BtoH : sme2p1_multi_vec_array_vg2_index_f8f16<"fdot", 0b11, 0b010, ZZ_b_mul_r, ZPR4b8>; 949*0fca6ea1SDimitry Andricdefm FDOT_VG4_M4ZZI_BtoH : sme2p1_multi_vec_array_vg4_index_f8f16<"fdot", 0b100, ZZZZ_b_mul_r, ZPR4b8>; 9505f757f3fSDimitry Andricdefm FDOT_VG2_M2ZZ_BtoH : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0010001, MatrixOp16, ZZ_b, ZPR4b8>; 9515f757f3fSDimitry Andricdefm FDOT_VG4_M4ZZ_BtoH : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0110001, MatrixOp16, ZZZZ_b, ZPR4b8>; 9525f757f3fSDimitry Andric// TODO: Replace nxv16i8 by nxv16f8 9535f757f3fSDimitry Andricdefm FDOT_VG2_M2Z2Z_BtoH : sme2_dot_mla_add_sub_array_vg2_multi<"fdot", 0b0100100, MatrixOp16, ZZ_b_mul_r, nxv16i8, null_frag>; 9545f757f3fSDimitry Andricdefm FDOT_VG4_M4Z4Z_BtoH : sme2_dot_mla_add_sub_array_vg4_multi<"fdot", 0b0100100, MatrixOp16, ZZZZ_b_mul_r, nxv16i8, null_frag>; 9555f757f3fSDimitry Andric 9565f757f3fSDimitry Andricdef FMLAL_MZZI_BtoH : sme2_mla_ll_array_index_16b<"fmlal", 0b11, 0b00>; 9575f757f3fSDimitry Andricdefm FMLAL_VG2_M2ZZI_BtoH : sme2_multi_vec_array_vg2_index_16b<"fmlal", 0b10, 0b111>; 9585f757f3fSDimitry Andricdefm FMLAL_VG4_M4ZZI_BtoH : sme2_multi_vec_array_vg4_index_16b<"fmlal", 0b10, 0b110>; 9595f757f3fSDimitry Andricdef FMLAL_VG2_MZZ_BtoH : sme2_mla_long_array_single_16b<"fmlal">; 9605f757f3fSDimitry Andric// TODO: Replace nxv16i8 by nxv16f8 9615f757f3fSDimitry Andricdefm FMLAL_VG2_M2ZZ_BtoH : sme2_fp_mla_long_array_vg2_single<"fmlal", 0b001, MatrixOp16, ZZ_b, ZPR4b8, nxv16i8, null_frag>; 9625f757f3fSDimitry Andricdefm FMLAL_VG4_M4ZZ_BtoH : sme2_fp_mla_long_array_vg4_single<"fmlal", 0b001, MatrixOp16, ZZZZ_b, ZPR4b8, nxv16i8, null_frag>; 9635f757f3fSDimitry Andricdefm FMLAL_VG2_M2Z2Z_BtoH : sme2_fp_mla_long_array_vg2_multi<"fmlal", 0b100, MatrixOp16, ZZ_b_mul_r, nxv16i8, null_frag>; 9645f757f3fSDimitry Andricdefm FMLAL_VG4_M4Z4Z_BtoH : sme2_fp_mla_long_array_vg4_multi<"fmlal", 0b100, MatrixOp16, ZZZZ_b_mul_r, nxv16i8, null_frag>; 9655f757f3fSDimitry Andric 966*0fca6ea1SDimitry Andricdefm FMOPA_MPPZZ_BtoH : sme2p1_fmop_tile_f8f16<"fmopa", 0b1, 0b0, 0b01>; 9675f757f3fSDimitry Andric 9685f757f3fSDimitry Andric} //[HasSMEF8F16] 9695f757f3fSDimitry Andric 9705f757f3fSDimitry Andriclet Predicates = [HasSMEF8F32] in { 9715f757f3fSDimitry Andric// TODO : Replace nxv16i8 by nxv16f8 9725f757f3fSDimitry Andricdefm FDOT_VG2_M2ZZI_BtoS : sme2_multi_vec_array_vg2_index_32b<"fdot", 0b01, 0b0111, ZZ_b_mul_r, ZPR4b8, nxv16i8, null_frag>; 9735f757f3fSDimitry Andricdefm FDOT_VG4_M4ZZI_BtoS : sme2_multi_vec_array_vg4_index_32b<"fdot", 0b0001, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, null_frag>; 9745f757f3fSDimitry Andricdefm FDOT_VG2_M2ZZ_BtoS : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0010011, MatrixOp32, ZZ_b, ZPR4b8>; 9755f757f3fSDimitry Andricdefm FDOT_VG4_M4ZZ_BtoS : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0110011, MatrixOp32, ZZZZ_b, ZPR4b8>; 9765f757f3fSDimitry Andric// TODO : Replace nxv16i8 by nxv16f8 9775f757f3fSDimitry Andricdefm FDOT_VG2_M2Z2Z_BtoS : sme2_dot_mla_add_sub_array_vg2_multi<"fdot", 0b0100110, MatrixOp32, ZZ_b_mul_r, nxv16i8, null_frag>; 9785f757f3fSDimitry Andricdefm FDOT_VG4_M4Z4Z_BtoS : sme2_dot_mla_add_sub_array_vg4_multi<"fdot", 0b0100110, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, null_frag>; 9795f757f3fSDimitry Andric 9805f757f3fSDimitry Andricdef FVDOTB_VG4_M2ZZI_BtoS : sme2_fp8_multi_vec_array_vg4_index<"fvdotb", 0b0>; 9815f757f3fSDimitry Andricdef FVDOTT_VG4_M2ZZI_BtoS : sme2_fp8_multi_vec_array_vg4_index<"fvdott", 0b1>; 9825f757f3fSDimitry Andric 9835f757f3fSDimitry Andricdefm FMLALL_MZZI_BtoS : sme2_mla_ll_array_index_32b<"fmlall", 0b01, 0b000, null_frag>; 9845f757f3fSDimitry Andricdefm FMLALL_VG2_M2ZZI_BtoS : sme2_mla_ll_array_vg2_index_32b<"fmlall", 0b10, 0b100, null_frag>; 9855f757f3fSDimitry Andricdefm FMLALL_VG4_M4ZZI_BtoS : sme2_mla_ll_array_vg4_index_32b<"fmlall", 0b00, 0b1000, null_frag>; 9865f757f3fSDimitry Andric// TODO: Replace nxv16i8 by nxv16f8 9875f757f3fSDimitry Andricdefm FMLALL_MZZ_BtoS : sme2_mla_ll_array_single<"fmlall", 0b01000, MatrixOp32, ZPR8, ZPR4b8, nxv16i8, null_frag>; 9885f757f3fSDimitry Andricdefm FMLALL_VG2_M2ZZ_BtoS : sme2_mla_ll_array_vg24_single<"fmlall", 0b000001, MatrixOp32, ZZ_b, ZPR4b8>; 9895f757f3fSDimitry Andricdefm FMLALL_VG4_M4ZZ_BtoS : sme2_mla_ll_array_vg24_single<"fmlall", 0b010001, MatrixOp32, ZZZZ_b, ZPR4b8>; 9905f757f3fSDimitry Andricdefm FMLALL_VG2_M2Z2Z_BtoS : sme2_mla_ll_array_vg2_multi<"fmlall", 0b01000, MatrixOp32, ZZ_b_mul_r, nxv16i8, null_frag>; 9915f757f3fSDimitry Andricdefm FMLALL_VG4_M4Z4Z_BtoS : sme2_mla_ll_array_vg4_multi<"fmlall", 0b01000, MatrixOp32, ZZZZ_b_mul_r, nxv16i8, null_frag>; 9925f757f3fSDimitry Andric 9935f757f3fSDimitry Andric 9945f757f3fSDimitry Andricdefm FMOPA_MPPZZ_BtoS : sme_outer_product_fp32<0b0, 0b01, ZPR8, "fmopa", null_frag>; 9955f757f3fSDimitry Andric 9965f757f3fSDimitry Andric} //[HasSMEF8F32] 9975f757f3fSDimitry Andric 998