Fix multiply add 2n + 1

This commit is contained in:
drmortalwombat 2022-10-23 17:02:34 +02:00
parent 0aee1ad452
commit 04624f208c
3 changed files with 28 additions and 10 deletions

View File

@ -302,16 +302,18 @@ void rirq_set(byte n, byte row, RIRQCode * write)
rasterIRQRows[n] = row;
}
static const byte irqai[20] = {
static const byte irqai[26] = {
RIRQ_ADDR_0, RIRQ_ADDR_1, RIRQ_ADDR_2, RIRQ_ADDR_3, RIRQ_ADDR_4, RIRQ_ADDR_5, RIRQ_ADDR_6, RIRQ_ADDR_7,
RIRQ_ADDR_8, RIRQ_ADDR_9, RIRQ_ADDR_10, RIRQ_ADDR_11, RIRQ_ADDR_12, RIRQ_ADDR_13, RIRQ_ADDR_14, RIRQ_ADDR_15,
RIRQ_ADDR_16, RIRQ_ADDR_17, RIRQ_ADDR_18, RIRQ_ADDR_19
RIRQ_ADDR_16, RIRQ_ADDR_17, RIRQ_ADDR_18, RIRQ_ADDR_19, RIRQ_ADDR_20, RIRQ_ADDR_21, RIRQ_ADDR_22, RIRQ_ADDR_23,
RIRQ_ADDR_24, RIRQ_ADDR_25
};
static const byte irqdi[20] = {
static const byte irqdi[26] = {
RIRQ_DATA_0, RIRQ_DATA_1, RIRQ_DATA_2, RIRQ_DATA_3, RIRQ_DATA_4, RIRQ_DATA_5, RIRQ_DATA_6, RIRQ_DATA_7,
RIRQ_DATA_8, RIRQ_DATA_9, RIRQ_DATA_10, RIRQ_DATA_11, RIRQ_DATA_12, RIRQ_DATA_13, RIRQ_DATA_14, RIRQ_DATA_15,
RIRQ_DATA_16, RIRQ_DATA_17, RIRQ_DATA_18, RIRQ_DATA_19
RIRQ_DATA_16, RIRQ_DATA_17, RIRQ_DATA_18, RIRQ_DATA_19, RIRQ_DATA_20, RIRQ_DATA_21, RIRQ_DATA_22, RIRQ_DATA_23,
RIRQ_DATA_24, RIRQ_DATA_25
};
void rirq_addr(RIRQCode * ic, byte n, void * addr)

View File

@ -74,6 +74,24 @@ enum RIRQCodeIndex
RIRQ_ADDR_19 = 103,
RIRQ_SIZE_20 = 106,
RIRQ_DATA_20 = 106,
RIRQ_ADDR_20 = 108,
RIRQ_DATA_21 = 111,
RIRQ_ADDR_21 = 113,
RIRQ_DATA_22 = 116,
RIRQ_ADDR_22 = 118,
RIRQ_DATA_23 = 121,
RIRQ_ADDR_23 = 123,
RIRQ_DATA_24 = 126,
RIRQ_ADDR_24 = 128,
RIRQ_DATA_25 = 131,
RIRQ_ADDR_25 = 133
};
// One raster interrupt operation, handles up to five writes

View File

@ -26520,18 +26520,18 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
progress = true;
}
#if 1
else if (
mIns[i + 0].mType == ASMIT_ASL && mIns[i + 0].mMode == ASMIM_IMPLIED &&
mIns[i + 1].mType == ASMIT_CLC &&
mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 1)
{
mIns[i + 0].mType = ASMIT_SEC; mIns[i + 0].mLive |= LIVE_CPU_REG_C;
mIns[i + 1].mType = ASMIT_ROL;
mIns[i + 1].mType = ASMIT_ROL; mIns[i + 1].mLive |= LIVE_CPU_REG_A;
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
progress = true;
}
#endif
else if (
mIns[i + 0].mType == ASMIT_STA && !(mIns[i + 0].mFlags & NCIF_VOLATILE) &&
mIns[i + 2].mType == ASMIT_STA && mIns[i + 0].SameEffectiveAddress(mIns[i + 2]) &&
@ -30472,7 +30472,7 @@ void NativeCodeProcedure::RebuildEntry(void)
void NativeCodeProcedure::Optimize(void)
{
CheckFunc = !strcmp(mInterProc->mIdent->mString, "display_explosion");
CheckFunc = !strcmp(mInterProc->mIdent->mString, "plants_iterate");
#if 1
int step = 0;
@ -30592,8 +30592,6 @@ void NativeCodeProcedure::Optimize(void)
changed = true;
#endif
// if (cnt == 2)
// return;
#if 1
if (step < 6)
{