From 277cec86f478a800ed3b169e9ef2a6041bd34d96 Mon Sep 17 00:00:00 2001 From: Danny Willems Date: Wed, 20 Nov 2024 17:16:14 +0100 Subject: [PATCH] o1vm/riscv32: implement M type instruction Mulhsu --- o1vm/src/interpreters/riscv32im/interpreter.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/o1vm/src/interpreters/riscv32im/interpreter.rs b/o1vm/src/interpreters/riscv32im/interpreter.rs index 59fa7a6bd2..b657699967 100644 --- a/o1vm/src/interpreters/riscv32im/interpreter.rs +++ b/o1vm/src/interpreters/riscv32im/interpreter.rs @@ -2258,7 +2258,17 @@ pub fn interpret_mtype(env: &mut Env, instr: MInstruction) env.set_next_instruction_pointer(next_instruction_pointer + Env::constant(4u32)); } MInstruction::Mulhsu => { - unimplemented!("Mulhsu") + let rs1 = env.read_register(&rs1); + let rs2 = env.read_register(&rs2); + // FIXME: constrain + let res = { + let pos = env.alloc_scratch(); + unsafe { env.mul_hi_signed_unsigned(&rs1, &rs2, pos) } + }; + env.write_register(&rd, res); + + env.set_instruction_pointer(next_instruction_pointer.clone()); + env.set_next_instruction_pointer(next_instruction_pointer + Env::constant(4u32)); } MInstruction::Mulhu => { let rs1 = env.read_register(&rs1);