mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-10 22:49:00 +01:00
PPCAnalyst: Run cror reordering after cmp reordering
We would rather have cror be close to the cmp than the branch.
This commit is contained in:
parent
40e0dd93be
commit
96d622bb61
@ -542,11 +542,6 @@ void PPCAnalyzer::ReorderInstructionsCore(u32 instructions, CodeOp* code, bool r
|
|||||||
|
|
||||||
void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code) const
|
void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code) const
|
||||||
{
|
{
|
||||||
// Reorder cror instructions upwards (e.g. towards an fcmp). Technically we should be more
|
|
||||||
// picky about this, but cror seems to almost solely be used for this purpose in real code.
|
|
||||||
// Additionally, the other boolean ops seem to almost never be used.
|
|
||||||
if (HasOption(OPTION_CROR_MERGE))
|
|
||||||
ReorderInstructionsCore(instructions, code, true, ReorderType::CROR);
|
|
||||||
// For carry, bubble instructions *towards* each other; one direction often isn't enough
|
// For carry, bubble instructions *towards* each other; one direction often isn't enough
|
||||||
// to get pairs like addc/adde next to each other.
|
// to get pairs like addc/adde next to each other.
|
||||||
if (HasOption(OPTION_CARRY_MERGE))
|
if (HasOption(OPTION_CARRY_MERGE))
|
||||||
@ -554,8 +549,16 @@ void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code) const
|
|||||||
ReorderInstructionsCore(instructions, code, false, ReorderType::Carry);
|
ReorderInstructionsCore(instructions, code, false, ReorderType::Carry);
|
||||||
ReorderInstructionsCore(instructions, code, true, ReorderType::Carry);
|
ReorderInstructionsCore(instructions, code, true, ReorderType::Carry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reorder instructions which write to CR (typically compare instructions) towards branches.
|
||||||
if (HasOption(OPTION_BRANCH_MERGE))
|
if (HasOption(OPTION_BRANCH_MERGE))
|
||||||
ReorderInstructionsCore(instructions, code, false, ReorderType::CMP);
|
ReorderInstructionsCore(instructions, code, false, ReorderType::CMP);
|
||||||
|
|
||||||
|
// Reorder cror instructions upwards (e.g. towards an fcmp). Technically we should be more
|
||||||
|
// picky about this, but cror seems to almost solely be used for this purpose in real code.
|
||||||
|
// Additionally, the other boolean ops seem to almost never be used.
|
||||||
|
if (HasOption(OPTION_CROR_MERGE))
|
||||||
|
ReorderInstructionsCore(instructions, code, true, ReorderType::CROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCAnalyzer::SetInstructionStats(CodeBlock* block, CodeOp* code,
|
void PPCAnalyzer::SetInstructionStats(CodeBlock* block, CodeOp* code,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user