[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/15] target/ppc: Implemented vector divide extended word
From: |
Daniel Henrique Barboza |
Subject: |
[PULL 03/15] target/ppc: Implemented vector divide extended word |
Date: |
Tue, 21 Jun 2022 06:43:48 -0300 |
From: "Lucas Mateus Castro (alqotel)" <lucas.araujo@eldorado.org.br>
Implement the following PowerISA v3.1 instructions:
vdivesw: Vector Divide Extended Signed Word
vdiveuw: Vector Divide Extended Unsigned Word
Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220525134954.85056-4-lucas.araujo@eldorado.org.br>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/insn32.decode | 3 ++
target/ppc/translate/vmx-impl.c.inc | 48 +++++++++++++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/target/ppc/insn32.decode b/target/ppc/insn32.decode
index 01bfde8c5e..f6d2d4b257 100644
--- a/target/ppc/insn32.decode
+++ b/target/ppc/insn32.decode
@@ -795,3 +795,6 @@ VDIVSD 000100 ..... ..... ..... 00111001011 @VX
VDIVUD 000100 ..... ..... ..... 00011001011 @VX
VDIVSQ 000100 ..... ..... ..... 00100001011 @VX
VDIVUQ 000100 ..... ..... ..... 00000001011 @VX
+
+VDIVESW 000100 ..... ..... ..... 01110001011 @VX
+VDIVEUW 000100 ..... ..... ..... 01010001011 @VX
diff --git a/target/ppc/translate/vmx-impl.c.inc
b/target/ppc/translate/vmx-impl.c.inc
index 22572e6a79..8c542bcb29 100644
--- a/target/ppc/translate/vmx-impl.c.inc
+++ b/target/ppc/translate/vmx-impl.c.inc
@@ -3320,6 +3320,54 @@ TRANS_FLAGS2(ISA310, VDIVUD, do_vdiv_vmod, MO_64, NULL,
do_divud)
TRANS_FLAGS2(ISA310, VDIVSQ, do_vx_helper, gen_helper_VDIVSQ)
TRANS_FLAGS2(ISA310, VDIVUQ, do_vx_helper, gen_helper_VDIVUQ)
+static void do_dives_i32(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
+{
+ TCGv_i64 val1, val2;
+
+ val1 = tcg_temp_new_i64();
+ val2 = tcg_temp_new_i64();
+
+ tcg_gen_ext_i32_i64(val1, a);
+ tcg_gen_ext_i32_i64(val2, b);
+
+ /* (a << 32)/b */
+ tcg_gen_shli_i64(val1, val1, 32);
+ tcg_gen_div_i64(val1, val1, val2);
+
+ /* if quotient doesn't fit in 32 bits the result is undefined */
+ tcg_gen_extrl_i64_i32(t, val1);
+
+ tcg_temp_free_i64(val1);
+ tcg_temp_free_i64(val2);
+}
+
+static void do_diveu_i32(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
+{
+ TCGv_i64 val1, val2;
+
+ val1 = tcg_temp_new_i64();
+ val2 = tcg_temp_new_i64();
+
+ tcg_gen_extu_i32_i64(val1, a);
+ tcg_gen_extu_i32_i64(val2, b);
+
+ /* (a << 32)/b */
+ tcg_gen_shli_i64(val1, val1, 32);
+ tcg_gen_divu_i64(val1, val1, val2);
+
+ /* if quotient doesn't fit in 32 bits the result is undefined */
+ tcg_gen_extrl_i64_i32(t, val1);
+
+ tcg_temp_free_i64(val1);
+ tcg_temp_free_i64(val2);
+}
+
+DIVS32(do_divesw, do_dives_i32)
+DIVU32(do_diveuw, do_diveu_i32)
+
+TRANS_FLAGS2(ISA310, VDIVESW, do_vdiv_vmod, MO_32, do_divesw, NULL)
+TRANS_FLAGS2(ISA310, VDIVEUW, do_vdiv_vmod, MO_32, do_diveuw, NULL)
+
#undef DIVS32
#undef DIVU32
#undef DIVS64
--
2.36.1
- [PULL 00/15] ppc queue, Daniel Henrique Barboza, 2022/06/21
- [PULL 01/15] target/ppc: Implemented vector divide instructions, Daniel Henrique Barboza, 2022/06/21
- [PULL 02/15] target/ppc: Implemented vector divide quadword, Daniel Henrique Barboza, 2022/06/21
- [PULL 03/15] target/ppc: Implemented vector divide extended word,
Daniel Henrique Barboza <=
- [PULL 04/15] host-utils: Implemented unsigned 256-by-128 division, Daniel Henrique Barboza, 2022/06/21
- [PULL 08/15] target/ppc: Implemented vector module quadword, Daniel Henrique Barboza, 2022/06/21
- [PULL 07/15] target/ppc: Implemented vector module word/doubleword, Daniel Henrique Barboza, 2022/06/21
- [PULL 11/15] pnv/xive2: Access direct mapped thread contexts from all chips, Daniel Henrique Barboza, 2022/06/21
- [PULL 06/15] target/ppc: Implemented remaining vector divide extended, Daniel Henrique Barboza, 2022/06/21
- [PULL 09/15] ppc: fix boot with sam460ex, Daniel Henrique Barboza, 2022/06/21
- [PULL 12/15] ppc/pnv: fix extra indent spaces with DEFINE_PROP*, Daniel Henrique Barboza, 2022/06/21
- [PULL 05/15] host-utils: Implemented signed 256-by-128 division, Daniel Henrique Barboza, 2022/06/21
- [PULL 10/15] target/ppc: fix vbpermd in big endian hosts, Daniel Henrique Barboza, 2022/06/21
- [PULL 13/15] target/ppc: avoid int32 multiply overflow in int_helper.c, Daniel Henrique Barboza, 2022/06/21