diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-09-08 15:09:23 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-09-08 17:00:02 -0700 |
commit | 71d04ecd7ab631193a0943f8ddae222090d8e048 (patch) | |
tree | 91a80a22da66a18d28bc79c39d26111e69fab26a /riscv/encoding.h | |
parent | 26d7f0f08e861335dc7bb2b51759c2206915a25a (diff) | |
download | spike-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.h | 27 |
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) |