From f50613704cf392df53b195a22444ef6fa821e209 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 26 Mar 2022 21:39:30 +0100 Subject: [PATCH] Fix moving of abs store across function call --- include/c64/rasterirq.c | 10 ++++++---- include/c64/rasterirq.h | 14 +++++++++++++- oscar64/NativeCodeGenerator.cpp | 5 ++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/c64/rasterirq.c b/include/c64/rasterirq.c index 423741f..f2078a6 100644 --- a/include/c64/rasterirq.c +++ b/include/c64/rasterirq.c @@ -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) diff --git a/include/c64/rasterirq.h b/include/c64/rasterirq.h index 5a45318..ca54c52 100644 --- a/include/c64/rasterirq.h +++ b/include/c64/rasterirq.h @@ -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 diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 43110af..5fc5a93 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -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