summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2021-05-15 18:00:56 +0200
committerJosJuice <josjuice@gmail.com>2021-05-15 23:27:33 +0200
commit66e912a252b2a36f01a2c8b4fa6274fe46cdf046 (patch)
treeb91cef3133237489776aedd0ed1cc08792445697 /Source/Core
parent77afb0f4c3179973c3486695db4fa8d4cabce15d (diff)
PPCAnalyst: Treat frspx output as single
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/PPCAnalyst.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/PowerPC/PPCAnalyst.cpp
index 0f317adb99..3761f9eb76 100644
--- a/Source/Core/Core/PowerPC/PPCAnalyst.cpp
+++ b/Source/Core/Core/PowerPC/PPCAnalyst.cpp
@@ -991,7 +991,7 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, std:
bitexact_inputs[op.inst.FC] = true;
}
- if (op.opinfo->type == OpType::SingleFP)
+ if (op.opinfo->type == OpType::SingleFP || !strncmp(op.opinfo->opname, "frsp", 4))
{
fprIsSingle[op.fregOut] = true;
fprIsDuplicated[op.fregOut] = true;
@@ -1039,8 +1039,9 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, std:
// TODO: if we go directly from a load to a float instruction, and the value isn't used
// for anything else, we can use fast single -> double conversion after the load.
- fprIsStoreSafe[op.fregOut] =
- (op.opinfo->type == OpType::SingleFP || op.opinfo->type == OpType::PS);
+ fprIsStoreSafe[op.fregOut] = op.opinfo->type == OpType::SingleFP ||
+ op.opinfo->type == OpType::PS ||
+ !strncmp(op.opinfo->opname, "frsp", 4);
}
}
op.fprIsStoreSafeAfterInst = fprIsStoreSafe;