From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:34134) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QtnP6-0006Ur-Ni for qemu-devel@nongnu.org; Wed, 17 Aug 2011 17:12:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QtnP4-0003d1-QJ for qemu-devel@nongnu.org; Wed, 17 Aug 2011 17:12:00 -0400 Received: from mail-pz0-f42.google.com ([209.85.210.42]:49843) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QtnP4-0003a7-H7 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 17:11:58 -0400 Received: by mail-pz0-f42.google.com with SMTP id 37so2031357pzk.29 for ; Wed, 17 Aug 2011 14:11:58 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Wed, 17 Aug 2011 14:11:47 -0700 Message-Id: <1313615510-10615-4-git-send-email-rth@twiddle.net> In-Reply-To: <1313615510-10615-1-git-send-email-rth@twiddle.net> References: <1313615510-10615-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 3/6] tcg: Constant fold neg, andc, orc, eqv, nand, nor. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 32f928f..7e7f2b2 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -215,6 +215,24 @@ static TCGArg do_constant_folding_2(int op, TCGArg x, TCGArg y) CASE_OP_32_64(not): return ~x; + CASE_OP_32_64(neg): + return -x; + + CASE_OP_32_64(andc): + return x & ~y; + + CASE_OP_32_64(orc): + return x | ~y; + + CASE_OP_32_64(eqv): + return ~(x ^ y); + + CASE_OP_32_64(nand): + return ~(x & y); + + CASE_OP_32_64(nor): + return ~(x | y); + CASE_OP_32_64(ext8s): return (int8_t)x; @@ -290,6 +308,9 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, CASE_OP_32_64(and): CASE_OP_32_64(or): CASE_OP_32_64(xor): + CASE_OP_32_64(eqv): + CASE_OP_32_64(nand): + CASE_OP_32_64(nor): if (temps[args[1]].state == TCG_TEMP_CONST) { tmp = args[1]; args[1] = args[2]; @@ -389,6 +410,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, args += 2; break; CASE_OP_32_64(not): + CASE_OP_32_64(neg): CASE_OP_32_64(ext8s): CASE_OP_32_64(ext8u): CASE_OP_32_64(ext16s): @@ -421,6 +443,11 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr, CASE_OP_32_64(sar): CASE_OP_32_64(rotl): CASE_OP_32_64(rotr): + CASE_OP_32_64(andc): + CASE_OP_32_64(orc): + CASE_OP_32_64(eqv): + CASE_OP_32_64(nand): + CASE_OP_32_64(nor): if (temps[args[1]].state == TCG_TEMP_CONST && temps[args[2]].state == TCG_TEMP_CONST) { gen_opc_buf[op_index] = op_to_movi(op); -- 1.7.4.4