diff --git a/target/e2k/alops.inc b/target/e2k/alops.inc index 83d786f5f3..555a8f896f 100644 --- a/target/e2k/alops.inc +++ b/target/e2k/alops.inc @@ -801,6 +801,10 @@ enum { OP_QPLOG_0x00, OP_QPLOG_0x80, OP_QPSRAD, + OP_QPACKHBSS, + OP_QPACKHBUS, + OP_QPACKWHSS, + OP_QPACKWHUS, }; typedef enum { @@ -1826,6 +1830,10 @@ static AlopDesc alops[] = { { X(OP_QPFMSAS), ALOPF21, ARGS_PPPP, ALOP_EXT2, 0x12, 6, -1, CHAN_012345, { -1 }, 0xc0 }, { X(OP_QPFMASD), ALOPF21, ARGS_PPPP, ALOP_EXT2, 0x11, 6, -1, CHAN_012345, { -1 }, 0xc0 }, { X(OP_QPFMSAD), ALOPF21, ARGS_PPPP, ALOP_EXT2, 0x13, 6, -1, CHAN_012345, { -1 }, 0xc0 }, + { X(OP_QPACKHBSS), ALOPF11, ARGS_PPP, ALOP_EXT2, 0x16, 7, -1, CHAN_0134, { -1 }, 0xc0, 0 }, + { X(OP_QPACKHBUS), ALOPF11, ARGS_PPP, ALOP_EXT2, 0x16, 7, -1, CHAN_0134, { -1 }, 0xc1, 0 }, + { X(OP_QPACKWHSS), ALOPF11, ARGS_PPP, ALOP_EXT2, 0x16, 7, -1, CHAN_0134, { -1 }, 0xc2, 0 }, + { X(OP_QPACKWHUS), ALOPF11, ARGS_PPP, ALOP_EXT2, 0x16, 7, -1, CHAN_0134, { -1 }, 0xc3, 0 }, }; #undef X diff --git a/target/e2k/translate.c b/target/e2k/translate.c index 656a75ae26..00a6e4cda0 100644 --- a/target/e2k/translate.c +++ b/target/e2k/translate.c @@ -3602,6 +3602,11 @@ IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpacksswh, gen_helper_packsswh) IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackushb, gen_helper_packushb) IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackuswh, gen_helper_packuswh) +IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackhbss, gen_helper_packsshb) +IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackwhss, gen_helper_packsswh) +IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackhbus, gen_helper_packushb) +IMPL_GEN_ALOPF1_ALT_QQQ(gen_qpackwhus, gen_helper_packuswh) + #define IMPL_GEN_ALOPF1_QDQ(name, op) \ static void name(TCGv_i128 ret, TCGv_i128 s1, TCGv_i64 s2) \ { \ @@ -5860,6 +5865,10 @@ static AlopResult gen_alop_simple(Alop *alop) case OP_CCTOPLE: return gen_alopf8(alop, X86_ZF | X86_SF | X86_OF); case OP_ICALLD: return gen_icalld(alop); case OP_IBRANCHD: return gen_ibranchd(alop); + case OP_QPACKHBSS: return gen_alopf1_qqq(alop, gen_qpackhbss); + case OP_QPACKHBUS: return gen_alopf1_qqq(alop, gen_qpackhbus); + case OP_QPACKWHSS: return gen_alopf1_qqq(alop, gen_qpackwhss); + case OP_QPACKWHUS: return gen_alopf1_qqq(alop, gen_qpackwhus); case OP_VFSI: case OP_MOVTRS: case OP_MOVTRCS: