From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lnjg1-00047o-QX for qemu-devel@nongnu.org; Sat, 28 Mar 2009 21:19:05 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lnjg0-000474-VT for qemu-devel@nongnu.org; Sat, 28 Mar 2009 21:19:05 -0400 Received: from [199.232.76.173] (port=37026 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lnjg0-00046s-De for qemu-devel@nongnu.org; Sat, 28 Mar 2009 21:19:04 -0400 Received: from savannah.gnu.org ([199.232.41.3]:40396 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 1Lnjg0-0003Dn-4t for qemu-devel@nongnu.org; Sat, 28 Mar 2009 21:19:04 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Lnjfz-00085v-DV for qemu-devel@nongnu.org; Sun, 29 Mar 2009 01:19:03 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1Lnjfy-00085r-Vh for qemu-devel@nongnu.org; Sun, 29 Mar 2009 01:19:03 +0000 MIME-Version: 1.0 Errors-To: aurel32 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Aurelien Jarno Message-Id: Date: Sun, 29 Mar 2009 01:19:03 +0000 Subject: [Qemu-devel] [6937] target-mips: optimize gen_trap() 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: 6937 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6937 Author: aurel32 Date: 2009-03-29 01:19:02 +0000 (Sun, 29 Mar 2009) Log Message: ----------- target-mips: optimize gen_trap() Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/target-mips/translate.c Modified: trunk/target-mips/translate.c =================================================================== --- trunk/target-mips/translate.c 2009-03-29 01:18:52 UTC (rev 6936) +++ trunk/target-mips/translate.c 2009-03-29 01:19:02 UTC (rev 6937) @@ -2166,7 +2166,7 @@ int rs, int rt, int16_t imm) { int cond; - TCGv t0 = tcg_temp_local_new(); + TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); cond = 0; @@ -2208,7 +2208,7 @@ case OPC_TGEU: /* rs >= rs unsigned */ case OPC_TGEIU: /* r0 >= 0 unsigned */ /* Always trap */ - tcg_gen_movi_tl(t0, 1); + generate_exception(ctx, EXCP_TRAP); break; case OPC_TLT: /* rs < rs */ case OPC_TLTI: /* r0 < 0 */ @@ -2217,54 +2217,40 @@ case OPC_TNE: /* rs != rs */ case OPC_TNEI: /* r0 != 0 */ /* Never trap: treat as NOP. */ - goto out; - default: - MIPS_INVAL("trap"); - generate_exception(ctx, EXCP_RI); - goto out; + break; } } else { + int l1 = gen_new_label(); + switch (opc) { case OPC_TEQ: case OPC_TEQI: - gen_op_eq(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_NE, t0, t1, l1); break; case OPC_TGE: case OPC_TGEI: - gen_op_ge(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_LT, t0, t1, l1); break; case OPC_TGEU: case OPC_TGEIU: - gen_op_geu(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_LTU, t0, t1, l1); break; case OPC_TLT: case OPC_TLTI: - gen_op_lt(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_GE, t0, t1, l1); break; case OPC_TLTU: case OPC_TLTIU: - gen_op_ltu(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_GEU, t0, t1, l1); break; case OPC_TNE: case OPC_TNEI: - gen_op_ne(t0, t0, t1); + tcg_gen_brcond_tl(TCG_COND_EQ, t0, t1, l1); break; - default: - MIPS_INVAL("trap"); - generate_exception(ctx, EXCP_RI); - goto out; } - } - save_cpu_state(ctx, 1); - { - int l1 = gen_new_label(); - - tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1); - gen_helper_0i(raise_exception, EXCP_TRAP); + generate_exception(ctx, EXCP_TRAP); gen_set_label(l1); } - ctx->bstate = BS_STOP; - out: tcg_temp_free(t0); tcg_temp_free(t1); }