qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]