開発日記

Erlangをダラダラ書きます。

演算内容で命令分類してみた,RV32I編

add ... (rs1 || pc || 0) + (rs2 || imm)

  • LW

  • SW

  • ADD

  • ADDI

  • JAL

  • 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