All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
To: mjc@sifive.com, palmer@sifive.com, sagark@eecs.berkeley.edu,
	kbastian@mail.uni-paderborn.de
Cc: qemu-devel@nongnu.org, peer.adelt@hni.uni-paderborn.de,
	Alistair.Francis@wdc.com
Subject: [Qemu-devel] [PATCH 07/28] target/riscv: Convert RVXM insns to decodetree
Date: Fri, 12 Oct 2018 19:30:26 +0200	[thread overview]
Message-ID: <20181012173047.25420-8-kbastian@mail.uni-paderborn.de> (raw)
In-Reply-To: <20181012173047.25420-1-kbastian@mail.uni-paderborn.de>

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de>
---
 target/riscv/insn32.decode              | 17 +++++
 target/riscv/insn_trans/trans_rvm.inc.c | 87 +++++++++++++++++++++++++
 target/riscv/translate.c                | 10 +--
 3 files changed, 105 insertions(+), 9 deletions(-)
 create mode 100644 target/riscv/insn_trans/trans_rvm.inc.c

diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode
index dbb177395d..15dd6234a4 100644
--- a/target/riscv/insn32.decode
+++ b/target/riscv/insn32.decode
@@ -114,3 +114,20 @@ subw     0100000 .....  ..... 000 ..... 0111011 @r
 sllw     0000000 .....  ..... 001 ..... 0111011 @r
 srlw     0000000 .....  ..... 101 ..... 0111011 @r
 sraw     0100000 .....  ..... 101 ..... 0111011 @r
+
+# *** RV32M Standard Extension ***
+mul      0000001 .....  ..... 000 ..... 0110011 @r
+mulh     0000001 .....  ..... 001 ..... 0110011 @r
+mulhsu   0000001 .....  ..... 010 ..... 0110011 @r
+mulhu    0000001 .....  ..... 011 ..... 0110011 @r
+div      0000001 .....  ..... 100 ..... 0110011 @r
+divu     0000001 .....  ..... 101 ..... 0110011 @r
+rem      0000001 .....  ..... 110 ..... 0110011 @r
+remu     0000001 .....  ..... 111 ..... 0110011 @r
+
+# *** RV64M Standard Extension (in addition to RV32M) ***
+mulw     0000001 .....  ..... 000 ..... 0111011 @r
+divw     0000001 .....  ..... 100 ..... 0111011 @r
+divuw    0000001 .....  ..... 101 ..... 0111011 @r
+remw     0000001 .....  ..... 110 ..... 0111011 @r
+remuw    0000001 .....  ..... 111 ..... 0111011 @r
diff --git a/target/riscv/insn_trans/trans_rvm.inc.c b/target/riscv/insn_trans/trans_rvm.inc.c
new file mode 100644
index 0000000000..2d0fd6a64f
--- /dev/null
+++ b/target/riscv/insn_trans/trans_rvm.inc.c
@@ -0,0 +1,87 @@
+/*
+ * RISC-V translation routines for the RV64M Standard Extension.
+ *
+ * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu
+ * Copyright (c) 2018 Peer Adelt, peer.adelt@hni.uni-paderborn.de
+ *                    Bastian Koppelmann, kbastian@mail.uni-paderborn.de
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2 or later, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+static bool trans_mul(DisasContext *ctx, arg_mul *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_MUL, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_mulh(DisasContext *ctx, arg_mulh *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_MULH, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_MULHSU, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_mulhu(DisasContext *ctx, arg_mulhu *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_MULHU, a->rd, a->rs1, a->rs2);
+    return true;
+}
+
+static bool trans_div(DisasContext *ctx, arg_div *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_DIV, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_divu(DisasContext *ctx, arg_divu *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_DIVU, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_rem(DisasContext *ctx, arg_rem *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_REM, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_remu(DisasContext *ctx, arg_remu *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_REMU, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_mulw(DisasContext *ctx, arg_mulw *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_MULW, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_divw(DisasContext *ctx, arg_divw *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_DIVW, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_divuw(DisasContext *ctx, arg_divuw *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_DIVUW, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_remw(DisasContext *ctx, arg_remw *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_REMW, a->rd, a->rs1, a->rs2);
+    return true;
+}
+static bool trans_remuw(DisasContext *ctx, arg_remuw *a, uint32_t insn)
+{
+    gen_arith(ctx, OPC_RISC_REMUW, a->rd, a->rs1, a->rs2);
+    return true;
+}
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index 7438205492..7c1ecfaf1b 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -1638,6 +1638,7 @@ bool decode_insn32(DisasContext *ctx, uint32_t insn);
 #include "decode_insn32.inc.c"
 /* Include insn module translation function */
 #include "insn_trans/trans_rvi.inc.c"
