Merge pull request #5120 from lioncash/const

JitBase: Make MergeAllowedNextInstructions a const member function
This commit is contained in:
Markus Wick 2017-03-21 20:16:26 +01:00 committed by GitHub
commit 5854047e3a
10 changed files with 17 additions and 17 deletions

View File

@ -492,7 +492,7 @@ void Jit64::FloatCompare(UGeckoInstruction inst, bool upper)
// Merge neighboring fcmp and cror (the primary use of cror).
UGeckoInstruction next = js.op[1].inst;
if (analyzer.HasOption(PPCAnalyst::PPCAnalyzer::OPTION_CROR_MERGE) &&
MergeAllowedNextInstructions(1) && next.OPCD == 19 && next.SUBOP10 == 449 &&
CanMergeNextInstructions(1) && next.OPCD == 19 && next.SUBOP10 == 449 &&
(next.CRBA >> 2) == crf && (next.CRBB >> 2) == crf && (next.CRBD >> 2) == crf)
{
js.skipInstructions = 1;

View File

@ -66,7 +66,7 @@ void Jit64::FinalizeCarry(CCFlags cond)
{
// Not actually merging instructions, but the effect is equivalent (we can't have
// breakpoints/etc in between).
if (MergeAllowedNextInstructions(1) && js.op[1].wantsCAInFlags)
if (CanMergeNextInstructions(1) && js.op[1].wantsCAInFlags)
{
if (cond == CC_C || cond == CC_NC)
{
@ -95,7 +95,7 @@ void Jit64::FinalizeCarry(bool ca)
js.carryFlagInverted = false;
if (js.op->wantsCA)
{
if (MergeAllowedNextInstructions(1) && js.op[1].wantsCAInFlags)
if (CanMergeNextInstructions(1) && js.op[1].wantsCAInFlags)
{
if (ca)
STC();
@ -343,7 +343,7 @@ bool Jit64::CheckMergedBranch(int crf)
if (!analyzer.HasOption(PPCAnalyst::PPCAnalyzer::OPTION_BRANCH_MERGE))
return false;
if (!MergeAllowedNextInstructions(1))
if (!CanMergeNextInstructions(1))
return false;
const UGeckoInstruction& next = js.op[1].inst;

View File

@ -110,7 +110,7 @@ void Jit64::lXXx(UGeckoInstruction inst)
// PowerPC has no 8-bit sign extended load, but x86 does, so merge extsb with the load if we find
// it.
if (MergeAllowedNextInstructions(1) && accessSize == 8 && js.op[1].inst.OPCD == 31 &&
if (CanMergeNextInstructions(1) && accessSize == 8 && js.op[1].inst.OPCD == 31 &&
js.op[1].inst.SUBOP10 == 954 && js.op[1].inst.RS == inst.RD && js.op[1].inst.RA == inst.RD &&
!js.op[1].inst.Rc)
{
@ -119,7 +119,7 @@ void Jit64::lXXx(UGeckoInstruction inst)
signExtend = true;
}
if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && MergeAllowedNextInstructions(2) &&
if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && CanMergeNextInstructions(2) &&
(inst.hex & 0xFFFF0000) == 0x800D0000 &&
(js.op[1].inst.hex == 0x28000000 ||
(SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) &&
@ -318,7 +318,7 @@ void Jit64::dcbt(UGeckoInstruction inst)
// This is important because invalidating the block cache when we don't
// need to is terrible for performance.
// (Invalidating the jit block cache on dcbst is a heuristic.)
if (MergeAllowedNextInstructions(1) && js.op[1].inst.OPCD == 31 && js.op[1].inst.SUBOP10 == 54 &&
if (CanMergeNextInstructions(1) && js.op[1].inst.OPCD == 31 && js.op[1].inst.SUBOP10 == 54 &&
js.op[1].inst.RA == inst.RA && js.op[1].inst.RB == inst.RB)
{
js.skipInstructions = 1;

View File

@ -314,7 +314,7 @@ void Jit64::mfspr(UGeckoInstruction inst)
ADD(64, R(RAX), R(RDX));
MOV(64, PPCSTATE(spr[SPR_TL]), R(RAX));
if (MergeAllowedNextInstructions(1))
if (CanMergeNextInstructions(1))
{
const UGeckoInstruction& next = js.op[1].inst;
// Two calls of TU/TL next to each other are extremely common in typical usage, so merge them

View File

@ -834,7 +834,7 @@ void JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBlock*
}
CompileInstruction(ops[i]);
if (!MergeAllowedNextInstructions(1) || js.op[1].opinfo->type != OPTYPE_INTEGER)
if (!CanMergeNextInstructions(1) || js.op[1].opinfo->type != OPTYPE_INTEGER)
FlushCarry();
// If we have a register that will never be used again, flush it.

View File

@ -73,7 +73,7 @@ void JitArm64::ComputeCarry()
return;
js.carryFlagSet = true;
if (MergeAllowedNextInstructions(1) && js.op[1].opinfo->type == OPTYPE_INTEGER)
if (CanMergeNextInstructions(1) && js.op[1].opinfo->type == OPTYPE_INTEGER)
{
return;
}
@ -575,7 +575,7 @@ void JitArm64::srawix(UGeckoInstruction inst)
int a = inst.RA;
int s = inst.RS;
int amount = inst.SH;
bool inplace_carry = MergeAllowedNextInstructions(1) && js.op[1].wantsCAInFlags;
bool inplace_carry = CanMergeNextInstructions(1) && js.op[1].wantsCAInFlags;
if (gpr.IsImm(s))
{
@ -1286,7 +1286,7 @@ void JitArm64::srawx(UGeckoInstruction inst)
JITDISABLE(bJITIntegerOff);
int a = inst.RA, b = inst.RB, s = inst.RS;
bool inplace_carry = MergeAllowedNextInstructions(1) && js.op[1].wantsCAInFlags;
bool inplace_carry = CanMergeNextInstructions(1) && js.op[1].wantsCAInFlags;
if (gpr.IsImm(b) && gpr.IsImm(s))
{

View File

@ -374,7 +374,7 @@ void JitArm64::lXX(UGeckoInstruction inst)
SafeLoadToReg(d, update ? a : (a ? a : -1), offsetReg, flags, offset, update);
// LWZ idle skipping
if (inst.OPCD == 32 && MergeAllowedNextInstructions(2) &&
if (inst.OPCD == 32 && CanMergeNextInstructions(2) &&
(inst.hex & 0xFFFF0000) == 0x800D0000 && // lwz r0, XXXX(r13)
(js.op[1].inst.hex == 0x28000000 ||
(SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) && // cmpXwi r0,0
@ -645,7 +645,7 @@ void JitArm64::dcbt(UGeckoInstruction inst)
// This is important because invalidating the block cache when we don't
// need to is terrible for performance.
// (Invalidating the jit block cache on dcbst is a heuristic.)
if (MergeAllowedNextInstructions(1) && js.op[1].inst.OPCD == 31 && js.op[1].inst.SUBOP10 == 54 &&
if (CanMergeNextInstructions(1) && js.op[1].inst.OPCD == 31 && js.op[1].inst.SUBOP10 == 54 &&
js.op[1].inst.RA == inst.RA && js.op[1].inst.RB == inst.RB)
{
js.skipInstructions = 1;

View File

@ -283,7 +283,7 @@ void JitArm64::mfspr(UGeckoInstruction inst)
ADD(XA, XB, XA, ArithOption(XA, ST_LSR, 3));
STR(INDEX_UNSIGNED, XA, PPC_REG, PPCSTATE_OFF(spr[SPR_TL]));
if (MergeAllowedNextInstructions(1))
if (CanMergeNextInstructions(1))
{
const UGeckoInstruction& next = js.op[1].inst;
// Two calls of TU/TL next to each other are extremely common in typical usage, so merge them

View File

@ -27,7 +27,7 @@ JitBase::JitBase() = default;
JitBase::~JitBase() = default;
bool JitBase::MergeAllowedNextInstructions(int count)
bool JitBase::CanMergeNextInstructions(int count) const
{
if (CPU::GetState() == CPU::CPU_STEPPING || js.instructionsLeft < count)
return false;

View File

@ -104,7 +104,7 @@ protected:
PPCAnalyst::CodeBlock code_block;
PPCAnalyst::PPCAnalyzer analyzer;
bool MergeAllowedNextInstructions(int count);
bool CanMergeNextInstructions(int count) const;
void UpdateMemoryOptions();