diff --git a/src/main/fragment/mos6502-common/pbum1=_deref_pptz2_plus_vbuaa.asm b/src/main/fragment/mos6502-common/pbum1=_deref_pptz2_plus_vbuaa.asm new file mode 100644 index 000000000..fbe14d1c9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbum1=_deref_pptz2_plus_vbuaa.asm @@ -0,0 +1,8 @@ +clc +ldy #0 +adc ({z2}),y +sta {m1} +tya +iny +adc ({z2}),y +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pbuz1=_deref_pptz1_plus_vbuaa.asm b/src/main/fragment/mos6502-common/pbuz1=_deref_pptz1_plus_vbuaa.asm new file mode 100644 index 000000000..972796994 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuz1=_deref_pptz1_plus_vbuaa.asm @@ -0,0 +1,10 @@ +clc +ldy #0 +adc ({z1}),y +pha +tya +iny +adc ({z1}),y +sta {z1}+1 +pla +sta {z1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pptm1=pptm2.asm b/src/main/fragment/mos6502-common/pptm1=pptm2.asm new file mode 100644 index 000000000..b25001a66 --- /dev/null +++ b/src/main/fragment/mos6502-common/pptm1=pptm2.asm @@ -0,0 +1,4 @@ +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vdsm1=vdsm2_minus_vwsm3.asm b/src/main/fragment/mos6502-common/vdsm1=vdsm2_minus_vwsm3.asm new file mode 100644 index 000000000..fa69495a4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdsm1=vdsm2_minus_vwsm3.asm @@ -0,0 +1,19 @@ +lda {m3}+1 +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +sec +lda {m2} +sbc {m3} +sta {m1} +lda {m2}+1 +sbc {m3}+1 +sta {m1}+1 +lda {m2}+2 +sbc $ff +sta {m1}+2 +lda {m2}+3 +sbc $ff +sta {m1}+3 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vdsm1=vdsm2_plus_vwsm3.asm b/src/main/fragment/mos6502-common/vdsm1=vdsm2_plus_vwsm3.asm new file mode 100644 index 000000000..2f51567ff --- /dev/null +++ b/src/main/fragment/mos6502-common/vdsm1=vdsm2_plus_vwsm3.asm @@ -0,0 +1,19 @@ +lda {m3}+1 +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +clc +lda {m2} +adc {m3} +sta {m1} +lda {m2}+1 +adc {m3}+1 +sta {m1}+1 +lda {m2}+2 +adc $ff +sta {m1}+2 +lda {m2}+3 +adc $ff +sta {m1}+3 \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/model/VariableBuilderConfig.java b/src/main/java/dk/camelot64/kickc/model/VariableBuilderConfig.java index 1bcb88eb1..a95a61df1 100644 --- a/src/main/java/dk/camelot64/kickc/model/VariableBuilderConfig.java +++ b/src/main/java/dk/camelot64/kickc/model/VariableBuilderConfig.java @@ -87,16 +87,12 @@ public class VariableBuilderConfig { */ public static void defaultPostConfig(VariableBuilderConfig config, CompileLog log) { // Arrays are always load/store variables in main memory - // TODO: Theoretically some program may want an array on ZP. How to support that? config.addSetting("array_ma_mem", log, StatementSource.NONE); // Global struct values are always load/store variables in main memory - // TODO: Global structs can be SSA (and then unwound) which can optimize some programs. How to support that? config.addSetting("global_struct_ma_mem", log, StatementSource.NONE); // Parameters are always passed using single-static-assignment - // TODO: Compilation Unit support will require parameters that are not SSA. How to specify that? config.addSetting("parameter_ssa", log, StatementSource.NONE); // Pointers are always on zeropage - // TODO: Pointers can technically exist in main-memory and be moved to ZP on every use. How to specify that? config.addSetting("pointer_zp", log, StatementSource.NONE); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 17b44ae9d..6dbc7d801 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -97,9 +97,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor