Optimize pointer increment dereference combos
This commit is contained in:
parent
ef5cb81a18
commit
4aa82d539b
|
@ -628,7 +628,7 @@ void NativeCodeDisassembler::Disassemble(FILE* file, const uint8* memory, int st
|
|||
addr = addr + ip - 256;
|
||||
else
|
||||
addr = addr + ip;
|
||||
fprintf(file, "%04x : %02x %02x __ %s $%02x\n", iip, memory[iip], memory[iip + 1], AsmInstructionNames[d.mType], addr);
|
||||
fprintf(file, "%04x : %02x %02x __ %s $%04x\n", iip, memory[iip], memory[iip + 1], AsmInstructionNames[d.mType], addr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1804,6 +1804,16 @@ static void OptimizeAddress(InterInstruction * ins, const GrowingInstructionPtrA
|
|||
ins->mSIntConst[offset] = ains->mSIntConst[0];
|
||||
ins->mSTemp[offset] = ains->mSTemp[1];
|
||||
}
|
||||
else if (ains->mCode == IC_BINARY_OPERATOR && ains->mOperator == IA_ADD && ains->mSTemp[0] < 0 && ains->mSTemp[1] >= 0 && tvalue[ains->mSTemp[1]] && ains->mSIntConst[0] >= 0)
|
||||
{
|
||||
ins->mSIntConst[offset] = ains->mSIntConst[0];
|
||||
ins->mSTemp[offset] = ains->mSTemp[1];
|
||||
}
|
||||
else if (ains->mCode == IC_BINARY_OPERATOR && ains->mOperator == IA_ADD && ains->mSTemp[1] < 0 && ains->mSTemp[0] >= 0 && tvalue[ains->mSTemp[0]] && ains->mSIntConst[1] >= 0)
|
||||
{
|
||||
ins->mSIntConst[offset] = ains->mSIntConst[1];
|
||||
ins->mSTemp[offset] = ains->mSTemp[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5645,6 +5645,16 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(void)
|
|||
mIns[i + 1].mType = ASMIT_LSR;
|
||||
progress = true;
|
||||
}
|
||||
else if (mIns[i].mType == ASMIT_CLC && mIns[i + 1].mType == ASMIT_ADC && mIns[i + 1].mMode == ASMIM_IMMEDIATE && mIns[i + 1].mAddress == 0 && !(mIns[i + 1].mLive & LIVE_CPU_REG_Z))
|
||||
{
|
||||
mIns[i + 1].mType = ASMIT_NOP;
|
||||
progress = true;
|
||||
}
|
||||
else if (mIns[i].mType == ASMIT_SEC && mIns[i + 1].mType == ASMIT_SBC && mIns[i + 1].mMode == ASMIM_IMMEDIATE && mIns[i + 1].mAddress == 0 && !(mIns[i + 1].mLive & LIVE_CPU_REG_Z))
|
||||
{
|
||||
mIns[i + 1].mType = ASMIT_NOP;
|
||||
progress = true;
|
||||
}
|
||||
else if (
|
||||
mIns[i + 0].mType == ASMIT_STA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mMode == ASMIM_ZERO_PAGE && mIns[i].mAddress == mIns[i + 1].mAddress &&
|
||||
(mIns[i + 1].mType == ASMIT_LSR || mIns[i + 1].mType == ASMIT_ASL || mIns[i + 1].mType == ASMIT_ROL || mIns[i + 1].mType == ASMIT_ROR))
|
||||
|
|
Loading…
Reference in New Issue