Fix multiply add 2n + 1
This commit is contained in:
parent
0aee1ad452
commit
04624f208c
|
@ -302,16 +302,18 @@ void rirq_set(byte n, byte row, RIRQCode * write)
|
||||||
rasterIRQRows[n] = row;
|
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_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_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_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_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)
|
void rirq_addr(RIRQCode * ic, byte n, void * addr)
|
||||||
|
|
|
@ -74,6 +74,24 @@ enum RIRQCodeIndex
|
||||||
RIRQ_ADDR_19 = 103,
|
RIRQ_ADDR_19 = 103,
|
||||||
|
|
||||||
RIRQ_SIZE_20 = 106,
|
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
|
// One raster interrupt operation, handles up to five writes
|
||||||
|
|
|
@ -26520,18 +26520,18 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
#if 1
|
||||||
else if (
|
else if (
|
||||||
mIns[i + 0].mType == ASMIT_ASL && mIns[i + 0].mMode == ASMIM_IMPLIED &&
|
mIns[i + 0].mType == ASMIT_ASL && mIns[i + 0].mMode == ASMIM_IMPLIED &&
|
||||||
mIns[i + 1].mType == ASMIT_CLC &&
|
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 + 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 + 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;
|
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else if (
|
else if (
|
||||||
mIns[i + 0].mType == ASMIT_STA && !(mIns[i + 0].mFlags & NCIF_VOLATILE) &&
|
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]) &&
|
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)
|
void NativeCodeProcedure::Optimize(void)
|
||||||
{
|
{
|
||||||
CheckFunc = !strcmp(mInterProc->mIdent->mString, "display_explosion");
|
CheckFunc = !strcmp(mInterProc->mIdent->mString, "plants_iterate");
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
int step = 0;
|
int step = 0;
|
||||||
|
@ -30592,8 +30592,6 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
changed = true;
|
changed = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// if (cnt == 2)
|
|
||||||
// return;
|
|
||||||
#if 1
|
#if 1
|
||||||
if (step < 6)
|
if (step < 6)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue