@@ -2090,17 +2090,17 @@ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "r
20902090
20912091// Lookup table read with 2-bit/4-bit indices
20922092let ArchGuard = "defined(__aarch64__)", TargetGuard = "lut" in {
2093- def VLUTI2_B : SInst<"vluti2_lane", "Q.(qU)I", "cUcPcQcQUcQPc ",
2093+ def VLUTI2_B : SInst<"vluti2_lane", "Q.(qU)I", "cUcPcmQcQUcQPcQm ",
20942094 [ImmCheck<2, ImmCheck0_1>]>;
2095- def VLUTI2_B_Q : SInst<"vluti2_laneq", "Q.(QU)I", "cUcPcQcQUcQPc ",
2095+ def VLUTI2_B_Q : SInst<"vluti2_laneq", "Q.(QU)I", "cUcPcmQcQUcQPcQm ",
20962096 [ImmCheck<2, ImmCheck0_3>]>;
20972097 def VLUTI2_H : SInst<"vluti2_lane", "Q.(<qU)I", "sUsPshQsQUsQPsQh",
20982098 [ImmCheck<2, ImmCheck0_3>]>;
20992099 def VLUTI2_H_Q : SInst<"vluti2_laneq", "Q.(<QU)I", "sUsPshQsQUsQPsQh",
21002100 [ImmCheck<2, ImmCheck0_7>]>;
2101- def VLUTI4_B : SInst<"vluti4_lane", "..(qU)I", "QcQUcQPc ",
2101+ def VLUTI4_B : SInst<"vluti4_lane", "..(qU)I", "QcQUcQPcQm ",
21022102 [ImmCheck<2, ImmCheck0_0>]>;
2103- def VLUTI4_B_Q : SInst<"vluti4_laneq", "..UI", "QcQUcQPc ",
2103+ def VLUTI4_B_Q : SInst<"vluti4_laneq", "..UI", "QcQUcQPcQm ",
21042104 [ImmCheck<2, ImmCheck0_1>]>;
21052105 def VLUTI4_H_X2 : SInst<"vluti4_lane_x2", ".2(<qU)I", "QsQUsQPsQh",
21062106 [ImmCheck<3, ImmCheck0_1>]>;
@@ -2194,4 +2194,70 @@ let ArchGuard = "defined(__aarch64__)", TargetGuard = "fp8,neon" in {
21942194 // fscale
21952195 def FSCALE_V128 : WInst<"vscale", "..(.S)", "QdQfQh">;
21962196 def FSCALE_V64 : WInst<"vscale", "(.q)(.q)(.qS)", "fh">;
2197+ }
2198+
2199+ //FP8 versions of untyped intrinsics
2200+ let ArchGuard = "defined(__aarch64__)" in {
2201+ def VGET_LANE_MF8 : IInst<"vget_lane", "1.I", "mQm", [ImmCheck<1, ImmCheckLaneIndex, 0>]>;
2202+ def SPLAT_MF8 : WInst<"splat_lane", ".(!q)I", "mQm", [ImmCheck<1, ImmCheckLaneIndex, 0>]>;
2203+ def SPLATQ_MF8 : WInst<"splat_laneq", ".(!Q)I", "mQm", [ImmCheck<1, ImmCheckLaneIndex, 0>]>;
2204+ def VSET_LANE_MF8 : IInst<"vset_lane", ".1.I", "mQm", [ImmCheck<2, ImmCheckLaneIndex, 1>]>;
2205+ def VCREATE_MF8 : NoTestOpInst<"vcreate", ".(IU>)", "m", OP_CAST> { let BigEndianSafe = 1; }
2206+ let InstName = "vmov" in {
2207+ def VDUP_N_MF8 : WOpInst<"vdup_n", ".1", "mQm", OP_DUP>;
2208+ def VMOV_N_MF8 : WOpInst<"vmov_n", ".1", "mQm", OP_DUP>;
2209+ }
2210+ let InstName = "" in
2211+ def VDUP_LANE_MF8: WOpInst<"vdup_lane", ".qI", "mQm", OP_DUP_LN>;
2212+ def VCOMBINE_MF8 : NoTestOpInst<"vcombine", "Q..", "m", OP_CONC>;
2213+ let InstName = "vmov" in {
2214+ def VGET_HIGH_MF8 : NoTestOpInst<"vget_high", ".Q", "m", OP_HI>;
2215+ def VGET_LOW_MF8 : NoTestOpInst<"vget_low", ".Q", "m", OP_LO>;
2216+ }
2217+ let InstName = "vtbl" in {
2218+ def VTBL1_MF8 : WInst<"vtbl1", "..p", "m">;
2219+ def VTBL2_MF8 : WInst<"vtbl2", ".2p", "m">;
2220+ def VTBL3_MF8 : WInst<"vtbl3", ".3p", "m">;
2221+ def VTBL4_MF8 : WInst<"vtbl4", ".4p", "m">;
2222+ }
2223+ let InstName = "vtbx" in {
2224+ def VTBX1_MF8 : WInst<"vtbx1", "...p", "m">;
2225+ def VTBX2_MF8 : WInst<"vtbx2", "..2p", "m">;
2226+ def VTBX3_MF8 : WInst<"vtbx3", "..3p", "m">;
2227+ def VTBX4_MF8 : WInst<"vtbx4", "..4p", "m">;
2228+ }
2229+ def VEXT_MF8 : WInst<"vext", "...I", "mQm", [ImmCheck<2, ImmCheckLaneIndex, 0>]>;
2230+ def VREV64_MF8 : WOpInst<"vrev64", "..", "mQm", OP_REV64>;
2231+ def VREV32_MF8 : WOpInst<"vrev32", "..", "mQm", OP_REV32>;
2232+ def VREV16_MF8 : WOpInst<"vrev16", "..", "mQm", OP_REV16>;
2233+ let isHiddenLInst = 1 in
2234+ def VBSL_MF8 : SInst<"vbsl", ".U..", "mQm">;
2235+ def VTRN_MF8 : WInst<"vtrn", "2..", "mQm">;
2236+ def VZIP_MF8 : WInst<"vzip", "2..", "mQm">;
2237+ def VUZP_MF8 : WInst<"vuzp", "2..", "mQm">;
2238+ def COPY_LANE_MF8 : IOpInst<"vcopy_lane", "..I.I", "m", OP_COPY_LN>;
2239+ def COPYQ_LANE_MF8 : IOpInst<"vcopy_lane", "..IqI", "Qm", OP_COPY_LN>;
2240+ def COPY_LANEQ_MF8 : IOpInst<"vcopy_laneq", "..IQI", "m", OP_COPY_LN>;
2241+ def COPYQ_LANEQ_MF8 : IOpInst<"vcopy_laneq", "..I.I", "Qm", OP_COPY_LN>;
2242+ def VDUP_LANE2_MF8 : WOpInst<"vdup_laneq", ".QI", "mQm", OP_DUP_LN>;
2243+ def VTRN1_MF8 : SOpInst<"vtrn1", "...", "mQm", OP_TRN1>;
2244+ def VZIP1_MF8 : SOpInst<"vzip1", "...", "mQm", OP_ZIP1>;
2245+ def VUZP1_MF8 : SOpInst<"vuzp1", "...", "mQm", OP_UZP1>;
2246+ def VTRN2_MF8 : SOpInst<"vtrn2", "...", "mQm", OP_TRN2>;
2247+ def VZIP2_MF8 : SOpInst<"vzip2", "...", "mQm", OP_ZIP2>;
2248+ def VUZP2_MF8 : SOpInst<"vuzp2", "...", "mQm", OP_UZP2>;
2249+ let InstName = "vtbl" in {
2250+ def VQTBL1_A64_MF8 : WInst<"vqtbl1", ".QU", "mQm">;
2251+ def VQTBL2_A64_MF8 : WInst<"vqtbl2", ".(2Q)U", "mQm">;
2252+ def VQTBL3_A64_MF8 : WInst<"vqtbl3", ".(3Q)U", "mQm">;
2253+ def VQTBL4_A64_MF8 : WInst<"vqtbl4", ".(4Q)U", "mQm">;
2254+ }
2255+ let InstName = "vtbx" in {
2256+ def VQTBX1_A64_MF8 : WInst<"vqtbx1", "..QU", "mQm">;
2257+ def VQTBX2_A64_MF8 : WInst<"vqtbx2", "..(2Q)U", "mQm">;
2258+ def VQTBX3_A64_MF8 : WInst<"vqtbx3", "..(3Q)U", "mQm">;
2259+ def VQTBX4_A64_MF8 : WInst<"vqtbx4", "..(4Q)U", "mQm">;
2260+ }
2261+ def SCALAR_VDUP_LANE_MF8 : IInst<"vdup_lane", "1.I", "Sm", [ImmCheck<1, ImmCheckLaneIndex, 0>]>;
2262+ def SCALAR_VDUP_LANEQ_MF8 : IInst<"vdup_laneq", "1QI", "Sm", [ImmCheck<1, ImmCheckLaneIndex, 0>]>;
21972263}
0 commit comments