only recalc mpu lut if it changed

This commit is contained in:
Jaklyy 2024-12-08 11:19:49 -05:00
parent 8209fdebb4
commit bda05a756e
1 changed files with 12 additions and 8 deletions

View File

@ -1459,7 +1459,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (1<<i)) UpdatePURegion(i); if (diff & (1<<i)) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1485,7 +1485,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (1<<i)) UpdatePURegion(i); if (diff & (1<<i)) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1512,7 +1512,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (1<<i)) UpdatePURegion(i); if (diff & (1<<i)) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1545,7 +1545,8 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i); if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); u32 diff = old ^ PU_DataRW;
if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1576,7 +1577,8 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i); if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); u32 diff = old ^ PU_CodeRW;
if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1600,7 +1602,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i); if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1624,7 +1626,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i); if (diff & (CP15_REGIONACCESS_REGIONMASK<<(i*CP15_REGIONACCESS_BITS_PER_REGION))) UpdatePURegion(i);
} }
#else #else
UpdatePURegions(true); if (diff) UpdatePURegions(true);
#endif #endif
} }
return; return;
@ -1647,7 +1649,9 @@ void ARMv5::CP15Write(u32 id, u32 val)
case 0x670: case 0x670:
case 0x671: case 0x671:
char log_output[1024]; char log_output[1024];
u32 old = PU_Region[(id >> 4) & 0xF];
PU_Region[(id >> 4) & 0xF] = val & ~(0x3F<<6); PU_Region[(id >> 4) & 0xF] = val & ~(0x3F<<6);
u32 diff = old ^ PU_Region[(id >> 4) & 0xF];
std::snprintf(log_output, std::snprintf(log_output,
sizeof(log_output), sizeof(log_output),
@ -1659,7 +1663,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
(val & 0x3E) >> 1 (val & 0x3E) >> 1
); );
// TODO: smarter region update for this? // TODO: smarter region update for this?
UpdatePURegions(true); if (diff) UpdatePURegions(true);
return; return;