From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1K0LAQ-0000PN-MM for qemu-devel@nongnu.org; Sun, 25 May 2008 14:42:02 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1K0LAP-0000NH-RT for qemu-devel@nongnu.org; Sun, 25 May 2008 14:42:02 -0400 Received: from [199.232.76.173] (port=47025 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K0LAP-0000N5-NH for qemu-devel@nongnu.org; Sun, 25 May 2008 14:42:01 -0400 Received: from savannah.gnu.org ([199.232.41.3]:46206 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1K0LAP-0006SC-Ot for qemu-devel@nongnu.org; Sun, 25 May 2008 14:42:01 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1K0LAN-0001LJ-G1 for qemu-devel@nongnu.org; Sun, 25 May 2008 18:41:59 +0000 Received: from bellard by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1K0LAM-0001LD-W1 for qemu-devel@nongnu.org; Sun, 25 May 2008 18:41:59 +0000 MIME-Version: 1.0 Errors-To: bellard Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Fabrice Bellard Message-Id: Date: Sun, 25 May 2008 18:41:59 +0000 Subject: [Qemu-devel] [4582] jump optimizations Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 4582 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4582 Author: bellard Date: 2008-05-25 18:41:58 +0000 (Sun, 25 May 2008) Log Message: ----------- jump optimizations Modified Paths: -------------- trunk/tcg/i386/tcg-target.c Modified: trunk/tcg/i386/tcg-target.c =================================================================== --- trunk/tcg/i386/tcg-target.c 2008-05-25 18:24:40 UTC (rev 4581) +++ trunk/tcg/i386/tcg-target.c 2008-05-25 18:41:58 UTC (rev 4582) @@ -40,7 +40,6 @@ TCG_REG_ESI, TCG_REG_EDI, TCG_REG_EBP, - TCG_REG_ESP, }; const int tcg_target_call_iarg_regs[3] = { TCG_REG_EAX, TCG_REG_EDX, TCG_REG_ECX }; @@ -329,38 +328,17 @@ TCGArg arg1, TCGArg arg2, int const_arg2, int label_index) { - int c; if (const_arg2) { if (arg2 == 0) { - /* use test */ - switch(cond) { - case TCG_COND_EQ: - c = JCC_JE; - break; - case TCG_COND_NE: - c = JCC_JNE; - break; - case TCG_COND_LT: - c = JCC_JS; - break; - case TCG_COND_GE: - c = JCC_JNS; - break; - default: - goto do_cmpi; - } /* test r, r */ tcg_out_modrm(s, 0x85, arg1, arg1); - tcg_out_jxx(s, c, label_index); } else { - do_cmpi: tgen_arithi(s, ARITH_CMP, arg1, arg2); - tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); } } else { tcg_out_modrm(s, 0x01 | (ARITH_CMP << 3), arg2, arg1); - tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); } + tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); } /* XXX: we implement it at the target level to avoid having to @@ -381,42 +359,42 @@ break; case TCG_COND_LT: tcg_out_brcond(s, TCG_COND_LT, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_LT, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_LE: tcg_out_brcond(s, TCG_COND_LT, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_LE, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_GT: tcg_out_brcond(s, TCG_COND_GT, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_GT, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_GE: tcg_out_brcond(s, TCG_COND_GT, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_GE, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_LTU: tcg_out_brcond(s, TCG_COND_LTU, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_LTU, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_LEU: tcg_out_brcond(s, TCG_COND_LTU, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_LEU, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_GTU: tcg_out_brcond(s, TCG_COND_GTU, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_GTU, args[0], args[2], const_args[2], args[5]); break; case TCG_COND_GEU: tcg_out_brcond(s, TCG_COND_GTU, args[1], args[3], const_args[3], args[5]); - tcg_out_brcond(s, TCG_COND_NE, args[1], args[3], const_args[3], label_next); + tcg_out_jxx(s, JCC_JNE, label_next); tcg_out_brcond(s, TCG_COND_GEU, args[0], args[2], const_args[2], args[5]); break; default: