PPCAnalyzer: Most member functions can be const.
This commit is contained in:
parent
d6331c1e71
commit
b3a3ecd2b4
|
@ -192,7 +192,7 @@ static void AnalyzeFunction2(Common::Symbol* func)
|
||||||
func->flags = flags;
|
func->flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PPCAnalyzer::CanSwapAdjacentOps(const CodeOp& a, const CodeOp& b)
|
bool PPCAnalyzer::CanSwapAdjacentOps(const CodeOp& a, const CodeOp& b) const
|
||||||
{
|
{
|
||||||
const GekkoOPInfo* a_info = a.opinfo;
|
const GekkoOPInfo* a_info = a.opinfo;
|
||||||
const GekkoOPInfo* b_info = b.opinfo;
|
const GekkoOPInfo* b_info = b.opinfo;
|
||||||
|
@ -451,7 +451,7 @@ static bool isCror(const CodeOp& a)
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCAnalyzer::ReorderInstructionsCore(u32 instructions, CodeOp* code, bool reverse,
|
void PPCAnalyzer::ReorderInstructionsCore(u32 instructions, CodeOp* code, bool reverse,
|
||||||
ReorderType type)
|
ReorderType type) const
|
||||||
{
|
{
|
||||||
// Bubbling an instruction sometimes reveals another opportunity to bubble an instruction, so do
|
// Bubbling an instruction sometimes reveals another opportunity to bubble an instruction, so do
|
||||||
// multiple passes.
|
// multiple passes.
|
||||||
|
@ -502,7 +502,7 @@ void PPCAnalyzer::ReorderInstructionsCore(u32 instructions, CodeOp* code, bool r
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code)
|
void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code) const
|
||||||
{
|
{
|
||||||
// Reorder cror instructions upwards (e.g. towards an fcmp). Technically we should be more
|
// 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.
|
// picky about this, but cror seems to almost solely be used for this purpose in real code.
|
||||||
|
@ -521,7 +521,7 @@ void PPCAnalyzer::ReorderInstructions(u32 instructions, CodeOp* code)
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCAnalyzer::SetInstructionStats(CodeBlock* block, CodeOp* code, const GekkoOPInfo* opinfo,
|
void PPCAnalyzer::SetInstructionStats(CodeBlock* block, CodeOp* code, const GekkoOPInfo* opinfo,
|
||||||
u32 index)
|
u32 index) const
|
||||||
{
|
{
|
||||||
code->wantsCR0 = false;
|
code->wantsCR0 = false;
|
||||||
code->wantsCR1 = false;
|
code->wantsCR1 = false;
|
||||||
|
@ -684,7 +684,7 @@ void PPCAnalyzer::SetInstructionStats(CodeBlock* block, CodeOp* code, const Gekk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PPCAnalyzer::IsBusyWaitLoop(CodeBlock* block, CodeOp* code, size_t instructions)
|
bool PPCAnalyzer::IsBusyWaitLoop(CodeBlock* block, CodeOp* code, size_t instructions) const
|
||||||
{
|
{
|
||||||
// Very basic algorithm to detect busy wait loops:
|
// Very basic algorithm to detect busy wait loops:
|
||||||
// * It loops to itself and does not contain any other branches.
|
// * It loops to itself and does not contain any other branches.
|
||||||
|
@ -737,7 +737,8 @@ bool PPCAnalyzer::IsBusyWaitLoop(CodeBlock* block, CodeOp* code, size_t instruct
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, std::size_t block_size)
|
u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer,
|
||||||
|
std::size_t block_size) const
|
||||||
{
|
{
|
||||||
// Clear block stats
|
// Clear block stats
|
||||||
*block->m_stats = {};
|
*block->m_stats = {};
|
||||||
|
|
|
@ -216,7 +216,7 @@ public:
|
||||||
void ClearOption(AnalystOption option) { m_options &= ~(option); }
|
void ClearOption(AnalystOption option) { m_options &= ~(option); }
|
||||||
bool HasOption(AnalystOption option) const { return !!(m_options & option); }
|
bool HasOption(AnalystOption option) const { return !!(m_options & option); }
|
||||||
void SetDebuggingEnabled(bool enabled) { m_is_debugging_enabled = enabled; }
|
void SetDebuggingEnabled(bool enabled) { m_is_debugging_enabled = enabled; }
|
||||||
u32 Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, std::size_t block_size);
|
u32 Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, std::size_t block_size) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class ReorderType
|
enum class ReorderType
|
||||||
|
@ -226,11 +226,13 @@ private:
|
||||||
CROR
|
CROR
|
||||||
};
|
};
|
||||||
|
|
||||||
bool CanSwapAdjacentOps(const CodeOp& a, const CodeOp& b);
|
bool CanSwapAdjacentOps(const CodeOp& a, const CodeOp& b) const;
|
||||||
void ReorderInstructionsCore(u32 instructions, CodeOp* code, bool reverse, ReorderType type);
|
void ReorderInstructionsCore(u32 instructions, CodeOp* code, bool reverse,
|
||||||
void ReorderInstructions(u32 instructions, CodeOp* code);
|
ReorderType type) const;
|
||||||
void SetInstructionStats(CodeBlock* block, CodeOp* code, const GekkoOPInfo* opinfo, u32 index);
|
void ReorderInstructions(u32 instructions, CodeOp* code) const;
|
||||||
bool IsBusyWaitLoop(CodeBlock* block, CodeOp* code, size_t instructions);
|
void SetInstructionStats(CodeBlock* block, CodeOp* code, const GekkoOPInfo* opinfo,
|
||||||
|
u32 index) const;
|
||||||
|
bool IsBusyWaitLoop(CodeBlock* block, CodeOp* code, size_t instructions) const;
|
||||||
|
|
||||||
// Options
|
// Options
|
||||||
u32 m_options = 0;
|
u32 m_options = 0;
|
||||||
|
|
Loading…
Reference in New Issue