From 04624f208c5469880bc676061375b59c9201fb50 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 23 Oct 2022 17:02:34 +0200 Subject: [PATCH] Fix multiply add 2n + 1 --- include/c64/rasterirq.c | 10 ++++++---- include/c64/rasterirq.h | 18 ++++++++++++++++++ oscar64/NativeCodeGenerator.cpp | 10 ++++------ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/include/c64/rasterirq.c b/include/c64/rasterirq.c index 11c44bb..74f1606 100644 --- a/include/c64/rasterirq.c +++ b/include/c64/rasterirq.c @@ -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) diff --git a/include/c64/rasterirq.h b/include/c64/rasterirq.h index 8eb88d5..5830b1a 100644 --- a/include/c64/rasterirq.h +++ b/include/c64/rasterirq.h @@ -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 diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 1cd66b5..8855381 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -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) {