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