@@ -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