From patchwork Sat Oct 24 12:19:00 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [v2,01/10] target-arm: fix neon vshrn/vrshrn ops Date: Sat, 24 Oct 2009 02:19:00 -0000 From: Juha.Riihimaki@nokia.com X-Patchwork-Id: 36831 Message-Id: <1256386749-85299-2-git-send-email-juha.riihimaki@nokia.com> To: qemu-devel@nongnu.org From: Juha Riihimäki In the existing code shift value is clobbered during the pass loop. This patch changes the code so that it stores the intermediate result in the target neon register directly and eliminates the need to use a temporary to hold the intermediate value thus leaving the shift value in the temporary variable intact. This is a new patch in this version of the patch series. Signed-off-by: Juha Riihimäki Acked-by: Laurent Desnogues --- target-arm/translate.c | 12 +++--------- 1 files changed, 3 insertions(+), 9 deletions(-) diff --git a/target-arm/translate.c b/target-arm/translate.c index 9d13d42..8a85db6 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -4680,18 +4680,12 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) else gen_neon_narrow_satu(size - 1, tmp, cpu_V0); } - if (pass == 0) { - if (size != 3) { - dead_tmp(tmp2); - } - tmp2 = tmp; - } else { - neon_store_reg(rd, 0, tmp2); - neon_store_reg(rd, 1, tmp); - } + neon_store_reg(rd, pass, tmp); } /* for pass */ if (size == 3) { tcg_temp_free_i64(tmp64); + } else { + dead_tmp(tmp2); } } else if (op == 10) { /* VSHLL */