From b8682bd7707c1bdabe0c6751f0ceaf2df19b3875 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 2 Aug 2020 12:27:20 +0200 Subject: [PATCH] Optimized fragments for comparisons and signed byte pointers. --- .../cache/fragment-cache-csg65ce02.asm | 496 ++- .../cache/fragment-cache-mega45gs02.asm | 2 +- .../fragment/cache/fragment-cache-mos6502.asm | 2 +- .../cache/fragment-cache-mos6502x.asm | 2912 +++++------------ .../cache/fragment-cache-wdc65c02.asm | 2 +- .../vbuaa_lt_vbuzz_then_la1.asm | 3 + .../vbuxx_lt_vbuzz_then_la1.asm | 3 + .../vbuyy_lt_vbuzz_then_la1.asm | 3 + .../vbuzz_gt_vbum1_then_la1.asm | 4 + .../vbuxx_gt_vbum1_then_la1.asm | 4 + .../vbuyy_gt_vbum1_then_la1.asm | 4 + .../vbuyy_lt_vbuxx_then_la1.asm | 3 + .../AsmFragmentTemplateSynthesisRule.java | 4 + src/test/ref/examples/3d/3d.asm | 3 +- src/test/ref/examples/3d/3d.log | 146 +- .../examples/bresenham/bitmap-bresenham.asm | 6 +- .../examples/bresenham/bitmap-bresenham.log | 108 +- .../examples/fastmultiply/fastmultiply8.asm | 11 +- .../examples/fastmultiply/fastmultiply8.log | 69 +- .../examples/fastmultiply/fastmultiply8.sym | 8 +- src/test/ref/typeid-plus-bytes.asm | 14 +- src/test/ref/typeid-plus-bytes.log | 72 +- src/test/ref/typeid-plus-bytes.sym | 8 +- 23 files changed, 1320 insertions(+), 2567 deletions(-) create mode 100644 src/main/fragment/csg65ce02-common/vbuaa_lt_vbuzz_then_la1.asm create mode 100644 src/main/fragment/csg65ce02-common/vbuxx_lt_vbuzz_then_la1.asm create mode 100644 src/main/fragment/csg65ce02-common/vbuyy_lt_vbuzz_then_la1.asm create mode 100644 src/main/fragment/csg65ce02-common/vbuzz_gt_vbum1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vbuxx_gt_vbum1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vbuyy_gt_vbum1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vbuyy_lt_vbuxx_then_la1.asm diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index f436ebe41..fad69ad07 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,246 +1,4 @@ -//KICKC FRAGMENT CACHE 15e646b5c5 -//FRAGMENT vbuzz=vbuc1 -ldz #{c1} -//FRAGMENT vbuzz_lt_vbuc1_then_la1 -cpz #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz -tza -tax -sta {c1},x -//FRAGMENT vbuzz=_inc_vbuzz -inz -//FRAGMENT vbsz1=_deref_pbsc1 -lda {c1} -sta {z1} -//FRAGMENT vbsz1=_neg_vbsz2 -lda {z2} -neg -sta {z1} -//FRAGMENT _deref_pbsc1=vbsz1 -lda {z1} -sta {c1} -//FRAGMENT vbsz1=vbsz2_ror_2 -lda {z2} -asr -asr -sta {z1} -//FRAGMENT vbsaa=_deref_pbsc1 -lda {c1} -//FRAGMENT vbsxx=_deref_pbsc1 -ldx {c1} -//FRAGMENT vbsz1=_neg_vbsaa -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbsxx -txa -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbsyy -tya -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbszz -tza -neg -sta {z1} -//FRAGMENT vbsaa=_neg_vbsz1 -lda {z1} -neg -//FRAGMENT vbsaa=_neg_vbsaa -neg -//FRAGMENT vbsaa=_neg_vbsxx -txa -neg -//FRAGMENT vbsaa=_neg_vbsyy -tya -neg -//FRAGMENT vbsaa=_neg_vbszz -tza -neg -//FRAGMENT vbsxx=_neg_vbsz1 -lda {z1} -neg -tax -//FRAGMENT vbsxx=_neg_vbsaa -neg -tax -//FRAGMENT vbsxx=_neg_vbsxx -txa -neg -tax -//FRAGMENT vbsxx=_neg_vbsyy -tya -neg -tax -//FRAGMENT vbsxx=_neg_vbszz -tza -neg -tax -//FRAGMENT vbsyy=_neg_vbsz1 -lda {z1} -neg -tay -//FRAGMENT vbsyy=_neg_vbsaa -neg -tay -//FRAGMENT vbsyy=_neg_vbsxx -txa -neg -tay -//FRAGMENT vbsyy=_neg_vbsyy -tya -neg -tay -//FRAGMENT vbsyy=_neg_vbszz -tza -neg -tay -//FRAGMENT vbszz=_neg_vbsz1 -lda {z1} -neg -taz -//FRAGMENT vbszz=_neg_vbsaa -neg -taz -//FRAGMENT vbszz=_neg_vbsxx -txa -neg -taz -//FRAGMENT vbszz=_neg_vbsyy -tya -neg -taz -//FRAGMENT vbszz=_neg_vbszz -tza -neg -taz -//FRAGMENT _deref_pbsc1=vbsaa -sta {c1} -//FRAGMENT vbsz1=vbsaa_ror_2 -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbsxx_ror_2 -txa -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbsyy_ror_2 -tya -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbszz_ror_2 -tza -asr -asr -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_2 -lda {z1} -asr -asr -//FRAGMENT vbsaa=vbsaa_ror_2 -asr -asr -//FRAGMENT vbsaa=vbsxx_ror_2 -txa -asr -asr -//FRAGMENT vbsaa=vbsyy_ror_2 -tya -asr -asr -//FRAGMENT vbsaa=vbszz_ror_2 -tza -asr -asr -//FRAGMENT vbsxx=vbsz1_ror_2 -lda {z1} -asr -asr -tax -//FRAGMENT vbsxx=vbsaa_ror_2 -asr -asr -tax -//FRAGMENT vbsxx=vbsxx_ror_2 -txa -asr -asr -tax -//FRAGMENT vbsxx=vbsyy_ror_2 -tya -asr -asr -tax -//FRAGMENT vbsxx=vbszz_ror_2 -tza -asr -asr -tax -//FRAGMENT vbsyy=vbsz1_ror_2 -lda {z1} -asr -asr -tay -//FRAGMENT vbsyy=vbsaa_ror_2 -asr -asr -tay -//FRAGMENT vbsyy=vbsxx_ror_2 -txa -asr -asr -tay -//FRAGMENT vbsyy=vbsyy_ror_2 -tya -asr -asr -tay -//FRAGMENT vbsyy=vbszz_ror_2 -tza -asr -asr -tay -//FRAGMENT vbszz=vbsz1_ror_2 -lda {z1} -asr -asr -taz -//FRAGMENT vbszz=vbsaa_ror_2 -asr -asr -taz -//FRAGMENT vbszz=vbsxx_ror_2 -txa -asr -asr -taz -//FRAGMENT vbszz=vbsyy_ror_2 -tya -asr -asr -taz -//FRAGMENT vbszz=vbszz_ror_2 -tza -asr -asr -taz -//FRAGMENT vbsyy=_deref_pbsc1 -ldy {c1} -//FRAGMENT vbszz=_deref_pbsc1 -lda {c1} -taz -//FRAGMENT _deref_pbsc1=vbsxx -txa -sta {c1} -//FRAGMENT _deref_pbsc1=vbsyy -tya -sta {c1} -//FRAGMENT _deref_pbsc1=vbszz -tza -sta {c1} +//KICKC FRAGMENT CACHE 16e7ed5268 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -2176,6 +1934,8 @@ cpx {z1} bcs {la1} //FRAGMENT vbuxx=vbuc1 ldx #{c1} +//FRAGMENT vbuzz=vbuc1 +ldz #{c1} //FRAGMENT vbuzz=vbuz1 ldz {z1} //FRAGMENT vbuz1=vbuzz @@ -2190,6 +1950,8 @@ inx ldy #{c1} //FRAGMENT vbuyy=_inc_vbuyy iny +//FRAGMENT vbuzz=_inc_vbuzz +inz //FRAGMENT vbuz1_ge_vbuxx_then_la1 lda {z1} stx $ff @@ -2246,6 +2008,9 @@ bcc {la1} cpy #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuzz_lt_vbuc1_then_la1 +cpz #{c1} +bcc {la1} //FRAGMENT vbuzz_le_vbuc1_then_la1 cpz #{c1} bcc {la1} @@ -2280,8 +2045,7 @@ beq {la1} cpz #{c1} beq {la1} //FRAGMENT vbuz1_lt_vbuxx_then_la1 -txa -cmp {z1} +cpx {z1} beq !+ bcs {la1} !: @@ -2433,17 +2197,247 @@ ldx {c1},y lda {c1},y taz //FRAGMENT vbuaa_lt_vbuzz_then_la1 -tay -tza -sta $ff -cpy $ff +stz $ff +cmp $ff bcc {la1} //FRAGMENT vbuxx=vbuzz_minus_1 tza tax dex //FRAGMENT vbuyy_lt_vbuzz_then_la1 -tza -sta $ff +stz $ff cpy $ff bcc {la1} +//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz +tza +tax +sta {c1},x +//FRAGMENT vbsz1=_deref_pbsc1 +lda {c1} +sta {z1} +//FRAGMENT vbsz1=_neg_vbsz2 +lda {z2} +neg +sta {z1} +//FRAGMENT _deref_pbsc1=vbsz1 +lda {z1} +sta {c1} +//FRAGMENT vbsz1=vbsz2_ror_2 +lda {z2} +asr +asr +sta {z1} +//FRAGMENT vbsaa=_deref_pbsc1 +lda {c1} +//FRAGMENT vbsxx=_deref_pbsc1 +ldx {c1} +//FRAGMENT vbsz1=_neg_vbsaa +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbsxx +txa +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbsyy +tya +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbszz +tza +neg +sta {z1} +//FRAGMENT vbsaa=_neg_vbsz1 +lda {z1} +neg +//FRAGMENT vbsaa=_neg_vbsaa +neg +//FRAGMENT vbsaa=_neg_vbsxx +txa +neg +//FRAGMENT vbsaa=_neg_vbsyy +tya +neg +//FRAGMENT vbsaa=_neg_vbszz +tza +neg +//FRAGMENT vbsxx=_neg_vbsz1 +lda {z1} +neg +tax +//FRAGMENT vbsxx=_neg_vbsaa +neg +tax +//FRAGMENT vbsxx=_neg_vbsxx +txa +neg +tax +//FRAGMENT vbsxx=_neg_vbsyy +tya +neg +tax +//FRAGMENT vbsxx=_neg_vbszz +tza +neg +tax +//FRAGMENT vbsyy=_neg_vbsz1 +lda {z1} +neg +tay +//FRAGMENT vbsyy=_neg_vbsaa +neg +tay +//FRAGMENT vbsyy=_neg_vbsxx +txa +neg +tay +//FRAGMENT vbsyy=_neg_vbsyy +tya +neg +tay +//FRAGMENT vbsyy=_neg_vbszz +tza +neg +tay +//FRAGMENT vbszz=_neg_vbsz1 +lda {z1} +neg +taz +//FRAGMENT vbszz=_neg_vbsaa +neg +taz +//FRAGMENT vbszz=_neg_vbsxx +txa +neg +taz +//FRAGMENT vbszz=_neg_vbsyy +tya +neg +taz +//FRAGMENT vbszz=_neg_vbszz +tza +neg +taz +//FRAGMENT _deref_pbsc1=vbsaa +sta {c1} +//FRAGMENT vbsz1=vbsaa_ror_2 +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbsxx_ror_2 +txa +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbsyy_ror_2 +tya +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbszz_ror_2 +tza +asr +asr +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_2 +lda {z1} +asr +asr +//FRAGMENT vbsaa=vbsaa_ror_2 +asr +asr +//FRAGMENT vbsaa=vbsxx_ror_2 +txa +asr +asr +//FRAGMENT vbsaa=vbsyy_ror_2 +tya +asr +asr +//FRAGMENT vbsaa=vbszz_ror_2 +tza +asr +asr +//FRAGMENT vbsxx=vbsz1_ror_2 +lda {z1} +asr +asr +tax +//FRAGMENT vbsxx=vbsaa_ror_2 +asr +asr +tax +//FRAGMENT vbsxx=vbsxx_ror_2 +txa +asr +asr +tax +//FRAGMENT vbsxx=vbsyy_ror_2 +tya +asr +asr +tax +//FRAGMENT vbsxx=vbszz_ror_2 +tza +asr +asr +tax +//FRAGMENT vbsyy=vbsz1_ror_2 +lda {z1} +asr +asr +tay +//FRAGMENT vbsyy=vbsaa_ror_2 +asr +asr +tay +//FRAGMENT vbsyy=vbsxx_ror_2 +txa +asr +asr +tay +//FRAGMENT vbsyy=vbsyy_ror_2 +tya +asr +asr +tay +//FRAGMENT vbsyy=vbszz_ror_2 +tza +asr +asr +tay +//FRAGMENT vbszz=vbsz1_ror_2 +lda {z1} +asr +asr +taz +//FRAGMENT vbszz=vbsaa_ror_2 +asr +asr +taz +//FRAGMENT vbszz=vbsxx_ror_2 +txa +asr +asr +taz +//FRAGMENT vbszz=vbsyy_ror_2 +tya +asr +asr +taz +//FRAGMENT vbszz=vbszz_ror_2 +tza +asr +asr +taz +//FRAGMENT vbsyy=_deref_pbsc1 +ldy {c1} +//FRAGMENT vbszz=_deref_pbsc1 +lda {c1} +taz +//FRAGMENT _deref_pbsc1=vbsxx +stx {c1} +//FRAGMENT _deref_pbsc1=vbsyy +sty {c1} +//FRAGMENT _deref_pbsc1=vbszz +tza +sta {c1} diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index 331555a02..ee3f25d56 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 15e646b5c5 +//KICKC FRAGMENT CACHE 16e7ed5268 //FRAGMENT vduz1=vduc1 lda #<{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 3d5876c5f..a6bb207a2 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 15e646b5c5 +//KICKC FRAGMENT CACHE 16e7ed5268 //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 be3781f69..1a83ef717 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 15e646b5c5 +//KICKC FRAGMENT CACHE 16e7ed5268 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -1551,8 +1551,7 @@ bcc {la1} cpx {z1} bne {la1} //FRAGMENT vbuxx_gt_vbuz1_then_la1 -txa -cmp {z1} +cpx {z1} beq !+ bcs {la1} !: @@ -1561,16 +1560,14 @@ stx $ff cpy $ff bne {la1} //FRAGMENT vbuxx_gt_vbuyy_then_la1 -txa -sta $ff +stx $ff cpy $ff bcc {la1} //FRAGMENT vbuyy_neq_vbuz1_then_la1 cpy {z1} bne {la1} //FRAGMENT vbuyy_gt_vbuz1_then_la1 -tya -cmp {z1} +cpy {z1} beq !+ bcs {la1} !: @@ -4148,8 +4145,7 @@ tay cmp {z1} bcc {la1} //FRAGMENT vbuz1_lt_vbuxx_then_la1 -txa -cmp {z1} +cpx {z1} beq !+ bcs {la1} !: @@ -5371,8 +5367,7 @@ tya ldy $ff sta ({z1}),y //FRAGMENT vbuz1_lt_vbuyy_then_la1 -tya -cmp {z1} +cpy {z1} beq !+ bcs {la1} !: @@ -7536,6 +7531,448 @@ sbc {z2}+1 sta {z1}+1 //FRAGMENT vbuyy=pbuc1_derefidx_vbuxx ldy {c1},x +//FRAGMENT _stackpullbyte_1 +pla +//FRAGMENT vduz1=_inc_vduz1 +inc {z1} +bne !+ +inc {z1}+1 +bne !+ +inc {z1}+2 +bne !+ +inc {z1}+3 +!: +//FRAGMENT vbuz1_le_vbuz2_then_la1 +lda {z2} +cmp {z1} +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 +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 +bcc !+ +bne {la1} +lda {z1}+2 +cmp {z2}+2 +bcc !+ +bne {la1} +lda {z1}+1 +cmp {z2}+1 +bcc !+ +bne {la1} +lda {z1} +cmp {z2} +bcs {la1} +!: +//FRAGMENT vduz1=vduz1_minus_vduz2 +lda {z1} +sec +sbc {z2} +sta {z1} +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +lda {z1}+2 +sbc {z2}+2 +sta {z1}+2 +lda {z1}+3 +sbc {z2}+3 +sta {z1}+3 +//FRAGMENT vbuz1_le_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bcs {la1} +//FRAGMENT vbuaa_le_vbuz1_then_la1 +ldy {z1} +sta $ff +cpy $ff +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuz1_then_la1 +tay +lda {c1},y +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1 +lda {c1},x +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 +lda {c1},y +cmp {z1} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuaa_then_la1 +ldx {z1} +tay +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuaa_then_la1 +tax +lda {c1},x +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuaa_then_la1 +tay +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuaa_then_la1 +tax +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuxx_then_la1 +ldy {z1} +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuxx_then_la1 +tay +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuxx_then_la1 +lda {c1},x +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuxx_then_la1 +lda {c1},y +tay +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuyy_then_la1 +ldx {z1} +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuyy_then_la1 +tax +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuyy_then_la1 +lda {c1},x +tax +sty $ff +cpx $ff +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuyy_then_la1 +lda {c1},y +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 +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsxx +txa +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsyy +tya +eor #$ff +sec +adc {z2} +sta {z1} +//FRAGMENT vbsxx=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsaa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsxx=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +tax +//FRAGMENT vbsz1=vbsxx_minus_vbsz2 +txa +sec +sbc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsxx +lda #0 +sta {z1} +//FRAGMENT vbsz1=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbsxx=vbsxx_minus_vbsz1 +txa +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsxx +lda #0 +tax +//FRAGMENT vbsxx=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +tax +//FRAGMENT vbsz1=vbsyy_minus_vbsz2 +tya +sec +sbc {z2} +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +sta {z1} +//FRAGMENT vbsz1=vbsyy_minus_vbsyy +lda #0 +sta {z1} +//FRAGMENT vbsxx=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +tax +//FRAGMENT vbsxx=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +tax +//FRAGMENT vbsxx=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +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 +lda {z1} +tax +//FRAGMENT vbuyy=_byte_vduz1 +lda {z1} +tay +//FRAGMENT vduz1=pduc1_derefidx_vbuaa +tay +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=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} +lda {c1}+1,y +sta {z1}+1 +lda {c1}+2,y +sta {z1}+2 +lda {c1}+3,y +sta {z1}+3 +//FRAGMENT vbuaa_le_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuz1=vbuxx_minus_1 +dex +stx {z1} +//FRAGMENT vbuz1=vbuyy_minus_1 +tya +sec +sbc #1 +sta {z1} +//FRAGMENT vbuxx_le_vbuz1_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_vbuz1_then_la1 +lda {z1} +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuaa_then_la1 +cmp {z1} +bcs {la1} +//FRAGMENT vbuxx_le_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vbuyy_le_vbuc1_then_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 vbsxx=vbsc1 +ldx #{c1} +//FRAGMENT vbuaa_lt_vbuxx_then_la1 +stx $ff +cmp $ff +bcc {la1} +//FRAGMENT vbuaa_lt_vbuyy_then_la1 +tax +sty $ff +cpx $ff +bcc {la1} +//FRAGMENT vbuyy_lt_vbuaa_then_la1 +sta $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuyy_lt_vbuxx_then_la1 +stx $ff +cpy $ff +bcc {la1} +//FRAGMENT vbuxx_le_vbuaa_then_la1 +stx $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuyy_le_vbuaa_then_la1 +sty $ff +cmp $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuxx_then_la1 +cpx {z1} +bcs {la1} +//FRAGMENT vbuyy_le_vbuxx_then_la1 +sty $ff +cpx $ff +bcs {la1} +//FRAGMENT vbuz1_le_vbuyy_then_la1 +cpy {z1} +bcs {la1} +//FRAGMENT vbuxx_le_vbuyy_then_la1 +stx $ff +cpy $ff +bcs {la1} +//FRAGMENT vbuz1=vbuz2_minus_vbuz1 +lda {z2} +sec +sbc {z1} +sta {z1} +//FRAGMENT vbsz1=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuc1_plus_vbuz1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuz1=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} //FRAGMENT pbuz1_le_pbuc1_then_la1 lda {z1}+1 cmp #>{c1} @@ -7597,9 +8034,6 @@ sta {z1}+2 lda #>{c1}>>$10 adc #0 sta {z1}+3 -//FRAGMENT vbuz1=_byte_vduz2 -lda {z2} -sta {z1} //FRAGMENT vduz1=vduc1_plus_vbuaa clc adc #<{c1} @@ -7641,14 +8075,6 @@ sta {z1}+2 lda #>{c1}>>$10 adc #0 sta {z1}+3 -//FRAGMENT vbuaa=_byte_vduz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vduz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vduz1 -lda {z1} -tay //FRAGMENT pbuz1_derefidx_vbuaa=vbuz2 tay lda {z2} @@ -7668,6 +8094,40 @@ sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=vbuyy tya sta ({z1}),y +//FRAGMENT vwuz1=vwuz2_rol_7 +lda {z2}+1 +lsr +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_ror_9 +lda {z2}+1 +lsr +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_8 +lda {z2} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 //FRAGMENT vwuz1_lt_vbuc1_then_la1 lda {z1}+1 cmp #>{c1} @@ -7691,75 +8151,6 @@ lda {z3} sta {z1} lda {z3}+1 sta {z1}+1 -//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 -bcc !+ -bne {la1} -lda {z1}+2 -cmp {z2}+2 -bcc !+ -bne {la1} -lda {z1}+1 -cmp {z2}+1 -bcc !+ -bne {la1} -lda {z1} -cmp {z2} -bcs {la1} -!: -//FRAGMENT vduz1=vduz1_minus_vduz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -lda {z1}+2 -sbc {z2}+2 -sta {z1}+2 -lda {z1}+3 -sbc {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuaa -tay -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=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} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 //FRAGMENT _deref_pbuz1_eq_vbuz2_then_la1 lda {z2} ldy #0 @@ -8251,11 +8642,6 @@ sta ({z1}),y lda {c2},y ldy #{c1} sta ({z1}),y -//FRAGMENT vbuyy_lt_vbuxx_then_la1 -txa -sta $ff -cpy $ff -bcc {la1} //FRAGMENT vwuz1=vwuz1_bor_vbuxx txa ora {z1} @@ -8269,10 +8655,6 @@ bcs {la1} lda {z1} cmp {z1} bcs {la1} -//FRAGMENT vbuz1_le_vbuz2_then_la1 -lda {z2} -cmp {z1} -bcs {la1} //FRAGMENT vbuz1_le_pbuc1_derefidx_vbuz2_then_la1 ldy {z2} lda {c1},y @@ -8357,9 +8739,6 @@ tya sta $ff cpy $ff bcs {la1} -//FRAGMENT vbuz1_le_vbuxx_then_la1 -cpx {z1} -bcs {la1} //FRAGMENT vbuz1_le_pbuc1_derefidx_vbuxx_then_la1 lda {c1},x cmp {z1} @@ -8579,10 +8958,6 @@ lda {z2} clc adc #2 sta {z1} -//FRAGMENT vbuz1_le_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bcs {la1} //FRAGMENT vbuaa=vbuz1_plus_2 lda {z1} clc @@ -8591,18 +8966,6 @@ adc #2 ldx {z1} inx inx -//FRAGMENT vbuaa_le_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_le_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_le_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -beq {la1} //FRAGMENT vbuyy=vbuz1_plus_2 ldy {z1} iny @@ -8647,14 +9010,8 @@ bvc !+ eor #$80 !: bmi {la1} -//FRAGMENT vbsxx=vbsc1 -ldx #{c1} -//FRAGMENT vbsxx=_inc_vbsxx -inx //FRAGMENT vbsyy=vbsc1 ldy #{c1} -//FRAGMENT vbsyy=_inc_vbsyy -iny //FRAGMENT vwsz1=vwsz2_ror_7 // ROL once instead of RORing 7 times lda {z2} // {z2} low byte to tmp $ff @@ -8763,1432 +9120,6 @@ tax ldy #0 lda ({z1}),y sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuz1=_deref_pbsc2 -lda {c2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_2 -inc {z1} -inc {z1} -//FRAGMENT vbsz1=vbsz1_minus_vbsc1 -lax {z1} -axs #{c1} -stx {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsz3 -lda {z2} -clc -adc {z3} -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsz3 -lda {z2} -sec -sbc {z3} -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsz3 -ldy {z2} -lda {c1},y -ldy {z3} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -clc -lda {c1},y -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsz3 -lda {z2} -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsz3 -lda {z2} -ldy {z3} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=_deref_pbsc1 -lda {c1} -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa -tay -ldx {c1},y -//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa -tax -ldy {c1},x -//FRAGMENT pbsc1_derefidx_vbuaa=_deref_pbsc2 -tay -lda {c2} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuxx=_deref_pbsc2 -lda {c2} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=_deref_pbsc2 -lda {c2} -sta {c1},y -//FRAGMENT vbuaa=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -//FRAGMENT vbuxx=vbuc1_plus__deref_pbuc2 -lda {c2} -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -tay -//FRAGMENT vbsxx=vbsxx_minus_vbsc1 -txa -axs #{c1} -//FRAGMENT vbsyy=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -tay -//FRAGMENT vbsz1=vbsz2_plus_vbsaa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsxx -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsyy -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -//FRAGMENT vbsaa=vbsz1_plus_vbsaa -clc -adc {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsxx -txa -clc -adc {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsyy -tya -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsaa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsxx -txa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsyy -tya -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsaa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsxx -txa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsyy -tya -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_vbsz2 -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsaa -asl -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_vbsz1 -clc -adc {z1} -//FRAGMENT vbsaa=vbsaa_plus_vbsaa -asl -//FRAGMENT vbsaa=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -//FRAGMENT vbsxx=vbsaa_plus_vbsz1 -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsaa -asl -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsyy=vbsaa_plus_vbsz1 -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsaa -asl -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsz1=vbsxx_plus_vbsz2 -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsxx -txa -asl -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -//FRAGMENT vbsaa=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsxx_plus_vbsxx -txa -asl -//FRAGMENT vbsaa=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -//FRAGMENT vbsxx=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsxx -txa -asl -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsyy=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsxx -txa -asl -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsz1=vbsyy_plus_vbsz2 -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsyy -tya -asl -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -//FRAGMENT vbsaa=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsyy_plus_vbsyy -tya -asl -//FRAGMENT vbsxx=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsyy -tya -asl -tax -//FRAGMENT vbsyy=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsyy -tya -asl -tay -//FRAGMENT vbsz1=vbsz2_minus_vbsxx -txa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsyy -tya -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -//FRAGMENT vbsaa=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -//FRAGMENT vbsxx=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -tax -//FRAGMENT vbsxx=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -tay -//FRAGMENT vbsyy=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsz1=vbsxx_minus_vbsz2 -txa -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsxx -lda #0 -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsxx -lda #0 -//FRAGMENT vbsaa=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -//FRAGMENT vbsxx=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsxx -lda #0 -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -tax -//FRAGMENT vbsyy=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsxx -lda #0 -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbsz1=vbsyy_minus_vbsz2 -tya -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsyy -lda #0 -sta {z1} -//FRAGMENT vbsaa=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -//FRAGMENT vbsaa=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -//FRAGMENT vbsaa=vbsyy_minus_vbsyy -lda #0 -//FRAGMENT vbsxx=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbsxx=vbsyy_minus_vbsyy -lda #0 -tax -//FRAGMENT vbsyy=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -tay -//FRAGMENT vbsyy=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbsyy=vbsyy_minus_vbsyy -lda #0 -tay -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz2 -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz2 -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -tay -//FRAGMENT _deref_pbsc1=vbsaa -sta {c1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz2 -lda {c1},x -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz2 -lda {c1},y -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsxx -ldy {z2} -lda {c1},y -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsyy -ldx {z2} -lda {c1},x -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldx {z1} -lda {c1},x -ldx {z2} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -tay -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -lda {c1},y -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -clc -lda {c1},x -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -lda {c1},y -adc {c1},y -tay -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -clc -adc {c1},y -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsz1 -txa -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsz2 -tya -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -tya -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsz2 -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsz2 -ldy {z2} -txa -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsz2 -tya -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldx {z2} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsz1 -txa -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsz1 -ldx {z1} -tya -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsxx -lda {z2} -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tax -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -tay -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsyy -lda {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tax -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -tay -//FRAGMENT vbsaa=_deref_pbsc1 -lda {c1} -//FRAGMENT vbsxx=_deref_pbsc1 -ldx {c1} -//FRAGMENT vbsyy=_deref_pbsc1 -ldy {c1} -//FRAGMENT _deref_pbsc1=vbsxx -txa -sta {c1} -//FRAGMENT _deref_pbsc1=vbsyy -tya -sta {c1} -//FRAGMENT pbuz1=pbuz1_plus_1 -inc {z1} -bne !+ -inc {z1}+1 -!: //FRAGMENT pbuz1_derefidx_vbuc1=vbuz2 lda {z2} ldy #{c1} @@ -10292,11 +9223,6 @@ lda {c1} sta {z1} lda #0 sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_8 -lda {z2} -sta {z1}+1 -lda #0 -sta {z1} //FRAGMENT vwuz1=vwuz2_plus_1 lda {z2} clc @@ -10339,14 +9265,6 @@ lda {z1} cmp #{c1} bcs {la1} !: -//FRAGMENT vbuxx_le_vbuz1_then_la1 -lda {z1} -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuz1_le_vbuyy_then_la1 -cpy {z1} -bcs {la1} //FRAGMENT vwuz1=vwuz1_plus_1 inc {z1} bne !+ @@ -10393,35 +9311,6 @@ lda #<{c2} sta {c1},y lda #>{c2} sta {c1}+1,y -//FRAGMENT vwuz1=vwuz2_rol_7 -lda {z2}+1 -lsr -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 -lda {z2} -eor {z3} -sta {z1} -lda {z2}+1 -eor {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_9 -lda {z2}+1 -lsr -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 //FRAGMENT _deref_pbuc1=_byte_vwuz1 lda {z1} sta {c1} @@ -11339,11 +10228,6 @@ eor #$ff clc adc #$01 sta {z1} -//FRAGMENT vbuyy_le_vbuz1_then_la1 -lda {z1} -sty $ff -cmp $ff -bcs {la1} //FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa ldy {z2} tax @@ -11493,53 +10377,6 @@ sta {z1} lda #>{c1} eor {z1}+1 sta {z1}+1 -//FRAGMENT vbsz1=vbsz2_plus_vbsc1 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbsz1=vbsc1_plus_vbsz2 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsz2 -lda {z2} -asl -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsc1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_vbsc1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbsyy=vbsz1_plus_vbsc1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbsaa=vbsc1_plus_vbsz1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbsxx=vbsc1_plus_vbsz1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbsyy=vbsc1_plus_vbsz1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbsaa=vbsz1_plus_vbsz1 -lda {z1} -asl -//FRAGMENT vbsxx=vbsz1_plus_vbsz1 -lda {z1} -asl -tax -//FRAGMENT vbsyy=vbsz1_plus_vbsz1 -lda {z1} -asl -tay //FRAGMENT vbsz1=vbsz2_rol_1 lda {z2} asl @@ -11623,6 +10460,9 @@ axs #{c1} //FRAGMENT vbsxx=vbsaa_minus_vbsc1 tax axs #{c1} +//FRAGMENT vbsxx=vbsxx_minus_vbsc1 +txa +axs #{c1} //FRAGMENT vbsxx=vbsyy_minus_vbsc1 tya tax @@ -11641,6 +10481,16 @@ txa sec sbc #{c1} tay +//FRAGMENT vbsyy=vbsyy_minus_vbsc1 +tya +sec +sbc #{c1} +tay +//FRAGMENT pbuz1=pbuz1_plus_1 +inc {z1} +bne !+ +inc {z1}+1 +!: //FRAGMENT vbuc1_gt_vbuz1_then_la1 lda {z1} cmp #{c1} @@ -11672,6 +10522,158 @@ 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 +sbc {z1} +//FRAGMENT vbsaa=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +//FRAGMENT vbsaa=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +//FRAGMENT vbsaa=vbsc1_minus_vbsyy +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 +sbc {z1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsaa +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT vbsyy=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} +tay +//FRAGMENT vbsaa_ge_0_then_la1 +cmp #0 +bpl {la1} +//FRAGMENT vbsc1_neq_vbsaa_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT vbsyy=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +tay +//FRAGMENT vbsyy=vbsz1_minus_vbsaa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsyy=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsyy=vbsz1_minus_vbsyy +tya +eor #$ff +sec +adc {z1} +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsz1 +txa +sec +sbc {z1} +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsaa +sta $ff +txa +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsxx +lda #0 +tay +//FRAGMENT vbsyy=vbsxx_minus_vbsyy +txa +sty $ff +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +tay +//FRAGMENT vbsyy=vbsyy_minus_vbsyy +lda #0 +tay +//FRAGMENT vbsyy_lt_0_then_la1 +cpy #0 +bmi {la1} //FRAGMENT vbsz1_neq_0_then_la1 lda {z1} cmp #0 @@ -12391,6 +11393,12 @@ tax //FRAGMENT vboyy=vboxx txa tay +//FRAGMENT vbsz1=vbsz1_minus_vbsxx +txa +eor #$ff +sec +adc {z1} +sta {z1} //FRAGMENT vwsz1=vwsz1_minus_vwsc1 lda {z1} sec @@ -12399,10 +11407,6 @@ sta {z1} lda {z1}+1 sbc #>{c1} sta {z1}+1 -//FRAGMENT vbuaa_lt_vbuxx_then_la1 -stx $ff -cmp $ff -bcc {la1} //FRAGMENT vbsz1=pbsc1_derefidx_vbuz2_minus_pbsc2_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -12517,57 +11521,6 @@ lda {c1} sta {z1} lda {c1}+1 sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 -ldy {z1} -lda {c1},y -cmp {z2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1 -lda {c1},x -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 -lda {c1},y -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuxx_then_la1 -ldy {z1} -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuxx_then_la1 -lda {c1},x -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuxx_then_la1 -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuyy_then_la1 -ldx {z1} -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuyy_then_la1 -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuyy_then_la1 -lda {c1},y -tax -sty $ff -cpx $ff -beq {la1} //FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_1 ldx {z1} lda {c1},x @@ -12962,11 +11915,6 @@ dey bne !l- !e: sta {z1} -//FRAGMENT vbsz1=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -sta {z1} //FRAGMENT vbsz1=vbsz1_plus_vbsz2 lda {z1} clc @@ -13389,12 +12337,6 @@ dey bne !l- !e: tay -//FRAGMENT vbsz1=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -sta {z1} //FRAGMENT vbsz1=vbsz1_minus_vbsyy tya eor #$ff @@ -13411,6 +12353,36 @@ tya clc adc {z1} sta {z1} +//FRAGMENT vbsxx=vbsxx_plus_vbsz1 +txa +clc +adc {z1} +tax +//FRAGMENT vbsxx=vbsxx_plus_vbsxx +txa +asl +tax +//FRAGMENT vbsxx=vbsxx_plus_vbsyy +txa +sty $ff +clc +adc $ff +tax +//FRAGMENT vbsyy=vbsyy_plus_vbsz1 +tya +clc +adc {z1} +tay +//FRAGMENT vbsyy=vbsyy_plus_vbsxx +txa +sty $ff +clc +adc $ff +tay +//FRAGMENT vbsyy=vbsyy_plus_vbsyy +tya +asl +tay //FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuz1 txa ldx {z1} @@ -13478,15 +12450,6 @@ sta {z1}+2 lda {z2}+3 sbc #0 sta {z1}+3 -//FRAGMENT vduz1=_inc_vduz1 -inc {z1} -bne !+ -inc {z1}+1 -bne !+ -inc {z1}+2 -bne !+ -inc {z1}+3 -!: //FRAGMENT vduz1=vduz1_plus_vbuc1 lda {z1} clc @@ -13513,8 +12476,6 @@ sta {z1}+2 lda {z1}+3 sbc #0 sta {z1}+3 -//FRAGMENT _stackpullbyte_1 -pla //FRAGMENT vwuz1=_stackidxword_vbuc1 tsx lda STACK_BASE+{c1},x @@ -13631,17 +12592,27 @@ lda {z1} cmp #<{c1} bcc {la1} !: -//FRAGMENT vbsz1=vbsz2_minus_vbsaa -eor #$ff -sec -adc {z2} +//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa +tay +lda {c1},y sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsaa -sta $ff +//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa +tay +lda {c1},y +//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa +tay +ldx {c1},y +//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa +tax +ldy {c1},x +//FRAGMENT vbsaa=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +//FRAGMENT vbsaa=vbsxx_minus_vbsz1 txa sec -sbc $ff -sta {z1} +sbc {z1} //FRAGMENT vbsaa=vbsz1_minus_vbsaa eor #$ff sec @@ -13651,28 +12622,23 @@ sta $ff txa sec sbc $ff -//FRAGMENT vbsxx=vbsz1_minus_vbsaa +//FRAGMENT vbsaa=vbsz1_minus_vbsxx +txa eor #$ff sec adc {z1} -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -tax -//FRAGMENT vbsyy=vbsz1_minus_vbsaa +//FRAGMENT vbsaa=vbsxx_minus_vbsxx +lda #0 +//FRAGMENT vbsaa=vbsz1_minus_vbsyy +tya eor #$ff sec adc {z1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsaa -sta $ff +//FRAGMENT vbsaa=vbsxx_minus_vbsyy txa +sty $ff sec sbc $ff -tay //FRAGMENT vbuz1=_deref_pbuc1_bxor_vbuc2 lda #{c2} eor {c1} @@ -14719,6 +13685,11 @@ tax //FRAGMENT vboyy=vboc1 lda #{c1} tay +//FRAGMENT vbuyy_neq_vbuaa_then_la1 +tax +stx $ff +cpy $ff +bne {la1} //FRAGMENT vwuz1=_deref_pbuz2_word__deref_pbuz3 ldy #0 lda ({z3}),y @@ -14861,9 +13832,6 @@ tya cmp #$80 ror tay -//FRAGMENT vbsyy_lt_0_then_la1 -cpy #0 -bmi {la1} //FRAGMENT vbuz1=_neg_vbuyy dey tya @@ -16152,20 +15120,11 @@ lda {c1},y clc adc {c1},y tay -//FRAGMENT vbuaa_le_vbuz1_then_la1 -ldy {z1} -sta $ff -cpy $ff -bcs {la1} //FRAGMENT vbuaa_le_vbuxx_then_la1 tay sty $ff cpx $ff bcs {la1} -//FRAGMENT vbuyy_le_vbuxx_then_la1 -sty $ff -cpx $ff -bcs {la1} //FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 ldy {z2} lda {c1},y @@ -16425,6 +15384,122 @@ ldx {z1} ldy {z1}+1 //FRAGMENT vbuyy=_lo_pvoz1 ldy {z1} +//FRAGMENT vbsz1_eq_vbsc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vbsc1_eq_vbsz1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vbsz3 +lda {z3} +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_minus_vbuc1 +sec +lda {z2} +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vbsaa_eq_vbsc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbsaa=vbsyy_minus_vbsz1 +tya +sec +sbc {z1} +//FRAGMENT vbsaa=vbsyy_minus_vbsaa +sta $ff +tya +sec +sbc $ff +//FRAGMENT vbsaa=vbsyy_minus_vbsxx +tya +stx $ff +sec +sbc $ff +//FRAGMENT vbsaa=vbsyy_minus_vbsyy +lda #0 +//FRAGMENT vbsc1_eq_vbsaa_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT pbuz1=pbuz2_plus_vbsaa +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbsxx +txa +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbsyy +tya +pha +clc +adc {z2} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbsc1_eq_vbsxx_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbsxx_eq_vbsc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbsc1_eq_vbsyy_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT pbuz1=pbuz1_plus_vbsxx +txa +pha +clc +adc {z1} +sta {z1} +pla +ora #$7f +bmi !+ +lda #0 +!: +adc {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_2 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 //FRAGMENT _deref_pwsz1=vwsc1 ldy #0 lda #<{c1} @@ -17033,9 +16108,6 @@ lda ({z1}),y cmp #0 beq {la1} -//FRAGMENT vbuz1=vbuxx_minus_1 -dex -stx {z1} //FRAGMENT vbuxx=vbuxx_minus_1 dex //FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa @@ -17513,9 +16585,6 @@ tax //FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuyy lda {c1},y tay -//FRAGMENT vbuz1_le_vbuaa_then_la1 -cmp {z1} -bcs {la1} //FRAGMENT vbuaa_le_vbuyy_then_la1 sta $ff cpy $ff @@ -17525,22 +16594,10 @@ tay sty $ff cpx $ff bcs {la1} -//FRAGMENT vbuxx_le_vbuaa_then_la1 -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_le_vbuyy_then_la1 -stx $ff -cpy $ff -bcs {la1} //FRAGMENT vbuyy_ge_vbuaa_then_la1 sta $ff cpy $ff bcs {la1} -//FRAGMENT vbuyy_le_vbuaa_then_la1 -sty $ff -cmp $ff -bcs {la1} //FRAGMENT pwuc1_derefidx_vbuz1=pwuz2_derefidx_vbuc2 ldx {z1} ldy #{c2} @@ -17573,21 +16630,8 @@ sta {c1},x iny lda ({z1}),y sta {c1}+1,x -//FRAGMENT vbsc1_neq_vbsz1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vbsc1_neq_vbsaa_then_la1 -cmp #{c1} -bne {la1} //FRAGMENT vbsaa=vbsc1 lda #{c1} -//FRAGMENT vbsaa=_inc_vbsaa -clc -adc #1 -//FRAGMENT vbsc1_neq_vbsxx_then_la1 -cpx #{c1} -bne {la1} //FRAGMENT vbsc1_neq_vbsyy_then_la1 cpy #{c1} bne {la1} @@ -17616,299 +16660,3 @@ sta {c1},x lda #{c2} ora {c1},y sta {c1},y -//FRAGMENT vbsz1=_sbyte_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuz1_then_la1 -tay -lda {c1},y -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuaa_then_la1 -ldx {z1} -tay -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuaa_then_la1 -tax -lda {c1},x -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuaa_then_la1 -tay -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuaa_then_la1 -tax -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuxx_then_la1 -tay -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuyy_then_la1 -tax -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbsaa=_sbyte_vwuz1 -lda {z1} -//FRAGMENT vbsxx=_sbyte_vwuz1 -ldx {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -sta {z1} -//FRAGMENT vbsxx=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -tax -//FRAGMENT vbuz1=vbuyy_minus_1 -tya -sec -sbc #1 -sta {z1} -//FRAGMENT vbsyy=_sbyte_vwuz1 -ldy {z1} -//FRAGMENT vbuaa_lt_vbuyy_then_la1 -tax -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_lt_vbuaa_then_la1 -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1=vbuz2_minus_vbuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuz1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -sta {z1} -//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 -sbc {z1} -//FRAGMENT vbsaa=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbsaa=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbsaa=vbsc1_minus_vbsyy -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 -sbc {z1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsyy -tya -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbsaa_ge_0_then_la1 -cmp #0 -bpl {la1} -//FRAGMENT vbsyy=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -tay -//FRAGMENT vbuyy_neq_vbuaa_then_la1 -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbsz1_eq_vbsc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT vbsc1_eq_vbsz1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT pbuz1=pbuz2_plus_vbsz3 -lda {z3} -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbsaa_eq_vbsc1_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbsaa=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -//FRAGMENT vbsc1_eq_vbsaa_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT pbuz1=pbuz2_plus_vbsaa -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbsxx -txa -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbsyy -tya -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbsc1_eq_vbsxx_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbsxx_eq_vbsc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbsc1_eq_vbsyy_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT pbuz1=pbuz1_plus_vbsxx -txa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index 5eeb8b1b5..92b5bd146 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 15e646b5c5 +//KICKC FRAGMENT CACHE 16e7ed5268 //FRAGMENT vbuz1=_deref_pbuc1 lda {c1} sta {z1} diff --git a/src/main/fragment/csg65ce02-common/vbuaa_lt_vbuzz_then_la1.asm b/src/main/fragment/csg65ce02-common/vbuaa_lt_vbuzz_then_la1.asm new file mode 100644 index 000000000..97a6d4214 --- /dev/null +++ b/src/main/fragment/csg65ce02-common/vbuaa_lt_vbuzz_then_la1.asm @@ -0,0 +1,3 @@ +stz $ff +cmp $ff +bcc {la1} \ No newline at end of file diff --git a/src/main/fragment/csg65ce02-common/vbuxx_lt_vbuzz_then_la1.asm b/src/main/fragment/csg65ce02-common/vbuxx_lt_vbuzz_then_la1.asm new file mode 100644 index 000000000..db4845cbb --- /dev/null +++ b/src/main/fragment/csg65ce02-common/vbuxx_lt_vbuzz_then_la1.asm @@ -0,0 +1,3 @@ +stz $ff +cpx $ff +bcc {la1} \ No newline at end of file diff --git a/src/main/fragment/csg65ce02-common/vbuyy_lt_vbuzz_then_la1.asm b/src/main/fragment/csg65ce02-common/vbuyy_lt_vbuzz_then_la1.asm new file mode 100644 index 000000000..dcd3f9245 --- /dev/null +++ b/src/main/fragment/csg65ce02-common/vbuyy_lt_vbuzz_then_la1.asm @@ -0,0 +1,3 @@ +stz $ff +cpy $ff +bcc {la1} \ No newline at end of file diff --git a/src/main/fragment/csg65ce02-common/vbuzz_gt_vbum1_then_la1.asm b/src/main/fragment/csg65ce02-common/vbuzz_gt_vbum1_then_la1.asm new file mode 100644 index 000000000..f8dea60e2 --- /dev/null +++ b/src/main/fragment/csg65ce02-common/vbuzz_gt_vbum1_then_la1.asm @@ -0,0 +1,4 @@ +cpz {m1} +beq !+ +bcs {la1} +!: diff --git a/src/main/fragment/mos6502-common/vbuxx_gt_vbum1_then_la1.asm b/src/main/fragment/mos6502-common/vbuxx_gt_vbum1_then_la1.asm new file mode 100644 index 000000000..fe2f96dcf --- /dev/null +++ b/src/main/fragment/mos6502-common/vbuxx_gt_vbum1_then_la1.asm @@ -0,0 +1,4 @@ +cpx {m1} +beq !+ +bcs {la1} +!: diff --git a/src/main/fragment/mos6502-common/vbuyy_gt_vbum1_then_la1.asm b/src/main/fragment/mos6502-common/vbuyy_gt_vbum1_then_la1.asm new file mode 100644 index 000000000..e233f5dd7 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbuyy_gt_vbum1_then_la1.asm @@ -0,0 +1,4 @@ +cpy {m1} +beq !+ +bcs {la1} +!: diff --git a/src/main/fragment/mos6502-common/vbuyy_lt_vbuxx_then_la1.asm b/src/main/fragment/mos6502-common/vbuyy_lt_vbuxx_then_la1.asm new file mode 100644 index 000000000..8588a7ef7 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbuyy_lt_vbuxx_then_la1.asm @@ -0,0 +1,3 @@ +stx $ff +cpy $ff +bcc {la1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java index f4260cdd7..cbd31b866 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java @@ -665,6 +665,10 @@ class AsmFragmentTemplateSynthesisRule { synths.add(new AsmFragmentTemplateSynthesisRule("vb(.)m1=(.*[mz]1.*)", null, null, "vb$1aa=$2", "sta {m1}", null)); // Rewrite Assignments to *C1 from A synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)c1=(.*)", null, null, "vb$1aa=$2", "sta {c1}", null)); + // Rewrite Assignments to *C1 from X + synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)c1=(.*)", null, null, "vb$1xx=$2", "stx {c1}", null)); + // Rewrite Assignments to *C1 from Y + synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)c1=(.*)", null, null, "vb$1yy=$2", "sty {c1}", null)); // Rewrite Assignments to *Z1 from A synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pb(.)z1=(.*)", twoZM1, null, "vb$1aa=$2", "ldy #0\n" + "sta ({z1}),y", mapZM1)); // Rewrite Assignments to *Z1 from A diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm index 0130b4bc2..4c0b5aab8 100644 --- a/src/test/ref/examples/3d/3d.asm +++ b/src/test/ref/examples/3d/3d.asm @@ -822,8 +822,7 @@ rotate_matrix: { .label y = $18 .label z = $19 // *xr = x - txa - sta xr + stx xr // *yr = y lda.z y sta yr diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index bad48c13c..8e88f5d38 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -6818,130 +6818,130 @@ Uplifting [debug_print] best 79025 combination zp[1]:17 [ debug_print::i#2 debug Limited combination testing to 100 combinations of 8388608 possible. Uplifting [memset] best 79025 combination zp[2]:18 [ memset::dst#2 memset::dst#1 ] Uplifting [debug_print_init] best 74225 combination reg byte y [ debug_print_init::j#2 debug_print_init::j#1 ] zp[2]:24 [ debug_print_init::$41 ] zp[2]:26 [ debug_print_init::$44 ] zp[2]:28 [ debug_print_init::$47 ] zp[2]:30 [ debug_print_init::$50 ] zp[2]:32 [ debug_print_init::$53 ] zp[2]:34 [ debug_print_init::$56 ] zp[2]:36 [ debug_print_init::$59 ] zp[2]:38 [ debug_print_init::$62 ] zp[2]:40 [ debug_print_init::$65 ] reg byte x [ debug_print_init::col#0 ] zp[1]:3 [ debug_print_init::c#2 debug_print_init::c#1 ] zp[1]:4 [ debug_print_init::i#2 debug_print_init::i#1 ] -Uplifting [rotate_matrix] best 73924 combination reg byte x [ rotate_matrix::x#0 ] zp[1]:45 [ rotate_matrix::y#0 ] zp[1]:46 [ rotate_matrix::z#0 ] -Uplifting [anim] best 72024 combination zp[1]:8 [ anim::i#2 anim::i#1 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte x [ anim::i2#0 ] -Uplifting [print_str_at] best 72024 combination zp[2]:9 [ print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 ] zp[2]:11 [ print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] -Uplifting [] best 72024 combination zp[1]:7 [ sy#11 sy#2 ] zp[1]:6 [ sx#11 sx#2 ] -Uplifting [sprites_init] best 71874 combination reg byte x [ sprites_init::i#2 sprites_init::i#1 ] -Uplifting [MOS6526_CIA] best 71874 combination -Uplifting [MOS6569_VICII] best 71874 combination -Uplifting [MOS6581_SID] best 71874 combination -Uplifting [RADIX] best 71874 combination -Uplifting [print_cls] best 71874 combination -Uplifting [main] best 71874 combination -Uplifting [store_matrix] best 71874 combination +Uplifting [rotate_matrix] best 73922 combination reg byte x [ rotate_matrix::x#0 ] zp[1]:45 [ rotate_matrix::y#0 ] zp[1]:46 [ rotate_matrix::z#0 ] +Uplifting [anim] best 72022 combination zp[1]:8 [ anim::i#2 anim::i#1 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte x [ anim::i2#0 ] +Uplifting [print_str_at] best 72022 combination zp[2]:9 [ print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 ] zp[2]:11 [ print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] +Uplifting [] best 72022 combination zp[1]:7 [ sy#11 sy#2 ] zp[1]:6 [ sx#11 sx#2 ] +Uplifting [sprites_init] best 71872 combination reg byte x [ sprites_init::i#2 sprites_init::i#1 ] +Uplifting [MOS6526_CIA] best 71872 combination +Uplifting [MOS6569_VICII] best 71872 combination +Uplifting [MOS6581_SID] best 71872 combination +Uplifting [RADIX] best 71872 combination +Uplifting [print_cls] best 71872 combination +Uplifting [main] best 71872 combination +Uplifting [store_matrix] best 71872 combination Attempting to uplift remaining variables inzp[1]:15 [ print_schar_at::b#24 print_schar_at::b#0 print_schar_at::b#22 print_schar_at::b#16 print_schar_at::b#17 print_schar_at::b#18 print_schar_at::b#19 print_schar_at::b#20 print_schar_at::b#21 print_schar_at::b#4 print_schar_at::b#13 print_schar_at::b#14 print_schar_at::b#15 print_schar_at::b#5 print_schar_at::b#7 print_schar_at::b#8 print_schar_at::b#9 print_schar_at::b#10 print_schar_at::b#11 print_schar_at::b#12 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] -Uplifting [print_schar_at] best 71874 combination zp[1]:15 [ print_schar_at::b#24 print_schar_at::b#0 print_schar_at::b#22 print_schar_at::b#16 print_schar_at::b#17 print_schar_at::b#18 print_schar_at::b#19 print_schar_at::b#20 print_schar_at::b#21 print_schar_at::b#4 print_schar_at::b#13 print_schar_at::b#14 print_schar_at::b#15 print_schar_at::b#5 print_schar_at::b#7 print_schar_at::b#8 print_schar_at::b#9 print_schar_at::b#10 print_schar_at::b#11 print_schar_at::b#12 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] +Uplifting [print_schar_at] best 71872 combination zp[1]:15 [ print_schar_at::b#24 print_schar_at::b#0 print_schar_at::b#22 print_schar_at::b#16 print_schar_at::b#17 print_schar_at::b#18 print_schar_at::b#19 print_schar_at::b#20 print_schar_at::b#21 print_schar_at::b#4 print_schar_at::b#13 print_schar_at::b#14 print_schar_at::b#15 print_schar_at::b#5 print_schar_at::b#7 print_schar_at::b#8 print_schar_at::b#9 print_schar_at::b#10 print_schar_at::b#11 print_schar_at::b#12 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] Attempting to uplift remaining variables inzp[1]:52 [ print_uchar_at::b#0 ] -Uplifting [print_uchar_at] best 71874 combination zp[1]:52 [ print_uchar_at::b#0 ] +Uplifting [print_uchar_at] best 71872 combination zp[1]:52 [ print_uchar_at::b#0 ] Attempting to uplift remaining variables inzp[1]:17 [ debug_print::i#2 debug_print::i#1 ] -Uplifting [debug_print] best 71874 combination zp[1]:17 [ debug_print::i#2 debug_print::i#1 ] +Uplifting [debug_print] best 71872 combination zp[1]:17 [ debug_print::i#2 debug_print::i#1 ] Attempting to uplift remaining variables inzp[1]:16 [ debug_print::c#2 debug_print::c#1 ] -Uplifting [debug_print] best 71874 combination zp[1]:16 [ debug_print::c#2 debug_print::c#1 ] +Uplifting [debug_print] best 71872 combination zp[1]:16 [ debug_print::c#2 debug_print::c#1 ] Attempting to uplift remaining variables inzp[1]:45 [ rotate_matrix::y#0 ] -Uplifting [rotate_matrix] best 71874 combination zp[1]:45 [ rotate_matrix::y#0 ] +Uplifting [rotate_matrix] best 71872 combination zp[1]:45 [ rotate_matrix::y#0 ] Attempting to uplift remaining variables inzp[1]:46 [ rotate_matrix::z#0 ] -Uplifting [rotate_matrix] best 71874 combination zp[1]:46 [ rotate_matrix::z#0 ] +Uplifting [rotate_matrix] best 71872 combination zp[1]:46 [ rotate_matrix::z#0 ] Attempting to uplift remaining variables inzp[1]:8 [ anim::i#2 anim::i#1 ] -Uplifting [anim] best 71874 combination zp[1]:8 [ anim::i#2 anim::i#1 ] +Uplifting [anim] best 71872 combination zp[1]:8 [ anim::i#2 anim::i#1 ] Attempting to uplift remaining variables inzp[1]:63 [ calculate_matrix::$10 ] -Uplifting [calculate_matrix] best 71868 combination reg byte a [ calculate_matrix::$10 ] +Uplifting [calculate_matrix] best 71866 combination reg byte a [ calculate_matrix::$10 ] Attempting to uplift remaining variables inzp[1]:64 [ calculate_matrix::$11 ] -Uplifting [calculate_matrix] best 71862 combination reg byte a [ calculate_matrix::$11 ] +Uplifting [calculate_matrix] best 71860 combination reg byte a [ calculate_matrix::$11 ] Attempting to uplift remaining variables inzp[1]:65 [ calculate_matrix::$12 ] -Uplifting [calculate_matrix] best 71856 combination reg byte a [ calculate_matrix::$12 ] +Uplifting [calculate_matrix] best 71854 combination reg byte a [ calculate_matrix::$12 ] Attempting to uplift remaining variables inzp[1]:66 [ calculate_matrix::$13 ] -Uplifting [calculate_matrix] best 71850 combination reg byte a [ calculate_matrix::$13 ] +Uplifting [calculate_matrix] best 71848 combination reg byte a [ calculate_matrix::$13 ] Attempting to uplift remaining variables inzp[1]:67 [ calculate_matrix::$14 ] -Uplifting [calculate_matrix] best 71844 combination reg byte a [ calculate_matrix::$14 ] +Uplifting [calculate_matrix] best 71842 combination reg byte a [ calculate_matrix::$14 ] Attempting to uplift remaining variables inzp[1]:68 [ calculate_matrix::$15 ] -Uplifting [calculate_matrix] best 71838 combination reg byte a [ calculate_matrix::$15 ] +Uplifting [calculate_matrix] best 71836 combination reg byte a [ calculate_matrix::$15 ] Attempting to uplift remaining variables inzp[1]:69 [ calculate_matrix::$16 ] -Uplifting [calculate_matrix] best 71832 combination reg byte a [ calculate_matrix::$16 ] +Uplifting [calculate_matrix] best 71830 combination reg byte a [ calculate_matrix::$16 ] Attempting to uplift remaining variables inzp[1]:70 [ calculate_matrix::$17 ] -Uplifting [calculate_matrix] best 71826 combination reg byte a [ calculate_matrix::$17 ] +Uplifting [calculate_matrix] best 71824 combination reg byte a [ calculate_matrix::$17 ] Attempting to uplift remaining variables inzp[1]:71 [ calculate_matrix::$18 ] -Uplifting [calculate_matrix] best 71820 combination reg byte a [ calculate_matrix::$18 ] +Uplifting [calculate_matrix] best 71818 combination reg byte a [ calculate_matrix::$18 ] Attempting to uplift remaining variables inzp[1]:72 [ calculate_matrix::$19 ] -Uplifting [calculate_matrix] best 71814 combination reg byte a [ calculate_matrix::$19 ] +Uplifting [calculate_matrix] best 71812 combination reg byte a [ calculate_matrix::$19 ] Attempting to uplift remaining variables inzp[1]:73 [ calculate_matrix::$20 ] -Uplifting [calculate_matrix] best 71808 combination reg byte a [ calculate_matrix::$20 ] +Uplifting [calculate_matrix] best 71806 combination reg byte a [ calculate_matrix::$20 ] Attempting to uplift remaining variables inzp[1]:74 [ calculate_matrix::$21 ] -Uplifting [calculate_matrix] best 71802 combination reg byte a [ calculate_matrix::$21 ] +Uplifting [calculate_matrix] best 71800 combination reg byte a [ calculate_matrix::$21 ] Attempting to uplift remaining variables inzp[1]:75 [ calculate_matrix::$22 ] -Uplifting [calculate_matrix] best 71796 combination reg byte a [ calculate_matrix::$22 ] +Uplifting [calculate_matrix] best 71794 combination reg byte a [ calculate_matrix::$22 ] Attempting to uplift remaining variables inzp[1]:76 [ calculate_matrix::$23 ] -Uplifting [calculate_matrix] best 71790 combination reg byte a [ calculate_matrix::$23 ] +Uplifting [calculate_matrix] best 71788 combination reg byte a [ calculate_matrix::$23 ] Attempting to uplift remaining variables inzp[1]:77 [ calculate_matrix::$24 ] -Uplifting [calculate_matrix] best 71784 combination reg byte a [ calculate_matrix::$24 ] +Uplifting [calculate_matrix] best 71782 combination reg byte a [ calculate_matrix::$24 ] Attempting to uplift remaining variables inzp[1]:78 [ calculate_matrix::$25 ] -Uplifting [calculate_matrix] best 71778 combination reg byte a [ calculate_matrix::$25 ] +Uplifting [calculate_matrix] best 71776 combination reg byte a [ calculate_matrix::$25 ] Attempting to uplift remaining variables inzp[1]:79 [ calculate_matrix::$26 ] -Uplifting [calculate_matrix] best 71772 combination reg byte a [ calculate_matrix::$26 ] +Uplifting [calculate_matrix] best 71770 combination reg byte a [ calculate_matrix::$26 ] Attempting to uplift remaining variables inzp[1]:80 [ calculate_matrix::$27 ] -Uplifting [calculate_matrix] best 71766 combination reg byte a [ calculate_matrix::$27 ] +Uplifting [calculate_matrix] best 71764 combination reg byte a [ calculate_matrix::$27 ] Attempting to uplift remaining variables inzp[1]:81 [ calculate_matrix::$28 ] -Uplifting [calculate_matrix] best 71760 combination reg byte a [ calculate_matrix::$28 ] +Uplifting [calculate_matrix] best 71758 combination reg byte a [ calculate_matrix::$28 ] Attempting to uplift remaining variables inzp[1]:82 [ calculate_matrix::$29 ] -Uplifting [calculate_matrix] best 71754 combination reg byte a [ calculate_matrix::$29 ] +Uplifting [calculate_matrix] best 71752 combination reg byte a [ calculate_matrix::$29 ] Attempting to uplift remaining variables inzp[1]:83 [ calculate_matrix::$30 ] -Uplifting [calculate_matrix] best 71748 combination reg byte a [ calculate_matrix::$30 ] +Uplifting [calculate_matrix] best 71746 combination reg byte a [ calculate_matrix::$30 ] Attempting to uplift remaining variables inzp[1]:84 [ calculate_matrix::$31 ] -Uplifting [calculate_matrix] best 71742 combination reg byte a [ calculate_matrix::$31 ] +Uplifting [calculate_matrix] best 71740 combination reg byte a [ calculate_matrix::$31 ] Attempting to uplift remaining variables inzp[1]:85 [ calculate_matrix::$32 ] -Uplifting [calculate_matrix] best 71736 combination reg byte a [ calculate_matrix::$32 ] +Uplifting [calculate_matrix] best 71734 combination reg byte a [ calculate_matrix::$32 ] Attempting to uplift remaining variables inzp[1]:86 [ calculate_matrix::$33 ] -Uplifting [calculate_matrix] best 71730 combination reg byte a [ calculate_matrix::$33 ] +Uplifting [calculate_matrix] best 71728 combination reg byte a [ calculate_matrix::$33 ] Attempting to uplift remaining variables inzp[1]:87 [ calculate_matrix::$34 ] -Uplifting [calculate_matrix] best 71724 combination reg byte a [ calculate_matrix::$34 ] +Uplifting [calculate_matrix] best 71722 combination reg byte a [ calculate_matrix::$34 ] Attempting to uplift remaining variables inzp[1]:91 [ debug_print::print_schar_pos5_sb#0 ] -Uplifting [debug_print] best 71718 combination reg byte a [ debug_print::print_schar_pos5_sb#0 ] +Uplifting [debug_print] best 71716 combination reg byte a [ debug_print::print_schar_pos5_sb#0 ] Attempting to uplift remaining variables inzp[1]:92 [ debug_print::print_schar_pos6_sb#0 ] -Uplifting [debug_print] best 71712 combination reg byte a [ debug_print::print_schar_pos6_sb#0 ] +Uplifting [debug_print] best 71710 combination reg byte a [ debug_print::print_schar_pos6_sb#0 ] Attempting to uplift remaining variables inzp[1]:93 [ debug_print::print_schar_pos7_sb#0 ] -Uplifting [debug_print] best 71706 combination reg byte a [ debug_print::print_schar_pos7_sb#0 ] +Uplifting [debug_print] best 71704 combination reg byte a [ debug_print::print_schar_pos7_sb#0 ] Attempting to uplift remaining variables inzp[1]:94 [ debug_print::print_schar_pos8_sb#0 ] -Uplifting [debug_print] best 71700 combination reg byte a [ debug_print::print_schar_pos8_sb#0 ] +Uplifting [debug_print] best 71698 combination reg byte a [ debug_print::print_schar_pos8_sb#0 ] Attempting to uplift remaining variables inzp[1]:95 [ debug_print::print_schar_pos9_sb#0 ] -Uplifting [debug_print] best 71694 combination reg byte a [ debug_print::print_schar_pos9_sb#0 ] +Uplifting [debug_print] best 71692 combination reg byte a [ debug_print::print_schar_pos9_sb#0 ] Attempting to uplift remaining variables inzp[1]:96 [ debug_print::print_schar_pos10_sb#0 ] -Uplifting [debug_print] best 71688 combination reg byte a [ debug_print::print_schar_pos10_sb#0 ] +Uplifting [debug_print] best 71686 combination reg byte a [ debug_print::print_schar_pos10_sb#0 ] Attempting to uplift remaining variables inzp[1]:97 [ debug_print::print_schar_pos11_sb#0 ] -Uplifting [debug_print] best 71682 combination reg byte a [ debug_print::print_schar_pos11_sb#0 ] +Uplifting [debug_print] best 71680 combination reg byte a [ debug_print::print_schar_pos11_sb#0 ] Attempting to uplift remaining variables inzp[1]:98 [ debug_print::print_schar_pos12_sb#0 ] -Uplifting [debug_print] best 71676 combination reg byte a [ debug_print::print_schar_pos12_sb#0 ] +Uplifting [debug_print] best 71674 combination reg byte a [ debug_print::print_schar_pos12_sb#0 ] Attempting to uplift remaining variables inzp[1]:42 [ calculate_matrix::sx#0 ] -Uplifting [calculate_matrix] best 71638 combination reg byte x [ calculate_matrix::sx#0 ] +Uplifting [calculate_matrix] best 71636 combination reg byte x [ calculate_matrix::sx#0 ] Attempting to uplift remaining variables inzp[1]:54 [ calculate_matrix::t2#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:54 [ calculate_matrix::t2#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:54 [ calculate_matrix::t2#0 ] Attempting to uplift remaining variables inzp[1]:53 [ calculate_matrix::t1#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:53 [ calculate_matrix::t1#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:53 [ calculate_matrix::t1#0 ] Attempting to uplift remaining variables inzp[1]:43 [ calculate_matrix::sy#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:43 [ calculate_matrix::sy#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:43 [ calculate_matrix::sy#0 ] Attempting to uplift remaining variables inzp[1]:3 [ debug_print_init::c#2 debug_print_init::c#1 ] -Uplifting [debug_print_init] best 71638 combination zp[1]:3 [ debug_print_init::c#2 debug_print_init::c#1 ] +Uplifting [debug_print_init] best 71636 combination zp[1]:3 [ debug_print_init::c#2 debug_print_init::c#1 ] Attempting to uplift remaining variables inzp[1]:7 [ sy#11 sy#2 ] -Uplifting [] best 71638 combination zp[1]:7 [ sy#11 sy#2 ] +Uplifting [] best 71636 combination zp[1]:7 [ sy#11 sy#2 ] Attempting to uplift remaining variables inzp[1]:4 [ debug_print_init::i#2 debug_print_init::i#1 ] -Uplifting [debug_print_init] best 71638 combination zp[1]:4 [ debug_print_init::i#2 debug_print_init::i#1 ] +Uplifting [debug_print_init] best 71636 combination zp[1]:4 [ debug_print_init::i#2 debug_print_init::i#1 ] Attempting to uplift remaining variables inzp[1]:58 [ calculate_matrix::t6#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:58 [ calculate_matrix::t6#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:58 [ calculate_matrix::t6#0 ] Attempting to uplift remaining variables inzp[1]:56 [ calculate_matrix::t4#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:56 [ calculate_matrix::t4#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:56 [ calculate_matrix::t4#0 ] Attempting to uplift remaining variables inzp[1]:59 [ calculate_matrix::t7#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:59 [ calculate_matrix::t7#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:59 [ calculate_matrix::t7#0 ] Attempting to uplift remaining variables inzp[1]:60 [ calculate_matrix::t8#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:60 [ calculate_matrix::t8#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:60 [ calculate_matrix::t8#0 ] Attempting to uplift remaining variables inzp[1]:55 [ calculate_matrix::t3#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:55 [ calculate_matrix::t3#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:55 [ calculate_matrix::t3#0 ] Attempting to uplift remaining variables inzp[1]:57 [ calculate_matrix::t5#0 ] -Uplifting [calculate_matrix] best 71638 combination zp[1]:57 [ calculate_matrix::t5#0 ] +Uplifting [calculate_matrix] best 71636 combination zp[1]:57 [ calculate_matrix::t5#0 ] Attempting to uplift remaining variables inzp[1]:6 [ sx#11 sx#2 ] -Uplifting [] best 71638 combination zp[1]:6 [ sx#11 sx#2 ] +Uplifting [] best 71636 combination zp[1]:6 [ sx#11 sx#2 ] Attempting to uplift remaining variables inzp[1]:62 [ calculate_matrix::t10#0 ] -Uplifting [calculate_matrix] best 71631 combination reg byte x [ calculate_matrix::t10#0 ] +Uplifting [calculate_matrix] best 71629 combination reg byte x [ calculate_matrix::t10#0 ] Attempting to uplift remaining variables inzp[1]:61 [ calculate_matrix::t9#0 ] -Uplifting [calculate_matrix] best 71631 combination zp[1]:61 [ calculate_matrix::t9#0 ] +Uplifting [calculate_matrix] best 71629 combination zp[1]:61 [ calculate_matrix::t9#0 ] Coalescing zero page register [ zp[2]:13 [ print_schar_at::at#21 print_schar_at::at#15 print_schar_at::at#16 print_schar_at::at#17 print_schar_at::at#18 print_schar_at::at#19 print_schar_at::at#20 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ] ] with [ zp[2]:21 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] ] - score: 2 Coalescing zero page register [ zp[1]:7 [ sy#11 sy#2 ] ] with [ zp[1]:43 [ calculate_matrix::sy#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:13 [ print_schar_at::at#21 print_schar_at::at#15 print_schar_at::at#16 print_schar_at::at#17 print_schar_at::at#18 print_schar_at::at#19 print_schar_at::at#20 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] ] with [ zp[2]:50 [ print_uchar_at::at#0 ] ] - score: 1 @@ -8112,8 +8112,7 @@ rotate_matrix: { .label y = $18 .label z = $19 // [181] *((const signed byte*) xr) ← (signed byte) rotate_matrix::x#0 -- _deref_pbsc1=vbsxx - txa - sta xr + stx xr // [182] *((const signed byte*) yr) ← (signed byte) rotate_matrix::y#0 -- _deref_pbsc1=vbsz1 lda.z y sta yr @@ -9083,7 +9082,7 @@ Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Fixing long branch [322] bne __b2 to beq Fixing long branch [331] bne __b1 to beq -Fixing long branch [970] bne __b1 to beq +Fixing long branch [969] bne __b1 to beq FINAL SYMBOL TABLE (const signed byte*) COSH = (const signed byte*) SINH+(byte) $40 @@ -9688,7 +9687,7 @@ reg byte y [ print_uchar_at::$2 ] FINAL ASSEMBLER -Score: 65417 +Score: 65415 // File Comments // 3D Rotation using a Rotation Matrix @@ -10825,8 +10824,7 @@ rotate_matrix: { .label z = $19 // *xr = x // [181] *((const signed byte*) xr) ← (signed byte) rotate_matrix::x#0 -- _deref_pbsc1=vbsxx - txa - sta xr + stx xr // *yr = y // [182] *((const signed byte*) yr) ← (signed byte) rotate_matrix::y#0 -- _deref_pbsc1=vbsz1 lda.z y diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.asm b/src/test/ref/examples/bresenham/bitmap-bresenham.asm index ed577b0ff..8c8ceedd3 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.asm +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.asm @@ -216,8 +216,7 @@ bitmap_line: { sbc.z x1 sta.z xd // if(y0