aboutsummaryrefslogtreecommitdiff
path: root/riscv/encoding.h
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-09-08 15:09:23 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-09-08 17:00:02 -0700
commit71d04ecd7ab631193a0943f8ddae222090d8e048 (patch)
tree91a80a22da66a18d28bc79c39d26111e69fab26a /riscv/encoding.h
parent26d7f0f08e861335dc7bb2b51759c2206915a25a (diff)
downloadspike-71d04ecd7ab631193a0943f8ddae222090d8e048.zip
spike-71d04ecd7ab631193a0943f8ddae222090d8e048.tar.gz
spike-71d04ecd7ab631193a0943f8ddae222090d8e048.tar.bz2
Improve instruction fetch
- Performance for variable-length instructions is much better - Refill is simpler and faster - Support for instructions with overlapping opcodes (e.g. C.ADD + C.JALR)
Diffstat (limited to 'riscv/encoding.h')
-rw-r--r--riscv/encoding.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/riscv/encoding.h b/riscv/encoding.h
index 039ffdf..16a7792 100644
--- a/riscv/encoding.h
+++ b/riscv/encoding.h
@@ -225,6 +225,8 @@
#define MASK_C_ADD 0xf003
#define MATCH_C_ADDI 0xc002
#define MASK_C_ADDI 0xe003
+#define MATCH_C_ADDI16SP 0xa002
+#define MASK_C_ADDI16SP 0xef83
#define MATCH_C_ADDI4SPN 0x8000
#define MASK_C_ADDI4SPN 0xe003
#define MATCH_C_ADDIW 0xe002
@@ -235,6 +237,8 @@
#define MASK_C_BEQZ 0xe003
#define MATCH_C_BNEZ 0x6002
#define MASK_C_BNEZ 0xe003
+#define MATCH_C_EBREAK 0x1000
+#define MASK_C_EBREAK 0xffff
#define MATCH_C_FLD 0xa000
#define MASK_C_FLD 0xe003
#define MATCH_C_FLDSP 0xa001
@@ -255,6 +259,14 @@
#define MASK_C_J 0xe003
#define MATCH_C_JAL 0x2002
#define MASK_C_JAL 0xe003
+#define MATCH_C_JALR 0x1000
+#define MASK_C_JALR 0xf07f
+#define MATCH_C_JR 0x0
+#define MASK_C_JR 0xf07f
+#define MATCH_C_LD 0xe000
+#define MASK_C_LD 0xe003
+#define MATCH_C_LDSP 0xe001
+#define MASK_C_LDSP 0xe003
#define MATCH_C_LI 0x8002
#define MASK_C_LI 0xe003
#define MATCH_C_LUI 0xa002
@@ -265,6 +277,12 @@
#define MASK_C_LWSP 0xe003
#define MATCH_C_MV 0x0
#define MASK_C_MV 0xf003
+#define MATCH_C_NOP 0xc002
+#define MASK_C_NOP 0xffff
+#define MATCH_C_SD 0x6000
+#define MASK_C_SD 0xe003
+#define MATCH_C_SDSP 0x6001
+#define MASK_C_SDSP 0xe003
#define MATCH_C_SLLI 0x1
#define MASK_C_SLLI 0xe003
#define MATCH_C_SW 0x4000
@@ -646,11 +664,13 @@ DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU)
DECLARE_INSN(bne, MATCH_BNE, MASK_BNE)
DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD)
DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI)
+DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP)
DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN)
DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW)
DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW)
DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ)
DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)
+DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK)
DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD)
DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP)
DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW)
@@ -661,11 +681,18 @@ DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW)
DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP)
DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J)
DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL)
+DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR)
+DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR)
+DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD)
+DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP)
DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI)
DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI)
DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW)
DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP)
DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV)
+DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP)
+DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD)
+DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP)
DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI)
DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW)
DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP)