mirror of https://github.com/PCSX2/pcsx2.git
microVU: minor changes
- Added mVUcacheInitReserve and mVUcacheMaxReserve constant values for now which can be tinkered with until we implement runtime user-modifiable cache reserve-sizes. - Improved the "microVU - cached program" printouts on dev builds. pcsx2: - Fixed the typos in SysOutOfMemory_EmergencyResponse() git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4087 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
f68eb19543
commit
e38a0ba32d
|
@ -130,25 +130,25 @@ void SysOutOfMemory_EmergencyResponse(uptr blocksize)
|
||||||
|
|
||||||
if (Cpu)
|
if (Cpu)
|
||||||
{
|
{
|
||||||
Cpu->SetCacheReserve( (Cpu->GetCacheReserve() * 3) / 2 );
|
Cpu->SetCacheReserve( (Cpu->GetCacheReserve() * 2) / 3 );
|
||||||
Cpu->Reset();
|
Cpu->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CpuVU0)
|
if (CpuVU0)
|
||||||
{
|
{
|
||||||
CpuVU0->SetCacheReserve( (CpuVU0->GetCacheReserve() * 3) / 2 );
|
CpuVU0->SetCacheReserve( (CpuVU0->GetCacheReserve() * 2) / 3 );
|
||||||
CpuVU0->Reset();
|
CpuVU0->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CpuVU1)
|
if (CpuVU1)
|
||||||
{
|
{
|
||||||
CpuVU1->SetCacheReserve( (CpuVU1->GetCacheReserve() * 3) / 2 );
|
CpuVU1->SetCacheReserve( (CpuVU1->GetCacheReserve() * 2) / 3 );
|
||||||
CpuVU1->Reset();
|
CpuVU1->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psxCpu)
|
if (psxCpu)
|
||||||
{
|
{
|
||||||
psxCpu->SetCacheReserve( (psxCpu->GetCacheReserve() * 3) / 2 );
|
psxCpu->SetCacheReserve( (psxCpu->GetCacheReserve() * 2) / 3 );
|
||||||
psxCpu->Reset();
|
psxCpu->Reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,8 +148,7 @@ void microVU::reset() {
|
||||||
prog.x86end = z + ((cacheSize - mVUcacheSafeZone) * _1mb);
|
prog.x86end = z + ((cacheSize - mVUcacheSafeZone) * _1mb);
|
||||||
|
|
||||||
for (u32 i = 0; i < (progSize / 2); i++) {
|
for (u32 i = 0; i < (progSize / 2); i++) {
|
||||||
if (!prog.prog[i])
|
if(!prog.prog[i]) {
|
||||||
{
|
|
||||||
prog.prog[i] = new deque<microProgram*>();
|
prog.prog[i] = new deque<microProgram*>();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -186,10 +185,10 @@ void microVU::close() {
|
||||||
|
|
||||||
// Clears Block Data in specified range
|
// Clears Block Data in specified range
|
||||||
static __fi void mVUclear(mV, u32 addr, u32 size) {
|
static __fi void mVUclear(mV, u32 addr, u32 size) {
|
||||||
if (!mVU->prog.cleared) {
|
if(!mVU->prog.cleared) {
|
||||||
memzero(mVU->prog.lpState); // Clear pipeline state
|
|
||||||
mVU->prog.cleared = 1; // Next execution searches/creates a new microprogram
|
mVU->prog.cleared = 1; // Next execution searches/creates a new microprogram
|
||||||
for (u32 i = 0; i < (mVU->progSize / 2); i++) {
|
memzero(mVU->prog.lpState); // Clear pipeline state
|
||||||
|
for(u32 i = 0; i < (mVU->progSize / 2); i++) {
|
||||||
mVU->prog.quick[i].block = NULL; // Clear current quick-reference block
|
mVU->prog.quick[i].block = NULL; // Clear current quick-reference block
|
||||||
mVU->prog.quick[i].prog = NULL; // Clear current quick-reference prog
|
mVU->prog.quick[i].prog = NULL; // Clear current quick-reference prog
|
||||||
}
|
}
|
||||||
|
@ -225,10 +224,11 @@ _mVUt __fi microProgram* mVUcreateProg(int startPC) {
|
||||||
prog->startPC = startPC;
|
prog->startPC = startPC;
|
||||||
mVUcacheProg<vuIndex>(*prog); // Cache Micro Program
|
mVUcacheProg<vuIndex>(*prog); // Cache Micro Program
|
||||||
double cacheSize = (double)((u32)mVU->prog.x86end - (u32)mVU->prog.x86start);
|
double cacheSize = (double)((u32)mVU->prog.x86end - (u32)mVU->prog.x86start);
|
||||||
double cacheUsed =((double)((u32)mVU->prog.x86ptr - (u32)mVU->prog.x86start)) / cacheSize * 100;
|
double cacheUsed =((double)((u32)mVU->prog.x86ptr - (u32)mVU->prog.x86start)) / (double)_1mb;
|
||||||
|
double cachePerc =((double)((u32)mVU->prog.x86ptr - (u32)mVU->prog.x86start)) / cacheSize * 100;
|
||||||
ConsoleColors c = vuIndex ? Color_Orange : Color_Magenta;
|
ConsoleColors c = vuIndex ? Color_Orange : Color_Magenta;
|
||||||
DevCon.WriteLn(c, "microVU%d: Cached MicroPrograms = [%03d] [PC=%04x] [List=%02d] (Cache = %3.3f%%)",
|
DevCon.WriteLn(c, "microVU%d: Cached Prog = [%03d] [PC=%04x] [List=%02d] (Cache=%3.3f%%) [%3.1fmb]",
|
||||||
vuIndex, prog->idx, startPC, mVU->prog.prog[startPC]->size()+1, cacheUsed);
|
vuIndex, prog->idx, startPC*8, mVU->prog.prog[startPC]->size()+1, cachePerc, cacheUsed);
|
||||||
return prog;
|
return prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,9 +372,11 @@ uint recMicroVU1::GetCacheReserve() const
|
||||||
|
|
||||||
void recMicroVU0::SetCacheReserve( uint reserveInMegs ) const
|
void recMicroVU0::SetCacheReserve( uint reserveInMegs ) const
|
||||||
{
|
{
|
||||||
microVU0.cacheSize = reserveInMegs;
|
DevCon.WriteLn("microVU0: Upping cache size [%dmb]", reserveInMegs);
|
||||||
|
microVU0.cacheSize = min(reserveInMegs, mVUcacheMaxReserve);
|
||||||
}
|
}
|
||||||
void recMicroVU1::SetCacheReserve( uint reserveInMegs ) const
|
void recMicroVU1::SetCacheReserve( uint reserveInMegs ) const
|
||||||
{
|
{
|
||||||
microVU1.cacheSize = reserveInMegs;
|
DevCon.WriteLn("microVU1: Upping cache size [%dmb]", reserveInMegs);
|
||||||
|
microVU1.cacheSize = min(reserveInMegs, mVUcacheMaxReserve);
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,8 +149,10 @@ struct microProgManager {
|
||||||
microRegInfo lpState; // Pipeline state from where program left off (useful for continuing execution)
|
microRegInfo lpState; // Pipeline state from where program left off (useful for continuing execution)
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint mVUdispCacheSize = __pagesize; // Dispatcher Cache Size (in bytes)
|
static const uint mVUdispCacheSize = __pagesize; // Dispatcher Cache Size (in bytes)
|
||||||
static const uint mVUcacheSafeZone = 3; // Safe-Zone for program recompilation (in megabytes)
|
static const uint mVUcacheSafeZone = 3; // Safe-Zone for program recompilation (in megabytes)
|
||||||
|
static const uint mVUcacheInitReserve = 64; // Initial Reserve Cache Size (in megabytes)
|
||||||
|
static const uint mVUcacheMaxReserve = 128; // Max Reserve Cache Size (in megabytes)
|
||||||
|
|
||||||
struct microVU {
|
struct microVU {
|
||||||
|
|
||||||
|
@ -196,7 +198,7 @@ struct microVU {
|
||||||
__fi VECTOR& getVF(uint reg) const { return regs().VF[reg]; }
|
__fi VECTOR& getVF(uint reg) const { return regs().VF[reg]; }
|
||||||
|
|
||||||
|
|
||||||
__fi s16 Imm5() const { return ((code & 0x400) ? 0xfff0 : 0) | ((code >> 6) & 0xf); }
|
__fi s16 Imm5() const { return ((code & 0x400) ? 0xfff0 : 0) | ((code >> 6) & 0xf); }
|
||||||
__fi s32 Imm11() const { return (code & 0x400) ? (0xfffffc00 | (code & 0x3ff)) : (code & 0x3ff); }
|
__fi s32 Imm11() const { return (code & 0x400) ? (0xfffffc00 | (code & 0x3ff)) : (code & 0x3ff); }
|
||||||
__fi u32 Imm12() const { return (((code >> 21) & 0x1) << 11) | (code & 0x7ff); }
|
__fi u32 Imm12() const { return (((code >> 21) & 0x1) << 11) | (code & 0x7ff); }
|
||||||
__fi u32 Imm15() const { return ((code >> 10) & 0x7800) | (code & 0x7ff); }
|
__fi u32 Imm15() const { return ((code >> 10) & 0x7800) | (code & 0x7ff); }
|
||||||
|
@ -225,7 +227,7 @@ struct microVU {
|
||||||
|
|
||||||
microVU()
|
microVU()
|
||||||
{
|
{
|
||||||
cacheSize = 64;
|
cacheSize = mVUcacheInitReserve;
|
||||||
cache = NULL;
|
cache = NULL;
|
||||||
dispCache = NULL;
|
dispCache = NULL;
|
||||||
startFunct = NULL;
|
startFunct = NULL;
|
||||||
|
|
Loading…
Reference in New Issue