Finish RV64M
This commit is contained in:
@@ -32,7 +32,6 @@ pub(crate) fn find_and_exec(instr: Instruction, core: &mut Core) -> Result<(), E
|
||||
// OP
|
||||
(0b000, 0b0000000) => rvi::add(core, instr),
|
||||
(0b000, 0b0100000) => rvi::sub(core, instr),
|
||||
(0b000, 0b0000001) => rvm::mul(core, instr),
|
||||
(0b010, 0b0000000) => rvi::slt(core, instr),
|
||||
(0b011, 0b0000000) => rvi::sltu(core, instr),
|
||||
(0b001, 0b0000000) => rvi::sll(core, instr),
|
||||
@@ -40,8 +39,16 @@ pub(crate) fn find_and_exec(instr: Instruction, core: &mut Core) -> Result<(), E
|
||||
(0b101, 0b0100000) => rvi::sra(core, instr),
|
||||
(0b111, 0b0000000) => rvi::and(core, instr),
|
||||
(0b100, 0b0000000) => rvi::xor(core, instr),
|
||||
(0b100, 0b0000001) => rvm::div(core, instr),
|
||||
(0b110, 0b0000000) => rvi::or(core, instr),
|
||||
// rvm
|
||||
(0b000, 0b0000001) => rvm::mul(core, instr),
|
||||
(0b001, 0b0000001) => rvm::mulh(core, instr),
|
||||
(0b010, 0b0000001) => rvm::mulhsu(core, instr),
|
||||
(0b011, 0b0000001) => rvm::mulhu(core, instr),
|
||||
(0b100, 0b0000001) => rvm::div(core, instr),
|
||||
(0b101, 0b0000001) => rvm::divu(core, instr),
|
||||
(0b110, 0b0000001) => rvm::rem(core, instr),
|
||||
(0b111, 0b0000001) => rvm::remu(core, instr),
|
||||
_ => illegal(instr),
|
||||
},
|
||||
0b01110 => match (instr.funct3(), instr.funct7()) {
|
||||
@@ -51,6 +58,12 @@ pub(crate) fn find_and_exec(instr: Instruction, core: &mut Core) -> Result<(), E
|
||||
(0b001, 0b0000000) => rvi::sllw(core, instr),
|
||||
(0b101, 0b0000000) => rvi::srlw(core, instr),
|
||||
(0b101, 0b0100000) => rvi::sraw(core, instr),
|
||||
// rvm
|
||||
(0b000, 0b0000001) => rvm::mulw(core, instr),
|
||||
(0b100, 0b0000001) => rvm::divw(core, instr),
|
||||
(0b101, 0b0000001) => rvm::divuw(core, instr),
|
||||
(0b110, 0b0000001) => rvm::remw(core, instr),
|
||||
(0b111, 0b0000001) => rvm::remuw(core, instr),
|
||||
_ => illegal(instr),
|
||||
},
|
||||
0b00100 => match instr.funct3() {
|
||||
|
||||
Reference in New Issue
Block a user