From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:50389) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T9wYb-0003Yp-IU for qemu-devel@nongnu.org; Fri, 07 Sep 2012 07:17:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T9wYU-0002i6-SU for qemu-devel@nongnu.org; Fri, 07 Sep 2012 07:17:05 -0400 Received: from hall.aurel32.net ([88.191.126.93]:47995) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T9wYU-0002hC-Lq for qemu-devel@nongnu.org; Fri, 07 Sep 2012 07:16:58 -0400 Date: Fri, 7 Sep 2012 12:05:59 +0200 From: Aurelien Jarno Message-ID: <20120907100559.GA15907@ohm.aurel32.net> References: <1346943657-17256-1-git-send-email-aurelien@aurel32.net> <1346943657-17256-8-git-send-email-aurelien@aurel32.net> <5048D219.7070303@twiddle.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <5048D219.7070303@twiddle.net> Subject: Re: [Qemu-devel] [PATCH 7/8] tcg/optimize: add constant folding for setcond List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: qemu-devel@nongnu.org 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 > > --- > > 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 aurelien@aurel32.net http://www.aurel32.net