Disable swapping cmp with instructions potentially raising interrupts

Workaround for issue 5864 disabling parts of an optimization in the JIT. This
is not the best solution to fix this issue, but at least it does not crash.
This commit is contained in:
Pierre Bourdon 2013-01-08 00:00:30 +01:00
parent d0301ca89d
commit 8cfceb1186
1 changed files with 6 additions and 10 deletions

View File

@ -246,17 +246,13 @@ bool CanSwapAdjacentOps(const CodeOp &a, const CodeOp &b)
return false; return false;
} }
// For now, only integer ops acceptable. // For now, only integer ops acceptable. Any instruction which can raise an
switch (b_info->type) { // interrupt is *not* a possible swap candidate: see [1] for an example of
case OPTYPE_INTEGER: // a crash caused by this error.
case OPTYPE_LOAD: //
case OPTYPE_STORE: // [1] https://code.google.com/p/dolphin-emu/issues/detail?id=5864#c7
//case OPTYPE_LOADFP: if (b_info->type != OPTYPE_INTEGER)
//case OPTYPE_STOREFP:
break;
default:
return false; return false;
}
// Check that we have no register collisions. // Check that we have no register collisions.
// That is, check that none of b's outputs matches any of a's inputs, // That is, check that none of b's outputs matches any of a's inputs,