[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] ARM: Fix decoding of VQSHL/VQSHLU immediate
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] ARM: Fix decoding of VQSHL/VQSHLU immediate forms |
Date: |
Tue, 4 Jan 2011 23:05:06 +0100 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
On Mon, Jan 03, 2011 at 04:20:48PM +0000, Peter Maydell wrote:
> From: Juha Riihimäki <address@hidden>
>
> Fix errors in the decoding of ARM VQSHL/VQSHLU immediate forms,
> including using the new VQSHLU helper functions where appropriate.
>
> Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
> ---
> target-arm/translate.c | 51 +++++++++++++++++++++++++++++++++--------------
> 1 files changed, 36 insertions(+), 15 deletions(-)
>
> diff --git a/target-arm/translate.c b/target-arm/translate.c
> index 2598268..1853b5c 100644
> --- a/target-arm/translate.c
> +++ b/target-arm/translate.c
> @@ -4647,14 +4647,22 @@ static int disas_neon_data_insn(CPUState * env,
> DisasContext *s, uint32_t insn)
> case 5: /* VSHL, VSLI */
> gen_helper_neon_shl_u64(cpu_V0, cpu_V0, cpu_V1);
> break;
> - case 6: /* VQSHL */
> - if (u)
> - gen_helper_neon_qshl_u64(cpu_V0, cpu_env,
> cpu_V0, cpu_V1);
> - else
> - gen_helper_neon_qshl_s64(cpu_V0, cpu_env,
> cpu_V0, cpu_V1);
> + case 6: /* VQSHLU */
> + if (u) {
> + gen_helper_neon_qshlu_s64(cpu_V0, cpu_env,
> + cpu_V0, cpu_V1);
> + } else {
> + return 1;
> + }
> break;
> - case 7: /* VQSHLU */
> - gen_helper_neon_qshl_u64(cpu_V0, cpu_env,
> cpu_V0, cpu_V1);
> + case 7: /* VQSHL */
> + if (u) {
> + gen_helper_neon_qshl_u64(cpu_V0, cpu_env,
> + cpu_V0, cpu_V1);
> + } else {
> + gen_helper_neon_qshl_s64(cpu_V0, cpu_env,
> + cpu_V0, cpu_V1);
> + }
> break;
> }
> if (op == 1 || op == 3) {
> @@ -4693,17 +4701,30 @@ static int disas_neon_data_insn(CPUState * env,
> DisasContext *s, uint32_t insn)
> default: return 1;
> }
> break;
> - case 6: /* VQSHL */
> - GEN_NEON_INTEGER_OP_ENV(qshl);
> - break;
> - case 7: /* VQSHLU */
> + case 6: /* VQSHLU */
> + if (!u) {
> + return 1;
> + }
> switch (size) {
> - case 0: gen_helper_neon_qshl_u8(tmp, cpu_env,
> tmp, tmp2); break;
> - case 1: gen_helper_neon_qshl_u16(tmp, cpu_env,
> tmp, tmp2); break;
> - case 2: gen_helper_neon_qshl_u32(tmp, cpu_env,
> tmp, tmp2); break;
> - default: return 1;
> + case 0:
> + gen_helper_neon_qshlu_s8(tmp, cpu_env,
> + tmp, tmp2);
> + break;
> + case 1:
> + gen_helper_neon_qshlu_s16(tmp, cpu_env,
> + tmp, tmp2);
> + break;
> + case 2:
> + gen_helper_neon_qshlu_s32(tmp, cpu_env,
> + tmp, tmp2);
> + break;
> + default:
> + return 1;
> }
> break;
> + case 7: /* VQSHL */
> + GEN_NEON_INTEGER_OP_ENV(qshl);
> + break;
> }
> dead_tmp(tmp2);
>
> --
> 1.6.3.3
>
>
>
--
Aurelien Jarno GPG: 1024D/F1BCDB73
address@hidden http://www.aurel32.net