[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 11/68] target/arm: Simplify op_smlawx for SMLAW*
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 11/68] target/arm: Simplify op_smlawx for SMLAW* |
Date: |
Mon, 19 Aug 2019 14:36:58 -0700 |
By shifting the 16-bit input left by 16, we can align the desired
portion of the 48-bit product and use tcg_gen_muls2_i32.
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/translate.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 8557ef831f..9a2fb7d3aa 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -8213,7 +8213,6 @@ DO_SMLAX(SMLALTT, 2, 1, 1)
static bool op_smlawx(DisasContext *s, arg_rrrr *a, bool add, bool mt)
{
TCGv_i32 t0, t1;
- TCGv_i64 t64;
if (!ENABLE_ARCH_5TE) {
return false;
@@ -8221,16 +8220,17 @@ static bool op_smlawx(DisasContext *s, arg_rrrr *a,
bool add, bool mt)
t0 = load_reg(s, a->rn);
t1 = load_reg(s, a->rm);
+ /*
+ * Since the nominal result is product<47:16>, shift the 16-bit
+ * input up by 16 bits, so that the result is at product<63:32>.
+ */
if (mt) {
- tcg_gen_sari_i32(t1, t1, 16);
+ tcg_gen_andi_i32(t1, t1, 0xffff0000);
} else {
- gen_sxth(t1);
+ tcg_gen_shli_i32(t1, t1, 16);
}
- t64 = gen_muls_i64_i32(t0, t1);
- tcg_gen_shri_i64(t64, t64, 16);
- t1 = tcg_temp_new_i32();
- tcg_gen_extrl_i64_i32(t1, t64);
- tcg_temp_free_i64(t64);
+ tcg_gen_muls2_i32(t0, t1, t0, t1);
+ tcg_temp_free_i32(t0);
if (add) {
t0 = load_reg(s, a->ra);
gen_helper_add_setq(t1, cpu_env, t1, t0);
--
2.17.1
- [Qemu-devel] [PATCH v2 08/68] target/arm: Convert Saturating addition and subtraction, (continued)
- [Qemu-devel] [PATCH v2 08/68] target/arm: Convert Saturating addition and subtraction, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 05/68] target/arm: Convert Data Processing (immediate), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 10/68] target/arm: Simplify op_smlaxxx for SMLAL*, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 09/68] target/arm: Convert Halfword multiply and multiply accumulate, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 12/68] target/arm: Convert MSR (immediate) and hints, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 11/68] target/arm: Simplify op_smlawx for SMLAW*,
Richard Henderson <=
- [Qemu-devel] [PATCH v2 13/68] target/arm: Convert MRS/MSR (banked, register), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 15/68] target/arm: Convert BX, BXJ, BLX (register), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 17/68] target/arm: Convert ERET, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 14/68] target/arm: Convert Cyclic Redundancy Check, Richard Henderson, 2019/08/19