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 <christophe.l...@st.com> > --- > 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 aurel...@aurel32.net http://www.aurel32.net