small opt

This commit is contained in:
Logan McNaughton
2023-10-07 19:23:44 -06:00
parent 6fd82d6e91
commit cb96c84100
5 changed files with 9 additions and 25 deletions
+1
View File
@@ -127,6 +127,7 @@ impl Device {
gpr: [0; 32],
clock_rate: 0,
pc: 0xBFC00000,
pc_phys: 0,
llbit: false,
lo: 0,
hi: 0,
+2
View File
@@ -22,6 +22,7 @@ pub struct Cpu {
pub branch_state: BranchState,
pub gpr: [u64; 32],
pub pc: u64,
pub pc_phys: u64,
pub lo: u64,
pub hi: u64,
pub running: u8,
@@ -241,6 +242,7 @@ pub fn run(device: &mut device::Device) {
if err {
continue; // TLB exception
}
device.cpu.pc_phys = phys_address;
if cached {
device::cache::icache_fetch(device, phys_address)
} else {
+5 -21
View File
@@ -49,18 +49,10 @@ pub fn bits_above_mask<T: Into<u64>>(x: T) -> u64 {
}
pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) {
let (phys_address, _, err) = device::memory::translate_address(
device,
device.cpu.pc,
device::memory::AccessType::Lookup,
);
if err {
return;
}
if imm(opcode) as i16 == -1
&& device.memory.fast_read[(phys_address >> 16) as usize](
&& device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize](
device,
phys_address + 4,
device.cpu.pc_phys + 4,
device::memory::AccessSize::Word,
) == 0
{
@@ -69,18 +61,10 @@ pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) {
}
pub fn check_absolute_idle_loop(device: &mut device::Device, opcode: u32) {
let (phys_address, _, err) = device::memory::translate_address(
device,
device.cpu.pc,
device::memory::AccessType::Lookup,
);
if err {
return;
}
if (opcode & 0x3FFFFFF) as u64 == (phys_address & 0x0FFFFFFF) >> 2
&& device.memory.fast_read[(phys_address >> 16) as usize](
if (opcode & 0x3FFFFFF) as u64 == (device.cpu.pc_phys & 0x0FFFFFFF) >> 2
&& device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize](
device,
phys_address + 4,
device.cpu.pc_phys + 4,
device::memory::AccessSize::Word,
) == 0
{
-1
View File
@@ -24,7 +24,6 @@ pub const MM_IS_VIEWER: usize = 0x13ff0000;
pub enum AccessType {
Write,
Read,
Lookup,
}
#[derive(Copy, Clone)]
+1 -3
View File
@@ -261,9 +261,7 @@ pub fn get_physical_address(
}
}
if access_type != device::memory::AccessType::Lookup {
device::exceptions::tlb_miss_exception(device, address, access_type)
}
device::exceptions::tlb_miss_exception(device, address, access_type);
return (0, false, true);
}