Reoder eight bit adds

This commit is contained in:
drmortalwombat 2022-01-05 20:06:25 +01:00
parent d4a9308627
commit d2511b558c
2 changed files with 62 additions and 0 deletions

View File

@ -3411,6 +3411,53 @@ void InterCodeBasicBlock::SimplifyIntegerRangeRelops(void)
}
}
}
#endif
#if 1
for (int i = 0; i < sz; i++)
{
if (i + 1 < sz)
{
if (
mInstructions[i + 0]->mCode == IC_LEA && mInstructions[i + 0]->mSrc[1].mTemp >= 0 &&
mInstructions[i + 1]->mCode == IC_LEA &&
mInstructions[i + 0]->mSrc[1].mTemp != mInstructions[i + 0]->mDst.mTemp &&
mInstructions[i + 1]->mSrc[1].mTemp == mInstructions[i + 0]->mDst.mTemp && mInstructions[i + 1]->mSrc[1].mFinal &&
mInstructions[i + 0]->mSrc[0].IsUByte() && mInstructions[i + 1]->mSrc[0].IsUByte() &&
mInstructions[i + 0]->mSrc[0].mRange.mMaxValue + mInstructions[i + 1]->mSrc[0].mRange.mMaxValue < 256)
{
mInstructions[i + 0]->mCode = IC_BINARY_OPERATOR;
mInstructions[i + 0]->mOperator = IA_ADD;
mInstructions[i + 1]->mSrc[1] = mInstructions[i + 0]->mSrc[1];
mInstructions[i + 0]->mSrc[1] = mInstructions[i + 1]->mSrc[0];
mInstructions[i + 1]->mSrc[0].mTemp = mInstructions[i + 0]->mDst.mTemp;
mInstructions[i + 0]->mDst.mType = IT_INT16;
mInstructions[i + 1]->mSrc[0].mType = IT_INT16;
mInstructions[i + 1]->mSrc[0].mRange.mMaxValue += mInstructions[i + 0]->mSrc[0].mRange.mMaxValue;
mInstructions[i + 0]->mDst.mRange = mInstructions[i + 1]->mSrc[0].mRange;
}
}
if (i + 2 < sz)
{
if (
mInstructions[i + 0]->mCode == IC_LEA && mInstructions[i + 0]->mSrc[1].mTemp >= 0 &&
mInstructions[i + 2]->mCode == IC_LEA &&
mInstructions[i + 0]->mSrc[1].mTemp != mInstructions[i + 0]->mDst.mTemp &&
mInstructions[i + 2]->mSrc[1].mTemp == mInstructions[i + 0]->mDst.mTemp && mInstructions[i + 2]->mSrc[1].mFinal &&
mInstructions[i + 0]->mSrc[0].IsUByte() && mInstructions[i + 2]->mSrc[0].IsUByte() &&
mInstructions[i + 0]->mSrc[0].mRange.mMaxValue + mInstructions[i + 2]->mSrc[0].mRange.mMaxValue < 256 &&
mInstructions[i + 1]->mCode == IC_CONVERSION_OPERATOR && mInstructions[i + 1]->mOperator == IA_EXT8TO16U &&
mInstructions[i + 1]->mDst.mTemp != mInstructions[0]->mSrc[0].mTemp &&
mInstructions[i + 1]->mDst.mTemp != mInstructions[0]->mSrc[1].mTemp&&
mInstructions[i + 1]->mDst.mTemp != mInstructions[0]->mDst.mTemp)
{
InterInstruction* ins = mInstructions[i + 1];
mInstructions[i + 1] = mInstructions[i + 0];
mInstructions[i + 0] = ins;
}
}
}
#endif
if (mTrueJump)
mTrueJump->SimplifyIntegerRangeRelops();
@ -3509,6 +3556,11 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSets(void)
{
if (ins->mSrc[i].mTemp >= 0)
ins->mSrc[i].mRange = mLocalValueRange[ins->mSrc[i].mTemp];
else if (IsIntegerType(ins->mSrc[i].mType))
{
ins->mSrc[i].mRange.mMaxState = ins->mSrc[i].mRange.mMinState = IntegerValueRange::S_BOUND;
ins->mSrc[i].mRange.mMinValue = ins->mSrc[i].mRange.mMaxValue = ins->mSrc[i].mIntConst;
}
}
if (ins->mDst.mTemp >= 0 && IsIntegerType(ins->mDst.mType))

View File

@ -13331,6 +13331,16 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass)
progress = true;
}
}
if (mIns[i + 0].mMode == ASMIM_INDIRECT_Y && (mIns[i + 0].mFlags & NCIF_YZERO))
{
int apos, breg;
if (FindDirectAddressSumY(i, mIns[i].mAddress, apos, breg))
{
if (PatchDirectAddressSumY(i, mIns[i].mAddress, apos, breg))
progress = true;
}
}
#endif
#if 0