@@ -2090,17 +2090,17 @@ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "r
2090
2090
2091
2091
// Lookup table read with 2-bit/4-bit indices
2092
2092
let 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 ",
2094
2094
[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 ",
2096
2096
[ImmCheck<2, ImmCheck0_3>]>;
2097
2097
def VLUTI2_H : SInst<"vluti2_lane", "Q.(<qU)I", "sUsPshQsQUsQPsQh",
2098
2098
[ImmCheck<2, ImmCheck0_3>]>;
2099
2099
def VLUTI2_H_Q : SInst<"vluti2_laneq", "Q.(<QU)I", "sUsPshQsQUsQPsQh",
2100
2100
[ImmCheck<2, ImmCheck0_7>]>;
2101
- def VLUTI4_B : SInst<"vluti4_lane", "..(qU)I", "QcQUcQPc ",
2101
+ def VLUTI4_B : SInst<"vluti4_lane", "..(qU)I", "QcQUcQPcQm ",
2102
2102
[ImmCheck<2, ImmCheck0_0>]>;
2103
- def VLUTI4_B_Q : SInst<"vluti4_laneq", "..UI", "QcQUcQPc ",
2103
+ def VLUTI4_B_Q : SInst<"vluti4_laneq", "..UI", "QcQUcQPcQm ",
2104
2104
[ImmCheck<2, ImmCheck0_1>]>;
2105
2105
def VLUTI4_H_X2 : SInst<"vluti4_lane_x2", ".2(<qU)I", "QsQUsQPsQh",
2106
2106
[ImmCheck<3, ImmCheck0_1>]>;
@@ -2194,4 +2194,70 @@ let ArchGuard = "defined(__aarch64__)", TargetGuard = "fp8,neon" in {
2194
2194
// fscale
2195
2195
def FSCALE_V128 : WInst<"vscale", "..(.S)", "QdQfQh">;
2196
2196
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>]>;
2197
2263
}
0 commit comments