qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 7/8] tcg/optimize: add constant folding for setc


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH 7/8] tcg/optimize: add constant folding for setcond
Date: Fri, 7 Sep 2012 12:05:59 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Thu, Sep 06, 2012 at 09:40:57AM -0700, Richard Henderson wrote:
> On 09/06/2012 08:00 AM, Aurelien Jarno wrote:
> > Signed-off-by: Aurelien Jarno <address@hidden>
> > ---
> >  tcg/optimize.c |   79 
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 79 insertions(+)
> > 
> > diff --git a/tcg/optimize.c b/tcg/optimize.c
> > index 7debc8a..c4af1e8 100644
> > --- a/tcg/optimize.c
> > +++ b/tcg/optimize.c
> > @@ -267,6 +267,65 @@ static TCGArg do_constant_folding(TCGOpcode op, TCGArg 
> > x, TCGArg y)
> >      return res;
> >  }
> >  
> > +static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x,
> > +                                       TCGArg y, TCGCond c)
> > +{
> > +    switch (op_bits(op)) {
> > +    case 32:
> > +        switch (c) {
> > +        case TCG_COND_EQ:
> > +            return (uint32_t)x == (uint32_t)y;
> > +        case TCG_COND_NE:
> > +            return (uint32_t)x != (uint32_t)y;
> > +        case TCG_COND_LT:
> > +            return (int32_t)x < (int32_t)y;
> > +        case TCG_COND_GE:
> > +            return (int32_t)x >= (int32_t)y;
> > +        case TCG_COND_LE:
> > +            return (int32_t)x <= (int32_t)y;
> > +        case TCG_COND_GT:
> > +            return (int32_t)x > (int32_t)y;
> > +        case TCG_COND_LTU:
> > +            return (uint32_t)x < (uint32_t)y;
> > +        case TCG_COND_GEU:
> > +            return (uint32_t)x >= (uint32_t)y;
> > +        case TCG_COND_LEU:
> > +            return (uint32_t)x <= (uint32_t)y;
> > +        case TCG_COND_GTU:
> > +            return (uint32_t)x > (uint32_t)y;
> > +    }
> > +    case 64:
> > +        switch (c) {
> > +        case TCG_COND_EQ:
> > +            return (uint64_t)x == (uint64_t)y;
> > +        case TCG_COND_NE:
> > +            return (uint64_t)x != (uint64_t)y;
> > +        case TCG_COND_LT:
> > +            return (int64_t)x < (int64_t)y;
> > +        case TCG_COND_GE:
> > +            return (int64_t)x >= (int64_t)y;
> > +        case TCG_COND_LE:
> > +            return (int64_t)x <= (int64_t)y;
> > +        case TCG_COND_GT:
> > +            return (int64_t)x > (int64_t)y;
> > +        case TCG_COND_LTU:
> > +            return (uint64_t)x < (uint64_t)y;
> > +        case TCG_COND_GEU:
> > +            return (uint64_t)x >= (uint64_t)y;
> > +        case TCG_COND_LEU:
> > +            return (uint64_t)x <= (uint64_t)y;
> > +        case TCG_COND_GTU:
> > +            return (uint64_t)x > (uint64_t)y;
> > +    }
> > +    default:
> > +        fprintf(stderr,
> > +                "Unrecognized bitness %d or condition %d in "
> > +                "do_constant_folding_cond.\n", op_bits(op), c);
> > +        tcg_abort();
> > +    }
> 
> You probably don't want the default here, but the statements after
> the outer switch, and with proper breaks between the two cases.
> Otherwise the error doesn't do what you wanted it to do.
> 

Good catch, i'll fix that in version 2.


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



reply via email to

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