Fix moving of abs store across function call

This commit is contained in:
drmortalwombat 2022-03-26 21:39:30 +01:00
parent 68e048b945
commit f50613704c
3 changed files with 23 additions and 6 deletions

View File

@ -219,14 +219,16 @@ void rirq_set(byte n, byte row, RIRQCode * write)
rasterIRQRows[n] = row;
}
static const byte irqai[16] = {
static const byte irqai[20] = {
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
};
static const byte irqdi[16] = {
static const byte irqdi[20] = {
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
};
void rirq_addr(RIRQCode * ic, byte n, void * addr)

View File

@ -56,7 +56,19 @@ enum RIRQCodeIndex
RIRQ_ADDR_14 = 78,
RIRQ_DATA_15 = 81,
RIRQ_ADDR_15 = 88,
RIRQ_ADDR_15 = 83,
RIRQ_DATA_16 = 86,
RIRQ_ADDR_16 = 88,
RIRQ_DATA_17 = 91,
RIRQ_ADDR_17 = 93,
RIRQ_DATA_18 = 96,
RIRQ_ADDR_18 = 98,
RIRQ_DATA_19 = 101,
RIRQ_ADDR_19 = 103,
};
// One raster interrupt operation, handles up to five writes

View File

@ -10546,6 +10546,8 @@ bool NativeCodeBasicBlock::FindPageStartAddress(int at, int reg, int& addr)
}
if (mIns[j + 1].mMode == ASMIM_ZERO_PAGE && (mIns[j + 1].mAddress == reg || mIns[j + 1].mAddress == reg + 1) && mIns[j + 1].ChangesAddress())
return false;
if (mIns[j + 1].mType == ASMIT_JSR)
return false;
j--;
}
@ -16061,6 +16063,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
}
#if 1
if (mIns[i + 0].mMode == ASMIM_INDIRECT_Y && (mIns[i + 0].mFlags & NCIF_YZERO) && !(mIns[i + 0].mLive & LIVE_CPU_REG_X))
{
const NativeCodeInstruction* ains;
@ -16082,7 +16085,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
progress = true;
}
}
#endif
}
#endif