Skip to content

Commit dcb3540

Browse files
committed
feat(decode): implement RV64I shift instructions
1 parent 1527aba commit dcb3540

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

sim/src/decode.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,15 @@ void decode_exec(Decode *s){
8585
// SLTI, SLTIU
8686
INSTPAT("??????? ????? ????? 010 ????? 00100 11", slti , I, R(rd) = (int64_t)src1 < (int64_t)imm);
8787
INSTPAT("??????? ????? ????? 011 ????? 00100 11", sltiu , I, R(rd) = src1 < imm);
88-
// SLLI, SRLI, SRAI
89-
INSTPAT("0000000 ????? ????? 001 ????? 00100 11", slli , I, R(rd) = src1 << (imm & 0x3f));
90-
INSTPAT("0000000 ????? ????? 101 ????? 00100 11", srli , I, R(rd) = src1 >> (imm & 0x3f));
91-
INSTPAT("0100000 ????? ????? 101 ????? 00100 11", srai , I, R(rd) = (int64_t)src1 >> (imm & 0x3f));
88+
// SLLI, SRLI, SRAI, SLLIW, SRLIW, SRAIW
89+
INSTPAT("000000? ????? ????? 001 ????? 00100 11", slli , I, R(rd) = src1 << (imm & 0x3f));
90+
INSTPAT("000000? ????? ????? 101 ????? 00100 11", srli , I, R(rd) = src1 >> (imm & 0x3f));
91+
INSTPAT("010000? ????? ????? 101 ????? 00100 11", srai , I, R(rd) = (int64_t)src1 >> (imm & 0x3f));
92+
INSTPAT("0000000 ????? ????? 001 ????? 00110 11", slliw , I, R(rd) = SEXT((uint32_t)src1 << (imm & 0x1f), 32));
93+
INSTPAT("0000000 ????? ????? 101 ????? 00110 11", srliw , I, R(rd) = SEXT((uint32_t)src1 >> (imm & 0x1f), 32));
94+
INSTPAT("0100000 ????? ????? 101 ????? 00110 11", sraiw , I, R(rd) = SEXT((int32_t)src1 >> (imm & 0x1f), 32));
9295
// XORI, ORI, ANDI
9396
// ADDIW
94-
// SLLI, SRLI, SRAI, SLLIW, SRLIW, SRAIW
9597
// ADD, SUB, SLL, SLT, SLTU, XOR, SRL, SRA, OR, AND
9698
// ADDW, SUBW, SLLW, SRLW, SRAW
9799
// FENCE, FENCE.I

0 commit comments

Comments
 (0)