From: "Cédric Le Goater" <clg@kaod.org>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Lucas Mateus Castro (alqotel)" <lucas.castro@eldorado.org.br>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Lucas Mateus Castro" <lucas.araujo@eldorado.org.br>,
"Cédric Le Goater" <clg@kaod.org>,
"Matheus Ferst" <matheus.ferst@eldorado.org.br>
Subject: [PULL 09/87] target/ppc: Moved vector multiply high and low to decodetree
Date: Wed, 2 Mar 2022 12:06:45 +0100 [thread overview]
Message-ID: <20220302110803.849505-10-clg@kaod.org> (raw)
In-Reply-To: <20220302110803.849505-1-clg@kaod.org>
From: "Lucas Mateus Castro (alqotel)" <lucas.castro@eldorado.org.br>
Moved instructions vmulld, vmulhuw, vmulhsw, vmulhud and vmulhsd to
decodetree
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
Message-Id: <20220225210936.1749575-4-matheus.ferst@eldorado.org.br>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
target/ppc/helper.h | 8 ++++----
target/ppc/insn32.decode | 6 ++++++
target/ppc/int_helper.c | 8 ++++----
target/ppc/translate/vmx-impl.c.inc | 21 ++++++++++++++++-----
target/ppc/translate/vmx-ops.c.inc | 5 -----
5 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/target/ppc/helper.h b/target/ppc/helper.h
index c399fab1a830..43c7a0263c6c 100644
--- a/target/ppc/helper.h
+++ b/target/ppc/helper.h
@@ -204,10 +204,10 @@ DEF_HELPER_FLAGS_3(VMULOSW, TCG_CALL_NO_RWG, void, avr, avr, avr)
DEF_HELPER_FLAGS_3(VMULOUB, TCG_CALL_NO_RWG, void, avr, avr, avr)
DEF_HELPER_FLAGS_3(VMULOUH, TCG_CALL_NO_RWG, void, avr, avr, avr)
DEF_HELPER_FLAGS_3(VMULOUW, TCG_CALL_NO_RWG, void, avr, avr, avr)
-DEF_HELPER_3(vmulhsw, void, avr, avr, avr)
-DEF_HELPER_3(vmulhuw, void, avr, avr, avr)
-DEF_HELPER_3(vmulhsd, void, avr, avr, avr)
-DEF_HELPER_3(vmulhud, void, avr, avr, avr)
+DEF_HELPER_FLAGS_3(VMULHSW, TCG_CALL_NO_RWG, void, avr, avr, avr)
+DEF_HELPER_FLAGS_3(VMULHUW, TCG_CALL_NO_RWG, void, avr, avr, avr)
+DEF_HELPER_FLAGS_3(VMULHSD, TCG_CALL_NO_RWG, void, avr, avr, avr)
+DEF_HELPER_FLAGS_3(VMULHUD, TCG_CALL_NO_RWG, void, avr, avr, avr)
DEF_HELPER_3(vslo, void, avr, avr, avr)
DEF_HELPER_3(vsro, void, avr, avr, avr)
DEF_HELPER_3(vsrv, void, avr, avr, avr)
diff --git a/target/ppc/insn32.decode b/target/ppc/insn32.decode
index 092ea796184c..d817e44c7104 100644
--- a/target/ppc/insn32.decode
+++ b/target/ppc/insn32.decode
@@ -462,6 +462,12 @@ VMULOSD 000100 ..... ..... ..... 00111001000 @VX
VMULEUD 000100 ..... ..... ..... 01011001000 @VX
VMULOUD 000100 ..... ..... ..... 00011001000 @VX
+VMULHSW 000100 ..... ..... ..... 01110001001 @VX
+VMULHUW 000100 ..... ..... ..... 01010001001 @VX
+VMULHSD 000100 ..... ..... ..... 01111001001 @VX
+VMULHUD 000100 ..... ..... ..... 01011001001 @VX
+VMULLD 000100 ..... ..... ..... 00111001001 @VX
+
# VSX Load/Store Instructions
LXV 111101 ..... ..... ............ . 001 @DQ_TSX
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
index c9f34ce3ca4e..873f957bf4ea 100644
--- a/target/ppc/int_helper.c
+++ b/target/ppc/int_helper.c
@@ -1097,7 +1097,7 @@ VMUL(UW, u32, VsrW, VsrD, uint64_t)
#undef VMUL_DO_ODD
#undef VMUL
-void helper_vmulhsw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+void helper_VMULHSW(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
int i;
@@ -1106,7 +1106,7 @@ void helper_vmulhsw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
}
}
-void helper_vmulhuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+void helper_VMULHUW(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
int i;
@@ -1116,7 +1116,7 @@ void helper_vmulhuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
}
}
-void helper_vmulhsd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+void helper_VMULHSD(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
uint64_t discard;
@@ -1124,7 +1124,7 @@ void helper_vmulhsd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
muls64(&discard, &r->u64[1], a->s64[1], b->s64[1]);
}
-void helper_vmulhud(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+void helper_VMULHUD(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
uint64_t discard;
diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
index a34a080e8324..d493de3629e5 100644
--- a/target/ppc/translate/vmx-impl.c.inc
+++ b/target/ppc/translate/vmx-impl.c.inc
@@ -799,11 +799,6 @@ static void trans_vclzd(DisasContext *ctx)
}
GEN_VXFORM_V(vmuluwm, MO_32, tcg_gen_gvec_mul, 4, 2);
-GEN_VXFORM_V(vmulld, MO_64, tcg_gen_gvec_mul, 4, 7);
-GEN_VXFORM(vmulhuw, 4, 10);
-GEN_VXFORM(vmulhud, 4, 11);
-GEN_VXFORM(vmulhsw, 4, 14);
-GEN_VXFORM(vmulhsd, 4, 15);
GEN_VXFORM_V(vslb, MO_8, tcg_gen_gvec_shlv, 2, 4);
GEN_VXFORM_V(vslh, MO_16, tcg_gen_gvec_shlv, 2, 5);
GEN_VXFORM_V(vslw, MO_32, tcg_gen_gvec_shlv, 2, 6);
@@ -2128,6 +2123,17 @@ static bool do_vx_vmuleo(DisasContext *ctx, arg_VX *a, bool even,
return true;
}
+static bool trans_VMULLD(DisasContext *ctx, arg_VX *a)
+{
+ REQUIRE_INSNS_FLAGS2(ctx, ISA310);
+ REQUIRE_VECTOR(ctx);
+
+ tcg_gen_gvec_mul(MO_64, avr_full_offset(a->vrt), avr_full_offset(a->vra),
+ avr_full_offset(a->vrb), 16, 16);
+
+ return true;
+}
+
TRANS_FLAGS2(ALTIVEC_207, VMULESB, do_vx_helper, gen_helper_VMULESB)
TRANS_FLAGS2(ALTIVEC_207, VMULOSB, do_vx_helper, gen_helper_VMULOSB)
TRANS_FLAGS2(ALTIVEC_207, VMULEUB, do_vx_helper, gen_helper_VMULEUB)
@@ -2145,6 +2151,11 @@ TRANS_FLAGS2(ISA310, VMULOSD, do_vx_vmuleo, false, tcg_gen_muls2_i64)
TRANS_FLAGS2(ISA310, VMULEUD, do_vx_vmuleo, true , tcg_gen_mulu2_i64)
TRANS_FLAGS2(ISA310, VMULOUD, do_vx_vmuleo, false, tcg_gen_mulu2_i64)
+TRANS_FLAGS2(ISA310, VMULHSW, do_vx_helper, gen_helper_VMULHSW)
+TRANS_FLAGS2(ISA310, VMULHSD, do_vx_helper, gen_helper_VMULHSD)
+TRANS_FLAGS2(ISA310, VMULHUW, do_vx_helper, gen_helper_VMULHUW)
+TRANS_FLAGS2(ISA310, VMULHUD, do_vx_helper, gen_helper_VMULHUD)
+
#undef GEN_VR_LDX
#undef GEN_VR_STX
#undef GEN_VR_LVE
diff --git a/target/ppc/translate/vmx-ops.c.inc b/target/ppc/translate/vmx-ops.c.inc
index f310b2fbde95..914e68e5b0be 100644
--- a/target/ppc/translate/vmx-ops.c.inc
+++ b/target/ppc/translate/vmx-ops.c.inc
@@ -102,11 +102,6 @@ GEN_VXFORM_300(vextubrx, 6, 28),
GEN_VXFORM_300(vextuhrx, 6, 29),
GEN_VXFORM_DUAL(vmrgew, vextuwrx, 6, 30, PPC_NONE, PPC2_ALTIVEC_207),
GEN_VXFORM_207(vmuluwm, 4, 2),
-GEN_VXFORM_310(vmulld, 4, 7),
-GEN_VXFORM_310(vmulhuw, 4, 10),
-GEN_VXFORM_310(vmulhud, 4, 11),
-GEN_VXFORM_310(vmulhsw, 4, 14),
-GEN_VXFORM_310(vmulhsd, 4, 15),
GEN_VXFORM(vslb, 2, 4),
GEN_VXFORM(vslh, 2, 5),
GEN_VXFORM_DUAL(vslw, vrlwnm, 2, 6, PPC_ALTIVEC, PPC_NONE),
--
2.34.1
next prev parent reply other threads:[~2022-03-02 11:34 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-02 11:06 [PULL 00/87] ppc queue Cédric Le Goater
2022-03-02 11:06 ` [PULL 01/87] hw/ppc/pnv: Determine ns16550's IRQ number from QOM property Cédric Le Goater
2022-03-02 11:06 ` [PULL 02/87] ppc/pnv: fix default PHB4 QOM hierarchy Cédric Le Goater
2022-03-02 11:06 ` [PULL 03/87] target/ppc: make power8-pmu.c CONFIG_TCG only Cédric Le Goater
2022-03-02 11:06 ` [PULL 04/87] target/ppc: finalize pre-EBB PMU logic Cédric Le Goater
2022-03-02 11:06 ` [PULL 05/87] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Cédric Le Goater
2022-03-02 11:06 ` [PULL 06/87] target/ppc: trigger PERFM EBBs from power8-pmu.c Cédric Le Goater
2022-03-02 11:06 ` [PULL 07/87] target/ppc: Introduce TRANS*FLAGS macros Cédric Le Goater
2022-03-02 11:06 ` [PULL 08/87] target/ppc: moved vector even and odd multiplication to decodetree Cédric Le Goater
2022-03-02 11:06 ` Cédric Le Goater [this message]
2022-03-02 11:06 ` [PULL 10/87] target/ppc: vmulh* instructions without helpers Cédric Le Goater
2022-03-02 11:06 ` [PULL 11/87] target/ppc: Implement vmsumcud instruction Cédric Le Goater
2022-03-02 11:06 ` [PULL 12/87] target/ppc: Implement vmsumudm instruction Cédric Le Goater
2022-03-02 11:06 ` [PULL 13/87] target/ppc: Move vexts[bhw]2[wd] to decodetree Cédric Le Goater
2022-03-02 11:06 ` [PULL 14/87] target/ppc: Implement vextsd2q Cédric Le Goater
2022-03-02 11:06 ` [PULL 15/87] target/ppc: Move Vector Compare Equal/Not Equal/Greater Than to decodetree Cédric Le Goater
2022-03-02 11:06 ` [PULL 16/87] target/ppc: Move Vector Compare Not Equal or Zero " Cédric Le Goater
2022-03-02 11:06 ` [PULL 17/87] target/ppc: Implement Vector Compare Equal Quadword Cédric Le Goater
2022-03-02 11:06 ` [PULL 18/87] target/ppc: Implement Vector Compare Greater Than Quadword Cédric Le Goater
2022-03-02 11:06 ` [PULL 19/87] target/ppc: Implement Vector Compare Quadword Cédric Le Goater
2022-03-02 11:06 ` [PULL 20/87] target/ppc: implement vstri[bh][lr] Cédric Le Goater
2022-03-02 11:06 ` [PULL 21/87] target/ppc: implement vclrlb Cédric Le Goater
2022-03-02 11:06 ` [PULL 22/87] target/ppc: implement vclrrb Cédric Le Goater
2022-03-02 11:06 ` [PULL 23/87] target/ppc: implement vcntmb[bhwd] Cédric Le Goater
2022-03-02 11:07 ` [PULL 24/87] target/ppc: implement vgnb Cédric Le Goater
2022-03-02 11:07 ` [PULL 25/87] target/ppc: move vs[lr][a][bhwd] to decodetree Cédric Le Goater
2022-03-02 11:07 ` [PULL 26/87] target/ppc: implement vslq Cédric Le Goater
2022-03-02 11:07 ` [PULL 27/87] target/ppc: implement vsrq Cédric Le Goater
2022-03-02 11:07 ` [PULL 28/87] target/ppc: implement vsraq Cédric Le Goater
2022-03-02 11:07 ` [PULL 29/87] target/ppc: move vrl[bhwd] to decodetree Cédric Le Goater
2022-03-02 11:07 ` [PULL 30/87] target/ppc: move vrl[bhwd]nm/vrl[bhwd]mi " Cédric Le Goater
2022-03-02 11:07 ` [PULL 31/87] target/ppc: implement vrlq Cédric Le Goater
2022-03-02 11:07 ` [PULL 32/87] target/ppc: implement vrlqnm Cédric Le Goater
2022-03-02 11:07 ` [PULL 33/87] target/ppc: implement vrlqmi Cédric Le Goater
2022-03-02 11:07 ` [PULL 34/87] target/ppc: Move vsel and vperm/vpermr to decodetree Cédric Le Goater
2022-03-02 11:07 ` [PULL 35/87] target/ppc: Move xxsel " Cédric Le Goater
2022-03-02 11:07 ` [PULL 36/87] target/ppc: move xxperm/xxpermr " Cédric Le Goater
2022-03-02 11:07 ` [PULL 37/87] target/ppc: Move xxpermdi " Cédric Le Goater
2022-03-02 11:07 ` [PULL 38/87] target/ppc: Implement xxpermx instruction Cédric Le Goater
2022-03-02 11:07 ` [PULL 39/87] tcg/tcg-op-gvec.c: Introduce tcg_gen_gvec_4i Cédric Le Goater
2022-03-02 11:07 ` [PULL 40/87] target/ppc: Implement xxeval Cédric Le Goater
2022-03-02 11:07 ` [PULL 41/87] target/ppc: Implement xxgenpcv[bhwd]m instruction Cédric Le Goater
2022-03-02 11:07 ` [PULL 42/87] target/ppc: move xs[n]madd[am][ds]p/xs[n]msub[am][ds]p to decodetree Cédric Le Goater
2022-03-02 11:07 ` [PULL 43/87] target/ppc: implement xs[n]maddqp[o]/xs[n]msubqp[o] Cédric Le Goater
2022-03-02 11:07 ` [PULL 44/87] target/ppc: Implement xvtlsbb instruction Cédric Le Goater
2022-03-02 11:07 ` [PULL 45/87] target/ppc: Remove xscmpnedp instruction Cédric Le Goater
2022-03-02 11:07 ` [PULL 46/87] target/ppc: Refactor VSX_SCALAR_CMP_DP Cédric Le Goater
2022-03-02 11:07 ` [PULL 47/87] target/ppc: Implement xscmp{eq,ge,gt}qp Cédric Le Goater
2022-03-02 11:07 ` [PULL 48/87] target/ppc: Move xscmp{eq,ge,gt}dp to decodetree Cédric Le Goater
2022-03-02 11:07 ` [PULL 49/87] target/ppc: Move xs{max, min}[cj]dp to use do_helper_XX3 Cédric Le Goater
2022-03-02 11:07 ` [PULL 50/87] target/ppc: Refactor VSX_MAX_MINC helper Cédric Le Goater
2022-03-02 11:07 ` [PULL 51/87] target/ppc: Implement xs{max,min}cqp Cédric Le Goater
2022-03-02 11:07 ` [PULL 52/87] target/ppc: Implement xvcvbf16spn and xvcvspbf16 instructions Cédric Le Goater
2022-03-02 11:07 ` [PULL 53/87] target/ppc: implement plxsd/pstxsd Cédric Le Goater
2022-03-02 11:07 ` [PULL 54/87] target/ppc: implement plxssp/pstxssp Cédric Le Goater
2022-03-02 11:07 ` [PULL 55/87] target/ppc: implement lxvr[bhwd]/stxvr[bhwd]x Cédric Le Goater
2022-03-02 11:07 ` [PULL 56/87] ppc/xive2: Introduce a XIVE2 core framework Cédric Le Goater
2022-03-02 11:07 ` [PULL 57/87] ppc/xive2: Introduce a presenter matching routine Cédric Le Goater
2022-03-02 11:07 ` [PULL 58/87] ppc/pnv: Add a XIVE2 controller to the POWER10 chip Cédric Le Goater
2022-03-02 11:07 ` [PULL 59/87] ppc/pnv: Add a OCC model for POWER10 Cédric Le Goater
2022-03-02 11:07 ` [PULL 60/87] ppc/pnv: Add POWER10 quads Cédric Le Goater
2022-03-02 11:07 ` [PULL 61/87] ppc/pnv: Add model for POWER10 PHB5 PCIe Host bridge Cédric Le Goater
2022-03-02 11:07 ` [PULL 62/87] ppc/pnv: Add a HOMER model to POWER10 Cédric Le Goater
2022-03-02 11:07 ` [PULL 63/87] ppc/psi: Add support for StoreEOI and 64k ESB pages (POWER10) Cédric Le Goater
2022-03-02 11:07 ` [PULL 64/87] ppc/xive2: Add support for notification injection on ESB pages Cédric Le Goater
2022-03-02 11:07 ` [PULL 65/87] ppc/xive: Add support for PQ state bits offload Cédric Le Goater
2022-03-02 11:07 ` [PULL 66/87] ppc/pnv: Add support for PQ offload on PHB5 Cédric Le Goater
2022-03-02 11:07 ` [PULL 67/87] ppc/pnv: Add support for PHB5 "Address-based trigger" mode Cédric Le Goater
2022-03-02 11:07 ` [PULL 68/87] pnv/xive2: Introduce new capability bits Cédric Le Goater
2022-03-02 11:07 ` [PULL 69/87] ppc/pnv: add XIVE Gen2 TIMA support Cédric Le Goater
2022-03-02 11:07 ` [PULL 70/87] pnv/xive2: Add support XIVE2 P9-compat mode (or Gen1) Cédric Le Goater
2022-03-02 11:07 ` [PULL 71/87] xive2: Add a get_config() handler for the router configuration Cédric Le Goater
2022-03-02 11:07 ` [PULL 72/87] pnv/xive2: Add support for automatic save&restore Cédric Le Goater
2022-03-02 11:07 ` [PULL 73/87] pnv/xive2: Add support for 8bits thread id Cédric Le Goater
2022-03-02 11:07 ` [PULL 74/87] hw/ppc/spapr.c: use g_autofree in spapr_dt_chosen() Cédric Le Goater
2022-03-02 11:07 ` [PULL 75/87] hw/ppc/spapr.c: fail early if no firmware found in machine_init() Cédric Le Goater
2022-03-02 11:07 ` [PULL 76/87] hw/ppc/spapr_caps.c: use g_autofree in spapr_cap_set_string() Cédric Le Goater
2022-03-02 11:07 ` [PULL 77/87] hw/ppc/spapr_caps.c: use g_autofree in spapr_cap_get_string() Cédric Le Goater
2022-03-02 11:07 ` [PULL 78/87] hw/ppc/spapr_caps.c: use g_autofree in spapr_caps_add_properties() Cédric Le Goater
2022-03-02 11:07 ` [PULL 79/87] hw/ppc/spapr_drc.c: use g_auto in spapr_dt_drc() Cédric Le Goater
2022-03-02 11:07 ` [PULL 80/87] hw/ppc/spapr_drc.c: use g_autofree in drc_realize() Cédric Le Goater
2022-03-02 11:07 ` [PULL 81/87] hw/ppc/spapr_drc.c: use g_autofree in drc_unrealize() Cédric Le Goater
2022-03-02 11:07 ` [PULL 82/87] hw/ppc/spapr_drc.c: use g_autofree in spapr_dr_connector_new() Cédric Le Goater
2022-03-02 11:07 ` [PULL 83/87] hw/ppc/spapr_drc.c: use g_autofree in spapr_drc_by_index() Cédric Le Goater
2022-03-02 11:08 ` [PULL 84/87] hw/ppc/spapr_numa.c: simplify spapr_numa_write_assoc_lookup_arrays() Cédric Le Goater
2022-03-02 11:08 ` [PULL 85/87] spapr_pci_nvlink2.c: use g_autofree in spapr_phb_nvgpu_ram_populate_dt() Cédric Le Goater
2022-03-02 11:08 ` [PULL 86/87] hw/ppc/spapr_rtas.c: use g_autofree in rtas_ibm_get_system_parameter() Cédric Le Goater
2022-03-02 11:08 ` [PULL 87/87] hw/ppc/spapr_vio.c: use g_autofree in spapr_dt_vdevice() Cédric Le Goater
2022-03-02 16:58 ` [PULL 00/87] ppc queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220302110803.849505-10-clg@kaod.org \
--to=clg@kaod.org \
--cc=lucas.araujo@eldorado.org.br \
--cc=lucas.castro@eldorado.org.br \
--cc=matheus.ferst@eldorado.org.br \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).