From 2d09425ca1a6e8eb74cdcb47eff9ef41ba0a9fb9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 22:04:30 +0100 Subject: [PATCH] fix rsp reserved commands (#246) --- src/device/rsp_cpu.rs | 128 +++++++++++++++--------------- src/device/rsp_su_instructions.rs | 7 +- 2 files changed, 69 insertions(+), 66 deletions(-) diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 451f397c..fab7f516 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -288,70 +288,70 @@ pub fn map_instructions(device: &mut device::Device) { ]; device.rsp.cpu.special_instrs = [ - device::rsp_su_instructions::sll, // 0 - device::rsp_su_instructions::reserved, // 1 - device::rsp_su_instructions::srl, // 2 - device::rsp_su_instructions::sra, // 3 - device::rsp_su_instructions::sllv, // 4 - device::rsp_su_instructions::reserved, // 5 - device::rsp_su_instructions::srlv, // 6 - device::rsp_su_instructions::srav, // 7 - device::rsp_su_instructions::jr, // 8 - device::rsp_su_instructions::jalr, // 9 - device::rsp_su_instructions::reserved, // 10 - device::rsp_su_instructions::reserved, // 11 - device::rsp_su_instructions::reserved, // 12 - device::rsp_su_instructions::break_, // 13 - device::rsp_su_instructions::reserved, // 14 - device::rsp_su_instructions::reserved, // 15 - device::rsp_su_instructions::reserved, // 16 - device::rsp_su_instructions::reserved, // 17 - device::rsp_su_instructions::reserved, // 18 - device::rsp_su_instructions::reserved, // 19 - device::rsp_su_instructions::reserved, // 20 - device::rsp_su_instructions::reserved, // 21 - device::rsp_su_instructions::reserved, // 22 - device::rsp_su_instructions::reserved, // 23 - device::rsp_su_instructions::reserved, // 24 - device::rsp_su_instructions::reserved, // 25 - device::rsp_su_instructions::reserved, // 26 - device::rsp_su_instructions::reserved, // 27 - device::rsp_su_instructions::reserved, // 28 - device::rsp_su_instructions::reserved, // 29 - device::rsp_su_instructions::reserved, // 30 - device::rsp_su_instructions::reserved, // 31 - device::rsp_su_instructions::add, // 32 - device::rsp_su_instructions::addu, // 33 - device::rsp_su_instructions::sub, // 34 - device::rsp_su_instructions::subu, // 35 - device::rsp_su_instructions::and, // 36 - device::rsp_su_instructions::or, // 37 - device::rsp_su_instructions::xor, // 38 - device::rsp_su_instructions::nor, // 39 - device::rsp_su_instructions::reserved, // 40 - device::rsp_su_instructions::reserved, // 41 - device::rsp_su_instructions::slt, // 42 - device::rsp_su_instructions::sltu, // 43 - device::rsp_su_instructions::reserved, // 44 - device::rsp_su_instructions::reserved, // 45 - device::rsp_su_instructions::reserved, // 46 - device::rsp_su_instructions::reserved, // 47 - device::rsp_su_instructions::reserved, // 48 - device::rsp_su_instructions::reserved, // 49 - device::rsp_su_instructions::reserved, // 50 - device::rsp_su_instructions::reserved, // 51 - device::rsp_su_instructions::reserved, // 52 - device::rsp_su_instructions::reserved, // 53 - device::rsp_su_instructions::reserved, // 54 - device::rsp_su_instructions::reserved, // 55 - device::rsp_su_instructions::reserved, // 56 - device::rsp_su_instructions::reserved, // 57 - device::rsp_su_instructions::reserved, // 58 - device::rsp_su_instructions::reserved, // 59 - device::rsp_su_instructions::reserved, // 60 - device::rsp_su_instructions::reserved, // 61 - device::rsp_su_instructions::reserved, // 62 - device::rsp_su_instructions::reserved, // 63 + device::rsp_su_instructions::sll, // 0 + device::rsp_su_instructions::special_reserved, // 1 + device::rsp_su_instructions::srl, // 2 + device::rsp_su_instructions::sra, // 3 + device::rsp_su_instructions::sllv, // 4 + device::rsp_su_instructions::special_reserved, // 5 + device::rsp_su_instructions::srlv, // 6 + device::rsp_su_instructions::srav, // 7 + device::rsp_su_instructions::jr, // 8 + device::rsp_su_instructions::jalr, // 9 + device::rsp_su_instructions::special_reserved, // 10 + device::rsp_su_instructions::special_reserved, // 11 + device::rsp_su_instructions::special_reserved, // 12 + device::rsp_su_instructions::break_, // 13 + device::rsp_su_instructions::special_reserved, // 14 + device::rsp_su_instructions::special_reserved, // 15 + device::rsp_su_instructions::special_reserved, // 16 + device::rsp_su_instructions::special_reserved, // 17 + device::rsp_su_instructions::special_reserved, // 18 + device::rsp_su_instructions::special_reserved, // 19 + device::rsp_su_instructions::special_reserved, // 20 + device::rsp_su_instructions::special_reserved, // 21 + device::rsp_su_instructions::special_reserved, // 22 + device::rsp_su_instructions::special_reserved, // 23 + device::rsp_su_instructions::special_reserved, // 24 + device::rsp_su_instructions::special_reserved, // 25 + device::rsp_su_instructions::special_reserved, // 26 + device::rsp_su_instructions::special_reserved, // 27 + device::rsp_su_instructions::special_reserved, // 28 + device::rsp_su_instructions::special_reserved, // 29 + device::rsp_su_instructions::special_reserved, // 30 + device::rsp_su_instructions::special_reserved, // 31 + device::rsp_su_instructions::add, // 32 + device::rsp_su_instructions::addu, // 33 + device::rsp_su_instructions::sub, // 34 + device::rsp_su_instructions::subu, // 35 + device::rsp_su_instructions::and, // 36 + device::rsp_su_instructions::or, // 37 + device::rsp_su_instructions::xor, // 38 + device::rsp_su_instructions::nor, // 39 + device::rsp_su_instructions::special_reserved, // 40 + device::rsp_su_instructions::special_reserved, // 41 + device::rsp_su_instructions::slt, // 42 + device::rsp_su_instructions::sltu, // 43 + device::rsp_su_instructions::special_reserved, // 44 + device::rsp_su_instructions::special_reserved, // 45 + device::rsp_su_instructions::special_reserved, // 46 + device::rsp_su_instructions::special_reserved, // 47 + device::rsp_su_instructions::special_reserved, // 48 + device::rsp_su_instructions::special_reserved, // 49 + device::rsp_su_instructions::special_reserved, // 50 + device::rsp_su_instructions::special_reserved, // 51 + device::rsp_su_instructions::special_reserved, // 52 + device::rsp_su_instructions::special_reserved, // 53 + device::rsp_su_instructions::special_reserved, // 54 + device::rsp_su_instructions::special_reserved, // 55 + device::rsp_su_instructions::special_reserved, // 56 + device::rsp_su_instructions::special_reserved, // 57 + device::rsp_su_instructions::special_reserved, // 58 + device::rsp_su_instructions::special_reserved, // 59 + device::rsp_su_instructions::special_reserved, // 60 + device::rsp_su_instructions::special_reserved, // 61 + device::rsp_su_instructions::special_reserved, // 62 + device::rsp_su_instructions::special_reserved, // 63 ]; device.rsp.cpu.regimm_instrs = [ diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 07d0e9f1..36ef6fd8 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -1204,6 +1204,9 @@ pub fn stv(device: &mut device::Device, opcode: u32) { } } -pub fn reserved(_device: &mut device::Device, _opcode: u32) { - panic!("rsp su reserved") +pub fn special_reserved(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] >> (device.rsp.cpu.gpr[rs(opcode) as usize] & 31) } + +pub fn reserved(_device: &mut device::Device, _opcode: u32) {}