From patchwork Mon Mar 4 15:13:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837941 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BDCCA13B5 for ; Mon, 4 Mar 2019 15:22:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A65E12A7FA for ; Mon, 4 Mar 2019 15:22:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9AF1E2A6A5; Mon, 4 Mar 2019 15:22:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 336392A7FD for ; Mon, 4 Mar 2019 15:22:30 +0000 (UTC) Received: from localhost ([127.0.0.1]:55678 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pQD-0001D8-DV for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:22:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIc-0003zl-Ou for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIb-0007o1-0m for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39146 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIa-0006Kx-KV for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:36 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 138331A215B; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id C75F61A2129; Mon, 4 Mar 2019 16:13:32 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:13 +0100 Message-Id: <1551712405-2530-2-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 01/13] target/mips: Add emulation of MMI instruction PCPYH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PCPYH. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic Reviewed-by: Aleksandar Rikalo --- target/mips/translate.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 364bd6d..c62787d 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24348,6 +24348,68 @@ static void decode_opc_special(CPUMIPSState *env, DisasContext *ctx) * PEXTUW */ +/* + * PCPYH rd, rt + * + * Parallel Copy Halfword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI |0 0 0 0 0| rt | rd | PCPYH | MMI3 | + * +-----------+---------+---------+---------+---------+-----------+ + */ +static void gen_mmi_pcpyh(DisasContext *ctx) +{ + uint32_t pd, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + pd = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (unlikely(pd != 0)) { + generate_exception_end(ctx, EXCP_RI); + } else if (rd == 0) { + /* nop */ + } else if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = (1ULL << 16) - 1; + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_movi_i64(t1, 0); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask); + tcg_gen_movi_i64(t1, 0); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27400,10 +27462,12 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_POR: /* TODO: MMI_OPC_3_POR */ case MMI_OPC_3_PNOR: /* TODO: MMI_OPC_3_PNOR */ case MMI_OPC_3_PEXCH: /* TODO: MMI_OPC_3_PEXCH */ - case MMI_OPC_3_PCPYH: /* TODO: MMI_OPC_3_PCPYH */ case MMI_OPC_3_PEXCW: /* TODO: MMI_OPC_3_PEXCW */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI3 */ break; + case MMI_OPC_3_PCPYH: + gen_mmi_pcpyh(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI3"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837923 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E09DD1515 for ; Mon, 4 Mar 2019 15:17:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC9892A769 for ; Mon, 4 Mar 2019 15:17:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C01F02A76D; Mon, 4 Mar 2019 15:17:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 65A942A769 for ; Mon, 4 Mar 2019 15:17:36 +0000 (UTC) Received: from localhost ([127.0.0.1]:55607 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pLT-0006YL-Jq for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:17:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57094) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIb-0003zA-SM for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIa-0007nU-T5 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:37 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39147 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIa-0006L2-Iv for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:36 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 24DBE1A216C; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id D3F9B1A212A; Mon, 4 Mar 2019 16:13:32 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:14 +0100 Message-Id: <1551712405-2530-3-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 02/13] target/mips: Add emulation of MMI instruction PCPYLD X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add emulation of MMI instruction PCPYLD. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic Reviewed-by: Aleksandar Rikalo --- target/mips/translate.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index c62787d..4756bbb 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24410,6 +24410,45 @@ static void gen_mmi_pcpyh(DisasContext *ctx) } } +/* + * PCPYLD rd, rs, rt + * + * Parallel Copy Lower Doubleword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PCPYLD | MMI2 | + * +-----------+---------+---------+---------+---------+-----------+ + */ +static void gen_mmi_pcpyld(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + if (rs == 0) { + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else { + tcg_gen_mov_i64(cpu_mmr[rd], cpu_gpr[rs]); + } + if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + } else { + if (rd != rt) { + tcg_gen_mov_i64(cpu_gpr[rd], cpu_gpr[rt]); + } + } + } +} + #endif @@ -27424,7 +27463,6 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PINTH: /* TODO: MMI_OPC_2_PINTH */ case MMI_OPC_2_PMULTW: /* TODO: MMI_OPC_2_PMULTW */ case MMI_OPC_2_PDIVW: /* TODO: MMI_OPC_2_PDIVW */ - case MMI_OPC_2_PCPYLD: /* TODO: MMI_OPC_2_PCPYLD */ case MMI_OPC_2_PMADDH: /* TODO: MMI_OPC_2_PMADDH */ case MMI_OPC_2_PHMADH: /* TODO: MMI_OPC_2_PHMADH */ case MMI_OPC_2_PAND: /* TODO: MMI_OPC_2_PAND */ @@ -27439,6 +27477,9 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PROT3W: /* TODO: MMI_OPC_2_PROT3W */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI2 */ break; + case MMI_OPC_2_PCPYLD: + gen_mmi_pcpyld(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI2"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837921 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 72C0B1515 for ; Mon, 4 Mar 2019 15:16:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5E0272A766 for ; Mon, 4 Mar 2019 15:16:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 523572A769; Mon, 4 Mar 2019 15:16:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 12E1E2A76B for ; Mon, 4 Mar 2019 15:16:12 +0000 (UTC) Received: from localhost ([127.0.0.1]:55555 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pK7-00045H-8Q for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:16:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57098) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIc-0003zT-4v for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIa-0007nq-WD for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39150 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIa-0006L8-KY for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:36 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 2A3461A2191; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id DCF5F1A213B; Mon, 4 Mar 2019 16:13:32 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:15 +0100 Message-Id: <1551712405-2530-4-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 03/13] target/mips: Add emulation of MMI instruction PCPYUD X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PCPYUD. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic Reviewed-by: Aleksandar Rikalo --- target/mips/translate.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 4756bbb..4763e06 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24449,6 +24449,45 @@ static void gen_mmi_pcpyld(DisasContext *ctx) } } +/* + * PCPYUD rd, rs, rt + * + * Parallel Copy Upper Doubleword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PCPYUD | MMI3 | + * +-----------+---------+---------+---------+---------+-----------+ + */ +static void gen_mmi_pcpyud(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + if (rs == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + } else { + tcg_gen_mov_i64(cpu_gpr[rd], cpu_mmr[rs]); + } + if (rt == 0) { + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else { + if (rd != rt) { + tcg_gen_mov_i64(cpu_mmr[rd], cpu_mmr[rt]); + } + } + } +} + #endif @@ -27499,7 +27538,6 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PINTEH: /* TODO: MMI_OPC_3_PINTEH */ case MMI_OPC_3_PMULTUW: /* TODO: MMI_OPC_3_PMULTUW */ case MMI_OPC_3_PDIVUW: /* TODO: MMI_OPC_3_PDIVUW */ - case MMI_OPC_3_PCPYUD: /* TODO: MMI_OPC_3_PCPYUD */ case MMI_OPC_3_POR: /* TODO: MMI_OPC_3_POR */ case MMI_OPC_3_PNOR: /* TODO: MMI_OPC_3_PNOR */ case MMI_OPC_3_PEXCH: /* TODO: MMI_OPC_3_PEXCH */ @@ -27509,6 +27547,9 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PCPYH: gen_mmi_pcpyh(ctx); break; + case MMI_OPC_3_PCPYUD: + gen_mmi_pcpyud(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI3"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837959 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 913B914DE for ; Mon, 4 Mar 2019 15:30:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7AE502A76D for ; Mon, 4 Mar 2019 15:30:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6E6CF2A608; Mon, 4 Mar 2019 15:30:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 007A62A5EC for ; Mon, 4 Mar 2019 15:30:08 +0000 (UTC) Received: from localhost ([127.0.0.1]:55819 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pXc-0000I7-9u for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:30:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57182) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00040u-Gf for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007qc-Jk for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39726 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007o7-3z for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 4CA3D1A2138; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id E70D81A2073; Mon, 4 Mar 2019 16:13:32 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:16 +0100 Message-Id: <1551712405-2530-5-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 04/13] target/mips: Add emulation of MMI instruction PEXCH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXCH. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic Reviewed-by: Aleksandar Markovic --- target/mips/translate.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 4763e06..9472477 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24488,6 +24488,99 @@ static void gen_mmi_pcpyud(DisasContext *ctx) } } +/* + * PEXCH rd, rt + * + * Parallel Exchange Center Halfword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI |0 0 0 0 0| rt | rd | PEXCH | MMI3 | + * +-----------+---------+---------+---------+---------+-----------+ + */ +static void gen_mmi_pexch(DisasContext *ctx) +{ + uint32_t pd, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + pd = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (unlikely(pd != 0)) { + generate_exception_end(ctx, EXCP_RI); + } else if (rd == 0) { + /* nop */ + } else if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else if (rd == rt) { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 16) - 1; + uint64_t mask1 = mask0 << 16; + uint64_t mask2 = mask1 << 16; + uint64_t mask3 = (mask2 << 16) | mask0; + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask2); + tcg_gen_shri_i64(t1, t1, 16); + + tcg_gen_andi_i64(cpu_gpr[rd], cpu_gpr[rd], mask3); + tcg_gen_or_i64(cpu_gpr[rd], cpu_gpr[rd], t0); + tcg_gen_or_i64(cpu_gpr[rd], cpu_gpr[rd], t1); + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask1); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_andi_i64(t1, cpu_mmr[rt], mask2); + tcg_gen_shri_i64(t1, t1, 16); + + tcg_gen_andi_i64(cpu_mmr[rd], cpu_mmr[rd], mask3); + tcg_gen_or_i64(cpu_mmr[rd], cpu_mmr[rd], t0); + tcg_gen_or_i64(cpu_mmr[rd], cpu_mmr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 16) - 1; + uint64_t mask1 = mask0 << 16; + uint64_t mask2 = mask1 << 16; + uint64_t mask3 = mask2 << 16; + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask3); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask2); + tcg_gen_shri_i64(t1, t1, 16); + tcg_gen_or_i64(t0, t0, t1); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask1); + tcg_gen_shli_i64(t1, t1, 16); + tcg_gen_or_i64(t0, t0, t1); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask0); + tcg_gen_or_i64(t0, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t0); + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask3); + tcg_gen_andi_i64(t1, cpu_mmr[rt], mask2); + tcg_gen_shri_i64(t1, t1, 16); + tcg_gen_or_i64(t0, t0, t1); + tcg_gen_andi_i64(t1, cpu_mmr[rt], mask1); + tcg_gen_shli_i64(t1, t1, 16); + tcg_gen_or_i64(t0, t0, t1); + tcg_gen_andi_i64(t1, cpu_mmr[rt], mask0); + tcg_gen_or_i64(t0, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t0); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27540,7 +27633,6 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PDIVUW: /* TODO: MMI_OPC_3_PDIVUW */ case MMI_OPC_3_POR: /* TODO: MMI_OPC_3_POR */ case MMI_OPC_3_PNOR: /* TODO: MMI_OPC_3_PNOR */ - case MMI_OPC_3_PEXCH: /* TODO: MMI_OPC_3_PEXCH */ case MMI_OPC_3_PEXCW: /* TODO: MMI_OPC_3_PEXCW */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI3 */ break; @@ -27550,6 +27642,9 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PCPYUD: gen_mmi_pcpyud(ctx); break; + case MMI_OPC_3_PEXCH: + gen_mmi_pexch(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI3"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837937 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7935C1515 for ; Mon, 4 Mar 2019 15:20:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63BB92A70E for ; Mon, 4 Mar 2019 15:20:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 584082A57C; Mon, 4 Mar 2019 15:20:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 166A62A3AE for ; Mon, 4 Mar 2019 15:20:16 +0000 (UTC) Received: from localhost ([127.0.0.1]:55639 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pNt-0000Ce-CZ for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:20:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57099) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIc-0003zU-4x for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIb-0007nw-0H for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39152 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIa-0006L9-IG for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:36 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 3F8A61A2075; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id F09491A203A; Mon, 4 Mar 2019 16:13:32 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:17 +0100 Message-Id: <1551712405-2530-6-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 05/13] target/mips: Add emulation of MMI instruction PEXCW X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXCW. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic Reviewed-by: Aleksandar Markovic --- target/mips/translate.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 9472477..64eb10c 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24581,6 +24581,75 @@ static void gen_mmi_pexch(DisasContext *ctx) } } +/* + * PEXCW rd, rt + * + * Parallel Exchange Center Word + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI |0 0 0 0 0| rt | rd | PEXCW | MMI3 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pexcw(DisasContext *ctx) +{ + uint32_t pd, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + pd = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (unlikely(pd != 0)) { + generate_exception_end(ctx, EXCP_RI); + } else if (rd == 0) { + /* nop */ + } else if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else if (rt == rd) { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 32) - 1; + uint64_t mask1 = mask0 << 32; + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask1); + tcg_gen_shri_i64(t0, t0, 32); + tcg_gen_andi_i64(t1, cpu_mmr[rt], mask0); + tcg_gen_shli_i64(t1, t1, 32); + + tcg_gen_andi_i64(cpu_mmr[rd], cpu_mmr[rd], mask1); + tcg_gen_or_i64(cpu_mmr[rd], cpu_mmr[rd], t0); + + tcg_gen_andi_i64(cpu_gpr[rd], cpu_gpr[rd], mask0); + tcg_gen_or_i64(cpu_gpr[rd], cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 32) - 1; + uint64_t mask1 = mask0 << 32; + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask1); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask1); + tcg_gen_shri_i64(t1, t1, 32); + tcg_gen_or_i64(cpu_mmr[rd], t0, t1); + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask0); + tcg_gen_shli_i64(t0, t0, 32); + tcg_gen_andi_i64(t1, cpu_gpr[rt], mask0); + tcg_gen_or_i64(cpu_gpr[rd], t0, t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27633,7 +27702,6 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PDIVUW: /* TODO: MMI_OPC_3_PDIVUW */ case MMI_OPC_3_POR: /* TODO: MMI_OPC_3_POR */ case MMI_OPC_3_PNOR: /* TODO: MMI_OPC_3_PNOR */ - case MMI_OPC_3_PEXCW: /* TODO: MMI_OPC_3_PEXCW */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI3 */ break; case MMI_OPC_3_PCPYH: @@ -27645,6 +27713,9 @@ static void decode_mmi3(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_3_PEXCH: gen_mmi_pexch(ctx); break; + case MMI_OPC_3_PEXCW: + gen_mmi_pexcw(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI3"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837943 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 947BC13B5 for ; Mon, 4 Mar 2019 15:23:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 800642A560 for ; Mon, 4 Mar 2019 15:23:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 745262A7D6; Mon, 4 Mar 2019 15:23:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 173FD2A560 for ; Mon, 4 Mar 2019 15:23:40 +0000 (UTC) Received: from localhost ([127.0.0.1]:55701 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pRL-000322-Dy for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:23:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57191) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00041B-Pd for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007rS-R7 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39728 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oB-9g for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 675D11A21A1; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 06D341A214B; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:18 +0100 Message-Id: <1551712405-2530-7-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 06/13] target/mips: Add emulation of MMI instruction PEXEH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXEH. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 64eb10c..01efcde 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24650,6 +24650,77 @@ static void gen_mmi_pexcw(DisasContext *ctx) } } +/* + * PEXEH rd, rt + * + * Parallel Exchange Even Halfword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI |0 0 0 0 0| rt | rd | PEXEH | MMI2 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pexeh(DisasContext *ctx) +{ + uint32_t pd, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + pd = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (unlikely(pd != 0)) { + generate_exception_end(ctx, EXCP_RI); + } else if (rd == 0) { + /* nop */ + } else if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 16) - 1; + uint64_t mask1 = mask0 << 16; + uint64_t mask2 = mask1 << 16; + uint64_t mask3 = mask2 << 16; + + tcg_gen_movi_i64(t1, 0); + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask0); + tcg_gen_shli_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask1); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask2); + tcg_gen_shri_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask3); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + tcg_gen_movi_i64(t1, 0); + + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask0); + tcg_gen_shli_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask1); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask2); + tcg_gen_shri_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask3); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27670,7 +27741,6 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PXOR: /* TODO: MMI_OPC_2_PXOR */ case MMI_OPC_2_PMSUBH: /* TODO: MMI_OPC_2_PMSUBH */ case MMI_OPC_2_PHMSBH: /* TODO: MMI_OPC_2_PHMSBH */ - case MMI_OPC_2_PEXEH: /* TODO: MMI_OPC_2_PEXEH */ case MMI_OPC_2_PREVH: /* TODO: MMI_OPC_2_PREVH */ case MMI_OPC_2_PMULTH: /* TODO: MMI_OPC_2_PMULTH */ case MMI_OPC_2_PDIVBW: /* TODO: MMI_OPC_2_PDIVBW */ @@ -27681,6 +27751,9 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PCPYLD: gen_mmi_pcpyld(ctx); break; + case MMI_OPC_2_PEXEH: + gen_mmi_pexeh(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI2"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837971 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC07614DE for ; Mon, 4 Mar 2019 15:32:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 96CCC2A833 for ; Mon, 4 Mar 2019 15:32:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8BBCF2A869; Mon, 4 Mar 2019 15:32:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 19DB52A833 for ; Mon, 4 Mar 2019 15:32:36 +0000 (UTC) Received: from localhost ([127.0.0.1]:55856 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pZz-0002Ee-TD for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:32:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57185) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-000411-LG for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007rc-R1 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39725 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007o8-9I for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 79B501A203A; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 11A2B1A2159; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:19 +0100 Message-Id: <1551712405-2530-8-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 07/13] target/mips: Add emulation of MMI instruction PEXEW X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXEW. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 01efcde..f55a0db 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24721,6 +24721,67 @@ static void gen_mmi_pexeh(DisasContext *ctx) } } +/* + * PEXEW rd, rt + * + * Parallel Exchange Even Word + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI |0 0 0 0 0| rt | rd | PEXEW | MMI2 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pexew(DisasContext *ctx) +{ + uint32_t pd, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + pd = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (unlikely(pd != 0)) { + generate_exception_end(ctx, EXCP_RI); + } else if (rd == 0) { + /* nop */ + } else if (rt == 0) { + tcg_gen_movi_i64(cpu_gpr[rd], 0); + tcg_gen_movi_i64(cpu_mmr[rd], 0); + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + TCGv_i64 t2 = tcg_temp_new(); + uint64_t mask0 = (1ULL << 32) - 1; + uint64_t mask1 = mask0 << 32; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask1); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask0); + tcg_gen_shri_i64(t0, t0, 64); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_mov_i64(t2, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t2); + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask0); + tcg_gen_shli_i64(t0, t0, 64); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_mmr[rt], mask1); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + tcg_temp_free(t2); + } +} + #endif @@ -27744,7 +27805,6 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PREVH: /* TODO: MMI_OPC_2_PREVH */ case MMI_OPC_2_PMULTH: /* TODO: MMI_OPC_2_PMULTH */ case MMI_OPC_2_PDIVBW: /* TODO: MMI_OPC_2_PDIVBW */ - case MMI_OPC_2_PEXEW: /* TODO: MMI_OPC_2_PEXEW */ case MMI_OPC_2_PROT3W: /* TODO: MMI_OPC_2_PROT3W */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI2 */ break; @@ -27754,6 +27814,9 @@ static void decode_mmi2(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_2_PEXEH: gen_mmi_pexeh(ctx); break; + case MMI_OPC_2_PEXEW: + gen_mmi_pexew(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI2"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837931 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DD2051803 for ; Mon, 4 Mar 2019 15:19:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8B572A384 for ; Mon, 4 Mar 2019 15:19:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BD0192A388; Mon, 4 Mar 2019 15:19:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 56F872A384 for ; Mon, 4 Mar 2019 15:19:47 +0000 (UTC) Received: from localhost ([127.0.0.1]:55625 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pNa-0008JN-JU for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:19:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57169) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00040j-93 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007qs-Kk for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39731 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oF-5P for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 82ED61A214B; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 1D2A71A216A; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:20 +0100 Message-Id: <1551712405-2530-9-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 08/13] target/mips: Add emulation of MMI instruction PEXTLB X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTLB. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index f55a0db..e84262f 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24782,6 +24782,98 @@ static void gen_mmi_pexew(DisasContext *ctx) } } +/* + * PEXTLB rd, rs, rt + * + * Parallel Extend Lower from Byte + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTLB | MMI0 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextlb(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = ((1ULL << 8) - 1) << 56; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + mask >>= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27737,12 +27829,14 @@ static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_0_PPACH: /* TODO: MMI_OPC_0_PPACH */ case MMI_OPC_0_PADDSB: /* TODO: MMI_OPC_0_PADDSB */ case MMI_OPC_0_PSUBSB: /* TODO: MMI_OPC_0_PSUBSB */ - case MMI_OPC_0_PEXTLB: /* TODO: MMI_OPC_0_PEXTLB */ case MMI_OPC_0_PPACB: /* TODO: MMI_OPC_0_PPACB */ case MMI_OPC_0_PEXT5: /* TODO: MMI_OPC_0_PEXT5 */ case MMI_OPC_0_PPAC5: /* TODO: MMI_OPC_0_PPAC5 */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI0 */ break; + case MMI_OPC_0_PEXTLB: + gen_mmi_pextlb(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI0"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837925 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D6A231515 for ; Mon, 4 Mar 2019 15:18:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BDFA92A766 for ; Mon, 4 Mar 2019 15:18:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC17B2A76B; Mon, 4 Mar 2019 15:18:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9B5902A766 for ; Mon, 4 Mar 2019 15:18:50 +0000 (UTC) Received: from localhost ([127.0.0.1]:55613 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pMf-0006d6-UU for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:18:49 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57172) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00040k-9d for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007r7-O6 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39727 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007o9-7q for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 7F6871A2156; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 27A041A2178; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:21 +0100 Message-Id: <1551712405-2530-10-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 09/13] target/mips: Add emulation of MMI instruction PEXTLH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTLH. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index e84262f..5c2fc07 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24874,6 +24874,72 @@ static void gen_mmi_pextlb(DisasContext *ctx) } } +/* + * PEXTLH rd, rs, rt + * + * Parallel Extend Lower from Halfword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTLH | MMI0 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextlh(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = ((1ULL << 16) - 1) << 48; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 16; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + mask >>= 16; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 16; + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask >>= 16; + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27825,7 +27891,6 @@ static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_0_PPACW: /* TODO: MMI_OPC_0_PPACW */ case MMI_OPC_0_PADDSH: /* TODO: MMI_OPC_0_PADDSH */ case MMI_OPC_0_PSUBSH: /* TODO: MMI_OPC_0_PSUBSH */ - case MMI_OPC_0_PEXTLH: /* TODO: MMI_OPC_0_PEXTLH */ case MMI_OPC_0_PPACH: /* TODO: MMI_OPC_0_PPACH */ case MMI_OPC_0_PADDSB: /* TODO: MMI_OPC_0_PADDSB */ case MMI_OPC_0_PSUBSB: /* TODO: MMI_OPC_0_PSUBSB */ @@ -27837,6 +27902,9 @@ static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_0_PEXTLB: gen_mmi_pextlb(ctx); break; + case MMI_OPC_0_PEXTLH: + gen_mmi_pextlh(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI0"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837947 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD42513B5 for ; Mon, 4 Mar 2019 15:24:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B75C728435 for ; Mon, 4 Mar 2019 15:24:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A8C4529A92; Mon, 4 Mar 2019 15:24:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4E0E328435 for ; Mon, 4 Mar 2019 15:24:57 +0000 (UTC) Received: from localhost ([127.0.0.1]:55709 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pSa-0004AZ-ER for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:24:56 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57144) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pId-00040W-Rv for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007qQ-FD for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:39 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39730 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oG-3s for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 858671A21A3; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 30AE01A2141; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:22 +0100 Message-Id: <1551712405-2530-11-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 10/13] target/mips: Add emulation of MMI instruction PEXTLW X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTLW. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 5c2fc07..e08203f 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24940,6 +24940,59 @@ static void gen_mmi_pextlh(DisasContext *ctx) } } +/* + * PEXTLW rd, rs, rt + * + * Parallel Extend Lower from Word + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTLW | MMI0 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextlw(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = ((1ULL << 32) - 1) << 32; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + mask >>= 32; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_shri_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27887,7 +27940,6 @@ static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_0_PCGTB: /* TODO: MMI_OPC_0_PCGTB */ case MMI_OPC_0_PADDSW: /* TODO: MMI_OPC_0_PADDSW */ case MMI_OPC_0_PSUBSW: /* TODO: MMI_OPC_0_PSUBSW */ - case MMI_OPC_0_PEXTLW: /* TODO: MMI_OPC_0_PEXTLW */ case MMI_OPC_0_PPACW: /* TODO: MMI_OPC_0_PPACW */ case MMI_OPC_0_PADDSH: /* TODO: MMI_OPC_0_PADDSH */ case MMI_OPC_0_PSUBSH: /* TODO: MMI_OPC_0_PSUBSH */ @@ -27905,6 +27957,9 @@ static void decode_mmi0(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_0_PEXTLH: gen_mmi_pextlh(ctx); break; + case MMI_OPC_0_PEXTLW: + gen_mmi_pextlw(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI0"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837949 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1812E13B5 for ; Mon, 4 Mar 2019 15:27:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 031D32A676 for ; Mon, 4 Mar 2019 15:27:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EBD832A75C; Mon, 4 Mar 2019 15:27:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 442D12A676 for ; Mon, 4 Mar 2019 15:27:39 +0000 (UTC) Received: from localhost ([127.0.0.1]:55777 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pVC-0006aQ-FH for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:27:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00040p-Ck for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007rM-Pp for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39732 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oJ-8B for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 8D81D1A21C1; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 3A50A1A2129; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:23 +0100 Message-Id: <1551712405-2530-12-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 11/13] target/mips: Add emulation of MMI instruction PEXTUB X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTUB. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index e08203f..1bd5ef2 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -24993,6 +24993,98 @@ static void gen_mmi_pextlw(DisasContext *ctx) } } +/* + * PEXTUB rd, rs, rt + * + * Parallel Extend Upper from Byte + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTUB | MMI1 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextub(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = (1ULL << 8) - 1; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + + mask <<= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 8; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -27988,10 +28080,12 @@ static void decode_mmi1(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_1_PEXTUH: /* TODO: MMI_OPC_1_PEXTUH */ case MMI_OPC_1_PADDUB: /* TODO: MMI_OPC_1_PADDUB */ case MMI_OPC_1_PSUBUB: /* TODO: MMI_OPC_1_PSUBUB */ - case MMI_OPC_1_PEXTUB: /* TODO: MMI_OPC_1_PEXTUB */ case MMI_OPC_1_QFSRV: /* TODO: MMI_OPC_1_QFSRV */ generate_exception_end(ctx, EXCP_RI); /* TODO: MMI_OPC_CLASS_MMI1 */ break; + case MMI_OPC_1_PEXTUB: + gen_mmi_pextub(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI1"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837919 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id ED60C1515 for ; Mon, 4 Mar 2019 15:16:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D94E42A766 for ; Mon, 4 Mar 2019 15:16:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CDA452A76D; Mon, 4 Mar 2019 15:16:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6F9132A769 for ; Mon, 4 Mar 2019 15:16:09 +0000 (UTC) Received: from localhost ([127.0.0.1]:55599 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pK4-0005Mm-NN for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:16:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57190) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-000417-O8 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007r0-N0 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39733 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oM-6W for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 9FA291A2141; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 467821A212A; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:24 +0100 Message-Id: <1551712405-2530-13-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 12/13] target/mips: Add emulation of MMI instruction PEXTUH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTUH. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 1bd5ef2..da3fcad 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -25085,6 +25085,72 @@ static void gen_mmi_pextub(DisasContext *ctx) } } +/* + * PEXTUH rd, rs, rt + * + * Parallel Extend Upper from Halfword + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTUH | MMI1 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextuh(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = (1ULL << 16) - 1; + + tcg_gen_movi_i64(t1, 0); + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 16; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 16; + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + tcg_gen_movi_i64(t1, 0); + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 16; + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 16); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 16; + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -28077,7 +28143,6 @@ static void decode_mmi1(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_1_PEXTUW: /* TODO: MMI_OPC_1_PEXTUW */ case MMI_OPC_1_PADDUH: /* TODO: MMI_OPC_1_PADDUH */ case MMI_OPC_1_PSUBUH: /* TODO: MMI_OPC_1_PSUBUH */ - case MMI_OPC_1_PEXTUH: /* TODO: MMI_OPC_1_PEXTUH */ case MMI_OPC_1_PADDUB: /* TODO: MMI_OPC_1_PADDUB */ case MMI_OPC_1_PSUBUB: /* TODO: MMI_OPC_1_PSUBUB */ case MMI_OPC_1_QFSRV: /* TODO: MMI_OPC_1_QFSRV */ @@ -28086,6 +28151,9 @@ static void decode_mmi1(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_1_PEXTUB: gen_mmi_pextub(ctx); break; + case MMI_OPC_1_PEXTUH: + gen_mmi_pextuh(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI1"); generate_exception_end(ctx, EXCP_RI); From patchwork Mon Mar 4 15:13:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateja Marjanovic X-Patchwork-Id: 10837939 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 05EFA1515 for ; Mon, 4 Mar 2019 15:21:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E54C62A777 for ; Mon, 4 Mar 2019 15:21:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E39FA2A7A3; Mon, 4 Mar 2019 15:21:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2D1052A7A0 for ; Mon, 4 Mar 2019 15:21:22 +0000 (UTC) Received: from localhost ([127.0.0.1]:55676 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pP8-0001D2-0z for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Mar 2019 10:21:22 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57168) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0pIe-00040i-91 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0pIc-0007qk-Jr for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:40 -0500 Received: from mx2.rt-rk.com ([89.216.37.149]:39729 helo=mail.rt-rk.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0pIc-0007oD-6z for qemu-devel@nongnu.org; Mon, 04 Mar 2019 10:14:38 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 9AC901A2129; Mon, 4 Mar 2019 16:13:33 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkw310-lin.domain.local (rtrkw310-lin.domain.local [10.10.13.57]) by mail.rt-rk.com (Postfix) with ESMTPSA id 51C761A213B; Mon, 4 Mar 2019 16:13:33 +0100 (CET) From: Mateja Marjanovic To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:13:25 +0100 Message-Id: <1551712405-2530-14-git-send-email-mateja.marjanovic@rt-rk.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> References: <1551712405-2530-1-git-send-email-mateja.marjanovic@rt-rk.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Subject: [Qemu-devel] [PATCH v3 13/13] target/mips: Add emulation of MMI instruction PEXTUW X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arikalo@wavecomp.com, amarkovic@wavecomp.com, aurelien@aurel32.net Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mateja Marjanovic Add emulation of MMI instruction PEXTUW. The emulation is implemented using TCG front end operations directly to achieve better performance. Signed-off-by: Mateja Marjanovic --- target/mips/translate.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index da3fcad..5848f7a 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -25151,6 +25151,60 @@ static void gen_mmi_pextuh(DisasContext *ctx) } } +/* + * PEXTUW rd, rs, rt + * + * Parallel Extend Upper from Word + * + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------+---------+---------+---------+---------+-----------+ + * | MMI | rs | rt | rd | PEXTUW | MMI1 | + * +-----------+---------+---------+---------+---------+-----------+ + */ + +static void gen_mmi_pextuw(DisasContext *ctx) +{ + uint32_t rs, rt, rd; + uint32_t opcode; + + opcode = ctx->opcode; + + rs = extract32(opcode, 21, 5); + rt = extract32(opcode, 16, 5); + rd = extract32(opcode, 11, 5); + + if (rd == 0) { + /* nop */ + } else { + TCGv_i64 t0 = tcg_temp_new(); + TCGv_i64 t1 = tcg_temp_new(); + uint64_t mask = (1ULL << 32) - 1; + + tcg_gen_movi_i64(t1, 0); + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + mask <<= 32; + + tcg_gen_mov_i64(cpu_mmr[rd], t1); + tcg_gen_movi_i64(t1, 0); + + tcg_gen_andi_i64(t0, cpu_gpr[rt], mask); + tcg_gen_or_i64(t1, t0, t1); + tcg_gen_andi_i64(t0, cpu_gpr[rs], mask); + tcg_gen_shli_i64(t0, t0, 32); + tcg_gen_or_i64(t1, t0, t1); + + tcg_gen_mov_i64(cpu_gpr[rd], t1); + + tcg_temp_free(t0); + tcg_temp_free(t1); + } +} + #endif @@ -28140,7 +28194,6 @@ static void decode_mmi1(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_1_PCEQB: /* TODO: MMI_OPC_1_PCEQB */ case MMI_OPC_1_PADDUW: /* TODO: MMI_OPC_1_PADDUW */ case MMI_OPC_1_PSUBUW: /* TODO: MMI_OPC_1_PSUBUW */ - case MMI_OPC_1_PEXTUW: /* TODO: MMI_OPC_1_PEXTUW */ case MMI_OPC_1_PADDUH: /* TODO: MMI_OPC_1_PADDUH */ case MMI_OPC_1_PSUBUH: /* TODO: MMI_OPC_1_PSUBUH */ case MMI_OPC_1_PADDUB: /* TODO: MMI_OPC_1_PADDUB */ @@ -28154,6 +28207,9 @@ static void decode_mmi1(CPUMIPSState *env, DisasContext *ctx) case MMI_OPC_1_PEXTUH: gen_mmi_pextuh(ctx); break; + case MMI_OPC_1_PEXTUW: + gen_mmi_pextuw(ctx); + break; default: MIPS_INVAL("TX79 MMI class MMI1"); generate_exception_end(ctx, EXCP_RI);