From ca478bfb58586b83b70292660774cd12843ca03f Mon Sep 17 00:00:00 2001 From: Angell Li Date: Wed, 9 Apr 2025 23:44:17 +0800 Subject: [PATCH 1/2] fix: dest register for ins instruction --- emulator/src/state.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/emulator/src/state.rs b/emulator/src/state.rs index 1b312c8f..52d0f95d 100644 --- a/emulator/src/state.rs +++ b/emulator/src/state.rs @@ -1091,10 +1091,13 @@ impl InstrumentedState { let mut rs = self.state.registers[((insn >> 21) & 0x1f) as usize]; let mut rd_reg = rt_reg; let fun = insn & 0x3f; - if opcode == 0 || opcode == 0x1c || (opcode == 0x1F && (fun == 0x20 || fun == 4)) { - // R-type (stores rd), partial Special3 insts: ins, seb, seh, wsbh + if opcode == 0 || opcode == 0x1c || (opcode == 0x1F && fun == 0x20) { + // R-type (stores rd), partial Special3 insts: seb, seh, wsbh rt = self.state.registers[rt_reg as usize]; rd_reg = (insn >> 11) & 0x1f; + } else if opcode == 0x1F && fun == 0x4 { // ins + rt = self.state.registers[rt_reg as usize]; + rd_reg = rt_reg; } else if opcode < 0x20 { // rt is SignExtImm // don't sign extend for andi, ori, xori From b966b738c384c9342a2252e2fbdd32d438d2476e Mon Sep 17 00:00:00 2001 From: Angell Li Date: Wed, 9 Apr 2025 23:51:23 +0800 Subject: [PATCH 2/2] Ofix fmt --- emulator/src/state.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emulator/src/state.rs b/emulator/src/state.rs index 52d0f95d..afb88bda 100644 --- a/emulator/src/state.rs +++ b/emulator/src/state.rs @@ -1095,7 +1095,8 @@ impl InstrumentedState { // R-type (stores rd), partial Special3 insts: seb, seh, wsbh rt = self.state.registers[rt_reg as usize]; rd_reg = (insn >> 11) & 0x1f; - } else if opcode == 0x1F && fun == 0x4 { // ins + } else if opcode == 0x1F && fun == 0x4 { + // ins read/write rt rt = self.state.registers[rt_reg as usize]; rd_reg = rt_reg; } else if opcode < 0x20 {