Fix to VFPU register allocation. Fixes #7174

GetFreeXRegs(_,_,true) invalidates registers it can see on spill,
but it can't see all the registers in the array due to how we call it
so we have to invalidate the rest ourselves.  Not doing so can get it
to use the same register twice.
This commit is contained in:
Bovine 2014-12-23 03:39:50 -07:00
parent eaa1f0c23d
commit a9b7656f93
2 changed files with 4 additions and 1 deletions

View File

@ -121,7 +121,7 @@ JitOptions::JitOptions()
continueBranches = false; continueBranches = false;
continueJumps = false; continueJumps = false;
continueMaxInstructions = 300; continueMaxInstructions = 300;
enableVFPUSIMD = false; enableVFPUSIMD = true;
// Set by Asm if needed. // Set by Asm if needed.
reserveR15ForAsm = false; reserveR15ForAsm = false;
} }

View File

@ -354,6 +354,9 @@ X64Reg FPURegCache::LoadRegsVS(const u8 *v, int n) {
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
xrsLoaded[i] = false; xrsLoaded[i] = false;
} }
for (int i = 2; i < n; ++i){
xrs[i] = INVALID_REG;
}
regsLoaded = 0; regsLoaded = 0;
} }