+#include "insn_trans/trans_rvm.inc.c"
 
 static void decode_RV32_64G(CPURISCVState *env, DisasContext *ctx)
 {
@@ -1659,15 +1660,6 @@ static void decode_RV32_64G(CPURISCVState *env, DisasContext *ctx)
     imm = GET_IMM(ctx->opcode);
 
     switch (op) {
-    case OPC_RISC_ARITH:
-#if defined(TARGET_RISCV64)
-    case OPC_RISC_ARITH_W:
-#endif
-        if (rd == 0) {
-            break; /* NOP */
-        }
-        gen_arith(ctx, MASK_OP_ARITH(ctx->opcode), rd, rs1, rs2);
-        break;
     case OPC_RISC_FP_LOAD:
         gen_fp_load(ctx, MASK_OP_FP_LOAD(ctx->opcode), rd, rs1, imm);
         break;
-- 
2.19.1

  parent reply	other threads:[~2018-10-12 17:31 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 17:30 [Qemu-devel] [PATCH 00/28] target/riscv: Convert to decodetree Bastian Koppelmann
2018-10-12 17:30 ` [Qemu-devel] [PATCH 01/28] targer/riscv: Activate decodetree and implemnt LUI & AUIPC Bastian Koppelmann
2018-10-12 18:03   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 02/28] target/riscv: Convert RVXI branch insns to decodetree Bastian Koppelmann
2018-10-12 18:18   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 03/28] target/riscv: Convert RVXI load/store " Bastian Koppelmann
2018-10-12 18:24   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 04/28] target/riscv: Convert RVXI arithmetic " Bastian Koppelmann
2018-10-12 18:46   ` Richard Henderson
2018-10-19 11:00     ` Bastian Koppelmann
2018-10-19 18:18       ` Palmer Dabbelt
2018-10-12 17:30 ` [Qemu-devel] [PATCH 05/28] target/riscv: Convert RVXI fence " Bastian Koppelmann
2018-10-12 19:17   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 06/28] target/riscv: Convert RVXI csr " Bastian Koppelmann
2018-10-13 16:36   ` Richard Henderson
2018-10-12 17:30 ` Bastian Koppelmann [this message]
2018-10-13 16:39   ` [Qemu-devel] [PATCH 07/28] target/riscv: Convert RVXM " Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 08/28] target/riscv: Convert RV32A " Bastian Koppelmann
2018-10-13 16:50   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 09/28] target/riscv: Convert RV64A " Bastian Koppelmann
2018-10-13 16:51   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 10/28] target/riscv: Convert RV32F " Bastian Koppelmann
2018-10-13 17:33   ` Richard Henderson
2018-10-13 17:41   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 11/28] target/riscv: Convert RV64F " Bastian Koppelmann
2018-10-13 17:37   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 12/28] target/riscv: Convert RV32D " Bastian Koppelmann
2018-10-13 17:42   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 13/28] target/riscv: Convert RV64D " Bastian Koppelmann
2018-10-13 17:44   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 14/28] target/riscv: Convert RV priv " Bastian Koppelmann
2018-10-13 17:52   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 15/28] target/riscv: Convert quadrant 0 of RVXC " Bastian Koppelmann
2018-10-13 18:18   ` Richard Henderson
2018-10-19 12:49     ` Bastian Koppelmann
2018-10-12 17:30 ` [Qemu-devel] [PATCH 16/28] target/riscv: Convert quadrant 1 " Bastian Koppelmann
2018-10-13 18:53   ` Richard Henderson
2018-10-19 13:20     ` Bastian Koppelmann
2018-10-19 15:28     ` Bastian Koppelmann
2018-10-19 15:38       ` Richard Henderson
2018-10-19 18:49       ` Palmer Dabbelt
2018-10-12 17:30 ` [Qemu-devel] [PATCH 17/28] target/riscv: Convert quadrant 2 " Bastian Koppelmann
2018-10-13 19:34   ` Richard Henderson
2018-10-19 15:10     ` Bastian Koppelmann
2018-10-12 17:30 ` [Qemu-devel] [PATCH 18/28] target/riscv: Remove gen_jalr() Bastian Koppelmann
2018-10-13 19:37   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 19/28] target/riscv: Replace gen_branch() with trans_branch() Bastian Koppelmann
2018-10-13 19:39   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 20/28] target/riscv: Replace gen_load() with trans_load() Bastian Koppelmann
2018-10-13 19:44   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 21/28] target/riscv: Replace gen_store() with trans_store() Bastian Koppelmann
2018-10-13 19:45   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 22/28] target/riscv: Move gen_arith_imm() decoding into trans_* functions Bastian Koppelmann
2018-10-13 19:54   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 23/28] target/riscv: make ADD/SUB/OR/XOR/AND insn use arg lists Bastian Koppelmann
2018-10-13 19:55   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 24/28] target/riscv: Remove shift and slt insn manual decoding Bastian Koppelmann
2018-10-13 19:57   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 25/28] target/riscv: Remove manual decoding of RV32/64M insn Bastian Koppelmann
2018-10-13 20:00   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 26/28] target/riscv: Remove gen_system() Bastian Koppelmann
2018-10-13 20:00   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 27/28] target/riscv: Remove decode_RV32_64G() Bastian Koppelmann
2018-10-13 20:01   ` Richard Henderson
2018-10-12 17:30 ` [Qemu-devel] [PATCH 28/28] target/riscv: Replace gen_exception_illegal with return false Bastian Koppelmann
2018-10-13 20:04   ` Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181012173047.25420-8-kbastian@mail.uni-paderborn.de \
    --to=kbastian@mail.uni-paderborn.de \
    --cc=Alistair.Francis@wdc.com \
    --cc=mjc@sifive.com \
    --cc=palmer@sifive.com \
    --cc=peer.adelt@hni.uni-paderborn.de \
    --cc=qemu-devel@nongnu.org \
    --cc=sagark@eecs.berkeley.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.