This patch includes:
- XVADDW{EV/OD}.{H.B/W.H/D.W/Q.D}[U];
- XVSUBW{EV/OD}.{H.B/W.H/D.W/Q.D}[U];
- XVADDW{EV/OD}.{H.BU.B/W.HU.H/D.WU.W/Q.DU.D}.
Signed-off-by: Song Gao
---
target/loongarch/insns.decode | 45
target/loongarch/disas.c| 43 +++
target/loongarch/vec_helper.c | 120 ++--
target/loongarch/insn_trans/trans_vec.c.inc | 41 +++
4 files changed, 215 insertions(+), 34 deletions(-)
diff --git a/target/loongarch/insns.decode b/target/loongarch/insns.decode
index ba0b36f4a7..e1d8b30179 100644
--- a/target/loongarch/insns.decode
+++ b/target/loongarch/insns.decode
@@ -1361,6 +1361,51 @@ xvhsubw_wu_hu0111 01000101 10101 . . .
@vvv
xvhsubw_du_wu0111 01000101 10110 . . .@vvv
xvhsubw_qu_du0111 01000101 10111 . . .@vvv
+xvaddwev_h_b 0111 0101 11100 . . .@vvv
+xvaddwev_w_h 0111 0101 11101 . . .@vvv
+xvaddwev_d_w 0111 0101 0 . . .@vvv
+xvaddwev_q_d 0111 0101 1 . . .@vvv
+xvaddwod_h_b 0111 0110 00100 . . .@vvv
+xvaddwod_w_h 0111 0110 00101 . . .@vvv
+xvaddwod_d_w 0111 0110 00110 . . .@vvv
+xvaddwod_q_d 0111 0110 00111 . . .@vvv
+
+xvsubwev_h_b 0111 0110 0 . . .@vvv
+xvsubwev_w_h 0111 0110 1 . . .@vvv
+xvsubwev_d_w 0111 0110 00010 . . .@vvv
+xvsubwev_q_d 0111 0110 00011 . . .@vvv
+xvsubwod_h_b 0111 0110 01000 . . .@vvv
+xvsubwod_w_h 0111 0110 01001 . . .@vvv
+xvsubwod_d_w 0111 0110 01010 . . .@vvv
+xvsubwod_q_d 0111 0110 01011 . . .@vvv
+
+xvaddwev_h_bu0111 0110 11100 . . .@vvv
+xvaddwev_w_hu0111 0110 11101 . . .@vvv
+xvaddwev_d_wu0111 0110 0 . . .@vvv
+xvaddwev_q_du0111 0110 1 . . .@vvv
+xvaddwod_h_bu0111 0111 00100 . . .@vvv
+xvaddwod_w_hu0111 0111 00101 . . .@vvv
+xvaddwod_d_wu0111 0111 00110 . . .@vvv
+xvaddwod_q_du0111 0111 00111 . . .@vvv
+
+xvsubwev_h_bu0111 0111 0 . . .@vvv
+xvsubwev_w_hu0111 0111 1 . . .@vvv
+xvsubwev_d_wu0111 0111 00010 . . .@vvv
+xvsubwev_q_du0111 0111 00011 . . .@vvv
+xvsubwod_h_bu0111 0111 01000 . . .@vvv
+xvsubwod_w_hu0111 0111 01001 . . .@vvv
+xvsubwod_d_wu0111 0111 01010 . . .@vvv
+xvsubwod_q_du0111 0111 01011 . . .@vvv
+
+xvaddwev_h_bu_b 0111 0111 11100 . . .@vvv
+xvaddwev_w_hu_h 0111 0111 11101 . . .@vvv
+xvaddwev_d_wu_w 0111 0111 0 . . .@vvv
+xvaddwev_q_du_d 0111 0111 1 . . .@vvv
+xvaddwod_h_bu_b 0111 01000100 0 . . .@vvv
+xvaddwod_w_hu_h 0111 01000100 1 . . .@vvv
+xvaddwod_d_wu_w 0111 01000100 00010 . . .@vvv
+xvaddwod_q_du_d 0111 01000100 00011 . . .@vvv
+
xvreplgr2vr_b0111 01101001 0 0 . .@vr
xvreplgr2vr_h0111 01101001 0 1 . .@vr
xvreplgr2vr_w0111 01101001 0 00010 . .@vr
diff --git a/target/loongarch/disas.c b/target/loongarch/disas.c
index c810a52f0d..e3e57e1d05 100644
--- a/target/loongarch/disas.c
+++ b/target/loongarch/disas.c
@@ -1782,6 +1782,49 @@ INSN_LASX(xvhsubw_wu_hu, vvv)
INSN_LASX(xvhsubw_du_wu, vvv)
INSN_LASX(xvhsubw_qu_du, vvv)
+INSN_LASX(xvaddwev_h_b, vvv)
+INSN_LASX(xvaddwev_w_h, vvv)
+INSN_LASX(xvaddwev_d_w, vvv)
+INSN_LASX(xvaddwev_q_d, vvv)
+INSN_LASX(xvaddwod_h_b, vvv)
+INSN_LASX(xvaddwod_w_h, vvv)
+INSN_LASX(xvaddwod_d_w, vvv)
+INSN_LASX(xvaddwod_q_d, vvv)
+INSN_LASX(xvsubwev_h_b, vvv)
+INSN_LASX(xvsubwev_w_h, vvv)
+INSN_LASX(xvsubwev_d_w, vvv)
+INSN_LASX(xvsubwev_q_d, vvv)
+INSN_LASX(xvsubwod_h_b, vvv)
+INSN_LASX(xvsubwod_w_h, vvv)
+INSN_LASX(xvsubwod_d_w, vvv)
+INSN_LASX(xvsubwod_q_d, vvv)
+
+INSN_LASX(xvaddwev_h_bu, vvv)
+INSN_LASX(xvaddwev_w_hu, vvv)
+INSN_LASX(xvaddwev_d_wu, vvv)
+INSN_LASX(xvaddwev_q_du, vvv)
+INSN_LASX(xvaddwod_h_bu, vvv)
+INSN_LASX(xvaddwod_w_hu, vvv)
+INSN_LASX(xvaddwod_d_wu, vvv)
+INSN_LASX(xvaddwod_q_du, vvv)
+INSN_LASX(xvsubwev_h_bu, vvv)
+INSN_LASX(xvsubwev_w_hu, vvv)
+INSN_LASX(xvsubwev_d_wu, vvv)
+INSN_LASX(xvsubwev_q_du, vvv)
+INSN_LASX(xvsubwod_h_bu, vvv)
+INSN_LASX(xvsubwod_w_hu, vvv)