summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2015-07-22 05:16:51 +1200
committerScott Mansell <phiren@gmail.com>2015-07-22 05:16:51 +1200
commit9ae8e38a8aefbe357c5a425b3a09ff4f22eaf432 (patch)
treed8c5930da348ba17f8c5ba349014de5416b9a04a /Source/Core
parent53bc147b452ee74a1a9c92ebc7a2be71a2053d5b (diff)
parenta31ebb9bcd8365e19a1003032b8ed1ed30c7ed55 (diff)
Merge pull request #2717 from phire/fix-reordering
PPCAnalyst: Don't swap instruction which might cause interrupts.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/PPCAnalyst.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/PowerPC/PPCAnalyst.cpp
index cdd7fcc19b..f08b0f4216 100644
--- a/Source/Core/Core/PowerPC/PPCAnalyst.cpp
+++ b/Source/Core/Core/PowerPC/PPCAnalyst.cpp
@@ -250,6 +250,10 @@ static bool CanSwapAdjacentOps(const CodeOp &a, const CodeOp &b)
if (b_info->type != OPTYPE_INTEGER)
return false;
+ // And it's possible a might raise an interrupt too (fcmpo/fcmpu)
+ if (a_info->type != OPTYPE_INTEGER)
+ return false;
+
// Check that we have no register collisions.
// That is, check that none of b's outputs matches any of a's inputs,
// and that none of a's outputs matches any of b's inputs.