From 5c0618f9e815b3f718b362356bdf49273af08103 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 20 Nov 2020 23:01:01 +0100 Subject: [PATCH] Added missing fragments and a few new pretty hairy synthesis rules.. Closes #577 --- .../cache/fragment-cache-csg65ce02.asm | 212 +- .../cache/fragment-cache-mega45gs02.asm | 2 +- .../fragment/cache/fragment-cache-mos6502.asm | 2 +- .../cache/fragment-cache-mos6502x.asm | 3898 ++++++++--------- .../cache/fragment-cache-wdc65c02.asm | 2 +- .../vbuaa=vbuaa_plus__hi_vwum1.asm | 2 + .../vbuaa_ge_vwum1_then_la1.asm | 5 + .../mos6502-common/vwum1=vbuaa_ror_1.asm | 4 + .../vwum1_gt_vbuaa_then_la1.asm | 4 + .../vwum1_gt_vbuc1_then_la1.asm | 8 +- .../vwum1_gt_vbuxx_then_la1.asm | 4 + .../vwum1_gt_vbuyy_then_la1.asm | 4 + .../AsmFragmentTemplateSynthesisRule.java | 21 +- src/test/ref/complex/bubbles64/bubbles64.asm | 27 +- src/test/ref/complex/bubbles64/bubbles64.log | 96 +- src/test/ref/complex/polygon/polygon.asm | 104 +- src/test/ref/complex/polygon/polygon.log | 689 ++- src/test/ref/complex/polygon/polygon.sym | 180 +- src/test/ref/roll-sprite-msb.asm | 8 +- src/test/ref/roll-sprite-msb.log | 34 +- 20 files changed, 2529 insertions(+), 2777 deletions(-) create mode 100644 src/main/fragment/mos6502-common/vbuaa=vbuaa_plus__hi_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/vbuaa_ge_vwum1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vbuaa_ror_1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1_gt_vbuaa_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1_gt_vbuxx_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1_gt_vbuyy_then_la1.asm diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index 1ea5b1eeb..095fd2d24 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 10dedb3bb9 10dedb58e1 +//KICKC FRAGMENT CACHE 1005e43111 1005e44e5d //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -7,6 +7,16 @@ lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} //FRAGMENT vduz1=vduz2 lda {z2} sta {z1} @@ -16,10 +26,52 @@ lda {z2}+2 sta {z1}+2 lda {z2}+3 sta {z1}+3 -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_2 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 //FRAGMENT pbuz1=pbuz1_plus_vbuc1 lda #{c1} clc @@ -44,15 +96,9 @@ inw {z1} lda #{c1} cmp {z1} bne {la1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} //FRAGMENT _deref_pbuc1=vbuc2 lda #{c2} sta {c1} -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} //FRAGMENT vduz1=vduc1 lda #<{c1} sta {z1} @@ -149,11 +195,6 @@ cmp {z1} beq {la1} !: bcc {la1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 //FRAGMENT vwuz1=vwuz2 lda {z2} sta {z1} @@ -333,9 +374,34 @@ lda {z1} sec sbc {z2} sta {z1} +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} //FRAGMENT vbuaa_lt_vbuc1_then_la1 cmp #{c1} bcc {la1} +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuzz +tza +sta {z1} +lda #0 +sta {z1}+1 //FRAGMENT pbuz1_derefidx_vbuaa=vbuc1 taz lda #{c1} @@ -371,10 +437,6 @@ cmp #{c1} bne {la1} //FRAGMENT vbuz1=vbuaa sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1 -lda {c1} -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} //FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx inc {c1},x //FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuc2_then_la1 @@ -387,10 +449,6 @@ tay lda {c1},y cmp #{c2} beq {la1} -//FRAGMENT vbuaa=vbuz1 -lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} //FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 ldy {z1} lda {c1},y @@ -1842,8 +1900,6 @@ sta ({z1}),y tza ldy #0 sta ({z1}),y -//FRAGMENT vbuz1=vbuxx -stx {z1} //FRAGMENT vbuaa_le_vbuc1_then_la1 cmp #{c1} bcc {la1} @@ -2168,6 +2224,10 @@ sbc #1 //FRAGMENT vbuc1_eq_vbuyy_then_la1 cpy #{c1} beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vbuzz=_deref_pbuc1 +ldz {c1} //FRAGMENT vbuyy_le_vbuaa_then_la1 sty $ff cmp $ff @@ -2206,6 +2266,26 @@ dex stz $ff cpy $ff bcc {la1} +//FRAGMENT vwuz1=vwuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_3 +asw {z1} +asw {z1} +asw {z1} //FRAGMENT pbuc1_derefidx_vbuzz=vbuzz tza tax @@ -2439,83 +2519,3 @@ sty {c1} //FRAGMENT _deref_pbsc1=vbszz tza sta {c1} -//FRAGMENT vwuz1=_word_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_3 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuzz -tza -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT vbuzz=_deref_pbuc1 -ldz {c1} -//FRAGMENT vwuz1=vwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_3 -asw {z1} -asw {z1} -asw {z1} diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index a05e7c2da..a196e4958 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 10dedb3bb9 10dedb58e1 +//KICKC FRAGMENT CACHE 1005e43111 1005e44e5d //FRAGMENT _deref_pbuc1=vbuc2 lda #{c2} sta {c1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 275e567d0..8c7bb9c15 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 10dedb3bb9 10dedb58e1 +//KICKC FRAGMENT CACHE 1005e43111 1005e44e5d //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502x.asm b/src/main/fragment/cache/fragment-cache-mos6502x.asm index a262c04d6..ffe8102cf 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,203 +1,22 @@ -//KICKC FRAGMENT CACHE 10dedb3bb9 10dedb58e1 +//KICKC FRAGMENT CACHE 1005e43111 1005e44e5d +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} //FRAGMENT pbuz1=pbuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT vwuz1=vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -sta {z1} -//FRAGMENT pbuz1=_inc_pbuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vbuc1_neq_vbuz1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} //FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT vbuc1_neq__deref_pbuz1_then_la1 -ldy #0 -lda ({z1}),y -cmp #{c1} -bne {la1} -//FRAGMENT vwuz1=_inc_vwuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_6 -lda {z2} -asl -sta $ff -lda {z2}+1 -rol -sta {z1} -lda #0 -rol -sta {z1}+1 -asl $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_1 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_6 -lda {z2}+1 -lsr -sta $ff -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} -//FRAGMENT vwuz1=vwuz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT pvoz1=pvoz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=vbuc1 -lda #{c1} -ldy #0 -sta ({z1}),y -//FRAGMENT vwuz1=vwuz2_rol_3 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vduz1=vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda #0 -sta {z1}+2 -sta {z1}+3 -//FRAGMENT vwuz1=vbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 //FRAGMENT vwsz1=vwsc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT vwsz1_lt_vwuz2_then_la1 -lda {z1}+1 -bmi {la1} -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT pbuz1=pbuz2_plus_vwsz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT vduz1=vduz1_plus_vduz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc {z2}+2 -sta {z1}+2 -lda {z1}+3 -adc {z2}+3 -sta {z1}+3 //FRAGMENT vwsz1=vwsz1_plus_vbsc1 clc lda {z1} @@ -206,6 +25,78 @@ sta {z1} lda {z1}+1 adc #>{c1} sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_vwuc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1_lt_0_then_la1 +lda {z1}+1 +bmi {la1} +//FRAGMENT vwsz1=_neg_vwsz1 +sec +lda #0 +sbc {z1} +sta {z1} +lda #0 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT _deref_pbuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=_hi_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=_lo_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1_lt_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: //FRAGMENT vbuz1=vbuz2_ror_4 lda {z2} lsr @@ -213,465 +104,35 @@ lsr lsr lsr sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1_eq_0_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT vbuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT vbuz1=vbuz2_rol_2 -lda {z2} -asl -asl -sta {z1} -//FRAGMENT vduz1=pduz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -iny -lda ({z2}),y -sta {z1}+2 -iny -lda ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 //FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 ldy {z2} lda {c1},y sta {z1} -//FRAGMENT vduz1=vduz2_plus_vduz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -lda {z2}+2 -adc {z3}+2 -sta {z1}+2 -lda {z2}+3 -adc {z3}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuz3 -ldy {z3} -lda {z2} -clc -adc {c1},y -sta {z1} -lda {z2}+1 -adc {c1}+1,y -sta {z1}+1 -lda {z2}+2 -adc {c1}+2,y -sta {z1}+2 -lda {z2}+3 -adc {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuz4 -ldy {z4} -lda {z2} -clc -adc ({z3}),y -sta {z1} -iny -lda {z2}+1 -adc ({z3}),y -sta {z1}+1 -iny -lda {z2}+2 -adc ({z3}),y -sta {z1}+2 -iny -lda {z2}+3 -adc ({z3}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuz3 -ldx {z3} -ldy {c1},x -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vbuz1=vbuc1_minus_pbuc2_derefidx_vbuz2 -lda #{c1} -ldy {z2} -sec -sbc {c2},y -sta {z1} -//FRAGMENT vduz1=vduz2_ror_vbuz3 -ldx {z3} -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_bor_vduz3 -lda {z2} -ora {z3} -sta {z1} -lda {z2}+1 -ora {z3}+1 -sta {z1}+1 -lda {z2}+2 -ora {z3}+2 -sta {z1}+2 -lda {z2}+3 -ora {z3}+3 -sta {z1}+3 -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT vduz1=_bnot_vduz2 -lda {z2} -eor #$ff -sta {z1} -lda {z2}+1 -eor #$ff -sta {z1}+1 -lda {z2}+2 -eor #$ff -sta {z1}+2 -lda {z2}+3 -eor #$ff -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bxor_vduz3 -lda {z2} -eor {z3} -sta {z1} -lda {z2}+1 -eor {z3}+1 -sta {z1}+1 -lda {z2}+2 -eor {z3}+2 -sta {z1}+2 -lda {z2}+3 -eor {z3}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_band_vduz3 -lda {z2} -and {z3} -sta {z1} -lda {z2}+1 -and {z3}+1 -sta {z1}+1 -lda {z2}+2 -and {z3}+2 -sta {z1}+2 -lda {z2}+3 -and {z3}+3 -sta {z1}+3 -//FRAGMENT vbuz1=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -lda {c1},y -sta {z1} -//FRAGMENT _deref_pwuc1=_inc__deref_pwuc1 -inc {c1} -bne !+ -inc {c1}+1 -!: -//FRAGMENT _deref_pwuc1_eq_vbuc2_then_la1 -lda {c1}+1 -bne !+ -lda {c1} -cmp #{c2} -beq {la1} -!: -//FRAGMENT _deref_pwuc1=vbuc2 -lda #0 -sta {c1}+1 -lda #<{c2} -sta {c1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_neq_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT _deref_pbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} -//FRAGMENT vbsz1=vbsc1 -lda #{c1} -sta {z1} -//FRAGMENT vbsz1_gt_0_then_la1 -lda {z1} -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbsz1=_dec_vbsz1 -dec {z1} -//FRAGMENT vwuz1=_word_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_band_vbuc1 +//FRAGMENT vbuz1=vbuz2_band_vbuc1 lda #{c1} and {z2} sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=vwuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vwuz1=vwuz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT _deref_(_deref_qbuc1)=_deref_pbuc2 -lda {c2} -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pbuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} -//FRAGMENT _deref_qbuc1=pbuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 -lda #{c1} -eor {z2} -sta {z1} -//FRAGMENT _deref_(_deref_qbuc1)=vbuz1 -lda {z1} -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 -inc {c1} -//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 -lda #{c2} -cmp {c1} -bne {la1} -//FRAGMENT _deref_(_deref_qbuc1)=_deref_(_deref_qbuc1)_bxor_vbuc2 -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -lda ($fe),y -eor #{c2} -sta ($fe),y -//FRAGMENT pbuz1=_deref_qbuc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_minus_vwuz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1_le_0_then_la1 -lda {z1} -bne !+ -lda {z1}+1 -beq {la1} -!: -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz2 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vbuz1_ge_vbuz2_then_la1 -lda {z1} -cmp {z2} -bcs {la1} -//FRAGMENT vbsz1=_sbyte_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuc1_eq_vbuz1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT vbsz1=_inc_vbsz1 -inc {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsz2 -lda #{c1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1_ge_0_then_la1 -lda {z1} -cmp #0 -bpl {la1} -//FRAGMENT vbsc1_neq_vbsz1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vwuz1=_word__deref_pbuc1 -lda {c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz2 -clc -lda {z2} -adc {c1} -sta {z1} -lda {z2}+1 -adc {c1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus__deref_pwuc1 -clc -lda {c1} -adc {z2} -sta {z1} -lda {c1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_minus_vbuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1_lt_vbuz2_then_la1 -lda {z1} -cmp {z2} -bcc {la1} -//FRAGMENT vbuaa=_deref_pbuz1 -ldy #0 -lda ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tay -//FRAGMENT vbuc1_neq_vbuaa_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbuz1=vbuaa -sta {z1} -//FRAGMENT vbuxx_lt_vbuc1_then_la1 +//FRAGMENT vbuxx_neq_vbuc1_then_la1 cpx #{c1} -bcc {la1} -//FRAGMENT vbuaa=vbuz1 +bne {la1} +//FRAGMENT _deref_pbuz1=vbuaa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuxx +txa +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=vbuyy +tya +ldy #0 +sta ({z1}),y +//FRAGMENT vbuaa=_hi_vwuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwuz1 +ldx {z1}+1 +//FRAGMENT vbuaa=_lo_vwuz1 lda {z1} -//FRAGMENT vbuxx=vbuz1 +//FRAGMENT vbuxx=_lo_vwuz1 ldx {z1} //FRAGMENT vbuaa=vbuz1_ror_4 lda {z1} @@ -693,6 +154,29 @@ lsr lsr lsr tay +//FRAGMENT vbuz1=vbuaa_ror_4 +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuaa_ror_4 +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuaa_ror_4 +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuaa_ror_4 +lsr +lsr +lsr +lsr +tay //FRAGMENT vbuz1=vbuxx_ror_4 txa lsr @@ -720,374 +204,12 @@ lsr lsr lsr tay -//FRAGMENT vbuz1=vbuaa_band_vbuc1 -and #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuc1 -lda #{c1} -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_vbuc1 -tya -and #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuaa=vbuaa_band_vbuc1 -and #{c1} -//FRAGMENT vbuaa=vbuxx_band_vbuc1 -txa -and #{c1} -//FRAGMENT vbuaa=vbuyy_band_vbuc1 -tya -and #{c1} -//FRAGMENT vbuxx=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuxx=vbuaa_band_vbuc1 -ldx #{c1} -axs #0 -//FRAGMENT vbuaa_eq_0_then_la1 -cmp #0 -beq {la1} -//FRAGMENT vbuaa_eq_vbuc1_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbuz1=vbuxx -stx {z1} -//FRAGMENT vbuz1=vbuxx_rol_2 -txa -asl -asl -sta {z1} -//FRAGMENT vbuxx=vbuz1_rol_2 -lda {z1} -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_2 -txa -asl -asl -tax -//FRAGMENT vduz1=pduz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -iny -lda ({z2}),y -sta {z1}+2 -iny -lda ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -lda {c1}+2,x -sta {z1}+2 -lda {c1}+3,x -sta {z1}+3 -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} //FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 ldy {z1} lda {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx -lda {c1},x //FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 ldy {z1} ldx {c1},y -//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuxx -lda {z2} -clc -adc {c1},x -sta {z1} -lda {z2}+1 -adc {c1}+1,x -sta {z1}+1 -lda {z2}+2 -adc {c1}+2,x -sta {z1}+2 -lda {z2}+3 -adc {c1}+3,x -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuxx -txa -tay -lda {z2} -clc -adc ({z3}),y -sta {z1} -iny -lda {z2}+1 -adc ({z3}),y -sta {z1}+1 -iny -lda {z2}+2 -adc ({z3}),y -sta {z1}+2 -iny -lda {z2}+3 -adc ({z3}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuxx -ldy {c1},x -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vbuaa=vbuc1_minus_pbuc2_derefidx_vbuz1 -lda #{c1} -ldy {z1} -sec -sbc {c2},y -//FRAGMENT vbuxx=vbuc1_minus_pbuc2_derefidx_vbuz1 -lda #{c1} -ldx {z1} -sec -sbc {c2},x -tax -//FRAGMENT vbuyy=vbuc1_minus_pbuc2_derefidx_vbuz1 -lda #{c1} -ldy {z1} -sec -sbc {c2},y -tay -//FRAGMENT vbuz1=vbuc1_minus_pbuc2_derefidx_vbuxx -lda #{c1} -sec -sbc {c2},x -sta {z1} -//FRAGMENT vbuaa=vbuc1_minus_pbuc2_derefidx_vbuxx -lda #{c1} -sec -sbc {c2},x -//FRAGMENT vbuxx=vbuc1_minus_pbuc2_derefidx_vbuxx -lda #{c1} -sec -sbc {c2},x -tax -//FRAGMENT vbuyy=vbuc1_minus_pbuc2_derefidx_vbuxx -lda #{c1} -sec -sbc {c2},x -tay -//FRAGMENT vduz1=vduz2_ror_vbuaa -tax -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_vbuxx -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_vbuyy -tya -tax -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vbuaa=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_(_deref_pbuc2) -ldx {c2} -ldy {c1},x -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} -//FRAGMENT vbsaa_gt_0_then_la1 -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vwuz1=_word_vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuaa=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuxx=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuyy=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT _deref_pbuz1=vbuaa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuc1=vbuaa -sta {c1} -//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tay -//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 -txa -eor #{c1} -//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tax -//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tay -//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 -tya -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 -tya -eor #{c1} -//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tax -//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tay -//FRAGMENT _deref_(_deref_qbuc1)=vbuaa -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=vbuxx -txa -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=vbuyy -tya -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -sta ({z1}),y //FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 ldx {z1} ldy {c1},x @@ -1104,657 +226,62 @@ ldx {c1},y //FRAGMENT vbuyy=pbuc1_derefidx_vbuaa tax ldy {c1},x -//FRAGMENT vbuaa_ge_vbuz1_then_la1 -cmp {z1} -bcs {la1} -//FRAGMENT vbsaa=_sbyte_vwuz1 -lda {z1} -//FRAGMENT vbsxx=_sbyte_vwuz1 -ldx {z1} -//FRAGMENT vbuc1_eq_vbuxx_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbsz1=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx +lda {c1},x sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsyy -tya -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbsxx=vbsc1_minus_vbsz1 +//FRAGMENT vbuz1=vbuxx_band_vbuc1 lda #{c1} -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsc1_minus_vbsaa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsxx=vbsc1_minus_vbsxx -txa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsxx=vbsc1_minus_vbsyy -tya -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsxx_ge_0_then_la1 -cpx #0 -bpl {la1} -//FRAGMENT vbuc1_neq_vbuxx_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbsc1_neq_vbsxx_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuxx=vbuxx_minus_vbuz1 -txa -sec -sbc {z1} -tax -//FRAGMENT vbuz1=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -tax -//FRAGMENT vbuz1=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_vbuxx -lda #0 -tax -//FRAGMENT vbuz1=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx_lt_vbuz1_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbsxx_gt_0_then_la1 -txa -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbsyy_gt_0_then_la1 -tya -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} -//FRAGMENT vbuxx_ge_vbuz1_then_la1 -cpx {z1} -bcs {la1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuz1_ge_vbuxx_then_la1 -lda {z1} -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy=vbuz1 -ldy {z1} -//FRAGMENT vbuz1_ge_vbuyy_then_la1 -lda {z1} -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_ge_vbuyy_then_la1 -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuaa=vbuxx -txa -//FRAGMENT vbuz1=vbuyy -sty {z1} -//FRAGMENT vbuyy=vbuxx -txa -tay -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT vbuyy_ge_vbuz1_then_la1 -cpy {z1} -bcs {la1} -//FRAGMENT vbuxx=vbuyy -tya -tax -//FRAGMENT vbuaa=vbuc1 +sax {z1} +//FRAGMENT vbuaa=vbuz1_band_vbuc1 lda #{c1} -//FRAGMENT vbuc1_neq_vbuyy_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbsxx=vbsc1 -ldx #{c1} -//FRAGMENT vbsxx=_dec_vbsxx -dex -//FRAGMENT vbsyy=vbsc1 -ldy #{c1} -//FRAGMENT vbsyy=_dec_vbsyy -dey -//FRAGMENT vbsaa=_inc_vbsaa -clc -adc #1 -//FRAGMENT vbsxx=_inc_vbsxx -inx -//FRAGMENT vbsyy=_sbyte_vwuz1 -ldy {z1} -//FRAGMENT vbsyy=_inc_vbsyy -iny -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT vbuxx_eq_0_then_la1 -cpx #0 -beq {la1} -//FRAGMENT vbuxx_eq_vbuc1_then_la1 -cpx #{c1} -beq {la1} +and {z1} +//FRAGMENT vbuaa=vbuxx_band_vbuc1 +txa +and #{c1} +//FRAGMENT vbuxx=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tax //FRAGMENT vbuxx=vbuxx_band_vbuc1 lda #{c1} axs #0 -//FRAGMENT vbuxx=vbuyy_band_vbuc1 -ldx #{c1} -tya -axs #0 //FRAGMENT vbuyy=vbuz1_band_vbuc1 lda #{c1} and {z1} tay -//FRAGMENT vbuyy_eq_0_then_la1 -cpy #0 -beq {la1} -//FRAGMENT vbuyy_eq_vbuc1_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT vbuyy=vbuaa_band_vbuc1 -and #{c1} -tay -//FRAGMENT vbuaa=vbuyy -tya -//FRAGMENT vbuxx=vbuaa -tax -//FRAGMENT vbuyy=vbuaa -tay -//FRAGMENT vduz1=vduz2_bxor_vduz1 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -lda {z1}+2 -eor {z2}+2 -sta {z1}+2 -lda {z1}+3 -eor {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_bxor_vduz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -lda {z1}+2 -eor {z2}+2 -sta {z1}+2 -lda {z1}+3 -eor {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_bor_vduz2 -lda {z2} -ora {z1} -sta {z1} -lda {z2}+1 -ora {z1}+1 -sta {z1}+1 -lda {z2}+2 -ora {z1}+2 -sta {z1}+2 -lda {z2}+3 -ora {z1}+3 -sta {z1}+3 -//FRAGMENT vbuz1=vbuz1_rol_2 -lda {z1} -asl -asl -sta {z1} -//FRAGMENT vwuz1=vwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_plus_1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_ror_6 -lda {z1} -asl -sta $ff -lda {z1}+1 -rol -sta {z1} -lda #0 -rol -sta {z1}+1 -asl $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_6 -lda {z1}+1 -lsr -sta $ff -lda {z1} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz1_plus_pduz2_derefidx_vbuz3 -ldy {z3} -lda {z1} -clc -adc ({z2}),y -sta {z1} -iny -lda {z1}+1 -adc ({z2}),y -sta {z1}+1 -iny -lda {z1}+2 -adc ({z2}),y -sta {z1}+2 -iny -lda {z1}+3 -adc ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz1_band_vduz2 -lda {z1} -and {z2} -sta {z1} -lda {z1}+1 -and {z2}+1 -sta {z1}+1 -lda {z1}+2 -and {z2}+2 -sta {z1}+2 -lda {z1}+3 -and {z2}+3 -sta {z1}+3 -//FRAGMENT pbuz1=pbuc1_minus_vwuz1 -sec -lda #<{c1} -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz1 -clc -lda {z1} -adc {c1} -sta {z1} -lda {z1}+1 -adc {c1}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz1_plus_pduc1_derefidx_vbuz2 -ldy {z2} -lda {z1} -clc -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -lda {z1}+2 -adc {c1}+2,y -sta {z1}+2 -lda {z1}+3 -adc {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bor_vduz1 -lda {z2} -ora {z1} -sta {z1} -lda {z2}+1 -ora {z1}+1 -sta {z1}+1 -lda {z2}+2 -ora {z1}+2 -sta {z1}+2 -lda {z2}+3 -ora {z1}+3 -sta {z1}+3 -//FRAGMENT pbuz1=pbuz1_plus_vwuc1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduz1_rol_pbuc1_derefidx_vbuz2 -ldy {z2} -ldx {c1},y -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dex -bne !- -!e: -//FRAGMENT vwuz1=vwuz1_rol_1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus__deref_pwuc1 -clc -lda {c1} -adc {z1} -sta {z1} -lda {c1}+1 -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_3 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vduz1=vduz1_ror_vbuaa -tay -cpy #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dey -bne !- -!e: -//FRAGMENT vwuz1=vwuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT pbuz1_lt_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbuz1=vbuz2_plus_1 -ldy {z2} -iny -sty {z1} -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuc2 -lda #{c2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1=pbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuaa_plus_1 -clc -adc #1 -sta {z1} -//FRAGMENT vbuz1=vbuaa_ror_4 -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_4 -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuaa_ror_4 -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_4 -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -tay //FRAGMENT vbuyy=vbuxx_band_vbuc1 txa and #{c1} tay -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuz1=vbuxx_plus_1 -inx -stx {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 -ldy {z3} -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 +//FRAGMENT vbuaa=vbuc1 lda #{c1} -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx lda {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuc1_eq_vbuaa_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_vbuyy_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT vwuz1=vwuz1_plus_vwuc1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vwsz1_lt_0_then_la1 -lda {z1}+1 -bmi {la1} -//FRAGMENT vwsz1=_neg_vwsz1 -sec -lda #0 -sbc {z1} -sta {z1} -lda #0 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vbuz1=_hi_vwuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=_lo_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT pbuz1_lt_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuaa=_hi_vwuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwuz1 -ldx {z1}+1 -//FRAGMENT vbuaa=_lo_vwuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_vwuz1 -ldx {z1} //FRAGMENT vbuaa=pbuc1_derefidx_vbuyy lda {c1},y +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} //FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 lda #{c2} ldy {z1} sta {c1},y +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} //FRAGMENT vbuz1=vbuz1_plus_2 lda {z1} clc adc #2 sta {z1} +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} //FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 tay lda #{c2} @@ -1768,6 +295,9 @@ sta {c1},y //FRAGMENT vbuxx=vbuxx_plus_2 inx inx +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} //FRAGMENT vbuyy_lt_vbuc1_then_la1 cpy #{c1} bcc {la1} @@ -1793,6 +323,22 @@ sta {z1} lax {z2} axs #-[{c1}] stx {z1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=vwuz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: //FRAGMENT pbuz1_neq_pbuc1_then_la1 lda {z1}+1 cmp #>{c1} @@ -1800,6 +346,19 @@ bne {la1} lda {z1} cmp #<{c1} bne {la1} +//FRAGMENT _deref_pbuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +//FRAGMENT vbuc1_neq__deref_pbuz1_then_la1 +ldy #0 +lda ({z1}),y +cmp #{c1} +bne {la1} +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} //FRAGMENT vwuz1=vwuz1_minus_vwuc1 lda {z1} sec @@ -1816,6 +375,17 @@ sta {z1} lda #>{c1} sbc {z1}+1 sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 //FRAGMENT vbuz1=vbuz2_minus_vbuz3 lda {z2} sec @@ -1828,12 +398,20 @@ adc {z3} sta {z1} //FRAGMENT vbuz1=_dec_vbuz1 dec {z1} +//FRAGMENT vbuz1_eq_0_then_la1 +lda {z1} +cmp #0 +beq {la1} //FRAGMENT vbsz1=_neg_vbsz2 lda {z2} eor #$ff clc adc #$01 sta {z1} +//FRAGMENT vbsz1_ge_0_then_la1 +lda {z1} +cmp #0 +bpl {la1} //FRAGMENT vbuz1=vbuz2_minus_vbuc1 lax {z2} axs #{c1} @@ -1850,6 +428,14 @@ eor #$ff clc adc #$01 sta {z1} +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_1 +asl {z1} +rol {z1}+1 //FRAGMENT vwuz1=vwuz1_bor_vbuc1 lda #{c1} ora {z1} @@ -1867,6 +453,11 @@ rol {z1}+1 dey bne !- !e: +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 //FRAGMENT vbuz1_neq_0_then_la1 lda {z1} cmp #0 @@ -1905,6 +496,57 @@ adc #{c1} //FRAGMENT vbuxx=vbuc1_plus_vbuaa tax axs #-[{c1}] +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vbuaa=_deref_pbuz1 +ldy #0 +lda ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tay +//FRAGMENT vbuz1=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuaa=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +//FRAGMENT vbuxx=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +tax +//FRAGMENT vbuyy=vbuyy_ror_4 +tya +lsr +lsr +lsr +lsr +tay +//FRAGMENT vbuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_band_vbuc1 +tya +and #{c1} +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +ldx #{c1} +tya +axs #0 //FRAGMENT vbuyy=vbuyy_band_vbuc1 tya and #{c1} @@ -1912,6 +554,12 @@ tay //FRAGMENT vbuz1=pbuc1_derefidx_vbuyy lda {c1},y sta {z1} +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuaa +sta {z1} //FRAGMENT vbuz1=vbuaa_minus_vbuz2 sec sbc {z2} @@ -2058,6 +706,11 @@ tax sec sbc {z1} tax +//FRAGMENT vbuxx=vbuxx_minus_vbuz1 +txa +sec +sbc {z1} +tax //FRAGMENT vbuxx=vbuyy_minus_vbuz1 tya sec @@ -2071,6 +724,12 @@ tax //FRAGMENT vbuxx=vbuaa_minus_vbuaa lda #0 tax +//FRAGMENT vbuxx=vbuxx_minus_vbuaa +sta $ff +txa +sec +sbc $ff +tax //FRAGMENT vbuxx=vbuyy_minus_vbuaa sta $ff tya @@ -2088,6 +747,9 @@ stx $ff sec sbc $ff tax +//FRAGMENT vbuxx=vbuxx_minus_vbuxx +lda #0 +tax //FRAGMENT vbuxx=vbuyy_minus_vbuxx tya stx $ff @@ -2105,6 +767,12 @@ sty $ff sec sbc $ff tax +//FRAGMENT vbuxx=vbuxx_minus_vbuyy +txa +sty $ff +sec +sbc $ff +tax //FRAGMENT vbuxx=vbuyy_minus_vbuyy lda #0 tax @@ -2406,6 +1074,9 @@ tax tya asl tay +//FRAGMENT vbuxx_eq_0_then_la1 +cpx #0 +beq {la1} //FRAGMENT vbsaa=_neg_vbsz1 lda {z1} eor #$ff @@ -2488,6 +1159,9 @@ eor #$ff clc adc #$01 tay +//FRAGMENT vbsxx_ge_0_then_la1 +cpx #0 +bpl {la1} //FRAGMENT vbuz1=vbuaa_minus_vbuc1 sec sbc #{c1} @@ -2527,6 +1201,17 @@ sta {z1}+1 //FRAGMENT vbsaa_lt_0_then_la1 cmp #0 bmi {la1} +//FRAGMENT vbuz1=vbuaa_band_vbuc1 +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuaa_band_vbuc1 +and #{c1} +//FRAGMENT vbuxx=vbuaa_band_vbuc1 +ldx #{c1} +axs #0 +//FRAGMENT vbuaa_eq_0_then_la1 +cmp #0 +beq {la1} //FRAGMENT vwuz1=vwuz2_rol_vbuxx lda {z2} sta {z1} @@ -2553,15 +1238,34 @@ rol {z1}+1 dey bne !- !e: +//FRAGMENT vwuz1=_word_vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 //FRAGMENT vbuxx_neq_0_then_la1 cpx #0 bne {la1} //FRAGMENT vbsz1=vbsxx stx {z1} +//FRAGMENT vbuyy_eq_0_then_la1 +cpy #0 +beq {la1} //FRAGMENT vbuxx=vbuxx_ror_1 txa lsr tax +//FRAGMENT vbuyy=vbuz1 +ldy {z1} //FRAGMENT vbuyy_neq_0_then_la1 cpy #0 bne {la1} @@ -2571,9 +1275,27 @@ lsr tay //FRAGMENT vbuyy=_hi_vwuz1 ldy {z1}+1 +//FRAGMENT vbuyy=vbuaa_band_vbuc1 +and #{c1} +tay +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=_inc_vbuyy +iny //FRAGMENT vbuyy_neq_vbuc1_then_la1 cpy #{c1} bne {la1} +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuxx=vbuyy +tya +tax +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuaa=vbuxx +txa //FRAGMENT vbuaa=_dec_vbuaa sec sbc #1 @@ -2599,6 +1321,8 @@ tay //FRAGMENT vbsyy=vbsxx txa tay +//FRAGMENT vbuyy=vbuaa +tay //FRAGMENT vwuz1=vwuz1_sethi_vbuxx stx {z1}+1 //FRAGMENT vbuxx=vbuxx_minus_vbuc1 @@ -2651,6 +1375,13 @@ lda #{c1} clc adc {z2}+1 sta {z1} +//FRAGMENT vwuz1=vwuz1_rol_3 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 //FRAGMENT vwuz1=vwuz1_rol_vbuz2 ldy {z2} beq !e+ @@ -2763,6 +1494,9 @@ tay lda ({z1}),y //FRAGMENT vbuaa=pbuz1_derefidx_vbuyy lda ({z1}),y +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} //FRAGMENT vbuz1_neq_vbuz2_then_la1 lda {z1} cmp {z2} @@ -2771,12 +1505,36 @@ bne {la1} lda {z2} cmp {z1} bcc {la1} +//FRAGMENT vbuz1=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} //FRAGMENT vbuz1_neq_vbuaa_then_la1 cmp {z1} bne {la1} //FRAGMENT vbuz1_gt_vbuaa_then_la1 cmp {z1} bcc {la1} +//FRAGMENT vbuz1=vbuz1_minus_vbuaa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_minus_vbuxx +txa +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_minus_vbuyy +tya +eor #$ff +sec +adc {z1} +sta {z1} //FRAGMENT vbuz1_neq_vbuxx_then_la1 cpx {z1} bne {la1} @@ -2821,6 +1579,13 @@ bne {la1} sty $ff cpx $ff bcc {la1} +//FRAGMENT vbuyy=vbuxx +txa +tay +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} //FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 ldy {z1} tya @@ -2964,6 +1729,8 @@ lda #<{c2} sta {c1} lda #>{c2} sta {c1}+1 +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} //FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 lda {c1} cmp #{c2} @@ -2973,6 +1740,9 @@ lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 +//FRAGMENT vbsz1=vbsc1 +lda #{c1} +sta {z1} //FRAGMENT vbsz1=pbsc1_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -3000,9 +1770,18 @@ stx {z1} lax {z1} axs #-[{c1}] stx {z1} +//FRAGMENT vbuc1_neq_vbuz1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} //FRAGMENT _deref_pbuc1=_deref_pbuc2 lda {c2} sta {c1} +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +ldy #0 +sta ({z1}),y //FRAGMENT vbuz1=vbuz1_plus_vbuz2 lda {z1} clc @@ -3024,6 +1803,23 @@ sta {z1} lda #>{c1} adc #0 sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_2 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 //FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 ldy {z1} lda {z2} @@ -3042,6 +1838,10 @@ lda {c1},y sta {z1} lda {c1}+1,y sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuc1=vbuc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y //FRAGMENT vbuz1=vbuz2_ror_2 lda {z2} lsr @@ -3075,6 +1875,11 @@ sta {z1} lda #0 adc {z2}+1 sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} //FRAGMENT _deref_qbuz1=pbuz2 ldy #0 lda {z2} @@ -3090,6 +1895,11 @@ sta {z1} bcc !+ inc {z1}+1 !: +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c2},y +ldy #{c1} +sta ({z1}),y //FRAGMENT vbuz1=vbuz2_band__deref_pbuc1 lda {c1} and {z2} @@ -3104,6 +1914,10 @@ lda ({z1}),y cmp ({z3}),y beq {la1} +//FRAGMENT vbuc1_eq_vbuz1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} //FRAGMENT vbuz1_gt_0_then_la1 lda {z1} bne {la1} @@ -3183,6 +1997,17 @@ tya clc adc #{c1} tay +//FRAGMENT vbuc1_neq_vbuaa_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +sta ({z1}),y //FRAGMENT vbuz1=vbuz1_plus_vbuxx txa clc @@ -3433,6 +2258,11 @@ sta {z1}+1 asl asl sta {z1} +//FRAGMENT vbuz1=vbuxx_rol_2 +txa +asl +asl +sta {z1} //FRAGMENT vbuz1=vbuyy_rol_2 tya asl @@ -3453,10 +2283,20 @@ asl tya asl asl +//FRAGMENT vbuxx=vbuz1_rol_2 +lda {z1} +asl +asl +tax //FRAGMENT vbuxx=vbuaa_rol_2 asl asl tax +//FRAGMENT vbuxx=vbuxx_rol_2 +txa +asl +asl +tax //FRAGMENT vbuxx=vbuyy_rol_2 tya asl @@ -3481,6 +2321,10 @@ tya asl asl tay +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx +lda {c2},x +ldy #{c1} +sta ({z1}),y //FRAGMENT vbuaa=vbuz1_band__deref_pbuc1 lda {c1} and {z1} @@ -3533,6 +2377,9 @@ lda ({z1}),y cmp ({z2}),y beq {la1} +//FRAGMENT vbuc1_eq_vbuaa_then_la1 +cmp #{c1} +beq {la1} //FRAGMENT vbuaa_gt_0_then_la1 cmp #0 bne {la1} @@ -3839,6 +2686,18 @@ ldy {c1},x //FRAGMENT vbuxx_gt_0_then_la1 cpx #0 bne {la1} +//FRAGMENT vbuc1_eq_vbuxx_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuc1_eq_vbuyy_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbuc1_neq_vbuxx_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuc1_neq_vbuyy_then_la1 +cpy #{c1} +bne {la1} //FRAGMENT vbuz1=vbuyy_bor_vbuxx txa sty $ff @@ -3890,6 +2749,14 @@ sta {z1} lda {z1}+1 adc #>{c1} sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 //FRAGMENT pbuz1=pbuc1_plus_vwuz1 clc lda {z1} @@ -3909,12 +2776,17 @@ inc {z1}+1 //FRAGMENT vwsz1=vwsz1_rol_1 asl {z1} rol {z1}+1 +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} //FRAGMENT vbuz1=vbuz2_plus_vbuc1 lax {z2} axs #-[{c1}] stx {z1} //FRAGMENT vbuaa=_deref_pbuc1 lda {c1} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} //FRAGMENT vbuaa=vbuz1_plus_vbuc1 lda #{c1} clc @@ -3968,6 +2840,8 @@ txa clc adc #{c1} tay +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} //FRAGMENT vbuz1=vbuyy_plus_vbuc1 tya clc @@ -4063,6 +2937,11 @@ lda {z1} sta {c1},y lda {z1}+1 sta {c1}+1,y +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 //FRAGMENT vbuz1=_bnot_vbuz2 lda {z2} eor #$ff @@ -4842,6 +3721,15 @@ bvc !+ eor #$80 !: bmi {la1} +//FRAGMENT vduz1=vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 //FRAGMENT vwsz1_ge_0_then_la1 lda {z1}+1 bpl {la1} @@ -4871,11 +3759,38 @@ sta {z1}+1 lda #0 sta {z1}+2 sta {z1}+3 +//FRAGMENT vduz1=vduc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +lda #<{c1}>>$10 +sta {z1}+2 +lda #>{c1}>>$10 +sta {z1}+3 //FRAGMENT vwuz1_neq_0_then_la1 lda {z1} bne {la1} lda {z1}+1 bne {la1} +//FRAGMENT vbuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vduz1=vduz1_plus_vduz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +lda {z1}+2 +adc {z2}+2 +sta {z1}+2 +lda {z1}+3 +adc {z2}+3 +sta {z1}+3 //FRAGMENT vwuz1=vwuz1_ror_1 lsr {z1}+1 ror {z1} @@ -4899,6 +3814,14 @@ sta {z1} //FRAGMENT vbuz1=_byte_vwuz2 lda {z2} sta {z1} +//FRAGMENT pbuz1=_inc_pbuz2 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 //FRAGMENT vwuz1_ge_vwuz2_then_la1 lda {z2}+1 cmp {z1}+1 @@ -4925,6 +3848,25 @@ sta {z1} lda {z1}+1 sbc {z2}+1 sta {z1}+1 +//FRAGMENT vbuaa=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tax +//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tay //FRAGMENT vbuaa=_byte_vwuz1 lda {z1} //FRAGMENT vbuxx=_byte_vwuz1 @@ -4933,6 +3875,11 @@ tax //FRAGMENT vbuyy=_byte_vwuz1 lda {z1} tay +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy #0 +sta ({z1}),y //FRAGMENT pwsz1=pwsc1_plus_vwsz1 clc lda {z1} @@ -4977,6 +3924,15 @@ lda {c1},y sta {z1} lda {c1}+1,y sta {z1}+1 +//FRAGMENT pbuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: //FRAGMENT _deref_pbuz1=_inc__deref_pbuz1 ldy #0 lda ({z1}),y @@ -5031,6 +3987,10 @@ sta {c1},x lda ({z2}),y ldx {z1} sta {c1},x +//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 +lda #{c2} +cmp {c1} +bne {la1} //FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuz2)=vbuc2 lda #{c2} ldx {z2} @@ -5247,10 +4207,21 @@ tya sta {c1},y //FRAGMENT pbsc1_derefidx_vbuxx=vbsaa sta {c1},x +//FRAGMENT vbsyy=vbsc1 +ldy #{c1} +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y //FRAGMENT vbuz1=vbuz2_plus_vbuz2 lda {z2} asl sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_1 +ldy {z2} +iny +sty {z1} //FRAGMENT vwuz1=vwuz2_plus_vbuz3 lda {z3} clc @@ -5281,6 +4252,10 @@ lda ({z1}),y cmp #0 bne {la1} +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} //FRAGMENT vwuz1=vbuz2_rol_3 lda {z2} sta {z1} @@ -5318,6 +4293,10 @@ tay lda {z1} clc adc #1 +//FRAGMENT vbuz1=vbuaa_plus_1 +clc +adc #1 +sta {z1} //FRAGMENT vbuxx_eq_vbuz1_then_la1 cpx {z1} beq {la1} @@ -5354,6 +4333,9 @@ lda ({z1}),y cmp #{c1} bne {la1} +//FRAGMENT vbuz1=vbuxx_plus_1 +inx +stx {z1} //FRAGMENT pbuz1_derefidx_vbuaa_eq_vbuc1_then_la1 tay lda #{c1} @@ -5381,6 +4363,9 @@ lda ({z1}),y cmp #0 bne {la1} +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} //FRAGMENT vbuxx=vbuz1_plus_1 ldx {z1} inx @@ -5464,6 +4449,21 @@ ldx {c1}+1 ldy {c1} //FRAGMENT vbuyy=_hi__deref_pwuc1 ldy {c1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vwsz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} //FRAGMENT vwsz1=vbsc1_minus_vwsz2 NO_SYNTHESIS //FRAGMENT vwsz1=vwuc1_minus_vwsz2 @@ -5880,7 +4880,6 @@ lda ({z1}),y sta {c1},x //FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx sty $ff - txa tay lda ({z1}),y @@ -6142,6 +5141,11 @@ sta {z1} lda {c1}+1 adc #>{c2} sta {z1}+1 +//FRAGMENT _deref_qbuc1=pbuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 //FRAGMENT vbuc1_neq__deref_pbuc2_then_la1 lda #{c1} cmp {c2} @@ -6151,12 +5155,22 @@ lda {z2} ldy #{c1} sta {z1}+1 sty {z1} +//FRAGMENT vwuz1=vwuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 //FRAGMENT vbuz1=vbuz2_minus__deref_pbuz3 lda {z2} sec ldy #0 sbc ({z3}),y sta {z1} +//FRAGMENT vbsz1=_inc_vbsz1 +inc {z1} //FRAGMENT vbsz1_neq_vbsc1_then_la1 lda #{c1} cmp {z1} @@ -6178,6 +5192,10 @@ sta {z1} lda {z3} ldy {z2} sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 +lda #{c1} +ldy {z2} +sta ({z1}),y //FRAGMENT vwuz1=vwuz2_ror_1 lda {z2}+1 lsr @@ -6215,6 +5233,10 @@ sta {z1} lda {z1}+1 sbc {c1}+1,y sta {z1}+1 +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} //FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy {z2} clc @@ -6524,6 +5546,9 @@ sta {z1} lda {z1}+1 sbc {c1}+1,y sta {z1}+1 +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} //FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc @@ -6560,6 +5585,9 @@ dex //FRAGMENT vbuyy=vbuyy_minus_2 dey dey +//FRAGMENT vbuyy_eq_vbuc1_then_la1 +cpy #{c1} +beq {la1} //FRAGMENT vbuz1=vbuz2_bor_vbuyy tya ora {z2} @@ -6599,6 +5627,17 @@ cpx $ff bcc {la1} //FRAGMENT pbuz1_derefidx_vbuyy=vbuaa sta ({z1}),y +//FRAGMENT vwuz1=vwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} //FRAGMENT vbuz1_eq_vbuxx_then_la1 cpx {z1} beq {la1} @@ -6615,6 +5654,11 @@ beq {la1} sty $ff cpx $ff beq {la1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 +ldy {z3} +lda {c1},y +ldy {z2} +sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 txa ldx {z2} @@ -6625,6 +5669,10 @@ sta ({z1}),y ldx {z2} lda {c1},x sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx +lda {c1},x +ldy {z2} +sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx txa tay @@ -6633,6 +5681,10 @@ sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx lda {c1},x sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuyy +lda {c1},y +ldy {z2} +sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy lda {c1},y stx $ff @@ -7152,55 +6204,8 @@ tay tya ora #{c1} tay -//FRAGMENT vwuz1_gt_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuz1 -lda {c1} -and {z1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuz1 -lda {c1} -ora {z1} -sta {c1} -//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 -eor #{c1} -//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 -eor #{c1} -tax -//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 -eor #{c1} -tay -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuaa -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuxx -txa -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuyy -tya -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuaa -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -sta {c1} +//FRAGMENT vbsz1=_dec_vbsz1 +dec {z1} //FRAGMENT pbuz1=pbuc1_plus_vbsz2 lda {z2} clc @@ -7283,6 +6288,10 @@ txa sty $ff ora $ff tax +//FRAGMENT vbsxx=vbsc1 +ldx #{c1} +//FRAGMENT vbsxx=_dec_vbsxx +dex //FRAGMENT vduz1=vduz2_minus_vduc1 lda {z2} sec @@ -7371,6 +6380,14 @@ sta {z1} lda {z2}+1 sbc #>{c1} sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 //FRAGMENT _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda ({z1}),y @@ -7763,6 +6780,14 @@ sta {z1} //FRAGMENT vbuz1=_hi_pbuz2 lda {z2}+1 sta {z1} +//FRAGMENT pbuz1=pbuz1_plus_vwuc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 //FRAGMENT vbuc1_lt_vbuz1_then_la1 lda #{c1} cmp {z1} @@ -7771,6 +6796,10 @@ bcc {la1} lda #{c1} cmp {z1} bcs {la1} +//FRAGMENT vbuz1_ge_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcs {la1} //FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -7807,6 +6836,9 @@ sta {z1} cmp #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuxx_ge_vbuz1_then_la1 +cpx {z1} +bcs {la1} //FRAGMENT vbuz1_ge_vbuaa_then_la1 ldy {z1} sta $ff @@ -7887,6 +6919,11 @@ tay cpx #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuz1_ge_vbuxx_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} //FRAGMENT vbuc1_lt_vbuxx_then_la1 cpx #{c1} beq !+ @@ -7927,6 +6964,20 @@ bne {la1} lda {z1} cmp {z2} bne {la1} +//FRAGMENT vwuz1_le_0_then_la1 +lda {z1} +bne !+ +lda {z1}+1 +beq {la1} +!: +//FRAGMENT pbuz1=pbuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 //FRAGMENT vwuz1=vwuz2_band_vwuc1 lda {z2} and #<{c1} @@ -7960,6 +7011,14 @@ ldy #0 ora ({z1}),y ldy #0 sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 //FRAGMENT pbuz1=pbuz1_plus_vwuz2 lda {z1} clc @@ -7986,6 +7045,11 @@ bne {la1} lda {c1},y cmp #0 bne {la1} +//FRAGMENT pvoz1=pvoz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 //FRAGMENT pbuz1=pbuz2_minus_vwuc1 lda {z2} sec @@ -8035,6 +7099,10 @@ iny lda ({z1}),y sta !+ +2 !: stx $ffff +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuz1 +lda {c1} +ora {z1} +sta {c1} //FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 ldy #{c3} lda ({z1}),y @@ -8063,6 +7131,10 @@ ror {z1} lda #{c1} eor {z2} sta {z1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuz1 +lda {c1} +and {z1} +sta {c1} //FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 ldy {z1} lda {z2} @@ -8176,6 +7248,14 @@ lda ({z1}),y ldy #{c1}+1 adc ({z1}),y sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_plus_vwuc1 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 //FRAGMENT vbuz1=_neg_vbuz2 lda {z2} eor #$ff @@ -8191,6 +7271,19 @@ lda #{c2} ldy {z1} cmp {c1},y bne {la1} +//FRAGMENT vwuz1=vwuz2_rol_6 +lda {z2}+1 +lsr +sta $ff +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} //FRAGMENT vwuz1=vbuc1_plus_vwuz2 lda #{c1} clc @@ -8302,6 +7395,17 @@ tax lda #{c1} eor {z1} tay +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuaa +and {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuxx +txa +and {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuyy +tya +and {c1} +sta {c1} //FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa ldy #{c1} tax @@ -8418,6 +7522,9 @@ tax //FRAGMENT vbuyy=pbuz1_derefidx_vbuyy lda ({z1}),y tay +//FRAGMENT vbuaa_ge_vbuz1_then_la1 +cmp {z1} +bcs {la1} //FRAGMENT pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 tay lda #{c2} @@ -8493,10 +7600,22 @@ lda {z1} sta {c1},y lda {z1}+1 sta {c1}+1,y +//FRAGMENT vbuyy_ge_vbuz1_then_la1 +cpy {z1} +bcs {la1} //FRAGMENT vbuyy_ge_vbuxx_then_la1 stx $ff cpy $ff bcs {la1} +//FRAGMENT vbuz1_ge_vbuyy_then_la1 +lda {z1} +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuxx_ge_vbuyy_then_la1 +sty $ff +cpx $ff +bcs {la1} //FRAGMENT vwuz1=vwuz1_ror_3 lsr {z1}+1 ror {z1} @@ -8513,6 +7632,19 @@ asl {z1} rol {z1}+1 asl {z1} rol {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_6 +lda {z1}+1 +lsr +sta $ff +lda {z1} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} //FRAGMENT vwuz1=vbuc1_plus_vwuz1 lda #{c1} clc @@ -8585,6 +7717,13 @@ sta {z1} lda #0 rol sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 //FRAGMENT qwuz1=qwuz2_plus_vwuz3 lda {z2} clc @@ -8763,6 +7902,11 @@ sta {z1} lda {z1}+1 sbc {z2}+1 sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy {z2} +sta ({z1}),y //FRAGMENT vbuyy=pbuc1_derefidx_vbuxx ldy {c1},x //FRAGMENT _stackpullbyte_1 @@ -8785,14 +7929,31 @@ ldy {z1} lda {c1},y cmp {z2} beq {la1} +//FRAGMENT vbsz1=_sbyte_vwuz2 +lda {z2} +sta {z1} //FRAGMENT vbsz1=vbsz2_minus_vbsz3 lda {z2} sec sbc {z3} sta {z1} +//FRAGMENT vbsc1_neq_vbsz1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} //FRAGMENT vbuz1=_byte_vduz2 lda {z2} sta {z1} +//FRAGMENT vduz1=pduc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +lda {c1}+2,y +sta {z1}+2 +lda {c1}+3,y +sta {z1}+3 //FRAGMENT vduz1_ge_vduz2_then_la1 lda {z1}+3 cmp {z2}+3 @@ -8927,6 +8088,10 @@ tax sty $ff cpx $ff beq {la1} +//FRAGMENT vbsaa=_sbyte_vwuz1 +lda {z1} +//FRAGMENT vbsxx=_sbyte_vwuz1 +ldx {z1} //FRAGMENT vbsz1=vbsz2_minus_vbsaa eor #$ff sec @@ -9046,6 +8211,9 @@ tax //FRAGMENT vbsxx=vbsyy_minus_vbsyy lda #0 tax +//FRAGMENT vbsc1_neq_vbsxx_then_la1 +cpx #{c1} +bne {la1} //FRAGMENT vbuaa=_byte_vduz1 lda {z1} //FRAGMENT vbuxx=_byte_vduz1 @@ -9064,6 +8232,15 @@ lda {c1}+2,y sta {z1}+2 lda {c1}+3,y sta {z1}+3 +//FRAGMENT vduz1=pduc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +lda {c1}+2,x +sta {z1}+2 +lda {c1}+3,x +sta {z1}+3 //FRAGMENT vduz1=pduc1_derefidx_vbuyy lda {c1},y sta {z1} @@ -9106,6 +8283,15 @@ beq {la1} cpy #{c1} bcc {la1} beq {la1} +//FRAGMENT vbsaa=_inc_vbsaa +clc +adc #1 +//FRAGMENT vbsxx=_inc_vbsxx +inx +//FRAGMENT vbsyy=_sbyte_vwuz1 +ldy {z1} +//FRAGMENT vbsyy=_inc_vbsyy +iny //FRAGMENT vbuaa_lt_vbuxx_then_la1 stx $ff cmp $ff @@ -9826,6 +9012,15 @@ ora {z2} sta {z1} lda {z2}+1 sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa +tay +lda {c2},y +ldy #{c1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuyy +lda {c2},y +ldy #{c1} +sta ({z1}),y //FRAGMENT vwuz1=vwuz1_bor_vbuxx txa ora {z1} @@ -10137,10 +9332,14 @@ lda {z2} clc adc #2 sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_2 -lda {z1} +//FRAGMENT vbuz1=vbuaa_plus_2 clc adc #2 +sta {z1} +//FRAGMENT vbuz1=vbuxx_plus_2 +inx +inx +stx {z1} //FRAGMENT vbuxx=vbuz1_plus_2 ldx {z1} inx @@ -11725,6 +10924,19 @@ bne {la1} lda {z1} cmp #<{c1} bne {la1} +//FRAGMENT vwuz1=_word__deref_pbuc1 +lda {c1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_1 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 //FRAGMENT vwuz1=vwuz2_ror_4 lda {z2}+1 lsr @@ -11762,6 +10974,11 @@ bcs {la1} //FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 lda {z1} sta {c1},x +//FRAGMENT vwuz1=vwuz1_plus_1 +inc {z1} +bne !+ +inc {z1}+1 +!: //FRAGMENT vwuz1=vwuz1_rol_8 lda {z1} sta {z1}+1 @@ -11843,6 +11060,19 @@ sta {z1}+2 lda {z2}+3 adc #0 sta {z1}+3 +//FRAGMENT vwuz1=vwuz2_ror_6 +lda {z2} +asl +sta $ff +lda {z2}+1 +rol +sta {z1} +lda #0 +rol +sta {z1}+1 +asl $ff +rol {z1} +rol {z1}+1 //FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) ldx {z3} ldy {c2},x @@ -12646,180 +11876,19 @@ sta {z1} lda {z1}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT vwuz1=pbuz2_bxor_vwuc1 -lda #<{c1} -eor {z2} +//FRAGMENT vwuz1=vwuz1_ror_6 +lda {z1} +asl +sta $ff +lda {z1}+1 +rol sta {z1} -lda #>{c1} -eor {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 -ldy {z2} -lda ({z1}),y -ldy {z3} -ora {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuz3 -lda {z1} -ldy {z3} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_neg_vbuz1 -lda {z1} -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa -ldy {z2} -tax -lda ({z1}),y -ora {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuxx -ldy {z2} -lda ({z1}),y -ora {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuyy -tya -ldy {z2} -tax -lda ({z1}),y -ora {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuz2 -txa -tay -lda ({z1}),y -ldy {z2} -stx $ff -ora {c1},y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuaa -tay -txa -ldx {c1},y -tay -lda ({z1}),y -sty $ff - -stx $ff -ora $ff -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuxx -txa -tay -lda ({z1}),y -stx $ff -ora {c1},x -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuyy -txa -ldx {c1},y -tay -lda ({z1}),y -sty $ff - -stx $ff -ora $ff -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuz2 -lda ({z1}),y -sty $ff - -ldy {z2} -ora {c1},y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuaa -tax -lda ({z1}),y -sty $ff - -ora {c1},x -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuxx -lda ({z1}),y -sty $ff - -ora {c1},x -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy -lda ({z1}),y -sty $ff - -ora {c1},y -ldy $ff -sta ({z1}),y -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuaa -tay -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuxx -txa -tay -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuyy -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuz2 -ldy {z2} -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuaa -tay -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuxx -stx $ff -ldy $ff -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuyy -eor ({z1}),y -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuz2 -ldy {z2} -txa -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuaa -tay -txa -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuxx -txa -tay -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuyy -txa -eor ({z1}),y -tax -//FRAGMENT vbuyy=_neg_vbuyy -dey -tya -eor #$ff -tay -//FRAGMENT vwuz1=pbuz1_bxor_vwuc1 -lda #<{c1} -eor {z1} -sta {z1} -lda #>{c1} -eor {z1}+1 +lda #0 +rol sta {z1}+1 +asl $ff +rol {z1} +rol {z1}+1 //FRAGMENT vbsz1=vbsz2_plus_vbsc1 lax {z2} axs #-[{c1}] @@ -12999,6 +12068,28 @@ sta {z1}+1 //FRAGMENT vbuyy=pbuc1_derefidx_vbuyy lda {c1},y tay +//FRAGMENT vbsz1=vbsc1_minus_vbsz2 +lda #{c1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +sta {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +sta {z1} +//FRAGMENT vbsz1=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} +sta {z1} //FRAGMENT vbsaa=vbsc1_minus_vbsz1 lda #{c1} sec @@ -13017,6 +12108,25 @@ tya eor #$ff sec adc #{c1} +//FRAGMENT vbsxx=vbsc1_minus_vbsz1 +lda #{c1} +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsc1_minus_vbsaa +eor #$ff +tax +axs #-{c1}-1 +//FRAGMENT vbsxx=vbsc1_minus_vbsxx +txa +eor #$ff +tax +axs #-{c1}-1 +//FRAGMENT vbsxx=vbsc1_minus_vbsyy +tya +eor #$ff +tax +axs #-{c1}-1 //FRAGMENT vbsyy=vbsc1_minus_vbsz1 lda #{c1} sec @@ -13298,184 +12408,6 @@ rol {z1}+3 dex bne !- !e: -//FRAGMENT pssz1=pssc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_1 -lda {z1} -sec -sbc #1 -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_minus_1 -dec {z1} -//FRAGMENT pbsz1_derefidx_vbuc1=pbsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -ldy #{c1} -tax -lda ({z1}),y -sty $ff - -stx $ff -clc -adc $ff -ldy $ff -sta ({z1}),y -//FRAGMENT pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 -ldy #{c1} -lda ({z1}),y - -sec -sbc #{c2} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT pbsz1_derefidx_vbuc1=vbsc2 -lda #{c1} -tay -lda #{c2} -sta ({z1}),y -//FRAGMENT pwsz1_derefidx_vbuc1_gt_vwsc2_then_la1 -ldy #{c1} -lda #<{c2} -cmp ({z1}),y -iny -lda #>{c2} -sbc ({z1}),y -bvc !+ -eor #$80 -!: -bmi {la1} -!e: -//FRAGMENT pwsz1_derefidx_vbuc1_ge_vwsc2_then_la1 -ldy #{c1} -lda ({z1}),y -cmp #<{c2} -iny -lda ({z1}),y -sbc #>{c2} -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsz1_derefidx_vbuc1=pwsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -ldy #{c1} -clc -lda ({z1}),y -adc $fe -sta ({z1}),y -iny -lda ({z1}),y -adc $fe -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_ge_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -bcs {la1} -//FRAGMENT vwsz1=pwsz2_derefidx_vbuc1_ror_vbuc2 -ldx #{c2} -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -cpx #0 -beq !e+ -!: -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwsz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT pssz1=pssz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pwsz1_derefidx_vbuc1=vwsc2 -ldy #{c1} -lda #<{c2} -sta ({z1}),y -iny -lda #>{c2} -sta ({z1}),y -//FRAGMENT pbsz1_derefidx_vbuc1=vbsz2 -lda #{c1} -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_lt_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT pbsz1_derefidx_vbuc1=vbsxx -lda #{c1} -tay -txa -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuaa_lt_vbuc2_then_la1 -tay -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_lt_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_lt_vbuc2_then_la1 -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuaa_then_la1 -tay -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuxx_then_la1 -lda {c2},x -cmp #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuyy_then_la1 -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT vbuxx=vbuxx_minus_1 -dex -//FRAGMENT vbuyy=vbuyy_minus_1 -tya -tay -dey //FRAGMENT vwsz1_neq_vwsc1_then_la1 lda {z1}+1 cmp #>{c1} @@ -13514,12 +12446,6 @@ ldx {z2} ldy {c2},x ldx {c1},y stx {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz2) -ldx {z2} -ldy {c3},x -lda {c2},y -ldx {z1} -sta {c1},x //FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -13808,6 +12734,19 @@ ldy #{c2} tax lda ({z1}),y sta {c1},x +//FRAGMENT pssz1=pssc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pssz1=pssz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: //FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 ldy #{c2} tax @@ -14191,6 +13130,14 @@ lda {z2} sta {z1}+2 lda {z2}+1 sta {z1}+3 +//FRAGMENT vwuz1=vwuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 //FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuz3 lda {z2} ldy {z3} @@ -14387,6 +13334,20 @@ asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 +//FRAGMENT vduz1=vduz2_plus_vduz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +lda {z2}+2 +adc {z3}+2 +sta {z1}+2 +lda {z2}+3 +adc {z3}+3 +sta {z1}+3 //FRAGMENT vduz1=vduz2_rol_1 lda {z2} asl @@ -14423,11 +13384,28 @@ asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 +//FRAGMENT pbuz1=_deref_qbuc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vbsz1_gt_0_then_la1 +lda {z1} +cmp #0 +beq !+ +bpl {la1} +!: //FRAGMENT vbuz1=vbuc1_minus_vbuz1 lda #{c1} sec sbc {z1} sta {z1} +//FRAGMENT vbuz1=_neg_vbuz1 +lda {z1} +eor #$ff +clc +adc #$01 +sta {z1} //FRAGMENT vbsz1=vbsz2_ror_vbuz3 lda {z2} ldy {z3} @@ -14454,10 +13432,32 @@ sta {z1} //FRAGMENT vbsaa_neq_vbsc1_then_la1 cmp #{c1} bne {la1} +//FRAGMENT vbsaa_gt_0_then_la1 +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbsxx_gt_0_then_la1 +txa +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT vbsyy_gt_0_then_la1 +tya +cmp #0 +beq !+ +bpl {la1} +!: //FRAGMENT vbsyy_neq_0_then_la1 tya cmp #0 bne {la1} +//FRAGMENT vbuyy=_neg_vbuyy +dey +tya +eor #$ff +tay //FRAGMENT vbsaa=vbsz1_ror_vbuz2 lda {z1} ldy {z2} @@ -15460,6 +14460,10 @@ ldy {z2} clc adc {c1},y sta {z1} +//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 +lda #{c1} +eor {z2} +sta {z1} //FRAGMENT _deref_pwuz1=vbuc1 lda #{c1} ldy #0 @@ -15612,6 +14616,50 @@ lda #{c2} clc adc {c1},y tay +//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 +txa +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 +tya +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 +eor #{c1} +//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 +txa +eor #{c1} +//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 +tya +eor #{c1} +//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 +eor #{c1} +tax +//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tay +//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 +eor #{c1} +tay +//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tay //FRAGMENT vwuz1_lt_vbuxx_then_la1 lda {z1}+1 bne !+ @@ -15918,7 +14966,6 @@ ldy $ff sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 sty $ff - ldy {z3} lda ({z2}),y ldy $ff @@ -15936,7 +14983,6 @@ ldy $ff sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa sty $ff - tay lda ({z2}),y ldy $ff @@ -15956,7 +15002,6 @@ ldy $ff sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx sty $ff - txa tay lda ({z2}),y @@ -16314,6 +15359,11 @@ lda ({z1}),y tay lda {c2},y sta {c1},x +//FRAGMENT _deref_pwuc1=vbuc2 +lda #0 +sta {c1}+1 +lda #<{c2} +sta {c1} //FRAGMENT vboaa=vboc1 lda #{c1} //FRAGMENT vboxx=vboc1 @@ -16354,6 +15404,405 @@ iny lda {z2} ldy #0 sta ({z1}),y +//FRAGMENT vwuz1=vwuz2_minus_vbuc1 +sec +lda {z2} +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vduz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 +//FRAGMENT vwsz1_lt_vwuz2_then_la1 +lda {z1}+1 +bmi {la1} +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT vduz1=pduz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +iny +lda ({z2}),y +sta {z1}+2 +iny +lda ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuz3 +ldy {z3} +lda {z2} +clc +adc {c1},y +sta {z1} +lda {z2}+1 +adc {c1}+1,y +sta {z1}+1 +lda {z2}+2 +adc {c1}+2,y +sta {z1}+2 +lda {z2}+3 +adc {c1}+3,y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuz4 +ldy {z4} +lda {z2} +clc +adc ({z3}),y +sta {z1} +iny +lda {z2}+1 +adc ({z3}),y +sta {z1}+1 +iny +lda {z2}+2 +adc ({z3}),y +sta {z1}+2 +iny +lda {z2}+3 +adc ({z3}),y +sta {z1}+3 +//FRAGMENT vduz1=_bnot_vduz2 +lda {z2} +eor #$ff +sta {z1} +lda {z2}+1 +eor #$ff +sta {z1}+1 +lda {z2}+2 +eor #$ff +sta {z1}+2 +lda {z2}+3 +eor #$ff +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bor_vduz3 +lda {z2} +ora {z3} +sta {z1} +lda {z2}+1 +ora {z3}+1 +sta {z1}+1 +lda {z2}+2 +ora {z3}+2 +sta {z1}+2 +lda {z2}+3 +ora {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bxor_vduz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +lda {z2}+2 +eor {z3}+2 +sta {z1}+2 +lda {z2}+3 +eor {z3}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz2_band_vduz3 +lda {z2} +and {z3} +sta {z1} +lda {z2}+1 +and {z3}+1 +sta {z1}+1 +lda {z2}+2 +and {z3}+2 +sta {z1}+2 +lda {z2}+3 +and {z3}+3 +sta {z1}+3 +//FRAGMENT vbuz1=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +lda {c1},y +sta {z1} +//FRAGMENT _deref_pwuc1=_inc__deref_pwuc1 +inc {c1} +bne !+ +inc {c1}+1 +!: +//FRAGMENT _deref_pwuc1_eq_vbuc2_then_la1 +lda {c1}+1 +bne !+ +lda {c1} +cmp #{c2} +beq {la1} +!: +//FRAGMENT vwuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT _deref_(_deref_qbuc1)=_deref_pbuc2 +lda {c2} +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=vbuz1 +lda {z1} +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=_deref_(_deref_qbuc1)_bxor_vbuc2 +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +lda ($fe),y +eor #{c2} +sta ($fe),y +//FRAGMENT pbuz1=pbuc1_minus_vwuz2 +sec +lda #<{c1} +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz2 +clc +lda {z2} +adc {c1} +sta {z1} +lda {z2}+1 +adc {c1}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus__deref_pwuc1 +clc +lda {c1} +adc {z2} +sta {z1} +lda {c1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=pduz2_derefidx_vbuxx +txa +tay +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +iny +lda ({z2}),y +sta {z1}+2 +iny +lda ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuxx +lda {z2} +clc +adc {c1},x +sta {z1} +lda {z2}+1 +adc {c1}+1,x +sta {z1}+1 +lda {z2}+2 +adc {c1}+2,x +sta {z1}+2 +lda {z2}+3 +adc {c1}+3,x +sta {z1}+3 +//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuxx +txa +tay +lda {z2} +clc +adc ({z3}),y +sta {z1} +iny +lda {z2}+1 +adc ({z3}),y +sta {z1}+1 +iny +lda {z2}+2 +adc ({z3}),y +sta {z1}+2 +iny +lda {z2}+3 +adc ({z3}),y +sta {z1}+3 +//FRAGMENT vbuaa=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_(_deref_pbuc2) +ldy {c2} +ldx {c1},y +//FRAGMENT vbuyy=pbuc1_derefidx_(_deref_pbuc2) +ldx {c2} +ldy {c1},x +//FRAGMENT _deref_(_deref_qbuc1)=vbuaa +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=vbuxx +txa +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT _deref_(_deref_qbuc1)=vbuyy +tya +ldy {c1} +sty $fe +ldy {c1}+1 +sty $ff +ldy #0 +sta ($fe),y +//FRAGMENT vduz1=vduz2_bxor_vduz1 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +lda {z1}+2 +eor {z2}+2 +sta {z1}+2 +lda {z1}+3 +eor {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_bxor_vduz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +lda {z1}+2 +eor {z2}+2 +sta {z1}+2 +lda {z1}+3 +eor {z2}+3 +sta {z1}+3 +//FRAGMENT vduz1=vduz1_bor_vduz2 +lda {z2} +ora {z1} +sta {z1} +lda {z2}+1 +ora {z1}+1 +sta {z1}+1 +lda {z2}+2 +ora {z1}+2 +sta {z1}+2 +lda {z2}+3 +ora {z1}+3 +sta {z1}+3 +//FRAGMENT vbuz1=vbuz1_rol_2 +lda {z1} +asl +asl +sta {z1} +//FRAGMENT vwuz1=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_plus_pduz2_derefidx_vbuz3 +ldy {z3} +lda {z1} +clc +adc ({z2}),y +sta {z1} +iny +lda {z1}+1 +adc ({z2}),y +sta {z1}+1 +iny +lda {z1}+2 +adc ({z2}),y +sta {z1}+2 +iny +lda {z1}+3 +adc ({z2}),y +sta {z1}+3 +//FRAGMENT vduz1=vduz1_band_vduz2 +lda {z1} +and {z2} +sta {z1} +lda {z1}+1 +and {z2}+1 +sta {z1}+1 +lda {z1}+2 +and {z2}+2 +sta {z1}+2 +lda {z1}+3 +and {z2}+3 +sta {z1}+3 +//FRAGMENT pbuz1=pbuc1_minus_vwuz1 +sec +lda #<{c1} +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz1 +clc +lda {z1} +adc {c1} +sta {z1} +lda {z1}+1 +adc {c1}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_plus_pduc1_derefidx_vbuz2 +ldy {z2} +lda {z1} +clc +adc {c1},y +sta {z1} +lda {z1}+1 +adc {c1}+1,y +sta {z1}+1 +lda {z1}+2 +adc {c1}+2,y +sta {z1}+2 +lda {z1}+3 +adc {c1}+3,y +sta {z1}+3 +//FRAGMENT vduz1=vduz2_bor_vduz1 +lda {z2} +ora {z1} +sta {z1} +lda {z2}+1 +ora {z1}+1 +sta {z1}+1 +lda {z2}+2 +ora {z1}+2 +sta {z1}+2 +lda {z2}+3 +ora {z1}+3 +sta {z1}+3 //FRAGMENT vduz1=vduz2_plus_vduz1 lda {z1} clc @@ -16368,6 +15817,14 @@ sta {z1}+2 lda {z1}+3 adc {z2}+3 sta {z1}+3 +//FRAGMENT pbuz1=pbuz1_plus__deref_pwuc1 +clc +lda {c1} +adc {z1} +sta {z1} +lda {c1}+1 +adc {z1}+1 +sta {z1}+1 //FRAGMENT vbuz1=vbuxx_band_pbuz2_derefidx_vbuc1 ldy #{c1} txa @@ -17060,6 +16517,8 @@ bmi {la1} //FRAGMENT vbsyy_neq_vbsz1_then_la1 cpy {z1} bne {la1} +//FRAGMENT vbsyy=_dec_vbsyy +dey //FRAGMENT vbsyy_neq_vbsxx_then_la1 stx $ff cpy $ff @@ -18264,6 +17723,10 @@ sta {z1} lda {c1}+1,x adc {c1}+1,y sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_plus_2 +lda {z1} +clc +adc #2 //FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuz2 ldy {z2} clc @@ -18364,10 +17827,6 @@ sta {z1} lda {c1}+1,x adc {c1}+1,y sta {z1}+1 -//FRAGMENT vbuz1=vbuxx_plus_2 -inx -inx -stx {z1} //FRAGMENT vbuz1=vbuyy_plus_2 iny iny @@ -18903,6 +18362,8 @@ lda ({z1}),y cmp #0 beq {la1} +//FRAGMENT vbuxx=vbuxx_minus_1 +dex //FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa tay clc @@ -19244,6 +18705,12 @@ tya clc adc {c1} tay +//FRAGMENT vbuz1=vbuz1_minus_1 +dec {z1} +//FRAGMENT vbuyy=vbuyy_minus_1 +tya +tay +dey //FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_plus__deref_pwsz3 ldx {z2} clc @@ -19828,6 +19295,27 @@ sta {z1}+3 sta {z1}+2 sta {z1}+1 sta {z1} +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuz3 +ldx {z3} +ldy {c1},x +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: //FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuz3 ldy {z3} ldx {c1},y @@ -19870,6 +19358,26 @@ rol {z1}+3 dey bne !- !e: +//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuxx +ldy {c1},x +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +cpy #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +!e: //FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuyy ldx {c1},y lda {z2} @@ -19952,20 +19460,310 @@ ror {z1} dex bne !- !e: -//FRAGMENT vbuz1=vbuaa_plus_2 -clc -adc #2 +//FRAGMENT vwuz1_gt_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda #{c1} +cmp {z1} +bcc {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuaa +ora {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuxx +txa +ora {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuyy +tya +ora {c1} +sta {c1} +//FRAGMENT vwuz1=pbuz2_bxor_vwuc1 +lda #<{c1} +eor {z2} sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbum2 -ldy {m2} -lda {c1},y +lda #>{c1} +eor {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 +ldx {z3} +ldy {z2} +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuz3 +lda {z1} +ldy {z3} +eor ({z2}),y sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbum1 -ldy {m1} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbum1 -ldy {m1} +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa +ldy {z2} +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuxx +ldy {z2} +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuyy +tya +ldy {z2} +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuz2 +txa +ldx {z2} +tay +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuaa +tay +txa ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbum1 -ldx {m1} -ldy {c1},x +tay +lda ({z1}),y +stx $ff +ora $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuxx +txa +tay +lda ({z1}),y +stx $ff +ora {c1},x +ldy $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuyy +txa +ldx {c1},y +tay +lda ({z1}),y +stx $ff +ora $ff +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuz2 +lda ({z1}),y +ldx {z2} +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuaa +tax +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuxx +lda ({z1}),y +ora {c1},x +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy +lda ({z1}),y +ora {c1},y +sta ({z1}),y +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuaa +tay +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuxx +txa +tay +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuyy +lda {z1} +eor ({z2}),y +sta {z1} +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuz2 +ldy {z2} +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuaa +tay +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuxx +stx $ff +ldy $ff +eor ({z1}),y +//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuyy +eor ({z1}),y +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuz2 +ldy {z2} +txa +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuaa +tay +txa +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuxx +txa +tay +eor ({z1}),y +tax +//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuyy +txa +eor ({z1}),y +tax +//FRAGMENT vwuz1=pbuz1_bxor_vwuc1 +lda #<{c1} +eor {z1} +sta {z1} +lda #>{c1} +eor {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_1 +lda {z1} +sec +sbc #1 +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT pbsz1_derefidx_vbuc1=pbsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +ldy #{c1} +tax +lda ({z1}),y +stx $ff +clc +adc $ff +sta ({z1}),y +//FRAGMENT pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 +ldy #{c1} +lda ({z1}),y + +sec +sbc #{c2} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT pbsz1_derefidx_vbuc1=vbsc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT pwsz1_derefidx_vbuc1_gt_vwsc2_then_la1 +ldy #{c1} +lda #<{c2} +cmp ({z1}),y +iny +lda #>{c2} +sbc ({z1}),y +bvc !+ +eor #$80 +!: +bmi {la1} +!e: +//FRAGMENT pwsz1_derefidx_vbuc1_ge_vwsc2_then_la1 +ldy #{c1} +lda ({z1}),y +cmp #<{c2} +iny +lda ({z1}),y +sbc #>{c2} +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pwsz1_derefidx_vbuc1=pwsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +sta $fe +ora #$7f +bmi !+ +lda #0 +!: +sta $ff +ldy #{c1} +clc +lda ({z1}),y +adc $fe +sta ({z1}),y +iny +lda ({z1}),y +adc $fe +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_ge_vbuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #{c2} +bcs {la1} +//FRAGMENT vwsz1=pwsz2_derefidx_vbuc1_ror_vbuc2 +ldx #{c2} +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +cpx #0 +beq !e+ +!: +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +dex +bne !- +!e: +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwsz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT pwsz1_derefidx_vbuc1=vwsc2 +ldy #{c1} +lda #<{c2} +sta ({z1}),y +iny +lda #>{c2} +sta ({z1}),y +//FRAGMENT pbsz1_derefidx_vbuc1=vbsz2 +lda {z2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_lt_vbuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c2},y +cmp #{c1} +beq {la1} +//FRAGMENT pbsz1_derefidx_vbuc1=vbsxx +ldy #{c1} +txa +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuaa_lt_vbuc2_then_la1 +tay +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_lt_vbuc2_then_la1 +lda {c1},x +cmp #{c2} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_lt_vbuc2_then_la1 +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuaa_then_la1 +tay +lda {c2},y +cmp #{c1} +beq {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuxx_then_la1 +lda {c2},x +cmp #{c1} +beq {la1} +//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuyy_then_la1 +lda {c2},y +cmp #{c1} +beq {la1} diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 4e173505c..989b8dbac 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 10dedb3bb9 10dedb58e1 +//KICKC FRAGMENT CACHE 1005e43111 1005e44e5d //FRAGMENT vbuz1=_deref_pbuc1 lda {c1} sta {z1} diff --git a/src/main/fragment/mos6502-common/vbuaa=vbuaa_plus__hi_vwum1.asm b/src/main/fragment/mos6502-common/vbuaa=vbuaa_plus__hi_vwum1.asm new file mode 100644 index 000000000..106f287f4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbuaa=vbuaa_plus__hi_vwum1.asm @@ -0,0 +1,2 @@ +clc +adc {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vbuaa_ge_vwum1_then_la1.asm b/src/main/fragment/mos6502-common/vbuaa_ge_vwum1_then_la1.asm new file mode 100644 index 000000000..4a1349921 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbuaa_ge_vwum1_then_la1.asm @@ -0,0 +1,5 @@ +cmp {m1} +bcc !+ +lda {m1}+1 +beq {la1} +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=vbuaa_ror_1.asm b/src/main/fragment/mos6502-common/vwum1=vbuaa_ror_1.asm new file mode 100644 index 000000000..cdc466e35 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vbuaa_ror_1.asm @@ -0,0 +1,4 @@ +lsr +sta {m1} +lda #0 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1_gt_vbuaa_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_gt_vbuaa_then_la1.asm new file mode 100644 index 000000000..d98e50937 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1_gt_vbuaa_then_la1.asm @@ -0,0 +1,4 @@ +ldy {m1}+1 +bne {la1} +cmp {m1} +bcc {la1} diff --git a/src/main/fragment/mos6502-common/vwum1_gt_vbuc1_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_gt_vbuc1_then_la1.asm index f939989b2..c14cfec75 100644 --- a/src/main/fragment/mos6502-common/vwum1_gt_vbuc1_then_la1.asm +++ b/src/main/fragment/mos6502-common/vwum1_gt_vbuc1_then_la1.asm @@ -1,7 +1,5 @@ lda {m1}+1 bne {la1} -lda {m1} -cmp #{c1} -beq !+ -bcs {la1} -!: +lda #{c1} +cmp {m1} +bcc {la1} diff --git a/src/main/fragment/mos6502-common/vwum1_gt_vbuxx_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_gt_vbuxx_then_la1.asm new file mode 100644 index 000000000..ddb5f11a4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1_gt_vbuxx_then_la1.asm @@ -0,0 +1,4 @@ +lda {m1}+1 +bne {la1} +cpx {m1} +bcc {la1} diff --git a/src/main/fragment/mos6502-common/vwum1_gt_vbuyy_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_gt_vbuyy_then_la1.asm new file mode 100644 index 000000000..e890dc860 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1_gt_vbuyy_then_la1.asm @@ -0,0 +1,4 @@ +lda {m1}+1 +bne {la1} +cpy {m1} +bcc {la1} diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java index f02ad95e1..690c078c5 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java @@ -362,6 +362,8 @@ class AsmFragmentTemplateSynthesisRule { String rvalAa = ".*=.*aa.*|.*_.*aa.*|...aa_(lt|gt|le|ge|eq|neq)_.*"; String rvalXx = ".*=.*xx.*|.*_.*xx.*|...xx_(lt|gt|le|ge|eq|neq)_.*"; String rvalYy = ".*=.*yy.*|.*_.*yy.*|...yy_(lt|gt|le|ge|eq|neq)_.*"; + String rvalYy2 = ".*=.*yy.*"; + String rvalXx2 = ".*=.*xx.*"; String rvalZz = ".*=.*zz.*|.*_.*zz.*|...zz_(lt|gt|le|ge|eq|neq)_.*"; String rvalZ1 = ".*=.*z1.*|.*_.*z1.*|...z1_(lt|gt|le|ge|eq|neq)_.*"; String rvalZ2 = ".*=.*z2.*|.*_.*z2.*|...z2_(lt|gt|le|ge|eq|neq)_.*"; @@ -775,17 +777,23 @@ class AsmFragmentTemplateSynthesisRule { // Rewrite left-size C1,y to use AA and a STA C1,y synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", null, null, "vb$1aa=$2", "sta {c1},y", null, "yy")); // Rewrite C1,y to save and reload YY from $FF - synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", null, "sty $ff\n" , "vb$1aa=$2", "ldy $ff\nsta {c1},y", null)); + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", null, "sty $ff" , "vb$1aa=$2", "ldy $ff\nsta {c1},y", null)); + // Rewrite C1,y to use AA + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", null, null , "vb$1aa=$2", "sta {c1},y", null, "yy")); // Rewrite (Z1),y to save and reload YY from $FF - synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuyy=(.*)", twoZM1, "sty $ff\n" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZM1)); + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuyy=(.*)", twoZM1, "sty $ff" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZM1)); + // Rewrite (Z1),y to use AA + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuyy=(.*)", twoZM1, null , "vb$1aa=$2", "sta ({z1}),y", mapZM1, "yy")); if(targetCpu.getCpu65xx().hasRegisterZ()) // Rewrite (Z1),z to save and reload ZZ from $FF - synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuzz=(.*)", twoZM1, "stz $ff\n" , "vb$1aa=$2", "ldz $ff\nsta ({z1}),z", mapZM1)); + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuzz=(.*)", twoZM1, "stz $ff" , "vb$1aa=$2", "ldz $ff\nsta ({z1}),z", mapZM1)); // Rewrite left-size C1,x to use AA and a STA C1,x synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", null, null, "vb$1aa=$2", "sta {c1},x", null, "xx")); // Rewrite C1,x to save and reload XX from $FF - synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", null, "stx $ff\n" , "vb$1aa=$2", "ldx $ff\nsta {c1},x", null)); + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", null, "stx $ff" , "vb$1aa=$2", "ldx $ff\nsta {c1},x", null)); + // Rewrite C1,x to use AA + synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", null, null , "vb$1aa=$2", "sta {c1},x", null, "xx")); // Rewrite (Z1),x to save Y to $FF and reload it into YY synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuxx=(.*)", twoZM1, "stx $ff" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZM1)); if(targetCpu.getCpu65xx().hasRegisterZ()) @@ -904,6 +912,11 @@ class AsmFragmentTemplateSynthesisRule { // Remove any parenthesis ending up around values synths.add(new AsmFragmentTemplateSynthesisRule("(.*)\\(([vp][bwd][us][mzcaxy][123456axyz])\\)(.*)", null, null, "$1$2$3", null, null)); + // Rewrite (pbuc1_derefidx_vbuxx) to use YY + synths.add(new AsmFragmentTemplateSynthesisRule("(.*)\\(pb(.)c1_derefidx_vbuxx\\)(.*)", rvalYy+"|"+twoC1, "ldy {c1},x" , "$1vb$2yy$3", null, mapC1, "yy")); + // Rewrite 2 * (pbuc1_derefidx_vbuxx) to use YY + synths.add(new AsmFragmentTemplateSynthesisRule("(.*)\\(pb(.)c1_derefidx_vbuxx\\)(.*)\\(pb(.)c1_derefidx_vbuxx\\)(.*)", rvalYy+"|"+threeC1, "ldy {c1},x" , "$1vb$2yy$3vb$4yy$5", null, mapC1, "yy")); + synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1_(.*)", rvalYy+"|"+twoZM1, "ldy {z1}", "$1_derefidx_vbuyy_$2", null, mapZM1)); if(targetCpu.getCpu65xx().hasRegisterZ()) synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_derefidx_vbuz1_(.*)", rvalZz+"|"+twoZM1, "ldz {z1}", "$1_derefidx_vbuzz_$2", null, mapZM1)); diff --git a/src/test/ref/complex/bubbles64/bubbles64.asm b/src/test/ref/complex/bubbles64/bubbles64.asm index 28b226b52..c5a42cfbf 100644 --- a/src/test/ref/complex/bubbles64/bubbles64.asm +++ b/src/test/ref/complex/bubbles64/bubbles64.asm @@ -301,14 +301,11 @@ main: { ldy #5 tax lda (d),y - sty.z $ff stx.z $ff clc adc.z $ff - ldy.z $ff sta (d),y // if (d->vx<-32) - ldy #5 lda (d),y sec sbc #-$20 @@ -328,9 +325,8 @@ main: { !: bmi __b21 // d->ax=-1 - lda #7 - tay lda #-1 + ldy #7 sta (d),y __b21: // if (d->y>248<vy=1<x+=d->vx @@ -468,16 +463,14 @@ main: { jmp __b17 __b22: // d->vy=-1<ax=1 - lda #7 - tay lda #1 + ldy #7 sta (d),y jmp __b21 __b13: @@ -517,14 +510,12 @@ main: { lda #>$70<vx=(sbyte)i - lda #5 - tay + ldy #5 txa sta (d1),y // d->ax=1 - lda #7 - tay lda #1 + ldy #7 sta (d1),y // d->y=24<$18<vy=1<ay=1 - lda #8 - tay lda #1 + ldy #8 sta (d1),y // i+=1 inx diff --git a/src/test/ref/complex/bubbles64/bubbles64.log b/src/test/ref/complex/bubbles64/bubbles64.log index 9263a5099..10e6ebff5 100644 --- a/src/test/ref/complex/bubbles64/bubbles64.log +++ b/src/test/ref/complex/bubbles64/bubbles64.log @@ -3346,31 +3346,31 @@ Uplift Scope [$4] Uplift Scope [$5] Uplift Scope [] -Uplifting [Print00] best 71417 combination reg byte x [ Print00::v#5 Print00::v#3 Print00::v0#0 Print00::v#1 Print00::v#2 ] reg byte y [ Print00::c#5 Print00::c#2 ] reg byte y [ Print00::c#10 Print00::c#4 ] -Uplifting [GetSprite] best 70121 combination reg byte x [ GetSprite::return#2 GetSprite::t0#3 GetSprite::t0#2 ] reg byte x [ GetSprite::return#4 ] -Uplifting [AddSprite] best 68878 combination reg byte y [ AddSprite::t0#3 AddSprite::t0#2 ] reg byte x [ AddSprite::sn#1 ] -Uplifting [main] best 68458 combination zp[1]:13 [ main::i#22 main::i#9 ] zp[2]:14 [ main::d#10 main::d#2 ] zp[2]:28 [ main::$27 ] zp[2]:30 [ main::$28 ] zp[2]:17 [ main::oCount#7 main::oCount#17 main::oCount#20 main::oCount#2 ] zp[1]:16 [ main::objects#12 main::objects#9 main::objects#17 main::objects#1 main::objects#15 ] reg byte x [ main::i#12 main::i#2 ] reg byte x [ main::i#14 main::i#4 ] zp[2]:6 [ main::c#11 main::c#4 ] zp[2]:4 [ main::c#10 main::c#2 ] reg byte x [ main::i#17 main::i#7 ] zp[1]:32 [ main::$132 ] reg byte a [ main::$52 ] zp[2]:38 [ main::$112 ] zp[2]:40 [ main::$109 ] zp[2]:42 [ main::$110 ] zp[2]:10 [ main::c#16 main::c#18 main::c#7 ] zp[1]:9 [ main::type#4 main::type#10 main::type#2 ] zp[1]:26 [ main::i#11 ] zp[2]:36 [ main::$111 ] zp[1]:12 [ main::stopIt#5 main::stopIt#15 ] zp[2]:34 [ main::d1#0 ] +Uplifting [Print00] best 69937 combination reg byte x [ Print00::v#5 Print00::v#3 Print00::v0#0 Print00::v#1 Print00::v#2 ] reg byte y [ Print00::c#5 Print00::c#2 ] reg byte y [ Print00::c#10 Print00::c#4 ] +Uplifting [GetSprite] best 68641 combination reg byte x [ GetSprite::return#2 GetSprite::t0#3 GetSprite::t0#2 ] reg byte x [ GetSprite::return#4 ] +Uplifting [AddSprite] best 67398 combination reg byte y [ AddSprite::t0#3 AddSprite::t0#2 ] reg byte x [ AddSprite::sn#1 ] +Uplifting [main] best 66978 combination zp[1]:13 [ main::i#22 main::i#9 ] zp[2]:14 [ main::d#10 main::d#2 ] zp[2]:28 [ main::$27 ] zp[2]:30 [ main::$28 ] zp[2]:17 [ main::oCount#7 main::oCount#17 main::oCount#20 main::oCount#2 ] zp[1]:16 [ main::objects#12 main::objects#9 main::objects#17 main::objects#1 main::objects#15 ] reg byte x [ main::i#12 main::i#2 ] reg byte x [ main::i#14 main::i#4 ] zp[2]:6 [ main::c#11 main::c#4 ] zp[2]:4 [ main::c#10 main::c#2 ] reg byte x [ main::i#17 main::i#7 ] zp[1]:32 [ main::$132 ] reg byte a [ main::$52 ] zp[2]:38 [ main::$112 ] zp[2]:40 [ main::$109 ] zp[2]:42 [ main::$110 ] zp[2]:10 [ main::c#16 main::c#18 main::c#7 ] zp[1]:9 [ main::type#4 main::type#10 main::type#2 ] zp[1]:26 [ main::i#11 ] zp[2]:36 [ main::$111 ] zp[1]:12 [ main::stopIt#5 main::stopIt#15 ] zp[2]:34 [ main::d1#0 ] Limited combination testing to 100 combinations of 1728 possible. -Uplifting [DelSprite] best 68422 combination reg byte x [ DelSprite::sn#0 ] -Uplifting [$0] best 68422 combination -Uplifting [$1] best 68422 combination -Uplifting [$2] best 68422 combination -Uplifting [$3] best 68422 combination -Uplifting [$4] best 68422 combination -Uplifting [$5] best 68422 combination -Uplifting [] best 68422 combination +Uplifting [DelSprite] best 66942 combination reg byte x [ DelSprite::sn#0 ] +Uplifting [$0] best 66942 combination +Uplifting [$1] best 66942 combination +Uplifting [$2] best 66942 combination +Uplifting [$3] best 66942 combination +Uplifting [$4] best 66942 combination +Uplifting [$5] best 66942 combination +Uplifting [] best 66942 combination Attempting to uplift remaining variables inzp[1]:13 [ main::i#22 main::i#9 ] -Uplifting [main] best 68422 combination zp[1]:13 [ main::i#22 main::i#9 ] +Uplifting [main] best 66942 combination zp[1]:13 [ main::i#22 main::i#9 ] Attempting to uplift remaining variables inzp[1]:16 [ main::objects#12 main::objects#9 main::objects#17 main::objects#1 main::objects#15 ] -Uplifting [main] best 68422 combination zp[1]:16 [ main::objects#12 main::objects#9 main::objects#17 main::objects#1 main::objects#15 ] +Uplifting [main] best 66942 combination zp[1]:16 [ main::objects#12 main::objects#9 main::objects#17 main::objects#1 main::objects#15 ] Attempting to uplift remaining variables inzp[1]:32 [ main::$132 ] -Uplifting [main] best 68402 combination reg byte a [ main::$132 ] +Uplifting [main] best 66922 combination reg byte a [ main::$132 ] Attempting to uplift remaining variables inzp[1]:9 [ main::type#4 main::type#10 main::type#2 ] -Uplifting [main] best 68402 combination zp[1]:9 [ main::type#4 main::type#10 main::type#2 ] +Uplifting [main] best 66922 combination zp[1]:9 [ main::type#4 main::type#10 main::type#2 ] Attempting to uplift remaining variables inzp[1]:26 [ main::i#11 ] -Uplifting [main] best 68192 combination reg byte x [ main::i#11 ] +Uplifting [main] best 66712 combination reg byte x [ main::i#11 ] Attempting to uplift remaining variables inzp[1]:12 [ main::stopIt#5 main::stopIt#15 ] -Uplifting [main] best 68192 combination zp[1]:12 [ main::stopIt#5 main::stopIt#15 ] +Uplifting [main] best 66712 combination zp[1]:12 [ main::stopIt#5 main::stopIt#15 ] Allocated (was zp[2]:4) zp[2]:2 [ main::c#10 main::c#2 ] Allocated (was zp[2]:6) zp[2]:4 [ main::c#11 main::c#4 ] Allocated (was zp[1]:9) zp[1]:6 [ main::type#4 main::type#10 main::type#2 ] @@ -3826,11 +3826,9 @@ main: { ldy #5 tax lda (d),y - sty.z $ff stx.z $ff clc adc.z $ff - ldy.z $ff sta (d),y // [68] if(((signed byte*)main::d#10)[5]<-$20) goto main::@20 -- pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 ldy #5 @@ -3857,9 +3855,8 @@ main: { // main::@26 __b26: // [70] ((signed byte*)main::d#10)[7] = -1 -- pbsz1_derefidx_vbuc1=vbsc2 - lda #7 - tay lda #-1 + ldy #7 sta (d),y jmp __b21 // main::@21 @@ -3894,9 +3891,8 @@ main: { // main::@28 __b28: // [73] ((signed byte*)main::d#10)[6] = (signed byte)1<$70<$18<0 Removing instruction lda #0 Removing instruction lda #>0 Removing instruction lda #>0 +Removing instruction ldy #5 Removing instruction ldy #0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination @@ -4562,8 +4553,8 @@ Fixing long branch [101] bcc __b9 to bcs Fixing long branch [107] bcc __b9 to bcs Fixing long branch [145] bcc __b13 to bcs Fixing long branch [166] bcc __b18 to bcs -Fixing long branch [263] bmi __b20 to bpl -Fixing long branch [288] bmi __b22 to bpl +Fixing long branch [260] bmi __b20 to bpl +Fixing long branch [284] bmi __b22 to bpl FINAL SYMBOL TABLE void AddSprite(byte AddSprite::sn) @@ -4697,7 +4688,7 @@ zp[2]:28 [ main::$110 ] FINAL ASSEMBLER -Score: 62612 +Score: 60932 // File Comments // bubbles64 - Q&D C64 port of the bubbles demo from vbcc6502's NES exmaples @@ -5135,15 +5126,12 @@ main: { ldy #5 tax lda (d),y - sty.z $ff stx.z $ff clc adc.z $ff - ldy.z $ff sta (d),y // if (d->vx<-32) // [68] if(((signed byte*)main::d#10)[5]<-$20) goto main::@20 -- pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 - ldy #5 lda (d),y sec sbc #-$20 @@ -5167,9 +5155,8 @@ main: { // main::@26 // d->ax=-1 // [70] ((signed byte*)main::d#10)[7] = -1 -- pbsz1_derefidx_vbuc1=vbsc2 - lda #7 - tay lda #-1 + ldy #7 sta (d),y // main::@21 __b21: @@ -5204,9 +5191,8 @@ main: { // main::@28 // d->vy=1<vy=-1<ax=1 // [85] ((signed byte*)main::d#10)[7] = 1 -- pbsz1_derefidx_vbuc1=vbsc2 - lda #7 - tay lda #1 + ldy #7 sta (d),y jmp __b21 // main::@13 @@ -5398,15 +5382,13 @@ main: { sta (d1),y // d->vx=(sbyte)i // [95] ((signed byte*)main::d1#0)[5] = (signed byte)main::i#17 -- pbsz1_derefidx_vbuc1=vbsxx - lda #5 - tay + ldy #5 txa sta (d1),y // d->ax=1 // [96] ((signed byte*)main::d1#0)[7] = 1 -- pbsz1_derefidx_vbuc1=vbsc2 - lda #7 - tay lda #1 + ldy #7 sta (d1),y // d->y=24<vy=1<ay=1 // [99] ((signed byte*)main::d1#0)[8] = 1 -- pbsz1_derefidx_vbuc1=vbsc2 - lda #8 - tay lda #1 + ldy #8 sta (d1),y // main::@15 // i+=1 diff --git a/src/test/ref/complex/polygon/polygon.asm b/src/test/ref/complex/polygon/polygon.asm index 609a749ca..17761378e 100644 --- a/src/test/ref/complex/polygon/polygon.asm +++ b/src/test/ref/complex/polygon/polygon.asm @@ -56,10 +56,10 @@ .label PETSCII = $1000 .label COSTAB = SINTAB+$40 // The current canvas being rendered to the screen - in D018 format. - .label canvas_show_memory = $11 + .label canvas_show_memory = $13 // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. - .label canvas_show_flag = $12 + .label canvas_show_flag = $14 __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f // canvas_show_memory = toD018(SCREEN, CANVAS2) @@ -146,12 +146,12 @@ main: { // Setup 16x16 canvas for rendering .label screen = 5 .label y = 2 - .label x0 = $13 - .label y0 = $14 + .label x0 = $15 + .label y0 = $16 .label x1 = $c - .label y1 = $15 + .label y1 = $17 .label x2 = $c - .label y2 = $16 + .label y2 = $18 .label p0_idx = 7 .label p1_idx = 8 .label p2_idx = 9 @@ -389,12 +389,12 @@ kbhit: { rts } // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($1f) str, byte register(X) c, word zp($1c) num) +// memset(void* zp($20) str, byte register(X) c, word zp($1e) num) memset: { - .label end = $1c - .label dst = $1f - .label num = $1c - .label str = $1f + .label end = $1e + .label dst = $20 + .label num = $1e + .label str = $20 // if(num>0) lda.z num bne !+ @@ -493,27 +493,27 @@ clock_start: { } // Draw a EOR friendly line between two points // Uses bresenham line drawing routine -// line(byte zp($f) x1, byte zp($10) y1, byte zp($c) x2, byte zp($d) y2) +// line(byte zp($10) x1, byte zp($11) y1, byte zp($c) x2, byte zp($d) y2) line: { - .label plot2___1 = $1e - .label plot5___1 = $27 - .label x1 = $f - .label y1 = $10 + .label x1 = $10 + .label y1 = $11 .label x2 = $c .label y2 = $d - .label x = $f - .label y = $10 - .label dx = $17 - .label dy = $18 - .label sx = $19 - .label sy = $1a - .label plot1_column = $21 - .label plot2_y = $1b - .label plot2_column = $1c - .label plot3_column = $1f - .label e1 = $e - .label plot4_column = $23 - .label plot5_column = $25 + .label x = $10 + .label y = $11 + .label dx = $19 + .label dy = $1a + .label sx = $1b + .label sy = $1c + .label e2 = $12 + .label plot1_column = $22 + .label e = $e + .label plot2_y = $1d + .label plot2_column = $1e + .label plot3_column = $20 + .label e1 = $f + .label plot4_column = $24 + .label plot5_column = $26 .label plot6_column = $28 // abs_u8(x2-x1) lda.z x2 @@ -570,7 +570,7 @@ line: { // e = dy/2 lda.z dy lsr - tax + sta.z e __b6: // y += sy lda.z y @@ -578,14 +578,13 @@ line: { adc.z sy sta.z y // e += dx - txa + lda.z e clc adc.z dx - tax + sta.z e // if(e>dy) lda.z dy - stx.z $ff - cmp.z $ff + cmp.z e bcs __b7 // plot(x, y-sy) lda.z y @@ -607,13 +606,11 @@ line: { // x&7 lda #7 and.z x - sta.z plot2___1 // column[y] |= plot_bit[x&7] ldy.z plot2_y + tax lda (plot2_column),y - ldy.z plot2___1 - ora plot_bit,y - ldy.z plot2_y + ora plot_bit,x sta (plot2_column),y // x += sx lda.z x @@ -621,10 +618,10 @@ line: { adc.z sx sta.z x // e -= dy - txa + lda.z e sec sbc.z dy - tax + sta.z e __b7: // while (y != y2) lda.z y @@ -740,7 +737,7 @@ line: { // e = dx/2 lda.z dx lsr - tax + sta.z e2 plot5: // x/8 lda.z x @@ -757,13 +754,11 @@ line: { // x&7 lda #7 and.z x - sta.z plot5___1 // column[y] |= plot_bit[x&7] ldy.z y + tax lda (plot5_column),y - ldy.z plot5___1 - ora plot_bit,y - ldy.z y + ora plot_bit,x sta (plot5_column),y // x += sx lda.z x @@ -771,14 +766,13 @@ line: { adc.z sx sta.z x // e += dy - txa + lda.z e2 clc adc.z dy - tax + sta.z e2 // if(e>dx) lda.z dx - stx.z $ff - cmp.z $ff + cmp.z e2 bcs __b13 // y += sy tya @@ -786,10 +780,10 @@ line: { adc.z sy sta.z y // e -= dx - txa + lda.z e2 sec sbc.z dx - tax + sta.z e2 __b13: // while (x != x2) lda.z x @@ -818,11 +812,11 @@ line: { rts } // EOR fill from the line buffer onto the canvas -// eorfill(byte* zp($1f) canvas) +// eorfill(byte* zp($20) canvas) eorfill: { - .label canvas = $1f - .label line_column = $1c - .label fill_column = $1f + .label canvas = $20 + .label line_column = $1e + .label fill_column = $20 lda #LINE_BUFFER diff --git a/src/test/ref/complex/polygon/polygon.log b/src/test/ref/complex/polygon/polygon.log index 11984a858..dc11b3928 100644 --- a/src/test/ref/complex/polygon/polygon.log +++ b/src/test/ref/complex/polygon/polygon.log @@ -4114,34 +4114,19 @@ Removing always clobbered register reg byte a as potential for zp[1]:61 [ line:: Statement [145] line::plot2_$2 = line::plot2_$0 << 1 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [146] line::plot2_column#0 = plot_column[line::plot2_$2] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [147] line::plot2_$1 = line::x#15 & 7 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:42 [ main::x0#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:43 [ main::y0#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:44 [ main::x1#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:45 [ main::y1#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:54 [ line::dx#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:56 [ line::dy#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:58 [ line::sx#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:60 [ line::sy#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -Removing always clobbered register reg byte y as potential for zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -Removing always clobbered register reg byte y as potential for zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -Removing always clobbered register reg byte y as potential for zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:46 [ main::x2#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:47 [ main::y2#0 ] +Statement [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [149] line::x#1 = line::x#15 + line::sx#0 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [150] line::e#2 = line::e#1 - line::dy#0 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [153] line::plot3_$0 = line::x#17 >> 3 [ line::y#10 line::x#17 line::plot3_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [154] line::plot3_$2 = line::plot3_$0 << 1 [ line::y#10 line::x#17 line::plot3_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [155] line::plot3_column#0 = plot_column[line::plot3_$2] [ line::y#10 line::x#17 line::plot3_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [156] line::plot3_$1 = line::x#17 & 7 [ line::y#10 line::plot3_column#0 line::plot3_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [157] line::plot3_column#0[line::y#10] = line::plot3_column#0[line::y#10] | plot_bit[line::plot3_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [157] line::plot3_column#0[line::y#10] = line::plot3_column#0[line::y#10] | plot_bit[line::plot3_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [159] line::plot1_$0 = line::x#0 >> 3 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [160] line::plot1_$2 = line::plot1_$0 << 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [161] line::plot1_column#0 = plot_column[line::plot1_$2] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [162] line::plot1_$1 = line::x#0 & 7 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [163] line::plot1_column#0[line::y#17] = line::plot1_column#0[line::y#17] | plot_bit[line::plot1_$1] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] +Statement [163] line::plot1_column#0[line::y#17] = line::plot1_column#0[line::y#17] | plot_bit[line::plot1_$1] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [165] line::e1#0 = line::dy#0 >> 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [167] line::y#12 = line::y#11 + line::sy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] @@ -4152,16 +4137,14 @@ Statement [172] line::plot4_$0 = line::x#19 >> 3 [ line::x2#15 line::dx#0 line:: Statement [173] line::plot4_$2 = line::plot4_$0 << 1 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [174] line::plot4_column#0 = plot_column[line::plot4_$2] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [175] line::plot4_$1 = line::x#19 & 7 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [176] line::plot4_column#0[line::y#12] = line::plot4_column#0[line::y#12] | plot_bit[line::plot4_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +Statement [176] line::plot4_column#0[line::y#12] = line::plot4_column#0[line::y#12] | plot_bit[line::plot4_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [178] line::e2#0 = line::dx#0 >> 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [180] line::plot5_$0 = line::x#10 >> 3 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] Statement [181] line::plot5_$2 = line::plot5_$0 << 1 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [182] line::plot5_column#0 = plot_column[line::plot5_$2] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [183] line::plot5_$1 = line::x#10 & 7 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +Statement [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [185] line::x#12 = line::x#10 + line::sx#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [186] line::e2#1 = line::e2#3 + line::dy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [188] line::y#4 = line::y#13 + line::sy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a @@ -4170,7 +4153,7 @@ Statement [192] line::plot6_$0 = line::x#12 >> 3 [ line::x#12 line::y#15 line::p Statement [193] line::plot6_$2 = line::plot6_$0 << 1 [ line::x#12 line::y#15 line::plot6_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [194] line::plot6_column#0 = plot_column[line::plot6_$2] [ line::x#12 line::y#15 line::plot6_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [195] line::plot6_$1 = line::x#12 & 7 [ line::y#15 line::plot6_column#0 line::plot6_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [196] line::plot6_column#0[line::y#15] = line::plot6_column#0[line::y#15] | plot_bit[line::plot6_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [196] line::plot6_column#0[line::y#15] = line::plot6_column#0[line::y#15] | plot_bit[line::plot6_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [201] eorfill::eor#0 = *eorfill::line_column#2 [ eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] ( main:6::eorfill:72 [ canvas_show_memory main::canvas#10 main::p0_idx#1 main::p1_idx#1 main::p2_idx#1 eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] { { eorfill::canvas#0 = main::canvas#10 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:28 [ eorfill::x#2 eorfill::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:28 [ eorfill::x#2 eorfill::x#1 ] @@ -4239,19 +4222,19 @@ Statement [144] line::plot2_$0 = line::x#15 >> 3 [ line::dx#0 line::dy#0 line::s Statement [145] line::plot2_$2 = line::plot2_$0 << 1 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [146] line::plot2_column#0 = plot_column[line::plot2_$2] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [147] line::plot2_$1 = line::x#15 & 7 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 line::plot2_y#0 line::plot2_column#0 line::plot2_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::x#15 line::y#10 line::e#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [149] line::x#1 = line::x#15 + line::sx#0 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::e#1 line::x#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [150] line::e#2 = line::e#1 - line::dy#0 [ line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y2#13 line::y#10 line::x#1 line::e#2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [153] line::plot3_$0 = line::x#17 >> 3 [ line::y#10 line::x#17 line::plot3_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [154] line::plot3_$2 = line::plot3_$0 << 1 [ line::y#10 line::x#17 line::plot3_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [155] line::plot3_column#0 = plot_column[line::plot3_$2] [ line::y#10 line::x#17 line::plot3_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::x#17 line::plot3_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [156] line::plot3_$1 = line::x#17 & 7 [ line::y#10 line::plot3_column#0 line::plot3_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#10 line::plot3_column#0 line::plot3_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [157] line::plot3_column#0[line::y#10] = line::plot3_column#0[line::y#10] | plot_bit[line::plot3_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [157] line::plot3_column#0[line::y#10] = line::plot3_column#0[line::y#10] | plot_bit[line::plot3_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [159] line::plot1_$0 = line::x#0 >> 3 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [160] line::plot1_$2 = line::plot1_$0 << 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [161] line::plot1_column#0 = plot_column[line::plot1_$2] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [162] line::plot1_$1 = line::x#0 & 7 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::plot1_column#0 line::plot1_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [163] line::plot1_column#0[line::y#17] = line::plot1_column#0[line::y#17] | plot_bit[line::plot1_$1] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [163] line::plot1_column#0[line::y#17] = line::plot1_column#0[line::y#17] | plot_bit[line::plot1_$1] [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [165] line::e1#0 = line::dy#0 >> 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e1#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [167] line::y#12 = line::y#11 + line::sy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::e1#3 line::x#18 line::y#12 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [168] line::e1#1 = line::e1#3 + line::dx#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#18 line::y#12 line::e1#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#18 line::y#12 line::e1#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#18 line::y#12 line::e1#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#18 line::y#12 line::e1#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a @@ -4261,13 +4244,13 @@ Statement [172] line::plot4_$0 = line::x#19 >> 3 [ line::x2#15 line::dx#0 line:: Statement [173] line::plot4_$2 = line::plot4_$0 << 1 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [174] line::plot4_column#0 = plot_column[line::plot4_$2] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [175] line::plot4_$1 = line::x#19 & 7 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 line::plot4_column#0 line::plot4_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [176] line::plot4_column#0[line::y#12] = line::plot4_column#0[line::y#12] | plot_bit[line::plot4_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [176] line::plot4_column#0[line::y#12] = line::plot4_column#0[line::y#12] | plot_bit[line::plot4_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#12 line::e1#2 line::x#19 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [178] line::e2#0 = line::dx#0 >> 1 [ line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#17 line::e2#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [180] line::plot5_$0 = line::x#10 >> 3 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [181] line::plot5_$2 = line::plot5_$0 << 1 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [182] line::plot5_column#0 = plot_column[line::plot5_$2] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [183] line::plot5_$1 = line::x#10 & 7 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 line::plot5_column#0 line::plot5_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#10 line::y#13 line::e2#3 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [185] line::x#12 = line::x#10 + line::sx#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::e2#3 line::x#12 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [186] line::e2#1 = line::e2#3 + line::dy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::y#13 line::x#12 line::e2#1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [188] line::y#4 = line::y#13 + line::sy#0 [ line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x2#15 line::dx#0 line::dy#0 line::sx#0 line::sy#0 line::x#12 line::e2#1 line::y#4 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a @@ -4276,7 +4259,7 @@ Statement [192] line::plot6_$0 = line::x#12 >> 3 [ line::x#12 line::y#15 line::p Statement [193] line::plot6_$2 = line::plot6_$0 << 1 [ line::x#12 line::y#15 line::plot6_$2 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#12 line::y#15 line::plot6_$2 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [194] line::plot6_column#0 = plot_column[line::plot6_$2] [ line::x#12 line::y#15 line::plot6_column#0 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::x#12 line::y#15 line::plot6_column#0 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [195] line::plot6_$1 = line::x#12 & 7 [ line::y#15 line::plot6_column#0 line::plot6_$1 ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 line::y#15 line::plot6_column#0 line::plot6_$1 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a -Statement [196] line::plot6_column#0[line::y#15] = line::plot6_column#0[line::y#15] | plot_bit[line::plot6_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a reg byte y +Statement [196] line::plot6_column#0[line::y#15] = line::plot6_column#0[line::y#15] | plot_bit[line::plot6_$1] [ ] ( main:6::line:52 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x1#0 main::y1#0 ] { { line::x#0 = line::x1#0 main::x0#0 } { line::y#0 = line::y1#0 main::y0#0 } { line::x2#0 = line::x2#15 main::x1#0 } { line::y2#0 = line::y2#10 main::y1#0 } } main:6::line:59 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 main::x0#0 main::y0#0 main::x2#0 main::y2#0 ] { { line::x#0 = line::x1#1 main::x1#0 } { line::y#0 = line::y1#1 main::y1#0 } { line::x2#1 = line::x2#15 main::x2#0 } { line::y2#1 = line::y2#10 main::y2#0 } } main:6::line:64 [ canvas_show_memory canvas_show_flag main::p0_idx#2 main::p1_idx#2 main::p2_idx#2 main::canvas#10 ] { { line::x#0 = line::x1#2 main::x2#0 } { line::y#0 = line::y1#2 main::y2#0 } { line::x2#15 = line::x2#2 main::x0#0 } { line::y2#10 = line::y2#2 main::y0#0 } } ) always clobbers reg byte a Statement [201] eorfill::eor#0 = *eorfill::line_column#2 [ eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] ( main:6::eorfill:72 [ canvas_show_memory main::canvas#10 main::p0_idx#1 main::p1_idx#1 main::p2_idx#1 eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] { { eorfill::canvas#0 = main::canvas#10 } } ) always clobbers reg byte a reg byte y Statement [202] *eorfill::fill_column#2 = eorfill::eor#0 [ eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] ( main:6::eorfill:72 [ canvas_show_memory main::canvas#10 main::p0_idx#1 main::p1_idx#1 main::p2_idx#1 eorfill::x#2 eorfill::line_column#2 eorfill::fill_column#2 eorfill::eor#0 ] { { eorfill::canvas#0 = main::canvas#10 } } ) always clobbers reg byte y Statement [205] eorfill::line_column#1 = eorfill::line_column#2 + (byte)$10*8 [ eorfill::x#2 eorfill::fill_column#2 eorfill::line_column#1 ] ( main:6::eorfill:72 [ canvas_show_memory main::canvas#10 main::p0_idx#1 main::p1_idx#1 main::p2_idx#1 eorfill::x#2 eorfill::fill_column#2 eorfill::line_column#1 ] { { eorfill::canvas#0 = main::canvas#10 } } ) always clobbers reg byte a @@ -4296,13 +4279,13 @@ Potential registers zp[2]:14 [ memset::num#4 ] : zp[2]:14 , Potential registers zp[2]:16 [ memset::str#5 ] : zp[2]:16 , Potential registers zp[1]:18 [ memset::c#6 ] : zp[1]:18 , reg byte x , Potential registers zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:19 , -Potential registers zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] : zp[1]:21 , reg byte x , -Potential registers zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] : zp[1]:22 , reg byte x , -Potential registers zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] : zp[1]:23 , reg byte x , -Potential registers zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] : zp[1]:24 , reg byte x , -Potential registers zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] : zp[1]:25 , reg byte x , -Potential registers zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] : zp[1]:26 , reg byte x , -Potential registers zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] : zp[1]:27 , reg byte x , +Potential registers zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] : zp[1]:21 , reg byte x , reg byte y , +Potential registers zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] : zp[1]:22 , reg byte x , reg byte y , +Potential registers zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] : zp[1]:23 , reg byte x , reg byte y , +Potential registers zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] : zp[1]:24 , reg byte x , reg byte y , +Potential registers zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] : zp[1]:25 , reg byte x , reg byte y , +Potential registers zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] : zp[1]:26 , reg byte x , reg byte y , +Potential registers zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] : zp[1]:27 , reg byte x , reg byte y , Potential registers zp[1]:28 [ eorfill::x#2 eorfill::x#1 ] : zp[1]:28 , reg byte x , Potential registers zp[2]:29 [ eorfill::line_column#2 eorfill::line_column#1 ] : zp[2]:29 , Potential registers zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ] : zp[2]:31 , @@ -4315,23 +4298,23 @@ Potential registers zp[1]:38 [ canvas_show_memory ] : zp[1]:38 , Potential registers zp[1]:39 [ canvas_show_flag ] : zp[1]:39 , Potential registers zp[1]:40 [ kbhit::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:41 [ irq_bottom_2::$0 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ main::x0#0 ] : zp[1]:42 , reg byte x , -Potential registers zp[1]:43 [ main::y0#0 ] : zp[1]:43 , reg byte x , -Potential registers zp[1]:44 [ main::x1#0 ] : zp[1]:44 , reg byte x , -Potential registers zp[1]:45 [ main::y1#0 ] : zp[1]:45 , reg byte x , -Potential registers zp[1]:46 [ main::x2#0 ] : zp[1]:46 , reg byte x , -Potential registers zp[1]:47 [ main::y2#0 ] : zp[1]:47 , reg byte x , +Potential registers zp[1]:42 [ main::x0#0 ] : zp[1]:42 , reg byte x , reg byte y , +Potential registers zp[1]:43 [ main::y0#0 ] : zp[1]:43 , reg byte x , reg byte y , +Potential registers zp[1]:44 [ main::x1#0 ] : zp[1]:44 , reg byte x , reg byte y , +Potential registers zp[1]:45 [ main::y1#0 ] : zp[1]:45 , reg byte x , reg byte y , +Potential registers zp[1]:46 [ main::x2#0 ] : zp[1]:46 , reg byte x , reg byte y , +Potential registers zp[1]:47 [ main::y2#0 ] : zp[1]:47 , reg byte x , reg byte y , Potential registers zp[2]:48 [ main::canvas#1 ] : zp[2]:48 , Potential registers zp[1]:50 [ kbhit::return#0 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:51 [ memset::end#0 ] : zp[2]:51 , Potential registers zp[1]:53 [ abs_u8::return#0 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:54 [ line::dx#0 ] : zp[1]:54 , reg byte x , +Potential registers zp[1]:54 [ line::dx#0 ] : zp[1]:54 , reg byte x , reg byte y , Potential registers zp[1]:55 [ abs_u8::return#1 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:56 [ line::dy#0 ] : zp[1]:56 , reg byte x , +Potential registers zp[1]:56 [ line::dy#0 ] : zp[1]:56 , reg byte x , reg byte y , Potential registers zp[1]:57 [ sgn_u8::return#0 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:58 [ line::sx#0 ] : zp[1]:58 , reg byte x , +Potential registers zp[1]:58 [ line::sx#0 ] : zp[1]:58 , reg byte x , reg byte y , Potential registers zp[1]:59 [ sgn_u8::return#1 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ line::sy#0 ] : zp[1]:60 , reg byte x , +Potential registers zp[1]:60 [ line::sy#0 ] : zp[1]:60 , reg byte x , reg byte y , Potential registers zp[1]:61 [ line::plot2_y#0 ] : zp[1]:61 , reg byte x , reg byte y , Potential registers zp[1]:62 [ line::plot2_$0 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:63 [ line::plot2_$2 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , @@ -4382,114 +4365,114 @@ Uplift Scope [setup_irq] Uplift Scope [irq_bottom_1] Uplift Scope [__start] -Uplifting [eorfill] best 131688 combination reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] zp[2]:29 [ eorfill::line_column#2 eorfill::line_column#1 ] -Uplifting [memset] best 131576 combination zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:51 [ memset::end#0 ] reg byte x [ memset::c#6 ] zp[2]:14 [ memset::num#4 ] zp[2]:16 [ memset::str#5 ] -Uplifting [abs_u8] best 131539 combination reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte x [ abs_u8::$0 ] reg byte a [ abs_u8::return#0 ] reg byte a [ abs_u8::return#1 ] +Uplifting [eorfill] best 130779 combination reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] zp[2]:29 [ eorfill::line_column#2 eorfill::line_column#1 ] +Uplifting [memset] best 130667 combination zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:51 [ memset::end#0 ] reg byte x [ memset::c#6 ] zp[2]:14 [ memset::num#4 ] zp[2]:16 [ memset::str#5 ] +Uplifting [abs_u8] best 130630 combination reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte x [ abs_u8::$0 ] reg byte a [ abs_u8::return#0 ] reg byte a [ abs_u8::return#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [sgn_u8] best 131512 combination reg byte a [ sgn_u8::$0 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#0 ] reg byte a [ sgn_u8::return#1 ] zp[1]:37 [ sgn_u8::return#4 ] +Uplifting [sgn_u8] best 130603 combination reg byte a [ sgn_u8::$0 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#0 ] reg byte a [ sgn_u8::return#1 ] zp[1]:37 [ sgn_u8::return#4 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 129482 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:5 [ main::screen#5 main::screen#1 ] zp[2]:10 [ main::canvas#10 main::canvas#19 ] zp[2]:3 [ main::cols#5 main::cols#1 ] zp[1]:46 [ main::x2#0 ] zp[1]:47 [ main::y2#0 ] zp[1]:44 [ main::x1#0 ] zp[1]:45 [ main::y1#0 ] zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] zp[2]:48 [ main::canvas#1 ] zp[1]:42 [ main::x0#0 ] zp[1]:43 [ main::y0#0 ] -Limited combination testing to 100 combinations of 13824 possible. -Uplifting [] best 129482 combination zp[1]:39 [ canvas_show_flag ] zp[1]:38 [ canvas_show_memory ] -Uplifting [kbhit] best 129470 combination reg byte a [ kbhit::return#0 ] reg byte a [ kbhit::return#2 ] -Uplifting [irq_bottom_2] best 129464 combination reg byte a [ irq_bottom_2::$0 ] -Uplifting [MOS6526_CIA] best 129464 combination -Uplifting [MOS6569_VICII] best 129464 combination -Uplifting [MOS6581_SID] best 129464 combination -Uplifting [clock_start] best 129464 combination -Uplifting [RADIX] best 129464 combination -Uplifting [printf_format_number] best 129464 combination -Uplifting [printf_buffer_number] best 129464 combination -Uplifting [printf_format_string] best 129464 combination -Uplifting [setup_irq] best 129464 combination -Uplifting [irq_bottom_1] best 129464 combination -Uplifting [__start] best 129464 combination +Uplifting [main] best 128573 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:5 [ main::screen#5 main::screen#1 ] zp[2]:10 [ main::canvas#10 main::canvas#19 ] zp[2]:3 [ main::cols#5 main::cols#1 ] zp[1]:46 [ main::x2#0 ] zp[1]:47 [ main::y2#0 ] zp[1]:44 [ main::x1#0 ] zp[1]:45 [ main::y1#0 ] zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] zp[2]:48 [ main::canvas#1 ] zp[1]:42 [ main::x0#0 ] zp[1]:43 [ main::y0#0 ] +Limited combination testing to 100 combinations of 157464 possible. +Uplifting [] best 128573 combination zp[1]:39 [ canvas_show_flag ] zp[1]:38 [ canvas_show_memory ] +Uplifting [kbhit] best 128561 combination reg byte a [ kbhit::return#0 ] reg byte a [ kbhit::return#2 ] +Uplifting [irq_bottom_2] best 128555 combination reg byte a [ irq_bottom_2::$0 ] +Uplifting [MOS6526_CIA] best 128555 combination +Uplifting [MOS6569_VICII] best 128555 combination +Uplifting [MOS6581_SID] best 128555 combination +Uplifting [clock_start] best 128555 combination +Uplifting [RADIX] best 128555 combination +Uplifting [printf_format_number] best 128555 combination +Uplifting [printf_buffer_number] best 128555 combination +Uplifting [printf_format_string] best 128555 combination +Uplifting [setup_irq] best 128555 combination +Uplifting [irq_bottom_1] best 128555 combination +Uplifting [__start] best 128555 combination Attempting to uplift remaining variables inzp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -Uplifting [line] best 129464 combination zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] +Uplifting [line] best 128555 combination zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] Attempting to uplift remaining variables inzp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] -Uplifting [line] best 129464 combination zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +Uplifting [line] best 128555 combination zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] Attempting to uplift remaining variables inzp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -Uplifting [line] best 129464 combination zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] +Uplifting [line] best 128555 combination zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] Attempting to uplift remaining variables inzp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] -Uplifting [line] best 129363 combination reg byte x [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +Uplifting [line] best 128555 combination zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] Attempting to uplift remaining variables inzp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] -Uplifting [line] best 129262 combination reg byte x [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] +Uplifting [line] best 128555 combination zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] Attempting to uplift remaining variables inzp[1]:62 [ line::plot2_$0 ] -Uplifting [line] best 128662 combination reg byte a [ line::plot2_$0 ] +Uplifting [line] best 127955 combination reg byte a [ line::plot2_$0 ] Attempting to uplift remaining variables inzp[1]:63 [ line::plot2_$2 ] -Uplifting [line] best 128262 combination reg byte a [ line::plot2_$2 ] +Uplifting [line] best 127555 combination reg byte a [ line::plot2_$2 ] Attempting to uplift remaining variables inzp[1]:66 [ line::plot2_$1 ] -Uplifting [line] best 128262 combination zp[1]:66 [ line::plot2_$1 ] +Uplifting [line] best 127155 combination reg byte a [ line::plot2_$1 ] Attempting to uplift remaining variables inzp[1]:77 [ line::plot4_$0 ] -Uplifting [line] best 127662 combination reg byte a [ line::plot4_$0 ] +Uplifting [line] best 126555 combination reg byte a [ line::plot4_$0 ] Attempting to uplift remaining variables inzp[1]:78 [ line::plot4_$2 ] -Uplifting [line] best 127262 combination reg byte a [ line::plot4_$2 ] +Uplifting [line] best 126155 combination reg byte a [ line::plot4_$2 ] Attempting to uplift remaining variables inzp[1]:81 [ line::plot4_$1 ] -Uplifting [line] best 126862 combination reg byte a [ line::plot4_$1 ] +Uplifting [line] best 125755 combination reg byte a [ line::plot4_$1 ] Attempting to uplift remaining variables inzp[1]:82 [ line::plot5_$0 ] -Uplifting [line] best 126262 combination reg byte a [ line::plot5_$0 ] +Uplifting [line] best 125155 combination reg byte a [ line::plot5_$0 ] Attempting to uplift remaining variables inzp[1]:83 [ line::plot5_$2 ] -Uplifting [line] best 125862 combination reg byte a [ line::plot5_$2 ] +Uplifting [line] best 124755 combination reg byte a [ line::plot5_$2 ] Attempting to uplift remaining variables inzp[1]:86 [ line::plot5_$1 ] -Uplifting [line] best 125862 combination zp[1]:86 [ line::plot5_$1 ] +Uplifting [line] best 124355 combination reg byte a [ line::plot5_$1 ] Attempting to uplift remaining variables inzp[1]:61 [ line::plot2_y#0 ] -Uplifting [line] best 125862 combination zp[1]:61 [ line::plot2_y#0 ] +Uplifting [line] best 124355 combination zp[1]:61 [ line::plot2_y#0 ] Attempting to uplift remaining variables inzp[1]:60 [ line::sy#0 ] -Uplifting [line] best 125862 combination zp[1]:60 [ line::sy#0 ] +Uplifting [line] best 124355 combination zp[1]:60 [ line::sy#0 ] Attempting to uplift remaining variables inzp[1]:56 [ line::dy#0 ] -Uplifting [line] best 125862 combination zp[1]:56 [ line::dy#0 ] +Uplifting [line] best 124355 combination zp[1]:56 [ line::dy#0 ] Attempting to uplift remaining variables inzp[1]:54 [ line::dx#0 ] -Uplifting [line] best 125862 combination zp[1]:54 [ line::dx#0 ] +Uplifting [line] best 124355 combination zp[1]:54 [ line::dx#0 ] Attempting to uplift remaining variables inzp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -Uplifting [line] best 125862 combination zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] +Uplifting [line] best 124355 combination zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] Attempting to uplift remaining variables inzp[1]:58 [ line::sx#0 ] -Uplifting [line] best 125862 combination zp[1]:58 [ line::sx#0 ] +Uplifting [line] best 124355 combination zp[1]:58 [ line::sx#0 ] Attempting to uplift remaining variables inzp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] -Uplifting [line] best 125862 combination zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] +Uplifting [line] best 124355 combination zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] Attempting to uplift remaining variables inzp[1]:67 [ line::plot3_$0 ] -Uplifting [line] best 125856 combination reg byte a [ line::plot3_$0 ] +Uplifting [line] best 124349 combination reg byte a [ line::plot3_$0 ] Attempting to uplift remaining variables inzp[1]:68 [ line::plot3_$2 ] -Uplifting [line] best 125852 combination reg byte a [ line::plot3_$2 ] +Uplifting [line] best 124345 combination reg byte a [ line::plot3_$2 ] Attempting to uplift remaining variables inzp[1]:71 [ line::plot3_$1 ] -Uplifting [line] best 125848 combination reg byte a [ line::plot3_$1 ] +Uplifting [line] best 124341 combination reg byte a [ line::plot3_$1 ] Attempting to uplift remaining variables inzp[1]:72 [ line::plot1_$0 ] -Uplifting [line] best 125842 combination reg byte a [ line::plot1_$0 ] +Uplifting [line] best 124335 combination reg byte a [ line::plot1_$0 ] Attempting to uplift remaining variables inzp[1]:73 [ line::plot1_$2 ] -Uplifting [line] best 125838 combination reg byte a [ line::plot1_$2 ] +Uplifting [line] best 124331 combination reg byte a [ line::plot1_$2 ] Attempting to uplift remaining variables inzp[1]:76 [ line::plot1_$1 ] -Uplifting [line] best 125834 combination reg byte a [ line::plot1_$1 ] +Uplifting [line] best 124327 combination reg byte a [ line::plot1_$1 ] Attempting to uplift remaining variables inzp[1]:87 [ line::plot6_$0 ] -Uplifting [line] best 125828 combination reg byte a [ line::plot6_$0 ] +Uplifting [line] best 124321 combination reg byte a [ line::plot6_$0 ] Attempting to uplift remaining variables inzp[1]:88 [ line::plot6_$2 ] -Uplifting [line] best 125824 combination reg byte a [ line::plot6_$2 ] +Uplifting [line] best 124317 combination reg byte a [ line::plot6_$2 ] Attempting to uplift remaining variables inzp[1]:91 [ line::plot6_$1 ] -Uplifting [line] best 125820 combination reg byte a [ line::plot6_$1 ] +Uplifting [line] best 124313 combination reg byte a [ line::plot6_$1 ] Attempting to uplift remaining variables inzp[1]:37 [ sgn_u8::return#4 ] -Uplifting [sgn_u8] best 125808 combination reg byte a [ sgn_u8::return#4 ] +Uplifting [sgn_u8] best 124301 combination reg byte a [ sgn_u8::return#4 ] Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ] -Uplifting [main] best 125808 combination zp[1]:2 [ main::y#2 main::y#1 ] +Uplifting [main] best 124301 combination zp[1]:2 [ main::y#2 main::y#1 ] Attempting to uplift remaining variables inzp[1]:46 [ main::x2#0 ] -Uplifting [main] best 125808 combination zp[1]:46 [ main::x2#0 ] +Uplifting [main] best 124301 combination zp[1]:46 [ main::x2#0 ] Attempting to uplift remaining variables inzp[1]:47 [ main::y2#0 ] -Uplifting [main] best 125808 combination zp[1]:47 [ main::y2#0 ] +Uplifting [main] best 124301 combination zp[1]:47 [ main::y2#0 ] Attempting to uplift remaining variables inzp[1]:44 [ main::x1#0 ] -Uplifting [main] best 125808 combination zp[1]:44 [ main::x1#0 ] +Uplifting [main] best 124301 combination zp[1]:44 [ main::x1#0 ] Attempting to uplift remaining variables inzp[1]:45 [ main::y1#0 ] -Uplifting [main] best 125808 combination zp[1]:45 [ main::y1#0 ] +Uplifting [main] best 124301 combination zp[1]:45 [ main::y1#0 ] Attempting to uplift remaining variables inzp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] -Uplifting [main] best 125808 combination zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] +Uplifting [main] best 124301 combination zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] Attempting to uplift remaining variables inzp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] -Uplifting [main] best 125808 combination zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] +Uplifting [main] best 124301 combination zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] Attempting to uplift remaining variables inzp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] -Uplifting [main] best 125808 combination zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] +Uplifting [main] best 124301 combination zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] Attempting to uplift remaining variables inzp[1]:39 [ canvas_show_flag ] -Uplifting [] best 125808 combination zp[1]:39 [ canvas_show_flag ] +Uplifting [] best 124301 combination zp[1]:39 [ canvas_show_flag ] Attempting to uplift remaining variables inzp[1]:42 [ main::x0#0 ] -Uplifting [main] best 125808 combination zp[1]:42 [ main::x0#0 ] +Uplifting [main] best 124301 combination zp[1]:42 [ main::x0#0 ] Attempting to uplift remaining variables inzp[1]:43 [ main::y0#0 ] -Uplifting [main] best 125808 combination zp[1]:43 [ main::y0#0 ] +Uplifting [main] best 124301 combination zp[1]:43 [ main::y0#0 ] Attempting to uplift remaining variables inzp[1]:38 [ canvas_show_memory ] -Uplifting [] best 125808 combination zp[1]:38 [ canvas_show_memory ] +Uplifting [] best 124301 combination zp[1]:38 [ canvas_show_memory ] Coalescing zero page register [ zp[2]:10 [ main::canvas#10 main::canvas#19 ] ] with [ zp[2]:48 [ main::canvas#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:14 [ memset::num#4 ] ] with [ zp[2]:51 [ memset::end#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:16 [ memset::str#5 ] ] with [ zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 @@ -4501,27 +4484,27 @@ Coalescing zero page register [ zp[2]:64 [ line::plot2_column#0 ] ] with [ zp[2] Coalescing zero page register [ zp[2]:69 [ line::plot3_column#0 ] ] with [ zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] ] Allocated (was zp[1]:21) zp[1]:12 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 ] Allocated (was zp[1]:22) zp[1]:13 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -Allocated (was zp[1]:24) zp[1]:14 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] -Allocated (was zp[1]:25) zp[1]:15 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -Allocated (was zp[1]:26) zp[1]:16 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -Allocated (was zp[1]:38) zp[1]:17 [ canvas_show_memory ] -Allocated (was zp[1]:39) zp[1]:18 [ canvas_show_flag ] -Allocated (was zp[1]:42) zp[1]:19 [ main::x0#0 ] -Allocated (was zp[1]:43) zp[1]:20 [ main::y0#0 ] -Allocated (was zp[1]:45) zp[1]:21 [ main::y1#0 ] -Allocated (was zp[1]:47) zp[1]:22 [ main::y2#0 ] -Allocated (was zp[1]:54) zp[1]:23 [ line::dx#0 ] -Allocated (was zp[1]:56) zp[1]:24 [ line::dy#0 ] -Allocated (was zp[1]:58) zp[1]:25 [ line::sx#0 ] -Allocated (was zp[1]:60) zp[1]:26 [ line::sy#0 ] -Allocated (was zp[1]:61) zp[1]:27 [ line::plot2_y#0 ] -Allocated (was zp[2]:64) zp[2]:28 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] -Allocated (was zp[1]:66) zp[1]:30 [ line::plot2_$1 ] -Allocated (was zp[2]:69) zp[2]:31 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated (was zp[2]:74) zp[2]:33 [ line::plot1_column#0 ] -Allocated (was zp[2]:79) zp[2]:35 [ line::plot4_column#0 ] -Allocated (was zp[2]:84) zp[2]:37 [ line::plot5_column#0 ] -Allocated (was zp[1]:86) zp[1]:39 [ line::plot5_$1 ] +Allocated (was zp[1]:23) zp[1]:14 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] +Allocated (was zp[1]:24) zp[1]:15 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +Allocated (was zp[1]:25) zp[1]:16 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] +Allocated (was zp[1]:26) zp[1]:17 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] +Allocated (was zp[1]:27) zp[1]:18 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +Allocated (was zp[1]:38) zp[1]:19 [ canvas_show_memory ] +Allocated (was zp[1]:39) zp[1]:20 [ canvas_show_flag ] +Allocated (was zp[1]:42) zp[1]:21 [ main::x0#0 ] +Allocated (was zp[1]:43) zp[1]:22 [ main::y0#0 ] +Allocated (was zp[1]:45) zp[1]:23 [ main::y1#0 ] +Allocated (was zp[1]:47) zp[1]:24 [ main::y2#0 ] +Allocated (was zp[1]:54) zp[1]:25 [ line::dx#0 ] +Allocated (was zp[1]:56) zp[1]:26 [ line::dy#0 ] +Allocated (was zp[1]:58) zp[1]:27 [ line::sx#0 ] +Allocated (was zp[1]:60) zp[1]:28 [ line::sy#0 ] +Allocated (was zp[1]:61) zp[1]:29 [ line::plot2_y#0 ] +Allocated (was zp[2]:64) zp[2]:30 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] +Allocated (was zp[2]:69) zp[2]:32 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated (was zp[2]:74) zp[2]:34 [ line::plot1_column#0 ] +Allocated (was zp[2]:79) zp[2]:36 [ line::plot4_column#0 ] +Allocated (was zp[2]:84) zp[2]:38 [ line::plot5_column#0 ] Allocated (was zp[2]:89) zp[2]:40 [ line::plot6_column#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -4586,10 +4569,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label PETSCII = $1000 .label COSTAB = SINTAB+$40 // The current canvas being rendered to the screen - in D018 format. - .label canvas_show_memory = $11 + .label canvas_show_memory = $13 // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. - .label canvas_show_flag = $12 + .label canvas_show_flag = $14 // __start __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f @@ -4737,12 +4720,12 @@ main: { // Setup 16x16 canvas for rendering .label screen = 5 .label y = 2 - .label x0 = $13 - .label y0 = $14 + .label x0 = $15 + .label y0 = $16 .label x1 = $c - .label y1 = $15 + .label y1 = $17 .label x2 = $c - .label y2 = $16 + .label y2 = $18 .label p0_idx = 7 .label p1_idx = 8 .label p2_idx = 9 @@ -5142,12 +5125,12 @@ kbhit: { } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($1f) str, byte register(X) c, word zp($1c) num) +// memset(void* zp($20) str, byte register(X) c, word zp($1e) num) memset: { - .label end = $1c - .label dst = $1f - .label num = $1c - .label str = $1f + .label end = $1e + .label dst = $20 + .label num = $1e + .label str = $20 // [93] if(memset::num#4<=0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ @@ -5268,27 +5251,27 @@ clock_start: { // line // Draw a EOR friendly line between two points // Uses bresenham line drawing routine -// line(byte zp($f) x1, byte zp($10) y1, byte zp($c) x2, byte zp($d) y2) +// line(byte zp($10) x1, byte zp($11) y1, byte zp($c) x2, byte zp($d) y2) line: { - .label plot2___1 = $1e - .label plot5___1 = $27 - .label x1 = $f - .label y1 = $10 + .label x1 = $10 + .label y1 = $11 .label x2 = $c .label y2 = $d - .label x = $f - .label y = $10 - .label dx = $17 - .label dy = $18 - .label sx = $19 - .label sy = $1a - .label plot1_column = $21 - .label plot2_y = $1b - .label plot2_column = $1c - .label plot3_column = $1f - .label e1 = $e - .label plot4_column = $23 - .label plot5_column = $25 + .label x = $10 + .label y = $11 + .label dx = $19 + .label dy = $1a + .label sx = $1b + .label sy = $1c + .label e2 = $12 + .label plot1_column = $22 + .label e = $e + .label plot2_y = $1d + .label plot2_column = $1e + .label plot3_column = $20 + .label e1 = $f + .label plot4_column = $24 + .label plot5_column = $26 .label plot6_column = $28 // [116] abs_u8::u#0 = line::x2#15 - line::x#0 -- vbuaa=vbuz1_minus_vbuz2 lda.z x2 @@ -5384,10 +5367,10 @@ line: { jmp __b5 // line::@5 __b5: - // [138] line::e#0 = line::dy#0 >> 1 -- vbuxx=vbuz1_ror_1 + // [138] line::e#0 = line::dy#0 >> 1 -- vbuz1=vbuz2_ror_1 lda.z dy lsr - tax + sta.z e // [139] phi from line::@5 line::@7 to line::@6 [phi:line::@5/line::@7->line::@6] __b6_from___b5: __b6_from___b7: @@ -5402,15 +5385,14 @@ line: { clc adc.z sy sta.z y - // [141] line::e#1 = line::e#3 + line::dx#0 -- vbuxx=vbuxx_plus_vbuz1 - txa + // [141] line::e#1 = line::e#3 + line::dx#0 -- vbuz1=vbuz1_plus_vbuz2 + lda.z e clc adc.z dx - tax - // [142] if(line::e#1<=line::dy#0) goto line::@7 -- vbuxx_le_vbuz1_then_la1 + sta.z e + // [142] if(line::e#1<=line::dy#0) goto line::@7 -- vbuz1_le_vbuz2_then_la1 lda.z dy - stx.z $ff - cmp.z $ff + cmp.z e bcs __b7_from___b6 jmp __b8 // line::@8 @@ -5436,16 +5418,14 @@ line: { sta.z plot2_column lda plot_column+1,y sta.z plot2_column+1 - // [147] line::plot2_$1 = line::x#15 & 7 -- vbuz1=vbuz2_band_vbuc1 + // [147] line::plot2_$1 = line::x#15 & 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and.z x - sta.z plot2___1 - // [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 + // [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa ldy.z plot2_y + tax lda (plot2_column),y - ldy.z plot2___1 - ora plot_bit,y - ldy.z plot2_y + ora plot_bit,x sta (plot2_column),y jmp __b16 // line::@16 @@ -5455,11 +5435,11 @@ line: { clc adc.z sx sta.z x - // [150] line::e#2 = line::e#1 - line::dy#0 -- vbuxx=vbuxx_minus_vbuz1 - txa + // [150] line::e#2 = line::e#1 - line::dy#0 -- vbuz1=vbuz1_minus_vbuz2 + lda.z e sec sbc.z dy - tax + sta.z e // [151] phi from line::@16 line::@6 to line::@7 [phi:line::@16/line::@6->line::@7] __b7_from___b16: __b7_from___b6: @@ -5496,7 +5476,6 @@ line: { tax lda (plot3_column),y ora plot_bit,x - ldy.z y sta (plot3_column),y jmp __breturn // line::@return @@ -5526,7 +5505,6 @@ line: { tax lda (plot1_column),y ora plot_bit,x - ldy.z y sta (plot1_column),y jmp __b15 // line::@15 @@ -5603,7 +5581,6 @@ line: { tax lda (plot4_column),y ora plot_bit,x - ldy.z y sta (plot4_column),y jmp __b17 // line::@17 @@ -5615,10 +5592,10 @@ line: { jmp __breturn // line::@2 __b2: - // [178] line::e2#0 = line::dx#0 >> 1 -- vbuxx=vbuz1_ror_1 + // [178] line::e2#0 = line::dx#0 >> 1 -- vbuz1=vbuz2_ror_1 lda.z dx lsr - tax + sta.z e2 // [179] phi from line::@13 line::@2 to line::@12 [phi:line::@13/line::@2->line::@12] __b12_from___b13: __b12_from___b2: @@ -5644,16 +5621,14 @@ line: { sta.z plot5_column lda plot_column+1,y sta.z plot5_column+1 - // [183] line::plot5_$1 = line::x#10 & 7 -- vbuz1=vbuz2_band_vbuc1 + // [183] line::plot5_$1 = line::x#10 & 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and.z x - sta.z plot5___1 - // [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 + // [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa ldy.z y + tax lda (plot5_column),y - ldy.z plot5___1 - ora plot_bit,y - ldy.z y + ora plot_bit,x sta (plot5_column),y jmp __b18 // line::@18 @@ -5663,15 +5638,14 @@ line: { clc adc.z sx sta.z x - // [186] line::e2#1 = line::e2#3 + line::dy#0 -- vbuxx=vbuxx_plus_vbuz1 - txa + // [186] line::e2#1 = line::e2#3 + line::dy#0 -- vbuz1=vbuz1_plus_vbuz2 + lda.z e2 clc adc.z dy - tax - // [187] if(line::e2#1<=line::dx#0) goto line::@13 -- vbuxx_le_vbuz1_then_la1 + sta.z e2 + // [187] if(line::e2#1<=line::dx#0) goto line::@13 -- vbuz1_le_vbuz2_then_la1 lda.z dx - stx.z $ff - cmp.z $ff + cmp.z e2 bcs __b13_from___b18 jmp __b14 // line::@14 @@ -5681,11 +5655,11 @@ line: { clc adc.z sy sta.z y - // [189] line::e2#2 = line::e2#1 - line::dx#0 -- vbuxx=vbuxx_minus_vbuz1 - txa + // [189] line::e2#2 = line::e2#1 - line::dx#0 -- vbuz1=vbuz1_minus_vbuz2 + lda.z e2 sec sbc.z dx - tax + sta.z e2 // [190] phi from line::@14 line::@18 to line::@13 [phi:line::@14/line::@18->line::@13] __b13_from___b14: __b13_from___b18: @@ -5722,17 +5696,16 @@ line: { tax lda (plot6_column),y ora plot_bit,x - ldy.z y sta (plot6_column),y jmp __breturn } // eorfill // EOR fill from the line buffer onto the canvas -// eorfill(byte* zp($1f) canvas) +// eorfill(byte* zp($20) canvas) eorfill: { - .label canvas = $1f - .label line_column = $1c - .label fill_column = $1f + .label canvas = $20 + .label line_column = $1e + .label fill_column = $20 // [198] phi from eorfill to eorfill::@1 [phi:eorfill->eorfill::@1] __b1_from_eorfill: // [198] phi eorfill::fill_column#2 = eorfill::canvas#0 [phi:eorfill->eorfill::@1#0] -- register_copy @@ -5959,10 +5932,6 @@ Removing instruction lda #BLACK Removing instruction ldy.z p0_idx Removing instruction ldy.z p1_idx Removing instruction ldy.z p2_idx -Removing instruction ldy.z y -Removing instruction ldy.z y -Removing instruction ldy.z y -Removing instruction ldy.z y Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b7 with __b8 @@ -6160,23 +6129,23 @@ byte abs_u8::u byte abs_u8::u#0 reg byte a 2002.0 byte abs_u8::u#1 reg byte a 2002.0 byte abs_u8::u#2 reg byte a 10668.333333333332 -volatile byte canvas_show_flag loadstore zp[1]:18 19.75 -volatile byte canvas_show_memory loadstore zp[1]:17 2.9855072463768115 +volatile byte canvas_show_flag loadstore zp[1]:20 19.75 +volatile byte canvas_show_memory loadstore zp[1]:19 2.9855072463768115 void clock_start() void eorfill(byte* eorfill::line_buffer , byte* eorfill::canvas) byte* eorfill::canvas -byte* eorfill::canvas#0 canvas zp[2]:31 551.0 +byte* eorfill::canvas#0 canvas zp[2]:32 551.0 byte eorfill::eor byte eorfill::eor#0 reg byte a 150001.5 byte eorfill::eor#1 reg byte a 1000001.0 byte eorfill::eor#2 reg byte a 1050001.5 byte* eorfill::fill_column -byte* eorfill::fill_column#1 fill_column zp[2]:31 100001.0 -byte* eorfill::fill_column#2 fill_column zp[2]:31 130100.5 +byte* eorfill::fill_column#1 fill_column zp[2]:32 100001.0 +byte* eorfill::fill_column#2 fill_column zp[2]:32 130100.5 byte* eorfill::line_buffer byte* eorfill::line_column -byte* eorfill::line_column#1 line_column zp[2]:28 66667.33333333333 -byte* eorfill::line_column#2 line_column zp[2]:28 144444.88888888888 +byte* eorfill::line_column#1 line_column zp[2]:30 66667.33333333333 +byte* eorfill::line_column#2 line_column zp[2]:30 144444.88888888888 byte eorfill::x byte eorfill::x#1 reg byte x 200002.0 byte eorfill::x#2 reg byte x 27273.0 @@ -6203,60 +6172,60 @@ byte kbhit::return#2 reg byte a 4.0 void line(byte* line::canvas , byte line::x1 , byte line::y1 , byte line::x2 , byte line::y2) byte* line::canvas byte line::dx -byte line::dx#0 dx zp[1]:23 19462.805970149253 +byte line::dx#0 dx zp[1]:25 19462.805970149253 byte line::dy -byte line::dy#0 dy zp[1]:24 22285.85714285714 +byte line::dy#0 dy zp[1]:26 22285.85714285714 byte line::e -byte line::e#0 reg byte x 2002.0 -byte line::e#1 reg byte x 44444.88888888889 -byte line::e#2 reg byte x 200002.0 -byte line::e#3 reg byte x 100501.5 -byte line::e#5 reg byte x 150001.5 +byte line::e#0 e zp[1]:14 2002.0 +byte line::e#1 e zp[1]:14 44444.88888888889 +byte line::e#2 e zp[1]:14 200002.0 +byte line::e#3 e zp[1]:14 100501.5 +byte line::e#5 e zp[1]:14 150001.5 byte line::e1 -byte line::e1#0 e1 zp[1]:14 2002.0 -byte line::e1#1 e1 zp[1]:14 1033334.6666666666 -byte line::e1#2 e1 zp[1]:14 28571.714285714286 -byte line::e1#3 e1 zp[1]:14 1050502.0 +byte line::e1#0 e1 zp[1]:15 2002.0 +byte line::e1#1 e1 zp[1]:15 1033334.6666666666 +byte line::e1#2 e1 zp[1]:15 28571.714285714286 +byte line::e1#3 e1 zp[1]:15 1050502.0 byte line::e2 -byte line::e2#0 reg byte x 2002.0 -byte line::e2#1 reg byte x 133334.66666666666 -byte line::e2#2 reg byte x 200002.0 -byte line::e2#3 reg byte x 28714.714285714286 -byte line::e2#7 reg byte x 150001.5 +byte line::e2#0 e2 zp[1]:18 2002.0 +byte line::e2#1 e2 zp[1]:18 133334.66666666666 +byte line::e2#2 e2 zp[1]:18 200002.0 +byte line::e2#3 e2 zp[1]:18 28714.714285714286 +byte line::e2#7 e2 zp[1]:18 150001.5 byte~ line::plot1_$0 reg byte a 2002.0 byte~ line::plot1_$1 reg byte a 2002.0 byte~ line::plot1_$2 reg byte a 2002.0 byte* line::plot1_column -byte* line::plot1_column#0 plot1_column zp[2]:33 1501.5 +byte* line::plot1_column#0 plot1_column zp[2]:34 1501.5 byte line::plot1_x byte line::plot1_y byte~ line::plot2_$0 reg byte a 200002.0 -byte~ line::plot2_$1 zp[1]:30 200002.0 +byte~ line::plot2_$1 reg byte a 200002.0 byte~ line::plot2_$2 reg byte a 200002.0 byte* line::plot2_column -byte* line::plot2_column#0 plot2_column zp[2]:28 150001.5 +byte* line::plot2_column#0 plot2_column zp[2]:30 150001.5 byte line::plot2_x byte line::plot2_y -byte line::plot2_y#0 plot2_y zp[1]:27 60000.600000000006 +byte line::plot2_y#0 plot2_y zp[1]:29 60000.600000000006 byte~ line::plot3_$0 reg byte a 2002.0 byte~ line::plot3_$1 reg byte a 2002.0 byte~ line::plot3_$2 reg byte a 2002.0 byte* line::plot3_column -byte* line::plot3_column#0 plot3_column zp[2]:31 1501.5 +byte* line::plot3_column#0 plot3_column zp[2]:32 1501.5 byte line::plot3_x byte line::plot3_y byte~ line::plot4_$0 reg byte a 200002.0 byte~ line::plot4_$1 reg byte a 200002.0 byte~ line::plot4_$2 reg byte a 200002.0 byte* line::plot4_column -byte* line::plot4_column#0 plot4_column zp[2]:35 150001.5 +byte* line::plot4_column#0 plot4_column zp[2]:36 150001.5 byte line::plot4_x byte line::plot4_y byte~ line::plot5_$0 reg byte a 200002.0 -byte~ line::plot5_$1 zp[1]:39 200002.0 +byte~ line::plot5_$1 reg byte a 200002.0 byte~ line::plot5_$2 reg byte a 200002.0 byte* line::plot5_column -byte* line::plot5_column#0 plot5_column zp[2]:37 150001.5 +byte* line::plot5_column#0 plot5_column zp[2]:38 150001.5 byte line::plot5_x byte line::plot5_y byte~ line::plot6_$0 reg byte a 2002.0 @@ -6267,42 +6236,42 @@ byte* line::plot6_column#0 plot6_column zp[2]:40 1501.5 byte line::plot6_x byte line::plot6_y byte line::sx -byte line::sx#0 sx zp[1]:25 5135.6949152542375 +byte line::sx#0 sx zp[1]:27 5135.6949152542375 byte line::sy -byte line::sy#0 sy zp[1]:26 23672.836363636365 +byte line::sy#0 sy zp[1]:28 23672.836363636365 byte line::x -byte line::x#0 x zp[1]:15 228.4375 -byte line::x#1 x zp[1]:15 100001.0 -byte line::x#10 x zp[1]:15 66834.16666666666 -byte line::x#12 x zp[1]:15 30200.5 -byte line::x#15 x zp[1]:15 50100.6 -byte line::x#17 x zp[1]:15 60401.0 -byte line::x#18 x zp[1]:15 550251.25 -byte line::x#19 x zp[1]:15 62500.625 +byte line::x#0 x zp[1]:16 228.4375 +byte line::x#1 x zp[1]:16 100001.0 +byte line::x#10 x zp[1]:16 66834.16666666666 +byte line::x#12 x zp[1]:16 30200.5 +byte line::x#15 x zp[1]:16 50100.6 +byte line::x#17 x zp[1]:16 60401.0 +byte line::x#18 x zp[1]:16 550251.25 +byte line::x#19 x zp[1]:16 62500.625 byte line::x1 -byte line::x1#0 x1 zp[1]:15 50.5 -byte line::x1#1 x1 zp[1]:15 50.5 -byte line::x1#2 x1 zp[1]:15 50.5 +byte line::x1#0 x1 zp[1]:16 50.5 +byte line::x1#1 x1 zp[1]:16 50.5 +byte line::x1#2 x1 zp[1]:16 50.5 byte line::x2 byte line::x2#0 x2 zp[1]:12 101.0 byte line::x2#1 x2 zp[1]:12 101.0 byte line::x2#15 x2 zp[1]:12 3612.625 byte line::x2#2 x2 zp[1]:12 101.0 byte line::y -byte line::y#0 y zp[1]:16 239.27777777777777 -byte line::y#1 y zp[1]:16 1001.0 -byte line::y#10 y zp[1]:16 23647.411764705877 -byte line::y#11 y zp[1]:16 2101004.0 -byte line::y#12 y zp[1]:16 209091.36363636365 -byte line::y#13 y zp[1]:16 55667.33333333333 -byte line::y#15 y zp[1]:16 50334.16666666667 -byte line::y#17 y zp[1]:16 583.9166666666667 -byte line::y#4 y zp[1]:16 100001.0 -byte line::y#7 y zp[1]:16 201003.0 +byte line::y#0 y zp[1]:17 239.27777777777777 +byte line::y#1 y zp[1]:17 1001.0 +byte line::y#10 y zp[1]:17 23647.411764705877 +byte line::y#11 y zp[1]:17 2101004.0 +byte line::y#12 y zp[1]:17 209091.36363636365 +byte line::y#13 y zp[1]:17 55667.33333333333 +byte line::y#15 y zp[1]:17 50334.16666666667 +byte line::y#17 y zp[1]:17 583.9166666666667 +byte line::y#4 y zp[1]:17 100001.0 +byte line::y#7 y zp[1]:17 201003.0 byte line::y1 -byte line::y1#0 y1 zp[1]:16 67.33333333333333 -byte line::y1#1 y1 zp[1]:16 67.33333333333333 -byte line::y1#2 y1 zp[1]:16 67.33333333333333 +byte line::y1#0 y1 zp[1]:17 67.33333333333333 +byte line::y1#1 y1 zp[1]:17 67.33333333333333 +byte line::y1#2 y1 zp[1]:17 67.33333333333333 byte line::y2 byte line::y2#0 y2 zp[1]:13 202.0 byte line::y2#1 y2 zp[1]:13 202.0 @@ -6346,7 +6315,7 @@ byte main::x byte main::x#1 reg byte y 2002.0 byte main::x#2 reg byte y 1001.0 byte main::x0 -byte main::x0#0 x0 zp[1]:19 16.833333333333332 +byte main::x0#0 x0 zp[1]:21 16.833333333333332 byte main::x1 byte main::x1#0 x1 zp[1]:12 33.666666666666664 byte main::x2 @@ -6355,25 +6324,25 @@ byte main::y byte main::y#1 y zp[1]:2 202.0 byte main::y#2 y zp[1]:2 36.72727272727273 byte main::y0 -byte main::y0#0 y0 zp[1]:20 16.833333333333332 +byte main::y0#0 y0 zp[1]:22 16.833333333333332 byte main::y1 -byte main::y1#0 y1 zp[1]:21 33.666666666666664 +byte main::y1#0 y1 zp[1]:23 33.666666666666664 byte main::y2 -byte main::y2#0 y2 zp[1]:22 43.285714285714285 +byte main::y2#0 y2 zp[1]:24 43.285714285714285 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c byte memset::c#6 reg byte x 12500.125 byte* memset::dst -byte* memset::dst#1 dst zp[2]:31 200002.0 -byte* memset::dst#2 dst zp[2]:31 133668.3333333333 -byte* memset::dst#4 dst zp[2]:31 2002.0 +byte* memset::dst#1 dst zp[2]:32 200002.0 +byte* memset::dst#2 dst zp[2]:32 133668.3333333333 +byte* memset::dst#4 dst zp[2]:32 2002.0 byte* memset::end -byte* memset::end#0 end zp[2]:28 16833.666666666664 +byte* memset::end#0 end zp[2]:30 16833.666666666664 word memset::num -word memset::num#4 num zp[2]:28 1001.0 +word memset::num#4 num zp[2]:30 1001.0 void* memset::return void* memset::str -void* memset::str#5 str zp[2]:31 +void* memset::str#5 str zp[2]:32 const byte* plot_bit[8] = { $80, $40, $20, $10, 8, 4, 2, 1 } const byte** plot_column[$10] = { LINE_BUFFER, LINE_BUFFER+(byte)1*$80, LINE_BUFFER+(word)2*$80, LINE_BUFFER+(word)3*$80, LINE_BUFFER+(word)4*$80, LINE_BUFFER+(word)5*$80, LINE_BUFFER+(word)6*$80, LINE_BUFFER+(word)7*$80, LINE_BUFFER+(word)8*$80, LINE_BUFFER+(word)9*$80, LINE_BUFFER+(word)$a*$80, LINE_BUFFER+(word)$b*$80, LINE_BUFFER+(word)$c*$80, LINE_BUFFER+(word)$d*$80, LINE_BUFFER+(word)$e*$80, LINE_BUFFER+(word)$f*$80 } void setup_irq() @@ -6400,55 +6369,55 @@ reg byte x [ main::c#2 main::c#4 main::c#1 ] reg byte x [ memset::c#6 ] zp[1]:12 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 ] zp[1]:13 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -reg byte x [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] -zp[1]:14 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] -zp[1]:15 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -zp[1]:16 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -reg byte x [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +zp[1]:14 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] +zp[1]:15 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +zp[1]:16 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] +zp[1]:17 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] +zp[1]:18 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#4 ] -zp[1]:17 [ canvas_show_memory ] -zp[1]:18 [ canvas_show_flag ] +zp[1]:19 [ canvas_show_memory ] +zp[1]:20 [ canvas_show_flag ] reg byte a [ kbhit::return#2 ] reg byte a [ irq_bottom_2::$0 ] -zp[1]:19 [ main::x0#0 ] -zp[1]:20 [ main::y0#0 ] -zp[1]:21 [ main::y1#0 ] -zp[1]:22 [ main::y2#0 ] +zp[1]:21 [ main::x0#0 ] +zp[1]:22 [ main::y0#0 ] +zp[1]:23 [ main::y1#0 ] +zp[1]:24 [ main::y2#0 ] reg byte a [ kbhit::return#0 ] reg byte a [ abs_u8::return#0 ] -zp[1]:23 [ line::dx#0 ] +zp[1]:25 [ line::dx#0 ] reg byte a [ abs_u8::return#1 ] -zp[1]:24 [ line::dy#0 ] +zp[1]:26 [ line::dy#0 ] reg byte a [ sgn_u8::return#0 ] -zp[1]:25 [ line::sx#0 ] +zp[1]:27 [ line::sx#0 ] reg byte a [ sgn_u8::return#1 ] -zp[1]:26 [ line::sy#0 ] -zp[1]:27 [ line::plot2_y#0 ] +zp[1]:28 [ line::sy#0 ] +zp[1]:29 [ line::plot2_y#0 ] reg byte a [ line::plot2_$0 ] reg byte a [ line::plot2_$2 ] -zp[2]:28 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] -zp[1]:30 [ line::plot2_$1 ] +zp[2]:30 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] +reg byte a [ line::plot2_$1 ] reg byte a [ line::plot3_$0 ] reg byte a [ line::plot3_$2 ] -zp[2]:31 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:32 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte a [ line::plot3_$1 ] reg byte a [ line::plot1_$0 ] reg byte a [ line::plot1_$2 ] -zp[2]:33 [ line::plot1_column#0 ] +zp[2]:34 [ line::plot1_column#0 ] reg byte a [ line::plot1_$1 ] reg byte a [ line::plot4_$0 ] reg byte a [ line::plot4_$2 ] -zp[2]:35 [ line::plot4_column#0 ] +zp[2]:36 [ line::plot4_column#0 ] reg byte a [ line::plot4_$1 ] reg byte a [ line::plot5_$0 ] reg byte a [ line::plot5_$2 ] -zp[2]:37 [ line::plot5_column#0 ] -zp[1]:39 [ line::plot5_$1 ] +zp[2]:38 [ line::plot5_column#0 ] +reg byte a [ line::plot5_$1 ] reg byte a [ line::plot6_$0 ] reg byte a [ line::plot6_$2 ] zp[2]:40 [ line::plot6_column#0 ] @@ -6458,7 +6427,7 @@ reg byte a [ sgn_u8::$0 ] FINAL ASSEMBLER -Score: 106675 +Score: 105477 // File Comments // Filling a simple 16x16 2D polygon using EOR-filling @@ -6521,10 +6490,10 @@ Score: 106675 .label PETSCII = $1000 .label COSTAB = SINTAB+$40 // The current canvas being rendered to the screen - in D018 format. - .label canvas_show_memory = $11 + .label canvas_show_memory = $13 // Flag signalling that the canvas on screen needs to be updated. // Set to 1 by the renderer when a new canvas is ready for showing, and to 0 by the raster when the canvas is shown on screen. - .label canvas_show_flag = $12 + .label canvas_show_flag = $14 // __start __start: { .const __init1_toD0181_return = (>(SCREEN&$3fff)*4)|(>CANVAS2)/4&$f @@ -6659,12 +6628,12 @@ main: { // Setup 16x16 canvas for rendering .label screen = 5 .label y = 2 - .label x0 = $13 - .label y0 = $14 + .label x0 = $15 + .label y0 = $16 .label x1 = $c - .label y1 = $15 + .label y1 = $17 .label x2 = $c - .label y2 = $16 + .label y2 = $18 .label p0_idx = 7 .label p1_idx = 8 .label p2_idx = 9 @@ -7043,12 +7012,12 @@ kbhit: { } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($1f) str, byte register(X) c, word zp($1c) num) +// memset(void* zp($20) str, byte register(X) c, word zp($1e) num) memset: { - .label end = $1c - .label dst = $1f - .label num = $1c - .label str = $1f + .label end = $1e + .label dst = $20 + .label num = $1e + .label str = $20 // if(num>0) // [93] if(memset::num#4<=0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num @@ -7179,27 +7148,27 @@ clock_start: { // line // Draw a EOR friendly line between two points // Uses bresenham line drawing routine -// line(byte zp($f) x1, byte zp($10) y1, byte zp($c) x2, byte zp($d) y2) +// line(byte zp($10) x1, byte zp($11) y1, byte zp($c) x2, byte zp($d) y2) line: { - .label plot2___1 = $1e - .label plot5___1 = $27 - .label x1 = $f - .label y1 = $10 + .label x1 = $10 + .label y1 = $11 .label x2 = $c .label y2 = $d - .label x = $f - .label y = $10 - .label dx = $17 - .label dy = $18 - .label sx = $19 - .label sy = $1a - .label plot1_column = $21 - .label plot2_y = $1b - .label plot2_column = $1c - .label plot3_column = $1f - .label e1 = $e - .label plot4_column = $23 - .label plot5_column = $25 + .label x = $10 + .label y = $11 + .label dx = $19 + .label dy = $1a + .label sx = $1b + .label sy = $1c + .label e2 = $12 + .label plot1_column = $22 + .label e = $e + .label plot2_y = $1d + .label plot2_column = $1e + .label plot3_column = $20 + .label e1 = $f + .label plot4_column = $24 + .label plot5_column = $26 .label plot6_column = $28 // abs_u8(x2-x1) // [116] abs_u8::u#0 = line::x2#15 - line::x#0 -- vbuaa=vbuz1_minus_vbuz2 @@ -7294,10 +7263,10 @@ line: { beq plot1 // line::@5 // e = dy/2 - // [138] line::e#0 = line::dy#0 >> 1 -- vbuxx=vbuz1_ror_1 + // [138] line::e#0 = line::dy#0 >> 1 -- vbuz1=vbuz2_ror_1 lda.z dy lsr - tax + sta.z e // [139] phi from line::@5 line::@7 to line::@6 [phi:line::@5/line::@7->line::@6] // [139] phi line::x#15 = line::x#0 [phi:line::@5/line::@7->line::@6#0] -- register_copy // [139] phi line::e#3 = line::e#0 [phi:line::@5/line::@7->line::@6#1] -- register_copy @@ -7311,16 +7280,15 @@ line: { adc.z sy sta.z y // e += dx - // [141] line::e#1 = line::e#3 + line::dx#0 -- vbuxx=vbuxx_plus_vbuz1 - txa + // [141] line::e#1 = line::e#3 + line::dx#0 -- vbuz1=vbuz1_plus_vbuz2 + lda.z e clc adc.z dx - tax + sta.z e // if(e>dy) - // [142] if(line::e#1<=line::dy#0) goto line::@7 -- vbuxx_le_vbuz1_then_la1 + // [142] if(line::e#1<=line::dy#0) goto line::@7 -- vbuz1_le_vbuz2_then_la1 lda.z dy - stx.z $ff - cmp.z $ff + cmp.z e bcs __b7 // line::@8 // plot(x, y-sy) @@ -7346,17 +7314,15 @@ line: { lda plot_column+1,y sta.z plot2_column+1 // x&7 - // [147] line::plot2_$1 = line::x#15 & 7 -- vbuz1=vbuz2_band_vbuc1 + // [147] line::plot2_$1 = line::x#15 & 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and.z x - sta.z plot2___1 // column[y] |= plot_bit[x&7] - // [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 + // [148] line::plot2_column#0[line::plot2_y#0] = line::plot2_column#0[line::plot2_y#0] | plot_bit[line::plot2_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa ldy.z plot2_y + tax lda (plot2_column),y - ldy.z plot2___1 - ora plot_bit,y - ldy.z plot2_y + ora plot_bit,x sta (plot2_column),y // line::@16 // x += sx @@ -7366,11 +7332,11 @@ line: { adc.z sx sta.z x // e -= dy - // [150] line::e#2 = line::e#1 - line::dy#0 -- vbuxx=vbuxx_minus_vbuz1 - txa + // [150] line::e#2 = line::e#1 - line::dy#0 -- vbuz1=vbuz1_minus_vbuz2 + lda.z e sec sbc.z dy - tax + sta.z e // [151] phi from line::@16 line::@6 to line::@7 [phi:line::@16/line::@6->line::@7] // [151] phi line::x#17 = line::x#1 [phi:line::@16/line::@6->line::@7#0] -- register_copy // [151] phi line::e#5 = line::e#2 [phi:line::@16/line::@6->line::@7#1] -- register_copy @@ -7527,10 +7493,10 @@ line: { // line::@2 __b2: // e = dx/2 - // [178] line::e2#0 = line::dx#0 >> 1 -- vbuxx=vbuz1_ror_1 + // [178] line::e2#0 = line::dx#0 >> 1 -- vbuz1=vbuz2_ror_1 lda.z dx lsr - tax + sta.z e2 // [179] phi from line::@13 line::@2 to line::@12 [phi:line::@13/line::@2->line::@12] // [179] phi line::e2#3 = line::e2#7 [phi:line::@13/line::@2->line::@12#0] -- register_copy // [179] phi line::y#13 = line::y#15 [phi:line::@13/line::@2->line::@12#1] -- register_copy @@ -7554,17 +7520,15 @@ line: { lda plot_column+1,y sta.z plot5_column+1 // x&7 - // [183] line::plot5_$1 = line::x#10 & 7 -- vbuz1=vbuz2_band_vbuc1 + // [183] line::plot5_$1 = line::x#10 & 7 -- vbuaa=vbuz1_band_vbuc1 lda #7 and.z x - sta.z plot5___1 // column[y] |= plot_bit[x&7] - // [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 + // [184] line::plot5_column#0[line::y#13] = line::plot5_column#0[line::y#13] | plot_bit[line::plot5_$1] -- pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa ldy.z y + tax lda (plot5_column),y - ldy.z plot5___1 - ora plot_bit,y - ldy.z y + ora plot_bit,x sta (plot5_column),y // line::@18 // x += sx @@ -7574,16 +7538,15 @@ line: { adc.z sx sta.z x // e += dy - // [186] line::e2#1 = line::e2#3 + line::dy#0 -- vbuxx=vbuxx_plus_vbuz1 - txa + // [186] line::e2#1 = line::e2#3 + line::dy#0 -- vbuz1=vbuz1_plus_vbuz2 + lda.z e2 clc adc.z dy - tax + sta.z e2 // if(e>dx) - // [187] if(line::e2#1<=line::dx#0) goto line::@13 -- vbuxx_le_vbuz1_then_la1 + // [187] if(line::e2#1<=line::dx#0) goto line::@13 -- vbuz1_le_vbuz2_then_la1 lda.z dx - stx.z $ff - cmp.z $ff + cmp.z e2 bcs __b13 // line::@14 // y += sy @@ -7593,11 +7556,11 @@ line: { adc.z sy sta.z y // e -= dx - // [189] line::e2#2 = line::e2#1 - line::dx#0 -- vbuxx=vbuxx_minus_vbuz1 - txa + // [189] line::e2#2 = line::e2#1 - line::dx#0 -- vbuz1=vbuz1_minus_vbuz2 + lda.z e2 sec sbc.z dx - tax + sta.z e2 // [190] phi from line::@14 line::@18 to line::@13 [phi:line::@14/line::@18->line::@13] // [190] phi line::e2#7 = line::e2#2 [phi:line::@14/line::@18->line::@13#0] -- register_copy // [190] phi line::y#15 = line::y#4 [phi:line::@14/line::@18->line::@13#1] -- register_copy @@ -7638,11 +7601,11 @@ line: { } // eorfill // EOR fill from the line buffer onto the canvas -// eorfill(byte* zp($1f) canvas) +// eorfill(byte* zp($20) canvas) eorfill: { - .label canvas = $1f - .label line_column = $1c - .label fill_column = $1f + .label canvas = $20 + .label line_column = $1e + .label fill_column = $20 // [198] phi from eorfill to eorfill::@1 [phi:eorfill->eorfill::@1] // [198] phi eorfill::fill_column#2 = eorfill::canvas#0 [phi:eorfill->eorfill::@1#0] -- register_copy // [198] phi eorfill::line_column#2 = LINE_BUFFER [phi:eorfill->eorfill::@1#1] -- pbuz1=pbuc1 diff --git a/src/test/ref/complex/polygon/polygon.sym b/src/test/ref/complex/polygon/polygon.sym index 6af6010a0..1957ecd9d 100644 --- a/src/test/ref/complex/polygon/polygon.sym +++ b/src/test/ref/complex/polygon/polygon.sym @@ -52,23 +52,23 @@ byte abs_u8::u byte abs_u8::u#0 reg byte a 2002.0 byte abs_u8::u#1 reg byte a 2002.0 byte abs_u8::u#2 reg byte a 10668.333333333332 -volatile byte canvas_show_flag loadstore zp[1]:18 19.75 -volatile byte canvas_show_memory loadstore zp[1]:17 2.9855072463768115 +volatile byte canvas_show_flag loadstore zp[1]:20 19.75 +volatile byte canvas_show_memory loadstore zp[1]:19 2.9855072463768115 void clock_start() void eorfill(byte* eorfill::line_buffer , byte* eorfill::canvas) byte* eorfill::canvas -byte* eorfill::canvas#0 canvas zp[2]:31 551.0 +byte* eorfill::canvas#0 canvas zp[2]:32 551.0 byte eorfill::eor byte eorfill::eor#0 reg byte a 150001.5 byte eorfill::eor#1 reg byte a 1000001.0 byte eorfill::eor#2 reg byte a 1050001.5 byte* eorfill::fill_column -byte* eorfill::fill_column#1 fill_column zp[2]:31 100001.0 -byte* eorfill::fill_column#2 fill_column zp[2]:31 130100.5 +byte* eorfill::fill_column#1 fill_column zp[2]:32 100001.0 +byte* eorfill::fill_column#2 fill_column zp[2]:32 130100.5 byte* eorfill::line_buffer byte* eorfill::line_column -byte* eorfill::line_column#1 line_column zp[2]:28 66667.33333333333 -byte* eorfill::line_column#2 line_column zp[2]:28 144444.88888888888 +byte* eorfill::line_column#1 line_column zp[2]:30 66667.33333333333 +byte* eorfill::line_column#2 line_column zp[2]:30 144444.88888888888 byte eorfill::x byte eorfill::x#1 reg byte x 200002.0 byte eorfill::x#2 reg byte x 27273.0 @@ -95,60 +95,60 @@ byte kbhit::return#2 reg byte a 4.0 void line(byte* line::canvas , byte line::x1 , byte line::y1 , byte line::x2 , byte line::y2) byte* line::canvas byte line::dx -byte line::dx#0 dx zp[1]:23 19462.805970149253 +byte line::dx#0 dx zp[1]:25 19462.805970149253 byte line::dy -byte line::dy#0 dy zp[1]:24 22285.85714285714 +byte line::dy#0 dy zp[1]:26 22285.85714285714 byte line::e -byte line::e#0 reg byte x 2002.0 -byte line::e#1 reg byte x 44444.88888888889 -byte line::e#2 reg byte x 200002.0 -byte line::e#3 reg byte x 100501.5 -byte line::e#5 reg byte x 150001.5 +byte line::e#0 e zp[1]:14 2002.0 +byte line::e#1 e zp[1]:14 44444.88888888889 +byte line::e#2 e zp[1]:14 200002.0 +byte line::e#3 e zp[1]:14 100501.5 +byte line::e#5 e zp[1]:14 150001.5 byte line::e1 -byte line::e1#0 e1 zp[1]:14 2002.0 -byte line::e1#1 e1 zp[1]:14 1033334.6666666666 -byte line::e1#2 e1 zp[1]:14 28571.714285714286 -byte line::e1#3 e1 zp[1]:14 1050502.0 +byte line::e1#0 e1 zp[1]:15 2002.0 +byte line::e1#1 e1 zp[1]:15 1033334.6666666666 +byte line::e1#2 e1 zp[1]:15 28571.714285714286 +byte line::e1#3 e1 zp[1]:15 1050502.0 byte line::e2 -byte line::e2#0 reg byte x 2002.0 -byte line::e2#1 reg byte x 133334.66666666666 -byte line::e2#2 reg byte x 200002.0 -byte line::e2#3 reg byte x 28714.714285714286 -byte line::e2#7 reg byte x 150001.5 +byte line::e2#0 e2 zp[1]:18 2002.0 +byte line::e2#1 e2 zp[1]:18 133334.66666666666 +byte line::e2#2 e2 zp[1]:18 200002.0 +byte line::e2#3 e2 zp[1]:18 28714.714285714286 +byte line::e2#7 e2 zp[1]:18 150001.5 byte~ line::plot1_$0 reg byte a 2002.0 byte~ line::plot1_$1 reg byte a 2002.0 byte~ line::plot1_$2 reg byte a 2002.0 byte* line::plot1_column -byte* line::plot1_column#0 plot1_column zp[2]:33 1501.5 +byte* line::plot1_column#0 plot1_column zp[2]:34 1501.5 byte line::plot1_x byte line::plot1_y byte~ line::plot2_$0 reg byte a 200002.0 -byte~ line::plot2_$1 zp[1]:30 200002.0 +byte~ line::plot2_$1 reg byte a 200002.0 byte~ line::plot2_$2 reg byte a 200002.0 byte* line::plot2_column -byte* line::plot2_column#0 plot2_column zp[2]:28 150001.5 +byte* line::plot2_column#0 plot2_column zp[2]:30 150001.5 byte line::plot2_x byte line::plot2_y -byte line::plot2_y#0 plot2_y zp[1]:27 60000.600000000006 +byte line::plot2_y#0 plot2_y zp[1]:29 60000.600000000006 byte~ line::plot3_$0 reg byte a 2002.0 byte~ line::plot3_$1 reg byte a 2002.0 byte~ line::plot3_$2 reg byte a 2002.0 byte* line::plot3_column -byte* line::plot3_column#0 plot3_column zp[2]:31 1501.5 +byte* line::plot3_column#0 plot3_column zp[2]:32 1501.5 byte line::plot3_x byte line::plot3_y byte~ line::plot4_$0 reg byte a 200002.0 byte~ line::plot4_$1 reg byte a 200002.0 byte~ line::plot4_$2 reg byte a 200002.0 byte* line::plot4_column -byte* line::plot4_column#0 plot4_column zp[2]:35 150001.5 +byte* line::plot4_column#0 plot4_column zp[2]:36 150001.5 byte line::plot4_x byte line::plot4_y byte~ line::plot5_$0 reg byte a 200002.0 -byte~ line::plot5_$1 zp[1]:39 200002.0 +byte~ line::plot5_$1 reg byte a 200002.0 byte~ line::plot5_$2 reg byte a 200002.0 byte* line::plot5_column -byte* line::plot5_column#0 plot5_column zp[2]:37 150001.5 +byte* line::plot5_column#0 plot5_column zp[2]:38 150001.5 byte line::plot5_x byte line::plot5_y byte~ line::plot6_$0 reg byte a 2002.0 @@ -159,42 +159,42 @@ byte* line::plot6_column#0 plot6_column zp[2]:40 1501.5 byte line::plot6_x byte line::plot6_y byte line::sx -byte line::sx#0 sx zp[1]:25 5135.6949152542375 +byte line::sx#0 sx zp[1]:27 5135.6949152542375 byte line::sy -byte line::sy#0 sy zp[1]:26 23672.836363636365 +byte line::sy#0 sy zp[1]:28 23672.836363636365 byte line::x -byte line::x#0 x zp[1]:15 228.4375 -byte line::x#1 x zp[1]:15 100001.0 -byte line::x#10 x zp[1]:15 66834.16666666666 -byte line::x#12 x zp[1]:15 30200.5 -byte line::x#15 x zp[1]:15 50100.6 -byte line::x#17 x zp[1]:15 60401.0 -byte line::x#18 x zp[1]:15 550251.25 -byte line::x#19 x zp[1]:15 62500.625 +byte line::x#0 x zp[1]:16 228.4375 +byte line::x#1 x zp[1]:16 100001.0 +byte line::x#10 x zp[1]:16 66834.16666666666 +byte line::x#12 x zp[1]:16 30200.5 +byte line::x#15 x zp[1]:16 50100.6 +byte line::x#17 x zp[1]:16 60401.0 +byte line::x#18 x zp[1]:16 550251.25 +byte line::x#19 x zp[1]:16 62500.625 byte line::x1 -byte line::x1#0 x1 zp[1]:15 50.5 -byte line::x1#1 x1 zp[1]:15 50.5 -byte line::x1#2 x1 zp[1]:15 50.5 +byte line::x1#0 x1 zp[1]:16 50.5 +byte line::x1#1 x1 zp[1]:16 50.5 +byte line::x1#2 x1 zp[1]:16 50.5 byte line::x2 byte line::x2#0 x2 zp[1]:12 101.0 byte line::x2#1 x2 zp[1]:12 101.0 byte line::x2#15 x2 zp[1]:12 3612.625 byte line::x2#2 x2 zp[1]:12 101.0 byte line::y -byte line::y#0 y zp[1]:16 239.27777777777777 -byte line::y#1 y zp[1]:16 1001.0 -byte line::y#10 y zp[1]:16 23647.411764705877 -byte line::y#11 y zp[1]:16 2101004.0 -byte line::y#12 y zp[1]:16 209091.36363636365 -byte line::y#13 y zp[1]:16 55667.33333333333 -byte line::y#15 y zp[1]:16 50334.16666666667 -byte line::y#17 y zp[1]:16 583.9166666666667 -byte line::y#4 y zp[1]:16 100001.0 -byte line::y#7 y zp[1]:16 201003.0 +byte line::y#0 y zp[1]:17 239.27777777777777 +byte line::y#1 y zp[1]:17 1001.0 +byte line::y#10 y zp[1]:17 23647.411764705877 +byte line::y#11 y zp[1]:17 2101004.0 +byte line::y#12 y zp[1]:17 209091.36363636365 +byte line::y#13 y zp[1]:17 55667.33333333333 +byte line::y#15 y zp[1]:17 50334.16666666667 +byte line::y#17 y zp[1]:17 583.9166666666667 +byte line::y#4 y zp[1]:17 100001.0 +byte line::y#7 y zp[1]:17 201003.0 byte line::y1 -byte line::y1#0 y1 zp[1]:16 67.33333333333333 -byte line::y1#1 y1 zp[1]:16 67.33333333333333 -byte line::y1#2 y1 zp[1]:16 67.33333333333333 +byte line::y1#0 y1 zp[1]:17 67.33333333333333 +byte line::y1#1 y1 zp[1]:17 67.33333333333333 +byte line::y1#2 y1 zp[1]:17 67.33333333333333 byte line::y2 byte line::y2#0 y2 zp[1]:13 202.0 byte line::y2#1 y2 zp[1]:13 202.0 @@ -238,7 +238,7 @@ byte main::x byte main::x#1 reg byte y 2002.0 byte main::x#2 reg byte y 1001.0 byte main::x0 -byte main::x0#0 x0 zp[1]:19 16.833333333333332 +byte main::x0#0 x0 zp[1]:21 16.833333333333332 byte main::x1 byte main::x1#0 x1 zp[1]:12 33.666666666666664 byte main::x2 @@ -247,25 +247,25 @@ byte main::y byte main::y#1 y zp[1]:2 202.0 byte main::y#2 y zp[1]:2 36.72727272727273 byte main::y0 -byte main::y0#0 y0 zp[1]:20 16.833333333333332 +byte main::y0#0 y0 zp[1]:22 16.833333333333332 byte main::y1 -byte main::y1#0 y1 zp[1]:21 33.666666666666664 +byte main::y1#0 y1 zp[1]:23 33.666666666666664 byte main::y2 -byte main::y2#0 y2 zp[1]:22 43.285714285714285 +byte main::y2#0 y2 zp[1]:24 43.285714285714285 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c byte memset::c#6 reg byte x 12500.125 byte* memset::dst -byte* memset::dst#1 dst zp[2]:31 200002.0 -byte* memset::dst#2 dst zp[2]:31 133668.3333333333 -byte* memset::dst#4 dst zp[2]:31 2002.0 +byte* memset::dst#1 dst zp[2]:32 200002.0 +byte* memset::dst#2 dst zp[2]:32 133668.3333333333 +byte* memset::dst#4 dst zp[2]:32 2002.0 byte* memset::end -byte* memset::end#0 end zp[2]:28 16833.666666666664 +byte* memset::end#0 end zp[2]:30 16833.666666666664 word memset::num -word memset::num#4 num zp[2]:28 1001.0 +word memset::num#4 num zp[2]:30 1001.0 void* memset::return void* memset::str -void* memset::str#5 str zp[2]:31 +void* memset::str#5 str zp[2]:32 const byte* plot_bit[8] = { $80, $40, $20, $10, 8, 4, 2, 1 } const byte** plot_column[$10] = { LINE_BUFFER, LINE_BUFFER+(byte)1*$80, LINE_BUFFER+(word)2*$80, LINE_BUFFER+(word)3*$80, LINE_BUFFER+(word)4*$80, LINE_BUFFER+(word)5*$80, LINE_BUFFER+(word)6*$80, LINE_BUFFER+(word)7*$80, LINE_BUFFER+(word)8*$80, LINE_BUFFER+(word)9*$80, LINE_BUFFER+(word)$a*$80, LINE_BUFFER+(word)$b*$80, LINE_BUFFER+(word)$c*$80, LINE_BUFFER+(word)$d*$80, LINE_BUFFER+(word)$e*$80, LINE_BUFFER+(word)$f*$80 } void setup_irq() @@ -292,55 +292,55 @@ reg byte x [ main::c#2 main::c#4 main::c#1 ] reg byte x [ memset::c#6 ] zp[1]:12 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 main::x1#0 main::x2#0 ] zp[1]:13 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -reg byte x [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] -zp[1]:14 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] -zp[1]:15 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -zp[1]:16 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -reg byte x [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +zp[1]:14 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] +zp[1]:15 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +zp[1]:16 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] +zp[1]:17 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] +zp[1]:18 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#4 ] -zp[1]:17 [ canvas_show_memory ] -zp[1]:18 [ canvas_show_flag ] +zp[1]:19 [ canvas_show_memory ] +zp[1]:20 [ canvas_show_flag ] reg byte a [ kbhit::return#2 ] reg byte a [ irq_bottom_2::$0 ] -zp[1]:19 [ main::x0#0 ] -zp[1]:20 [ main::y0#0 ] -zp[1]:21 [ main::y1#0 ] -zp[1]:22 [ main::y2#0 ] +zp[1]:21 [ main::x0#0 ] +zp[1]:22 [ main::y0#0 ] +zp[1]:23 [ main::y1#0 ] +zp[1]:24 [ main::y2#0 ] reg byte a [ kbhit::return#0 ] reg byte a [ abs_u8::return#0 ] -zp[1]:23 [ line::dx#0 ] +zp[1]:25 [ line::dx#0 ] reg byte a [ abs_u8::return#1 ] -zp[1]:24 [ line::dy#0 ] +zp[1]:26 [ line::dy#0 ] reg byte a [ sgn_u8::return#0 ] -zp[1]:25 [ line::sx#0 ] +zp[1]:27 [ line::sx#0 ] reg byte a [ sgn_u8::return#1 ] -zp[1]:26 [ line::sy#0 ] -zp[1]:27 [ line::plot2_y#0 ] +zp[1]:28 [ line::sy#0 ] +zp[1]:29 [ line::plot2_y#0 ] reg byte a [ line::plot2_$0 ] reg byte a [ line::plot2_$2 ] -zp[2]:28 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] -zp[1]:30 [ line::plot2_$1 ] +zp[2]:30 [ line::plot2_column#0 eorfill::line_column#2 eorfill::line_column#1 memset::num#4 memset::end#0 ] +reg byte a [ line::plot2_$1 ] reg byte a [ line::plot3_$0 ] reg byte a [ line::plot3_$2 ] -zp[2]:31 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:32 [ line::plot3_column#0 eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 memset::str#5 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte a [ line::plot3_$1 ] reg byte a [ line::plot1_$0 ] reg byte a [ line::plot1_$2 ] -zp[2]:33 [ line::plot1_column#0 ] +zp[2]:34 [ line::plot1_column#0 ] reg byte a [ line::plot1_$1 ] reg byte a [ line::plot4_$0 ] reg byte a [ line::plot4_$2 ] -zp[2]:35 [ line::plot4_column#0 ] +zp[2]:36 [ line::plot4_column#0 ] reg byte a [ line::plot4_$1 ] reg byte a [ line::plot5_$0 ] reg byte a [ line::plot5_$2 ] -zp[2]:37 [ line::plot5_column#0 ] -zp[1]:39 [ line::plot5_$1 ] +zp[2]:38 [ line::plot5_column#0 ] +reg byte a [ line::plot5_$1 ] reg byte a [ line::plot6_$0 ] reg byte a [ line::plot6_$2 ] zp[2]:40 [ line::plot6_column#0 ] diff --git a/src/test/ref/roll-sprite-msb.asm b/src/test/ref/roll-sprite-msb.asm index 76bfc3c3d..c32693d5b 100644 --- a/src/test/ref/roll-sprite-msb.asm +++ b/src/test/ref/roll-sprite-msb.asm @@ -50,11 +50,9 @@ position_sprite: { // if (x > 255) lda.z x+1 bne __b1 - lda.z x - cmp #$ff - beq !+ - bcs __b1 - !: + lda #$ff + cmp.z x + bcc __b1 // 1 << spriteno lda #1 ldy.z spriteno diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index 69931e34c..885cf8e7a 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -330,17 +330,17 @@ Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] Uplift Scope [] -Uplifting [position_sprite] best 925 combination reg byte a [ position_sprite::$2 ] reg byte a [ position_sprite::$4 ] reg byte a [ position_sprite::$5 ] reg byte a [ position_sprite::$6 ] zp[1]:8 [ position_sprite::$1 ] zp[1]:5 [ position_sprite::spriteno#0 ] zp[2]:6 [ position_sprite::x#0 ] +Uplifting [position_sprite] best 923 combination reg byte a [ position_sprite::$2 ] reg byte a [ position_sprite::$4 ] reg byte a [ position_sprite::$5 ] reg byte a [ position_sprite::$6 ] zp[1]:8 [ position_sprite::$1 ] zp[1]:5 [ position_sprite::spriteno#0 ] zp[2]:6 [ position_sprite::x#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [main] best 805 combination reg byte x [ main::s#2 main::s#1 ] zp[2]:3 [ main::xpos#2 main::xpos#1 ] -Uplifting [MOS6526_CIA] best 805 combination -Uplifting [MOS6569_VICII] best 805 combination -Uplifting [MOS6581_SID] best 805 combination -Uplifting [] best 805 combination +Uplifting [main] best 803 combination reg byte x [ main::s#2 main::s#1 ] zp[2]:3 [ main::xpos#2 main::xpos#1 ] +Uplifting [MOS6526_CIA] best 803 combination +Uplifting [MOS6569_VICII] best 803 combination +Uplifting [MOS6581_SID] best 803 combination +Uplifting [] best 803 combination Attempting to uplift remaining variables inzp[1]:8 [ position_sprite::$1 ] -Uplifting [position_sprite] best 798 combination reg byte y [ position_sprite::$1 ] +Uplifting [position_sprite] best 796 combination reg byte y [ position_sprite::$1 ] Attempting to uplift remaining variables inzp[1]:5 [ position_sprite::spriteno#0 ] -Uplifting [position_sprite] best 798 combination zp[1]:5 [ position_sprite::spriteno#0 ] +Uplifting [position_sprite] best 796 combination zp[1]:5 [ position_sprite::spriteno#0 ] Coalescing zero page register [ zp[2]:3 [ main::xpos#2 main::xpos#1 ] ] with [ zp[2]:6 [ position_sprite::x#0 ] ] - score: 1 Allocated (was zp[2]:3) zp[2]:2 [ main::xpos#2 main::xpos#1 position_sprite::x#0 ] Allocated (was zp[1]:5) zp[1]:4 [ position_sprite::spriteno#0 ] @@ -423,11 +423,9 @@ position_sprite: { // [13] if(position_sprite::x#0>$ff) goto position_sprite::@1 -- vwuz1_gt_vbuc1_then_la1 lda.z x+1 bne __b1 - lda.z x - cmp #$ff - beq !+ - bcs __b1 - !: + lda #$ff + cmp.z x + bcc __b1 jmp __b2 // position_sprite::@2 __b2: @@ -527,7 +525,7 @@ reg byte a [ position_sprite::$6 ] FINAL ASSEMBLER -Score: 555 +Score: 553 // File Comments // Tests rolling sprite MSB by variable amount @@ -607,11 +605,9 @@ position_sprite: { // [13] if(position_sprite::x#0>$ff) goto position_sprite::@1 -- vwuz1_gt_vbuc1_then_la1 lda.z x+1 bne __b1 - lda.z x - cmp #$ff - beq !+ - bcs __b1 - !: + lda #$ff + cmp.z x + bcc __b1 // position_sprite::@2 // 1 << spriteno // [14] position_sprite::$4 = 1 << position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1