Re: [PATCH RESEND v5 20/57] target/loongarch: Implement xvaddw/xvsubw

2023-09-11 Thread Richard Henderson

On 9/7/23 01:31, Song Gao wrote:

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(-)


Reviewed-by: Richard Henderson 

r~



[PATCH RESEND v5 20/57] target/loongarch: Implement xvaddw/xvsubw

2023-09-07 Thread Song Gao
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)