On 2017-07-01 13:26, Richard Henderson wrote: > The rotation is to the left, but extract shifts to the right. > The computation of the extract parameters needs adjusting. > > For the entry condition, simplify > > 64 - rot + len <= 64 > -rot + len <= 0 > len <= rot > > Reported-by: David Hildenbrand <da...@redhat.com> > Suggested-by: Aurelien Jarno <aurel...@aurel32.net> > Signed-off-by: Richard Henderson <r...@twiddle.net> > --- > target/s390x/translate.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/target/s390x/translate.c b/target/s390x/translate.c > index 1f0c401..89b2ea5 100644 > --- a/target/s390x/translate.c > +++ b/target/s390x/translate.c > @@ -3472,8 +3472,8 @@ static ExitStatus op_risbg(DisasContext *s, DisasOps *o) > } > > /* In some cases we can implement this with extract. */ > - if (imask == 0 && pos == 0 && len > 0 && rot + len <= 64) { > - tcg_gen_extract_i64(o->out, o->in2, rot, len); > + if (imask == 0 && pos == 0 && len > 0 && len <= rot) { > + tcg_gen_extract_i64(o->out, o->in2, 64 - rot, len); > return NO_EXIT; > }
Reviewed-by: Aurelien Jarno <aurel...@aurel32.net> -- Aurelien Jarno GPG: 4096R/1DDD8C9B aurel...@aurel32.net http://www.aurel32.net