From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37698) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZTuSp-00039i-Q5 for qemu-devel@nongnu.org; Mon, 24 Aug 2015 12:19:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZTuSk-00030Y-GR for qemu-devel@nongnu.org; Mon, 24 Aug 2015 12:19:15 -0400 Received: from mail-qg0-x22a.google.com ([2607:f8b0:400d:c04::22a]:36756) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZTuSk-00030S-CD for qemu-devel@nongnu.org; Mon, 24 Aug 2015 12:19:10 -0400 Received: by qgeb6 with SMTP id b6so89610715qge.3 for ; Mon, 24 Aug 2015 09:19:10 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Mon, 24 Aug 2015 09:17:47 -0700 Message-Id: <1440433079-14458-22-git-send-email-rth@twiddle.net> In-Reply-To: <1440433079-14458-1-git-send-email-rth@twiddle.net> References: <1440433079-14458-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH v14 21/33] target-tilegx: Handle comparison instructions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: walt@tilera.com, cmetcalf@ezchip.com, xili_gchen_5257@hotmail.com, peter.maydell@linaro.org Signed-off-by: Richard Henderson --- target-tilegx/translate.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c index ddeb65f..ea68902 100644 --- a/target-tilegx/translate.c +++ b/target-tilegx/translate.c @@ -466,32 +466,52 @@ static TileExcp gen_rrr_opcode(DisasContext *dc, unsigned opext, case OE_RRR(CMOVEQZ, 4, Y0): case OE_RRR(CMOVNEZ, 0, X0): case OE_RRR(CMOVNEZ, 4, Y0): + return TILEGX_EXCP_OPCODE_UNIMPLEMENTED; case OE_RRR(CMPEQ, 0, X0): case OE_RRR(CMPEQ, 0, X1): case OE_RRR(CMPEQ, 3, Y0): case OE_RRR(CMPEQ, 3, Y1): + tcg_gen_setcond_tl(TCG_COND_EQ, tdest, tsrca, tsrcb); + mnemonic = "cmpeq"; + break; case OE_RRR(CMPEXCH4, 0, X1): case OE_RRR(CMPEXCH, 0, X1): + return TILEGX_EXCP_OPCODE_UNIMPLEMENTED; case OE_RRR(CMPLES, 0, X0): case OE_RRR(CMPLES, 0, X1): case OE_RRR(CMPLES, 2, Y0): case OE_RRR(CMPLES, 2, Y1): + tcg_gen_setcond_tl(TCG_COND_LE, tdest, tsrca, tsrcb); + mnemonic = "cmples"; + break; case OE_RRR(CMPLEU, 0, X0): case OE_RRR(CMPLEU, 0, X1): case OE_RRR(CMPLEU, 2, Y0): case OE_RRR(CMPLEU, 2, Y1): + tcg_gen_setcond_tl(TCG_COND_LEU, tdest, tsrca, tsrcb); + mnemonic = "cmpleu"; + break; case OE_RRR(CMPLTS, 0, X0): case OE_RRR(CMPLTS, 0, X1): case OE_RRR(CMPLTS, 2, Y0): case OE_RRR(CMPLTS, 2, Y1): + tcg_gen_setcond_tl(TCG_COND_LT, tdest, tsrca, tsrcb); + mnemonic = "cmplts"; + break; case OE_RRR(CMPLTU, 0, X0): case OE_RRR(CMPLTU, 0, X1): case OE_RRR(CMPLTU, 2, Y0): case OE_RRR(CMPLTU, 2, Y1): + tcg_gen_setcond_tl(TCG_COND_LTU, tdest, tsrca, tsrcb); + mnemonic = "cmpltu"; + break; case OE_RRR(CMPNE, 0, X0): case OE_RRR(CMPNE, 0, X1): case OE_RRR(CMPNE, 3, Y0): case OE_RRR(CMPNE, 3, Y1): + tcg_gen_setcond_tl(TCG_COND_NE, tdest, tsrca, tsrcb); + mnemonic = "cmpne"; + break; case OE_RRR(CMULAF, 0, X0): case OE_RRR(CMULA, 0, X0): case OE_RRR(CMULFR, 0, X0): @@ -879,13 +899,25 @@ static TileExcp gen_rri_opcode(DisasContext *dc, unsigned opext, tcg_gen_andi_tl(tdest, tsrca, imm); mnemonic = "andi"; break; + case OE(CMPEQI_OPCODE_Y0, 0, Y0): + case OE(CMPEQI_OPCODE_Y1, 0, Y1): case OE_IM(CMPEQI, X0): case OE_IM(CMPEQI, X1): + tcg_gen_setcondi_tl(TCG_COND_EQ, tdest, tsrca, imm); + mnemonic = "cmpeqi"; + break; + case OE(CMPLTSI_OPCODE_Y0, 0, Y0): + case OE(CMPLTSI_OPCODE_Y1, 0, Y1): case OE_IM(CMPLTSI, X0): case OE_IM(CMPLTSI, X1): + tcg_gen_setcondi_tl(TCG_COND_LT, tdest, tsrca, imm); + mnemonic = "cmpltsi"; + break; case OE_IM(CMPLTUI, X0): case OE_IM(CMPLTUI, X1): - return TILEGX_EXCP_OPCODE_UNIMPLEMENTED; + tcg_gen_setcondi_tl(TCG_COND_LTU, tdest, tsrca, imm); + mnemonic = "cmpltui"; + break; case OE_IM(LD1S_ADD, X1): memop = MO_SB; mnemonic = "ld1s_add"; @@ -1034,11 +1066,6 @@ static TileExcp gen_rri_opcode(DisasContext *dc, unsigned opext, tcg_gen_ext32s_tl(tdest, tdest); mnemonic = "addxli"; break; - case OE(CMPEQI_OPCODE_Y0, 0, Y0): - case OE(CMPEQI_OPCODE_Y1, 0, Y1): - case OE(CMPLTSI_OPCODE_Y0, 0, Y0): - case OE(CMPLTSI_OPCODE_Y1, 0, Y1): - return TILEGX_EXCP_OPCODE_UNIMPLEMENTED; case OE(SHL16INSLI_OPCODE_X0, 0, X0): case OE(SHL16INSLI_OPCODE_X1, 0, X1): tcg_gen_shli_tl(tdest, tsrca, 16); -- 2.4.3