mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-17 00:10:31 +02:00
x86jit: Flush floats together if possible.
This commit is contained in:
1 parent
9742aaaffe
commit
decccf199a
3 files changed
+72
-7
No files matched your search
@@ -437,19 +437,21 @@ void Arm64IRRegCache::FlushAll(bool gprs, bool fprs) {
|
||||
// Note: make sure not to change the registers when flushing:
|
||||
// Branching code may expect the armreg to retain its value.
|
||||
|
||||
auto needsFlush = [&](IRReg i) {
|
||||
if (mr[i].loc != MIPSLoc::MEM || mr[i].isStatic)
|
||||
return false;
|
||||
if (mr[i].nReg == -1 || !nr[mr[i].nReg].isDirty)
|
||||
return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
// Try to flush in pairs when possible.
|
||||
for (int i = 1; i < TOTAL_MAPPABLE_IRREGS - 1; ++i) {
|
||||
if (mr[i].loc == MIPSLoc::MEM || mr[i].loc == MIPSLoc::MEM || mr[i].isStatic || mr[i + 1].isStatic)
|
||||
if (!needsFlush(i) || !needsFlush(i + 1))
|
||||
continue;
|
||||
// Ignore multilane regs. Could handle with more smartness...
|
||||
if (mr[i].lane != -1 || mr[i + 1].lane != -1)
|
||||
continue;
|
||||
if (mr[i].nReg != -1 && !nr[mr[i].nReg].isDirty)
|
||||
continue;
|
||||
if (mr[i + 1].nReg != -1 && !nr[mr[i + 1].nReg].isDirty)
|
||||
continue;
|
||||
if (mr[i].loc == MIPSLoc::MEM || mr[i + 1].loc == MIPSLoc::MEM)
|
||||
continue;
|
||||
|
||||
int offset = GetMipsRegOffset(i);
|
||||
|
||||
|
||||
Reference in new issue
Block a user