演算内容で命令分類してみた,RV32I編
- add ... (rs1 || pc || 0) + (rs2 || imm)
- sub ... rs1 - rs2
- and ... rs1 & rs2
- or ... rs1 | rs2
- xor ... rs1 ^ rs2
- sll ... (op1 << op2(4, 0))(31, 0)
- srl ... (op1 >> op2(4, 0)).asUInt()
- sra ... (op1.asSInt() >> op2(4, 0)).asUInt()
- slt ... (op1.asSInt() < op2.asSInt()).asUInt()
- sltu ... (op1 < op2).asUInt()
- beq ... (op1 === op2)
- bne ... !(op1 === op2)
- blt ... (op1.asSInt() < op2.asSInt())
- bge ... !(op1.asSInt() < op2.asSInt())
- bltu ... (op1 < op2)
- bgeu ... !(op1 < op2)
- jalr ... (op1 + op2) & !(1.U(32.W))
- copy ... rs1
- ecall
add ... (rs1 || pc || 0) + (rs2 || imm)
LW
SW
ADD
ADDI
LUI
AUIPC
sub ... rs1 - rs2
- SUB
and ... rs1 & rs2
AND
ANDI
or ... rs1 | rs2
OR
ORI
xor ... rs1 ^ rs2
XOR
XORI
sll ... (op1 << op2(4, 0))(31, 0)
SLL
SLLI
srl ... (op1 >> op2(4, 0)).asUInt()
SRL
SRLI
sra ... (op1.asSInt() >> op2(4, 0)).asUInt()
SRA
SRAI
slt ... (op1.asSInt() < op2.asSInt()).asUInt()
SLT
SLTI
sltu ... (op1 < op2).asUInt()
SLTU
SLTIU
beq ... (op1 === op2)
- BEQ
bne ... !(op1 === op2)
- BNE
blt ... (op1.asSInt() < op2.asSInt())
- BLT
bge ... !(op1.asSInt() < op2.asSInt())
- BGE
bltu ... (op1 < op2)
- BLTU
bgeu ... !(op1 < op2)
- BGEU
jalr ... (op1 + op2) & !(1.U(32.W))
- JALR
copy ... rs1
CSRRW
CSRRWI
CSRRS
CSRRSI
CSRRC
CSRRCI
ecall
ECALL