EXUの中のALU
・ALUの中のrv32iの命令の処理部分
→ rv32iAluの命令のみを固めてScalaのSeqに実装。
→M-extensionとかをサポートする際にはval aluにM用のSeqを足せばOK
val rv32iAlu = scala.collection.mutable.Seq(
(add || aluThrough) -> (rs1 + rs2),
(inst.slti || inst.slt) -> (rs1.asSInt() < rs2.asSInt()).asUInt(),
(inst.sltiu || inst.sltu) -> (rs1 < rs2),
inst.sub -> (rs1 - rs2),
(inst.andi || inst.and) -> (rs1 & rs2),
(inst.ori || inst.or) -> (rs1 | rs2),
(inst.xori || inst.xor) -> (rs1 ^ rs2),
(inst.slli || inst.sll) -> (rs1 << shamt)(cfg.arch.xlen - 1, 0),
(inst.srli || inst.srl) -> (rs1 >> shamt),
(inst.srai || inst.sra) -> (rs1.asSInt() >> shamt).asUInt(),
inst.lui -> inst.immU)
val alu = rv32iAlu // ++ Seq(他のextension)でALUを拡張できる