qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Support saturation with shift=0.


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH] Support saturation with shift=0.
Date: Wed, 26 Jan 2011 14:33:59 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

On Wed, Jan 19, 2011 at 05:10:52PM +0100, Christophe Lyon wrote:
> 
> This patch fixes corner-case saturations, when the target range is
> zero. It merely removes the guard against (sh == 0), and makes:
> __ssat(0x87654321, 1) return 0xffffffff and set the saturation flag
> __usat(0x87654321, 0) return 0 and set the saturation flag
> 
> Signed-off-by: Christophe Lyon <address@hidden>
> ---
>  target-arm/translate.c |   28 ++++++++++++----------------
>  1 files changed, 12 insertions(+), 16 deletions(-)

Thanks, applied.

> diff --git a/target-arm/translate.c b/target-arm/translate.c
> index 721bada..41cbb96 100644
> --- a/target-arm/translate.c
> +++ b/target-arm/translate.c
> @@ -6896,27 +6896,23 @@ static void disas_arm_insn(CPUState * env, 
> DisasContext *s)
>                              tcg_gen_shli_i32(tmp, tmp, shift);
>                          }
>                          sh = (insn >> 16) & 0x1f;
> -                        if (sh != 0) {
> -                            tmp2 = tcg_const_i32(sh);
> -                            if (insn & (1 << 22))
> -                                gen_helper_usat(tmp, tmp, tmp2);
> -                            else
> -                                gen_helper_ssat(tmp, tmp, tmp2);
> -                            tcg_temp_free_i32(tmp2);
> -                        }
> +                        tmp2 = tcg_const_i32(sh);
> +                        if (insn & (1 << 22))
> +                          gen_helper_usat(tmp, tmp, tmp2);
> +                        else
> +                          gen_helper_ssat(tmp, tmp, tmp2);
> +                        tcg_temp_free_i32(tmp2);
>                          store_reg(s, rd, tmp);
>                      } else if ((insn & 0x00300fe0) == 0x00200f20) {
>                          /* [us]sat16 */
>                          tmp = load_reg(s, rm);
>                          sh = (insn >> 16) & 0x1f;
> -                        if (sh != 0) {
> -                            tmp2 = tcg_const_i32(sh);
> -                            if (insn & (1 << 22))
> -                                gen_helper_usat16(tmp, tmp, tmp2);
> -                            else
> -                                gen_helper_ssat16(tmp, tmp, tmp2);
> -                            tcg_temp_free_i32(tmp2);
> -                        }
> +                        tmp2 = tcg_const_i32(sh);
> +                        if (insn & (1 << 22))
> +                          gen_helper_usat16(tmp, tmp, tmp2);
> +                        else
> +                          gen_helper_ssat16(tmp, tmp, tmp2);
> +                        tcg_temp_free_i32(tmp2);
>                          store_reg(s, rd, tmp);
>                      } else if ((insn & 0x00700fe0) == 0x00000fa0) {
>                          /* Select bytes.  */
> -- 
> 1.7.2.3
> 
> 
> 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
address@hidden                 http://www.aurel32.net



reply via email to

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