diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 970ebc2be..d6f11bca6 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 1533d6e417 +//KICKC FRAGMENT CACHE 161ce03ba6 //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 ebc09096b..3eb3031cc 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,3860 +1,4 @@ -//KICKC FRAGMENT CACHE 1533d6e417 -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuc1_eq_vbuz1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT vbuc1_neq_vbuz1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=pbuz2_bxor_vwuc1 -lda #<{c1} -eor {z2} -sta {z1} -lda #>{c1} -eor {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -sta {z1} -//FRAGMENT pbuz1=pbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 -lda #{c1} -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 -lda {z3} -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz1_plus_vbuc1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -sta {z1} -//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 pbuz1_neq_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT _deref_pbuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {c1} -//FRAGMENT _deref_pduc1=vduc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -lda #<{c2}>>$10 -sta {c1}+2 -lda #>{c2}>>$10 -sta {c1}+3 -//FRAGMENT vbuz1=vbuz2_minus_vbuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_gt_vbuz2_then_la1 -lda {z2} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_eq_vbuz2_then_la1 -lda {z1} -cmp {z2} -beq {la1} -//FRAGMENT vbuz1=vbuz2_ror_1 -lda {z2} -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz1_plus_vbuz2 -lda {z1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuz1_le_vbuz2_then_la1 -lda {z2} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1=vbuz2_ror_3 -lda {z2} -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz2_rol_1 -lda {z2} -asl -sta {z1} -//FRAGMENT pbuz1=qbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//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_minus_vbuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1_neq_vbuz2_then_la1 -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vbuz1_neq_0_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -sta {z1} -//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 vbuz1=vbuaa -sta {z1} -//FRAGMENT vbuaa=vbuz1 -lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} -//FRAGMENT vbuc1_eq_vbuaa_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa -tay -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa -tax -ldy {c1},x -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuc1 -tay -lda #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuc1 -txa -tay -lda #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuc1 -lda #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuz2 -txa -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuz2 -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx -ldy {z2} -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuxx -txa -tay -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuxx -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy -tya -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuyy -stx $ff -tya -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuyy -tya -sta ({z1}),y -//FRAGMENT vbuxx=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -//FRAGMENT vbuyy=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -tay -//FRAGMENT vbuaa=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -//FRAGMENT vbuxx=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -tax -//FRAGMENT vbuyy=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -tay -//FRAGMENT _deref_pbuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT vbuz1=vbuaa_minus_vbuz2 -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuz2 -txa -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuz2 -tya -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuz2 -lda {z1} -sec -sbc {z2} -//FRAGMENT vbuaa=vbuaa_minus_vbuz1 -sec -sbc {z1} -//FRAGMENT vbuaa=vbuxx_minus_vbuz1 -txa -sec -sbc {z1} -//FRAGMENT vbuaa=vbuyy_minus_vbuz1 -tya -sec -sbc {z1} -//FRAGMENT vbuxx=vbuz1_minus_vbuz2 -lda {z1} -sec -sbc {z2} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuz1 -sec -sbc {z1} -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuz1 -txa -sec -sbc {z1} -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuz1 -tya -sec -sbc {z1} -tax -//FRAGMENT vbuyy=vbuz1_minus_vbuz2 -lda {z1} -sec -sbc {z2} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuz1 -sec -sbc {z1} -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuz1 -txa -sec -sbc {z1} -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuz1 -tya -sec -sbc {z1} -tay -//FRAGMENT vbuz1=vbuz2_minus_vbuaa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuaa -lda #0 -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuaa -lda #0 -//FRAGMENT vbuaa=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -//FRAGMENT vbuaa=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -//FRAGMENT vbuxx=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -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 -sec -sbc $ff -tax -//FRAGMENT vbuyy=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuaa -lda #0 -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -tay -//FRAGMENT vbuz1=vbuz2_minus_vbuxx -txa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuxx -lda #0 -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuxx_minus_vbuxx -lda #0 -//FRAGMENT vbuaa=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -//FRAGMENT vbuxx=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuxx -lda #0 -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbuyy=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuxx -lda #0 -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbuz1=vbuz2_minus_vbuyy -tya -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuyy -lda #0 -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuyy_minus_vbuyy -lda #0 -//FRAGMENT vbuxx=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuyy -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 -//FRAGMENT vbuyy=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuyy -lda #0 -tay -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuxx_gt_vbuz1_then_la1 -txa -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_gt_vbuz1_then_la1 -tya -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuz1_gt_vbuxx_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbuxx_eq_vbuz1_then_la1 -cpx {z1} -beq {la1} -//FRAGMENT vbuaa=vbuz1_ror_1 -lda {z1} -lsr -//FRAGMENT vbuxx=vbuz1_ror_1 -lda {z1} -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_1 -lda {z1} -lsr -tay -//FRAGMENT vbuz1=vbuxx_ror_1 -txa -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_1 -txa -lsr -//FRAGMENT vbuxx=vbuxx_ror_1 -txa -lsr -tax -//FRAGMENT vbuyy=vbuxx_ror_1 -txa -lsr -tay -//FRAGMENT vbuz1=vbuyy_ror_1 -tya -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_1 -tya -lsr -//FRAGMENT vbuxx=vbuyy_ror_1 -tya -lsr -tax -//FRAGMENT vbuyy=vbuyy_ror_1 -tya -lsr -tay -//FRAGMENT vbuz1=vbuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -//FRAGMENT vbuz1=vbuz1_plus_vbuyy -tya -clc -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_plus_vbuz1 -txa -clc -adc {z1} -tax -//FRAGMENT vbuxx=vbuxx_plus_vbuxx -txa -asl -tax -//FRAGMENT vbuxx=vbuxx_plus_vbuyy -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuyy_plus_vbuz1 -tya -clc -adc {z1} -tay -//FRAGMENT vbuyy=vbuyy_plus_vbuxx -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbuyy=vbuyy_plus_vbuyy -tya -asl -tay -//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_vbuxx_then_la1 -cpx {z1} -bcs {la1} -//FRAGMENT vbuaa=vbuz1_ror_3 -lda {z1} -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_3 -lda {z1} -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_3 -lda {z1} -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuxx_ror_3 -txa -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_3 -txa -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuxx_ror_3 -txa -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuxx_ror_3 -txa -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuyy_ror_3 -tya -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_3 -tya -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuyy_ror_3 -tya -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuyy_ror_3 -tya -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuaa_rol_1 -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_1 -txa -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_1 -tya -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_1 -lda {z1} -asl -//FRAGMENT vbuaa=vbuaa_rol_1 -asl -//FRAGMENT vbuaa=vbuxx_rol_1 -txa -asl -//FRAGMENT vbuaa=vbuyy_rol_1 -tya -asl -//FRAGMENT vbuxx=vbuz1_rol_1 -lda {z1} -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_1 -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_1 -txa -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_1 -tya -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_1 -lda {z1} -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_1 -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_1 -txa -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_1 -tya -asl -tay -//FRAGMENT pbuz1=qbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1=qbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT pbuz1=qbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuaa=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuxx=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuz1=vbuxx_band_vbuc1 -lda #{c1} -sax {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuc1 -txa -and #{c1} -//FRAGMENT vbuxx=vbuxx_band_vbuc1 -lda #{c1} -axs #0 -//FRAGMENT vbuyy=vbuxx_band_vbuc1 -txa -and #{c1} -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} -tay -//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_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuz1_neq_vbuxx_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbuxx_neq_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuxx_neq_vbuz1_then_la1 -cpx {z1} -bne {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 _deref_pbuz1=vbuaa -ldy #0 -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 pbuz1_derefidx_vbuz2=vbuaa -ldy {z2} -sta ({z1}),y -//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 vbuc1_neq_vbuaa_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbuaa=_neg_vbuaa -eor #$ff -clc -adc #$01 -//FRAGMENT vbuxx=_neg_vbuxx -dex -txa -eor #$ff -tax -//FRAGMENT vbuyy=_neg_vbuyy -dey -tya -eor #$ff -tay -//FRAGMENT vbuxx_lt_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vbuz1=vbuxx -stx {z1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuyy_lt_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT pbuz1_derefidx_vbuxx=vbuaa -stx $ff -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuaa -sta ({z1}),y -//FRAGMENT vbuz1=vbuyy -sty {z1} -//FRAGMENT vbuc1_neq_vbuxx_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuc1_neq_vbuyy_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbuyy=vbuaa_band_vbuc1 -and #{c1} -tay -//FRAGMENT vbuaa=vbuxx -txa -//FRAGMENT vbuaa=vbuyy -tya -//FRAGMENT vbuxx=vbuaa -tax -//FRAGMENT vbuxx=vbuyy -tya -tax -//FRAGMENT vbuyy=vbuz1 -ldy {z1} -//FRAGMENT vbuyy=vbuaa -tay -//FRAGMENT vbuyy=vbuxx -txa -tay -//FRAGMENT vbuc1_eq_vbuxx_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_vbuyy_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT vbuaa=vbuc1 -lda #{c1} -//FRAGMENT vwuz1=pbuz1_bxor_vwuc1 -lda #<{c1} -eor {z1} -sta {z1} -lda #>{c1} -eor {z1}+1 -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 vwsz1=vwsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsc1 -lda {z1} -clc -adc #<{c1} -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 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 vbuz1=vbuz2_ror_4 -lda {z2} -lsr -lsr -lsr -lsr -sta {z1} -//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=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_4 -lda {z1} -lsr -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 -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -tay -//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1=vbuz1_plus_2 -lda {z1} -clc -adc #2 -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -//FRAGMENT vbuxx=vbuxx_plus_2 -inx -inx -//FRAGMENT vbuyy=vbuyy_plus_2 -iny -iny -//FRAGMENT vwuz1_lt_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbsz1=vbsz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_vwsz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuz2 -lax {z2} -axs #-[{c1}] -stx {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} -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 vwuz1=vwuz1_minus_vwuc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_minus_vwuz1 -sec -lda #<{c1} -sbc {z1} -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_plus_vbuz3 -lda {z2} -clc -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} -stx {z1} -//FRAGMENT vwuz1=vwuz1_sethi_vbuz2 -lda {z2} -sta {z1}+1 -//FRAGMENT vbsz1_lt_0_then_la1 -lda {z1} -bmi {la1} -//FRAGMENT vbsz1=_neg_vbsz1 -lda {z1} -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} -sta {z1} -//FRAGMENT vwuz1=vwuz2_rol_vbuz3 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -ldy {z3} -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=_word_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_ror_1 -lsr {z1} -//FRAGMENT vbsaa=vbsz1 -lda {z1} -//FRAGMENT vbsxx=vbsz1 -ldx {z1} -//FRAGMENT vbsz1=vbsaa -sta {z1} -//FRAGMENT vbuaa=_hi_vwsz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwsz1 -ldx {z1}+1 -//FRAGMENT vbuaa=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuxx=vbuc1_plus_vbuz1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuc1_plus_vbuaa -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_plus_vbuaa -clc -adc #{c1} -//FRAGMENT vbuxx=vbuc1_plus_vbuaa -tax -axs #-[{c1}] -//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 vbuaa=vbuz1_plus_vbuz2 -lda {z1} -clc -adc {z2} -//FRAGMENT vbuxx=vbuz1_plus_vbuz2 -lda {z1} -clc -adc {z2} -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuz2 -lda {z1} -clc -adc {z2} -tay -//FRAGMENT vbuz1=vbuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuaa -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_vbuaa -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuaa -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuxx -txa -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_vbuxx -txa -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuxx -txa -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuyy -tya -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_vbuyy -tya -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuyy -tya -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_vbuz2 -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuz1 -txa -clc -adc {z1} -//FRAGMENT vbuyy=vbuxx_plus_vbuz1 -txa -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -tay -//FRAGMENT vbuz1=vbuxx_plus_vbuxx -txa -asl -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuxx -txa -asl -//FRAGMENT vbuyy=vbuxx_plus_vbuxx -txa -asl -tay -//FRAGMENT vbuz1=vbuxx_plus_vbuyy -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuyy -txa -sty $ff -clc -adc $ff -//FRAGMENT vbuyy=vbuxx_plus_vbuyy -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbuz1=vbuyy_plus_vbuz2 -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuz1 -tya -clc -adc {z1} -//FRAGMENT vbuxx=vbuyy_plus_vbuz1 -tya -clc -adc {z1} -tax -//FRAGMENT vbuz1=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbuz1=vbuyy_plus_vbuxx -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuxx -txa -sty $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuyy_plus_vbuxx -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuz1=vbuyy_plus_vbuyy -tya -asl -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuyy -tya -asl -//FRAGMENT vbuxx=vbuyy_plus_vbuyy -tya -asl -tax -//FRAGMENT vbuxx_eq_0_then_la1 -cpx #0 -beq {la1} -//FRAGMENT vbsaa=_neg_vbsz1 -lda {z1} -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsz1 -lda {z1} -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsz1 -lda {z1} -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsz1=_neg_vbsaa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsaa -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsaa -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsaa -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsz1=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsz1=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsxx_ge_0_then_la1 -cpx #0 -bpl {la1} -//FRAGMENT vbuz1=vbuaa_minus_vbuc1 -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuc1 -txa -axs #{c1} -stx {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuc1 -tya -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuc1 -lda {z1} -sec -sbc #{c1} -//FRAGMENT vbuaa=vbuaa_minus_vbuc1 -sec -sbc #{c1} -//FRAGMENT vbuaa=vbuxx_minus_vbuc1 -txa -sec -sbc #{c1} -//FRAGMENT vbuaa=vbuyy_minus_vbuc1 -tya -sec -sbc #{c1} -//FRAGMENT vbuxx=vbuz1_minus_vbuc1 -lax {z1} -axs #{c1} -//FRAGMENT vbuxx=vbuaa_minus_vbuc1 -tax -axs #{c1} -//FRAGMENT vwuz1=vwuz1_sethi_vbuaa -sta {z1}+1 -//FRAGMENT vbsaa_lt_0_then_la1 -cmp #0 -bmi {la1} -//FRAGMENT vbuaa_eq_0_then_la1 -cmp #0 -beq {la1} -//FRAGMENT vwuz1=vwuz2_rol_vbuxx -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dex -bne !- -!e: -//FRAGMENT vwuz1=vwuz2_rol_vbuyy -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -cpy #0 -beq !e+ -!: -asl {z1} -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 vbsz1=vbsxx -stx {z1} -//FRAGMENT vbuyy_eq_0_then_la1 -cpy #0 -beq {la1} -//FRAGMENT vbuyy_neq_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuyy=_hi_vwuz1 -ldy {z1}+1 -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbuaa=_dec_vbuaa -sec -sbc #1 -//FRAGMENT vbuxx=_dec_vbuxx -dex -//FRAGMENT vbuyy=_dec_vbuyy -dey -//FRAGMENT vbsz1=vbsyy -sty {z1} -//FRAGMENT vbsaa=vbsxx -txa -//FRAGMENT vbsaa=vbsyy -tya -//FRAGMENT vbsxx=vbsaa -tax -//FRAGMENT vbsxx=vbsyy -tya -tax -//FRAGMENT vbsyy=vbsz1 -ldy {z1} -//FRAGMENT vbsyy=vbsaa -tay -//FRAGMENT vbsyy=vbsxx -txa -tay -//FRAGMENT vwuz1=vwuz1_sethi_vbuxx -stx {z1}+1 -//FRAGMENT vbuxx=vbuxx_minus_vbuc1 -txa -axs #{c1} -//FRAGMENT vbuxx=vbuyy_minus_vbuc1 -tya -tax -axs #{c1} -//FRAGMENT vbuyy=vbuz1_minus_vbuc1 -lda {z1} -sec -sbc #{c1} -tay -//FRAGMENT vwuz1=vwuz1_sethi_vbuyy -sty {z1}+1 -//FRAGMENT vbuyy=vbuaa_minus_vbuc1 -sec -sbc #{c1} -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuc1 -txa -sec -sbc #{c1} -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuc1 -tya -sec -sbc #{c1} -tay -//FRAGMENT vbsyy_ge_0_then_la1 -cpy #0 -bpl {la1} -//FRAGMENT vbsxx_lt_0_then_la1 -cpx #0 -bmi {la1} -//FRAGMENT vbuz1=vbuc1_plus_vbuxx -txa -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuyy=_hi_vwsz1 -ldy {z1}+1 -//FRAGMENT vbuz1=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus__hi_vwsz2 -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+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1_eq_vbuaa_then_la1 -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx -ldy {z1} -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -//FRAGMENT vbuz1_eq_vbuyy_then_la1 -tya -cmp {z1} -beq {la1} -//FRAGMENT vbuyy_eq_vbuz1_then_la1 -tya -cmp {z1} -beq {la1} -//FRAGMENT vbuyy_eq_vbuaa_then_la1 -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbuz1_ge_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcs {la1} -//FRAGMENT vbuaa_ge_vbuc1_then_la1 -cmp #{c1} -bcs {la1} -//FRAGMENT vbuaa_neq_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbuxx_ge_vbuc1_then_la1 -cpx #{c1} -bcs {la1} -//FRAGMENT vbuyy_ge_vbuc1_then_la1 -cpy #{c1} -bcs {la1} -//FRAGMENT vbuc1_neq_pbuz1_derefidx_vbuz2_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -//FRAGMENT vbuc1_neq_pbuz1_derefidx_vbuaa_then_la1 -tay -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuc1_neq_pbuz1_derefidx_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1 -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy -lda ({z1}),y -//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_vbuyy -tya -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuz1_neq_vbuyy_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbuz1_gt_vbuyy_then_la1 -cpy {z1} -bcc {la1} -//FRAGMENT vbuxx_neq_vbuyy_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuxx_gt_vbuyy_then_la1 -txa -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuyy_neq_vbuz1_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbuyy_neq_vbuxx_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_gt_vbuxx_then_la1 -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 -ldy {z1} -tya -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuaa -tax -sta {c1},x -//FRAGMENT vbuaa_neq_vbuc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbuaa=_inc_vbuaa -clc -adc #1 -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 -inc {c1} -//FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 -lda {c1} -cmp #{c2} -bcc {la1} -//FRAGMENT qbuz1=qbuc1 -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 -sta {z1} -//FRAGMENT vwsz1=vwsz2_plus_vwsc1 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -//FRAGMENT vbsz1=vbsz1_plus_vbsc1 -lax {z1} -axs #-[{c1}] -stx {z1} -//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 vwuz1=vwuz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -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} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuz1=pbuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuc2 -lda #{c2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_ror_2 -lda {z2} -lsr -lsr -sta {z1} -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -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} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT qbuz1=qbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -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} -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 -ldy {z2} -lda ({z3}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 -ldy {z2} -lda ({z1}),y - -cmp ({z3}),y -beq {la1} -//FRAGMENT vbuz1_gt_0_then_la1 -lda {z1} -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 -lda #{c2} -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_1 -ldy {z2} -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_vbuc1 -lax {z1} -axs #{c1} -stx {z1} -//FRAGMENT _deref_pbuz1=_deref_pbuc1 -lda {c1} -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbsc1_ge_0_then_la1 -lda {c1} -cmp #0 -bpl {la1} -//FRAGMENT vbuz1=vbuz2_minus__deref_pbuc1 -lda {z2} -sec -sbc {c1} -sta {z1} -//FRAGMENT vwuz1=_deref_pbuc1_word__deref_pbuc2 -lda {c2} -sta {z1} -lda {c1} -sta {z1}+1 -//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbsxx=vbsxx_plus_vbsc1 -txa -axs #-[{c1}] -//FRAGMENT vbsyy=vbsyy_plus_vbsc1 -tya -clc -adc #{c1} -tay -//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 vwuz1=vwuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuaa=pbuc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuxx=pbuc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT qbuc1_derefidx_vbuyy=pbuc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT vbuz1=vbuaa_ror_2 -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuxx_ror_2 -txa -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuyy_ror_2 -tya -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuz1_ror_2 -lda {z1} -lsr -lsr -//FRAGMENT vbuaa=vbuaa_ror_2 -lsr -lsr -//FRAGMENT vbuaa=vbuxx_ror_2 -txa -lsr -lsr -//FRAGMENT vbuaa=vbuyy_ror_2 -tya -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_2 -lda {z1} -lsr -lsr -tax -//FRAGMENT vbuxx=vbuaa_ror_2 -lsr -lsr -tax -//FRAGMENT vbuxx=vbuxx_ror_2 -txa -lsr -lsr -tax -//FRAGMENT vbuxx=vbuyy_ror_2 -tya -lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_2 -lda {z1} -lsr -lsr -tay -//FRAGMENT vbuyy=vbuaa_ror_2 -lsr -lsr -tay -//FRAGMENT vbuyy=vbuxx_ror_2 -txa -lsr -lsr -tay -//FRAGMENT vbuyy=vbuyy_ror_2 -tya -lsr -lsr -tay -//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuaa_rol_2 -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_2 -txa -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_2 -tya -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_2 -lda {z1} -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_2 -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_2 -txa -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_2 -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 -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_2 -lda {z1} -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_2 -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_2 -txa -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_2 -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} -//FRAGMENT vbuxx=vbuz1_band__deref_pbuc1 -lda {c1} -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band__deref_pbuc1 -lda {c1} -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band__deref_pbuc1 -and {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_band__deref_pbuc1 -and {c1} -//FRAGMENT vbuxx=vbuaa_band__deref_pbuc1 -ldx {c1} -axs #0 -//FRAGMENT vbuaa_neq_vbuz1_then_la1 -cmp {z1} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa_eq_pbuz2_derefidx_vbuaa_then_la1 -tay -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_eq_pbuz2_derefidx_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT vbuaa_gt_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_band_vbuc2 -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_1 -ldx {z1} -lda {c1},x -lsr -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tay -//FRAGMENT vbuaa=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -//FRAGMENT vbuxx=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuz2 -txa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuz1 -txa -ora {z1} -//FRAGMENT vbuxx=vbuxx_bor_vbuz1 -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuz1 -txa -ora {z1} -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuz2 -tya -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuz1 -tya -ora {z1} -//FRAGMENT vbuxx=vbuyy_bor_vbuz1 -tya -ora {z1} -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuz1 -tya -ora {z1} -tay -//FRAGMENT vbuz1=vbuz2_bor_vbuaa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuaa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuaa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuaa -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuaa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuaa -stx $ff -ora $ff -//FRAGMENT vbuxx=vbuxx_bor_vbuaa -stx $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuaa -stx $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuaa -sty $ff -ora $ff -//FRAGMENT vbuxx=vbuyy_bor_vbuaa -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuaa -sty $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuz2_bor_vbuxx -txa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuxx -txa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuxx -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuxx -txa -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuxx -stx {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa -ldy {z1} -sta {c1},y -//FRAGMENT vbuaa=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -//FRAGMENT vbuxx=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -//FRAGMENT vbuxx=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -//FRAGMENT vbuxx=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -//FRAGMENT vbuxx=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuxx_gt_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuz1=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuyy_gt_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuyy=_lo_vwuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuxx_band__deref_pbuc1 -lda {c1} -sax {z1} -//FRAGMENT vbuz1=vbuyy_band__deref_pbuc1 -tya -and {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_band__deref_pbuc1 -txa -and {c1} -//FRAGMENT vbuaa=vbuyy_band__deref_pbuc1 -tya -and {c1} -//FRAGMENT vbuxx=vbuxx_band__deref_pbuc1 -lda {c1} -axs #0 -//FRAGMENT vbuxx=vbuyy_band__deref_pbuc1 -ldx {c1} -tya -axs #0 -//FRAGMENT vbuyy=vbuaa_band__deref_pbuc1 -and {c1} -tay -//FRAGMENT vbuyy=vbuxx_band__deref_pbuc1 -txa -and {c1} -tay -//FRAGMENT vbuyy=vbuyy_band__deref_pbuc1 -tya -and {c1} -tay -//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa -sta {c1},x -//FRAGMENT vwsz1=vwsz1_plus_vwsc1 -clc -lda {z1} -adc #<{c1} -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} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwsz1=vwsz1_rol_1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=vbuz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT vbuz1=_inc_vbuz2 -ldy {z2} -iny -sty {z1} -//FRAGMENT vbuz1=_inc_vbuaa -clc -adc #1 -sta {z1} -//FRAGMENT vbuz1=_inc_vbuxx -inx -stx {z1} -//FRAGMENT vbuz1=_inc_vbuyy -iny -sty {z1} -//FRAGMENT vbuaa=_inc_vbuz1 -lda {z1} -clc -adc #1 -//FRAGMENT vbuaa=_inc_vbuxx -inx -txa -//FRAGMENT vbuaa=_inc_vbuyy -iny -tya -//FRAGMENT vbuxx=_inc_vbuz1 -ldx {z1} -inx -//FRAGMENT vbuxx=_inc_vbuaa -tax -inx -//FRAGMENT vbuxx=_inc_vbuyy -tya -tax -inx -//FRAGMENT vbuyy=_inc_vbuz1 -ldy {z1} -iny -//FRAGMENT vbuyy=_inc_vbuaa -tay -iny -//FRAGMENT vbuyy=_inc_vbuxx -txa -tay -iny -//FRAGMENT vwsz1=vwsz2_minus_vbsc1 -lda {z2} -sec -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbsc1 -lda {z1} -sec -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuz1=vwsz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuaa=vwsz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=vwsz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=vwsz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT vbuz1=_bnot_vbuz2 -lda {z2} -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuz1 -lda {z1} -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuz1 -lda {z1} -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuz1 -lda {z1} -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuaa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuaa -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuaa -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuaa -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuxx -txa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuxx -txa -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuxx -txa -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuxx -txa -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuyy -tya -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuyy -tya -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuyy -tya -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuyy -tya -eor #$ff -tay -//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa -sta {c1},y -//FRAGMENT _deref_pbuc1_neq_0_then_la1 -lda {c1} -cmp #0 -bne {la1} -//FRAGMENT pbum1=pbuc1 -lda #<{c1} -sta {m1} -lda #>{c1} -sta {m1}+1 -//FRAGMENT vbum1=vbuc1 -lda #{c1} -sta {m1} -//FRAGMENT _deref_pbum1=vbuc1 -lda #{c1} -ldy {m1} -sty $fe -ldy {m1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT pbum1=_inc_pbum1 -inc {m1} -bne !+ -inc {m1}+1 -!: -//FRAGMENT vbum1=_inc_vbum1 -inc {m1} -//FRAGMENT vbum1_neq_vbuc1_then_la1 -lda #{c1} -cmp {m1} -bne {la1} -//FRAGMENT pbuz1_lt_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vboz1=vbuz2_eq_vbuc1 -lda {z2} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -sta {z1} -//FRAGMENT vboz1=vboz2 -lda {z2} -sta {z1} -//FRAGMENT vboz1_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vboz1=vbuz2_neq_vbuc1 -lda {z2} -eor #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT vboaa=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -//FRAGMENT vboxx=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tax -//FRAGMENT vboyy=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tay -//FRAGMENT vboz1=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -//FRAGMENT vboxx=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tax -//FRAGMENT vboyy=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tay -//FRAGMENT vboz1=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -sta {z1} -//FRAGMENT vboaa=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -//FRAGMENT vboxx=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -tax -//FRAGMENT vboyy=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -tay -//FRAGMENT vboz1=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -sta {z1} -//FRAGMENT vboaa=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -//FRAGMENT vboxx=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -tax -//FRAGMENT vboyy=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -tay -//FRAGMENT vboz1=vboaa -sta {z1} -//FRAGMENT vboaa=vboz1 -lda {z1} -//FRAGMENT vboxx=vboz1 -ldx {z1} -//FRAGMENT vboaa_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vboaa=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vboz2_or_vboaa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboxx -txa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboyy -tya -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboz2 -txa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboaa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboxx -txa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboyy -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboz2 -tya -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboxx -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboyy -tya -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboaa=vboz1_or_vboz2 -lda {z1} -ora {z2} -//FRAGMENT vboaa=vboz1_or_vboaa -ora {z1} -//FRAGMENT vboaa=vboz1_or_vboxx -txa -ora {z1} -//FRAGMENT vboaa=vboz1_or_vboyy -tya -ora {z1} -//FRAGMENT vboaa=vboxx_or_vboz1 -txa -ora {z1} -//FRAGMENT vboaa=vboxx_or_vboaa -stx $ff -ora $ff -//FRAGMENT vboaa=vboxx_or_vboxx -txa -stx $ff -ora $ff -//FRAGMENT vboaa=vboxx_or_vboyy -txa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboz1 -tya -ora {z1} -//FRAGMENT vboaa=vboyy_or_vboaa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboxx -txa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboyy -tya -sty $ff -ora $ff -//FRAGMENT vboxx=vboz1_or_vboz2 -lda {z1} -ora {z2} -tax -//FRAGMENT vboxx=vboz1_or_vboaa -ora {z1} -tax -//FRAGMENT vboxx=vboz1_or_vboxx -txa -ora {z1} -tax -//FRAGMENT vboxx=vboz1_or_vboyy -tya -ora {z1} -tax -//FRAGMENT vboxx=vboxx_or_vboz1 -txa -ora {z1} -tax -//FRAGMENT vboxx=vboxx_or_vboaa -stx $ff -ora $ff -tax -//FRAGMENT vboxx=vboxx_or_vboxx -txa -stx $ff -ora $ff -tax -//FRAGMENT vboxx=vboxx_or_vboyy -txa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboz1 -tya -ora {z1} -tax -//FRAGMENT vboxx=vboyy_or_vboaa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboxx -txa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboyy -tya -sty $ff -ora $ff -tax -//FRAGMENT vboyy=vboz1_or_vboz2 -lda {z1} -ora {z2} -tay -//FRAGMENT vboyy=vboz1_or_vboaa -ora {z1} -tay -//FRAGMENT vboyy=vboz1_or_vboxx -txa -ora {z1} -tay -//FRAGMENT vboyy=vboz1_or_vboyy -tya -ora {z1} -tay -//FRAGMENT vboyy=vboxx_or_vboz1 -txa -ora {z1} -tay -//FRAGMENT vboyy=vboxx_or_vboaa -stx $ff -ora $ff -tay -//FRAGMENT vboyy=vboxx_or_vboxx -txa -stx $ff -ora $ff -tay -//FRAGMENT vboyy=vboxx_or_vboyy -txa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboz1 -tya -ora {z1} -tay -//FRAGMENT vboyy=vboyy_or_vboaa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboxx -txa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboyy -tya -sty $ff -ora $ff -tay -//FRAGMENT vboxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vboyy=vboz1 -ldy {z1} -//FRAGMENT vboyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vboyy=vboaa -tay -//FRAGMENT vboaa=vboyy -tya -//FRAGMENT vbuz1=vbuc1_rol_vbuz2 -lda #{c1} -ldy {z2} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuz1 -lda #{c1} -ldx {z1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuaa -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT pprz1=pprc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 +//KICKC FRAGMENT CACHE 1631c50e2a //FRAGMENT _deref_pwsc1=vbsc2 NO_SYNTHESIS //FRAGMENT _deref_pwsc1=vwuc2 @@ -3864,11 +8,23 @@ lda #<{c2} sta {c1} lda #>{c2} sta {c1}+1 +//FRAGMENT pbuz1=pbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 //FRAGMENT vwsz1=vbsc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 //FRAGMENT pwsz1=pwsc1_plus_vwsz2 lda #<{c1} clc @@ -3884,6 +40,11 @@ sta {z1} iny lda ({z2}),y sta {z1}+1 +//FRAGMENT vwsz1=vwsz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 //FRAGMENT vdsz1=vdsz2 lda {z2} sta {z1} @@ -3912,6 +73,14 @@ inc {z1} bne !+ inc {z1}+1 !: +//FRAGMENT vwsz1=vwsz1_plus_vbsc1 +lda {z1} +clc +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 //FRAGMENT vwsz1_neq_0_then_la1 lda {z1}+1 bne {la1} @@ -3924,6 +93,9 @@ sta ({z1}),y iny lda {z2}+1 sta ({z1}),y +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} //FRAGMENT vwsz1_lt_vwsc1_then_la1 lda {z1} cmp #<{c1} @@ -3933,6 +105,11 @@ bvc !+ eor #$80 !: bmi {la1} +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 //FRAGMENT vduz1=vduz2 lda {z2} sta {z1} @@ -3963,6 +140,26 @@ lda {z2} sta {z1}+2 lda {z2}+1 sta {z1}+3 +//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 vduz1=_dword_vwuz2 lda {z2} sta {z1} @@ -3989,6 +186,10 @@ bne {la1} lda #{c1} and {z2} sta {z1} +//FRAGMENT vbuz1_eq_0_then_la1 +lda {z1} +cmp #0 +beq {la1} //FRAGMENT vduz1=vduz1_plus_vduz2 lda {z1} clc @@ -4019,9 +220,22 @@ sta {z1} lda #0 sbc {z2}+1 sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +sta {z1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} //FRAGMENT vbuz1=_byte_vwuz2 lda {z2} sta {z1} +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +ldy #0 +sta ({z1}),y //FRAGMENT pbuz1=_inc_pbuz2 lda {z2} clc @@ -4030,6 +244,24 @@ sta {z1} lda {z2}+1 adc #0 sta {z1}+1 +//FRAGMENT _deref_pbuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuc1_neq_vbuz1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} //FRAGMENT vwuz1_ge_vwuz2_then_la1 lda {z2}+1 cmp {z1}+1 @@ -4039,6 +271,41 @@ cmp {z1} beq {la1} !: bcc {la1} +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//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=vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbuz1=_hi_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vwuz1=vwuz1_bor_vbuc1 +lda #{c1} +ora {z1} +sta {z1} //FRAGMENT vwuz1_lt_vwuz2_then_la1 lda {z1}+1 cmp {z2}+1 @@ -4048,6 +315,11 @@ lda {z1} cmp {z2} bcc {la1} !: +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: //FRAGMENT vwuz1=vwuz1_minus_vwuz2 lda {z1} sec @@ -4056,6 +328,21 @@ sta {z1} lda {z1}+1 sbc {z2}+1 sta {z1}+1 +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +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=vwuz1_band_vbuc1 lda #{c1} and {z1} @@ -4067,6 +354,12 @@ tax lda #{c1} and {z1} tay +//FRAGMENT vbuaa_eq_0_then_la1 +cmp #0 +beq {la1} +//FRAGMENT vbuxx_eq_0_then_la1 +cpx #0 +beq {la1} //FRAGMENT vbuxx=vbuxx_bxor_vbuc1 txa eor #{c1} @@ -4075,6 +368,9 @@ tax tya eor #{c1} tay +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} //FRAGMENT vbuaa=_byte_vwuz1 lda {z1} //FRAGMENT vbuxx=_byte_vwuz1 @@ -4088,6 +384,177 @@ 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 vbuaa=vbuz1_rol_1 +lda {z1} +asl +//FRAGMENT vbuxx=vbuz1_rol_1 +lda {z1} +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_1 +lda {z1} +asl +tay +//FRAGMENT vbuz1=vbuaa_rol_1 +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_1 +asl +//FRAGMENT vbuxx=vbuaa_rol_1 +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_1 +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_1 +txa +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_1 +txa +asl +//FRAGMENT vbuxx=vbuxx_rol_1 +txa +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_1 +txa +asl +tay +//FRAGMENT vbuz1=vbuyy_rol_1 +tya +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_1 +tya +asl +//FRAGMENT vbuxx=vbuyy_rol_1 +tya +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_1 +tya +asl +tay +//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa +tay +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +lda {c1}+1,x +sta {z1}+1 +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuc1_neq_vbuxx_then_la1 +cpx #{c1} +bne {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 vbuaa=_hi_vwuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwuz1 +ldx {z1}+1 +//FRAGMENT vbuaa=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//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 vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuz1=vbuxx_band_vbuc1 +lda #{c1} +sax {z1} +//FRAGMENT vbuyy=_hi_vwuz1 +ldy {z1}+1 +//FRAGMENT vbuz1=vbuyy_band_vbuc1 +tya +and #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuxx_band_vbuc1 +txa +and #{c1} +//FRAGMENT vbuaa=vbuyy_band_vbuc1 +tya +and #{c1} +//FRAGMENT vbuxx=vbuxx_band_vbuc1 +lda #{c1} +axs #0 +//FRAGMENT vbuxx=vbuyy_band_vbuc1 +ldx #{c1} +tya +axs #0 +//FRAGMENT vbuyy_eq_0_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuyy=vbuaa_band_vbuc1 +and #{c1} +tay +//FRAGMENT vbuyy=vbuxx_band_vbuc1 +txa +and #{c1} +tay +//FRAGMENT vbuyy=vbuyy_band_vbuc1 +tya +and #{c1} +tay +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbuc1_neq_vbuyy_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT vbuaa=vbuc1 +lda #{c1} //FRAGMENT pwsz1=pwsc1_plus_vwsz1 clc lda {z1} @@ -4105,523 +572,37 @@ lda ({z1}),y sta {z1}+1 pla sta {z1} -//FRAGMENT pprz1=pprz2 -lda {z2} +//FRAGMENT vwsz1=vwsc1 +lda #<{c1} sta {z1} -lda {z2}+1 +lda #>{c1} sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1_lt_vwuc1_then_la1 +//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 +lda #{c2} +cmp {c1} +bne {la1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT pbuz1_neq_pbuc1_then_la1 lda {z1}+1 cmp #>{c1} -bcc {la1} -bne !+ +bne {la1} lda {z1} cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pbuz1=_inc__deref_pbuz1 -ldy #0 -lda ({z1}),y -clc -adc #1 -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} ldy {z1} sta {c1},y -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 -lda #{c1} -ldy {z1} -cmp {c2},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 -lda {c2},x -cmp #{c1} -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 -ldx {z1} -ldy {z3} -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa -ldx {z1} -tay -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuxx -txa -ldx {z1} -tay -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -ldx {z1} -sta {c1},x -//FRAGMENT vbuz1=vbuz2_plus_vbuc1 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=vbuaa_plus_vbuc1 -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuc1 -clc -adc #{c1} -//FRAGMENT vbuaa=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -//FRAGMENT vbuaa=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -//FRAGMENT vbuxx=vbuz1_plus_vbuc1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbuxx=vbuaa_plus_vbuc1 -tax -axs #-[{c1}] -//FRAGMENT vbuxx=vbuyy_plus_vbuc1 -tya -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuyy=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -tay -//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 -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 -lda #{c1} -ldy {z2} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_0_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT vbuz1_lt_vbuz2_then_la1 +//FRAGMENT vwsz1=vwsz1_minus_vbsc1 lda {z1} -cmp {z2} -bcc {la1} -//FRAGMENT vwuz1=vbuz2_rol_3 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuz1=vbuaa_plus_vbuaa -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuz1 -lda {z1} -asl -//FRAGMENT vbuaa=vbuaa_plus_vbuaa -asl -//FRAGMENT vbuxx=vbuz1_plus_vbuz1 -lda {z1} -asl -tax -//FRAGMENT vbuxx=vbuaa_plus_vbuaa -asl -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuz1 -lda {z1} -asl -tay -//FRAGMENT vbuyy=vbuaa_plus_vbuaa -asl -tay -//FRAGMENT vbuaa=vbuz1_plus_1 -lda {z1} -clc -adc #1 -//FRAGMENT vbuz1=vbuaa_plus_1 -clc -adc #1 -sta {z1} -//FRAGMENT vwuz1=vwuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuc1_then_la1 -txa -tay -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} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_eq_vbuc1_then_la1 -txa -tay -lda #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 -lda #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_neq_0_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_0_then_la1 -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 -//FRAGMENT vbuz1=vbuaa_plus_vbuz2 -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuz1 -clc -adc {z1} -//FRAGMENT vbuxx=vbuaa_plus_vbuz1 -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuz1 -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -tay -//FRAGMENT vwuz1=vbuaa_rol_3 -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vbuxx_rol_3 -txa -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vbuyy_rol_3 -tya -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuz1=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -tay -//FRAGMENT vbuaa_lt_vbuz1_then_la1 -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_lt_vbuxx_then_la1 -txa -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vwuz1=vwuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuyy=vbuz1_plus_1 -ldy {z1} -iny -//FRAGMENT vbuyy_lt_vbuz1_then_la1 -cpy {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuyy_plus_1 -iny -sty {z1} -//FRAGMENT vbuxx_lt_vbuaa_then_la1 -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuz1=vbuz1_plus_1 -inc {z1} -//FRAGMENT vbuz1=_lo__deref_pwuc1 -lda {c1} -sta {z1} -//FRAGMENT vbuz1=_hi__deref_pwuc1 -lda {c1}+1 -sta {z1} -//FRAGMENT vbuaa=_lo__deref_pwuc1 -lda {c1} -//FRAGMENT vbuxx=_lo__deref_pwuc1 -ldx {c1} -//FRAGMENT vbuaa=_hi__deref_pwuc1 -lda {c1}+1 -//FRAGMENT vbuxx=_hi__deref_pwuc1 -ldx {c1}+1 -//FRAGMENT vbuyy=_lo__deref_pwuc1 -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 vwsz1=vbsc1_minus_vwsz2 -NO_SYNTHESIS -//FRAGMENT vwsz1=vwuc1_minus_vwsz2 sec -lda #<{c1} -sbc {z2} +sbc #{c1} sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_1 -sec -lda {z1} -sbc #1 -sta {z1} -bcs !+ -dec {z1}+1 -!: -//FRAGMENT vwsz1=vwsz2_minus_vwsz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 +lda {z1}+1 +sbc #>{c1} sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_vwsz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_vbsc1 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_plus_vwsz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_minus_vwsz2 -lda #<{c1} -sec -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1_gt_vwsc1_then_la1 -lda #<{c1} -cmp {z1} -lda #>{c1} -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bmi {la1} //FRAGMENT vwsz1_ge_vwsc1_then_la1 lda {z1} cmp #<{c1} @@ -4631,169 +612,14 @@ bvc !+ eor #$80 !: bpl {la1} -//FRAGMENT vwsz1=vwsz2_band_vdsc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwsz2 -lda #<{c1} +//FRAGMENT vwsz1=vwsz1_plus_vwsc1 clc -adc {z2} -sta {z1} -lda #>{c1} -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=_lo_vwsz2 -lda {z2} -sta {z1} -//FRAGMENT vwsz1=vwsz2_ror_3 -lda {z2}+1 -cmp #$80 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz2_rol_6 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbsz1=vwsz2_band_vbsc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsz3 -ldy #0 -lda ({z2}),y -ldy {z3} -ora {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_vwsz1 lda {z1} -//FRAGMENT vbuxx=_lo_vwsz1 -ldx {z1} -//FRAGMENT pbuz1=pbuz2_plus_vbuaa -clc -adc {z2} +adc #<{c1} sta {z1} -lda #0 -adc {z2}+1 +lda {z1}+1 +adc #>{c1} sta {z1}+1 -//FRAGMENT vbsaa=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -//FRAGMENT vbsxx=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbsyy=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldx {z2} -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tax -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_lo_vwsz1 -ldy {z1} //FRAGMENT vwsz1=vwsz1_plus_vwsz2 lda {z1} clc @@ -4802,1424 +628,183 @@ sta {z1} lda {z1}+1 adc {z2}+1 sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwsz1 -lda {z1} -clc -adc {z2} +//FRAGMENT vwsz1=vwsz2_ror_7 +// ROL once instead of RORing 7 times +lda {z2} // {z2} low byte to tmp $ff +sta $ff +lda {z2}+1 // {z2} high byte to {z1} low byte sta {z1} -lda {z1}+1 -adc {z2}+1 +lda #0 +bit {z2}+1 +bpl !+ // {z2} high byte positive? +lda #$ff +!: +sta {z1}+1 // sign extended {z2} into {z1} high byte +// ROL once +rol $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz2_plus_vwsc1 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_minus_vwsz1 -NO_SYNTHESIS -//FRAGMENT vwsz1=vwuc1_minus_vwsz1 -sec +//FRAGMENT vwsz1=vwsz2_ror_5 +lda {z2} +sta $ff +lda {z2}+1 +sta {z1} +lda #0 +bit {z2}+1 +bpl !+ +lda #$ff +!: +sta {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +rol $ff +rol {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsc1_minus_vwsz2 lda #<{c1} +sec +sbc {z2} +sta {z1} +lda #>{c1} +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT _deref_pbuc1=_byte_vwsz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1=_hi_vwsz2 +lda {z2}+1 +sta {z1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT vbuaa=_hi_vwsz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwsz1 +ldx {z1}+1 +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT vbuyy=_hi_vwsz1 +ldy {z1}+1 +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vwsz1=vwsc1_minus_vwsz1 +lda #<{c1} +sec sbc {z1} sta {z1} lda #>{c1} sbc {z1}+1 sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_3 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} sta {z1} -lda {z1}+1 -adc #>{c1} +lda #>{c1} sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vwsz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vbuaa +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} clc adc {z1} sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT vwsz1=vwsz1_rol_6 -lda {z1}+1 -sta $ff -lda {z1} -sta {z1}+1 -lda #0 -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} -lsr $ff -ror {z1}+1 -ror {z1} -//FRAGMENT _deref_pwuc1=vwuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT vbuc1_eq_vwuz1_then_la1 +//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 lda #{c1} -cmp {z1} -bne !+ -lda {z1}+1 -bne !+ -jmp {la1} -!: -//FRAGMENT vwuz1=_dec_vwuz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuaa_then_la1 -tay -lda #{c1} -cmp {c2},y -bne {la1} -//FRAGMENT vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 -lda #{c1} -cmp {c2},y -bne {la1} -//FRAGMENT _deref_pwuc1=_deref_pwuc2 -lda {c2} -sta {c1} -lda {c2}+1 -sta {c1}+1 -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1 -lda {c1} -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 -ldx {z1} -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy -tax -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 -ldx {z1} -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa -tax -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 ldy {z2} -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 -tya -ldy {z2} -tax -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx -sty $ff - -txa -tay -lda ({z1}),y -ldy $ff -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy -lda ({z1}),y -sta {c1},y -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT _deref_pbuc1=_deref_qbuc2_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2}-1,y -sta {c1}-1,y -dey -bne !- -//FRAGMENT _deref_pssc1=_memset_vbuc2 -ldy #{c2} -lda #0 -!: -dey -sta {c1},y -bne !- -//FRAGMENT _deref_pssc1=_deref_pssc2_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2}-1,y -sta {c1}-1,y -dey -bne !- -//FRAGMENT vbuz1=vbuz2_rol_3 -lda {z2} -asl -asl -asl -sta {z1} -//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1=vbuaa_rol_3 -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_3 -txa -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_3 -tya -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_3 -lda {z1} -asl -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_3 -asl -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_3 -txa -asl -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_3 -tya -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_3 -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_3 -txa -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_3 -tya -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_3 -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_3 -txa -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_3 -tya -asl -asl -asl -tay -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuz1_memcpy_vbuc3 -ldx {z1} -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsc2 -ldy {z1} -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuaa_memcpy_vbuc3 -tax -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuxx_memcpy_vbuc3 -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuyy_memcpy_vbuc3 -ldx #0 -!: -lda {c2},y -sta {c1},x -iny -inx -cpx #{c3} -bne !- -//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsc2 -tay -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsc2 -lda {c2} -sta {c1},x -lda {c2}+1 -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsc2 -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT pssc1_derefidx_vbuz1=_deref_pssc2_memcpy_vbuc3 -ldx {z1} -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 -tax -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3 -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3 -ldx #0 -!: -lda {c2},x -sta {c1},y -iny -inx -cpx #{c3} -bne !- -//FRAGMENT _deref_pbuc1=_byte_pprz1 -lda {z1} -sta {c1} -//FRAGMENT vwuz1=_deref_pwuc1_minus_vwuc2 -sec -lda {c1} -sbc #<{c2} -sta {z1} -lda {c1}+1 -sbc #>{c2} -sta {z1}+1 -//FRAGMENT _deref_pwuc1=vwuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuc2 -clc -lda {c1} -adc #<{c2} -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} -bne {la1} -//FRAGMENT vwuz1=vbuz2_word_vbuc1 -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} -bne {la1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_4 -ldy {z3} -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_1 -ldy {z3} -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vwuz1=vwuz2_ror_1 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -//FRAGMENT vwuz1=_neg_vwuz1 -sec -lda #0 -sbc {z1} -sta {z1} -lda #0 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_1 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz1_minus_vwsz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 -ldy {z2} -sec -lda {z1} -sbc {c1},y -sta {z1} -lda {z1}+1 -sbc {c1}+1,y -sta {z1}+1 +sta ({z1}),y //FRAGMENT vbuz1_eq_vbuc1_then_la1 lda #{c1} cmp {z1} beq {la1} -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 -ldy {z2} -clc -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_2 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vbuz1=vbuz1_minus_2 -dec {z1} -dec {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuc1 -ldy #{c1} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuc1 -ldy #{c1} -txa -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuc1 -tya -ldy #{c1} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vwuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_plus_vbuyy -tya -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuxx_minus__deref_pbuz2 -txa -sec -ldy #0 -sbc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -//FRAGMENT vbuaa=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -//FRAGMENT vbuxx=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -tax -//FRAGMENT vbuxx=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -tax -//FRAGMENT vbuyy=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -tay -//FRAGMENT vbuyy=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -tay -//FRAGMENT vbsxx_neq_vbsc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa_rol_4 -tay -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_4 -txa -tay -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_4 -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_1 -txa -tay -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_1 -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -tay -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa -tay -sec -lda {z1} -sbc {c1},y -sta {z1} -lda {z1}+1 -sbc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuxx -sec -lda {z1} -sbc {c1},x -sta {z1} -lda {z1}+1 -sbc {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuyy -sec -lda {z1} -sbc {c1},y -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 -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuxx -clc -lda {z1} -adc {c1},x -sta {z1} -lda {z1}+1 -adc {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuyy -clc -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1_lt_vbuaa_then_la1 -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx=vbuxx_minus_2 -dex -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} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuyy -tya -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuyy -tya -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuyy -tya -ora {z1} -tay -//FRAGMENT vbuz1_lt_vbuyy_then_la1 -tya -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_lt_vbuyy_then_la1 -sty $ff -cpx $ff -bcc {la1} -//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} -//FRAGMENT vbuxx_eq_vbuaa_then_la1 -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbuxx_eq_vbuyy_then_la1 -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbuyy_eq_vbuxx_then_la1 -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 -ldy {z3} -lda {c1},y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 +lda {z3} ldy {z2} sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 -txa -ldx {z2} -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 -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 -lda {c1},y -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 -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy -lda {c1},y -sta ({z1}),y -//FRAGMENT vwsz1=_sword_vbuz2 +//FRAGMENT vbuz1=vbuz2 lda {z2} sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vboz1=vbuz2_lt_vbuc1 +//FRAGMENT vbsz1=_sbyte_vwuz2 lda {z2} -cmp #{c1} -lda #0 -rol -eor #1 sta {z1} -//FRAGMENT vboaa=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vbuaa=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -//FRAGMENT vbuaa=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -//FRAGMENT vbuxx=vbuc1_plus_vbuxx -txa -axs #-[{c1}] -//FRAGMENT vbuxx=vbuc1_plus_vbuyy -tya -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus_vbuaa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -tay -//FRAGMENT vbuz1=vbuz2_rol_4 -lda {z2} -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuaa_rol_4 -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_4 -txa -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_4 -tya -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_4 -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_4 -txa -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_4 -tya -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_4 -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_4 -txa -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_4 -tya -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_4 -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_4 -txa -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_4 -tya -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=vbuaa_bor_vbuz2 -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuxx -stx $ff -ora $ff -sta {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuyy -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_bor_vbuz1 -ora {z1} -//FRAGMENT vbuaa=vbuaa_bor_vbuxx -stx $ff -ora $ff -//FRAGMENT vbuaa=vbuaa_bor_vbuyy -sty $ff -ora $ff -//FRAGMENT vbuxx=vbuaa_bor_vbuz1 -ora {z1} -tax -//FRAGMENT vbuxx=vbuaa_bor_vbuxx -stx $ff -ora $ff -tax -//FRAGMENT vbuxx=vbuaa_bor_vbuyy -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuaa_bor_vbuz1 -ora {z1} -tay -//FRAGMENT vbuyy=vbuaa_bor_vbuxx -stx $ff -ora $ff -tay -//FRAGMENT vbuyy=vbuaa_bor_vbuyy -sty $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -//FRAGMENT vbuaa=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -//FRAGMENT vbuxx=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -tay -//FRAGMENT vboz1=vboyy -tya -sta {z1} -//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 -lda #{c2} -cmp {c1} -bne {la1} -//FRAGMENT vbuz1=vbuc1_bor_vbuz2 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT pbuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vwuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuc1_bor_vbuaa -ora #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuxx -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuyy -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuaa -ora #{c1} -//FRAGMENT vbuaa=vbuc1_bor_vbuxx -txa -ora #{c1} -//FRAGMENT vbuaa=vbuc1_bor_vbuyy -tya -ora #{c1} -//FRAGMENT vbuxx=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuaa -ora #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuxx -txa -ora #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuyy -tya -ora #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuaa -ora #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuxx -txa -ora #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuyy -tya -ora #{c1} -tay -//FRAGMENT vwuz1_gt_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 -lda #{c1} -eor {z2} -sta {z1} -//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 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=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 vbuz1=vbuxx_bxor_vbuc1 -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 -txa -eor #{c1} -//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 _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 vduz1=vduz2_minus_vduc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -lda {z2}+2 -sbc #<{c1}>>$10 -sta {z1}+2 -lda {z2}+3 -sbc #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vbuz1=vbuc1_minus_vbuz2 +//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 vbsz1=vbsc1 +lda #{c1} +sta {z1} +//FRAGMENT vbsc1_neq_vbsz1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT vbuc1_eq_vbuz1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} +//FRAGMENT pwuz1=pwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_minus_1 +ldx {z2} +dex +stx {z1} +//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbsz1=_inc_vbsz1 +inc {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsz3 +lda {z2} +sec +sbc {z3} +sta {z1} +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 //FRAGMENT pbuz1=pbuz1_minus_vbuc1 sec lda {z1} @@ -6228,862 +813,8 @@ sta {z1} lda {z1}+1 sbc #0 sta {z1}+1 -//FRAGMENT vduz1=vduc1_minus__deref_pduc2 -lda #<{c1} -sec -sbc {c2} -sta {z1} -lda #>{c1} -sbc {c2}+1 -sta {z1}+1 -lda #<{c1}>>$10 -sbc {c2}+2 -sta {z1}+2 -lda #>{c1}>>$10 -sbc {c2}+3 -sta {z1}+3 -//FRAGMENT vwuz1=_lo_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwuz1=vwuz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1=pwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pwuz1=pwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=pwuz2_minus_pwuc1 -lda {z2} -sec -sbc #<{c1} -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 -cmp {z2}+1 -bne !+ -dey -lda ({z1}),y -cmp {z2} -beq {la1} -!: -bcc {la1} -//FRAGMENT pwuz1=pwuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT pwuz1=pwuz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_minus__deref_pwsz3 -sec -lda {z2} -ldy #0 -sbc ({z3}),y -sta {z1} -lda {z2}+1 -iny -sbc ({z3}),y -sta {z1}+1 -//FRAGMENT vwsz1_le_0_then_la1 -lda {z1}+1 -bmi {la1} -bne !+ -lda {z1} -beq {la1} -!: -//FRAGMENT pwuz1=pwuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_1 -lda {z2} -clc -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vbuaa=vbuc1_minus_vbuz1 -lda #{c1} -sec -sbc {z1} -//FRAGMENT vbuxx=vbuc1_minus_vbuz1 -lda #{c1} -sec -sbc {z1} -tax -//FRAGMENT vbuyy=vbuc1_minus_vbuz1 -lda #{c1} -sec -sbc {z1} -tay -//FRAGMENT vbuz1=vbuc1_minus_vbuaa -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_minus_vbuaa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbuxx=vbuc1_minus_vbuaa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbuyy=vbuc1_minus_vbuaa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbuz1=vbuc1_minus_vbuxx -txa -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_minus_vbuxx -txa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbuxx=vbuc1_minus_vbuxx -txa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbuyy=vbuc1_minus_vbuxx -txa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbuz1=vbuc1_minus_vbuyy -tya -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_minus_vbuyy -tya -eor #$ff -sec -adc #{c1} -//FRAGMENT vbuxx=vbuc1_minus_vbuyy -tya -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbuyy=vbuc1_minus_vbuyy -tya -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbuz1=vbuaa_ror_1 -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_1 -lsr -//FRAGMENT vbuxx=vbuaa_ror_1 -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_1 -lsr -tay -//FRAGMENT pwuz1=pwuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuaa=vbuaa_plus_1 -clc -adc #1 -//FRAGMENT vbuaa=vbuxx_plus_1 -inx -txa -//FRAGMENT vbuaa=vbuyy_plus_1 -iny -tya -//FRAGMENT vbuxx=vbuaa_plus_1 -tax -inx -//FRAGMENT vbuxx=vbuxx_plus_1 -inx -//FRAGMENT vbuxx=vbuyy_plus_1 -tya -tax -inx -//FRAGMENT vbuyy=vbuaa_plus_1 -tay -iny -//FRAGMENT vbuyy=vbuxx_plus_1 -txa -tay -iny -//FRAGMENT vbuyy=vbuyy_plus_1 -iny -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT vwuz1=pwuz1_minus_pwuc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduz1_minus_vduc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -lda {z1}+2 -sbc #<{c1}>>$10 -sta {z1}+2 -lda {z1}+3 -sbc #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT pbuz1=_dec_pbuz1 -lda {z1} -bne !+ -dec {z1}+1 -!: +//FRAGMENT vbuz1=_dec_vbuz1 dec {z1} -//FRAGMENT vbuz1=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -//FRAGMENT _stackidxbyte_vbuc1=vbuz1 -lda {z1} -tsx -sta STACK_BASE+{c1},x -//FRAGMENT _stackpushbyte_=vbuz1 -lda {z1} -pha -//FRAGMENT _stackpushbyte_1 -pha -//FRAGMENT vbuz1=_stackpullbyte_ -pla -sta {z1} -//FRAGMENT _stackpullbyte_2 -pla -pla -//FRAGMENT vbuaa=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -//FRAGMENT vbuxx=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -tax -//FRAGMENT vbuyy=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -tay -//FRAGMENT _stackidxbyte_vbuc1=vbuxx -txa -tsx -sta STACK_BASE+{c1},x -//FRAGMENT _stackidxbyte_vbuc1=vbuyy -tya -tsx -sta STACK_BASE+{c1},x -//FRAGMENT vbuaa=_stackpullbyte_ -pla -//FRAGMENT vbuxx=_stackpullbyte_ -pla -tax -//FRAGMENT vbuyy=_stackpullbyte_ -pla -tay -//FRAGMENT _stackpushbyte_=vbuxx -txa -pha -//FRAGMENT _stackpushbyte_=vbuyy -tya -pha -//FRAGMENT _stackpushbyte_3 -pha -pha -pha -//FRAGMENT _stackpullbyte_4 -tsx -txa -axs #-4 -txs -//FRAGMENT pbuz1=_stackidxptr_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -lda STACK_BASE+{c1}+1,x -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -ldy {z1} -sta {c1},y -//FRAGMENT _stackpushptr_=pbuc1 -lda #>{c1} -pha -lda #<{c1} -pha -//FRAGMENT _stackpushbyte_=vbuc1 -lda #{c1} -pha -//FRAGMENT _stackpullbyte_3 -tsx -txa -axs #-3 -txs -//FRAGMENT vbuz1=vbuz2_minus_1 -ldx {z2} -dex -stx {z1} -//FRAGMENT vbuaa=vbuz1_minus_1 -lda {z1} -sec -sbc #1 -//FRAGMENT _stackpushbyte_=vbuaa -pha -//FRAGMENT _stackidxbyte_vbuc1=vbuaa -tsx -sta STACK_BASE+{c1},x -//FRAGMENT vbuxx=vbuz1_minus_1 -ldx {z1} -dex -//FRAGMENT vbuyy=vbuz1_minus_1 -lda {z1} -tay -dey -//FRAGMENT vbuz1=vbuaa_minus_1 -sec -sbc #1 -sta {z1} -//FRAGMENT vbuaa=vbuaa_minus_1 -sec -sbc #1 -//FRAGMENT vbuxx=vbuaa_minus_1 -tax -dex -//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx -tay -txa -sta {c1},y -//FRAGMENT vbuyy=vbuaa_plus_vbuc1 -clc -adc #{c1} -tay -//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy -tax -tya -sta {c1},x -//FRAGMENT vbuz1=_lo_pbuz2 -lda {z2} -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} -bcc {la1} -//FRAGMENT vbuc1_ge_vbuz1_then_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 -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuz3 -ldy #0 -lda ({z2}),y -ldy {z3} -ora {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pbuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pbuz1 -ldx {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuaa -sta {z1} -//FRAGMENT vbuaa=_hi_pbuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pbuz1 -ldx {z1}+1 -//FRAGMENT vbuc1_lt_vbuaa_then_la1 -cmp #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuc1_ge_vbuaa_then_la1 -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 -cpy $ff -bcs {la1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_pbuc2_derefidx_vbuaa -tay -lda {c1},y -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx -lda {c1},x -sta {z1}+1 -lda {c2},x -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy -lda {c1},y -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldx {z2} -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuc1_ge_vbuxx_then_la1 -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 !+ -bcs {la1} -!: -//FRAGMENT vbuc1_lt_vbuyy_then_la1 -cpy #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuz2_bor__lo_pbuz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT vbuyy=_hi_pbuz1 -ldy {z1}+1 -//FRAGMENT vwuz1_eq_0_then_la1 -lda {z1} -bne !+ -lda {z1}+1 -beq {la1} -!: -//FRAGMENT vwuz1_gt_vwuz2_then_la1 -lda {z2}+1 -cmp {z1}+1 -bcc {la1} -bne !+ -lda {z2} -cmp {z1} -bcc {la1} -!: -//FRAGMENT vwuz1_neq_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vwuz1=vwuz2_band_vwuc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=pbuz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1_neq_0_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_neq_0_then_la1 -tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_neq_0_then_la1 -lda {c1},x -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_neq_0_then_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 -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 -ldy #{c2} -lda ({z2}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 -lda #{c2} -ldy #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 -ldy #{c1} -lda ({z1}),y - -cmp #{c2} -bne {la1} -//FRAGMENT _deref_(qbuz1_derefidx_vbuc1)=vbuc2 -ldx #{c2} -ldy #{c1} -lda ({z1}),y -sta !+ +1 -iny -lda ({z1}),y -sta !+ +2 -!: stx $ffff -//FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 -ldy #{c3} -lda ({z1}),y -ldy #{c2} -pha -lda ({z1}),y -tay -pla -sta {c1},y -//FRAGMENT vwuz1=_deref_pwuz2_ror_4 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuz2 -lda #{c1} -eor {z2} -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_4 -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT _deref_pwuz1_lt_vwuc1_then_la1 -ldy #1 -lda ({z1}),y -cmp #>{c1} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pwuz1_gt_vwuc1_then_la1 -ldy #1 -lda #>{c1} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c1} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 -ldy #{c1} -iny -lda ({z1}),y -cmp #>{c2} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c2} -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 -ldy #{c1} -iny -lda #>{c2} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c2} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT vwuz1=vwuz2_ror_3 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 -ldx {z2} -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 -ldy #{c1} -sty $ff -clc -lda ({z1}),y -ldy #0 -adc ({z1}),y -sta ({z1}),y -ldy $ff -iny -lda ({z1}),y -ldy #1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 -ldy #{c2} -clc -lda ({z1}),y -ldy #{c1} -adc ({z1}),y -sta ({z1}),y -ldy #{c2}+1 -lda ({z1}),y -ldy #{c1}+1 -adc ({z1}),y -sta ({z1}),y //FRAGMENT pbuz1=pbuz2_plus_vwuc1 lda {z2} clc @@ -7092,35 +823,19 @@ sta {z1} lda {z2}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT vbuz1=_neg_vbuz2 -lda {z2} -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 -lda #{c2} -ldy {z1} -cmp {c1},y +//FRAGMENT pbuz1_neq_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 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 {z1} +cmp {z2} +bne {la1} +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 lda #{c1} clc adc {z2} @@ -7128,507 +843,120 @@ sta {z1} lda #0 adc {z2}+1 sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuz1=pbuz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT pssz1=pssc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vbuaa=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay +//FRAGMENT vbuz1_le_vbuc1_then_la1 lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuaa=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -//FRAGMENT vbuxx=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuyy=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tay -//FRAGMENT pbuc1_derefidx_vbuaa=_byte_vwuz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 -lda {z1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_byte_vwuz1 -lda {z1} -sta {c1},y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuxx -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuyy -tya -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT vbuz1=_neg_vbuaa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbuz1=_neg_vbuxx -dex -txa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_neg_vbuz1 -lda {z1} -eor #$ff -clc -adc #$01 -//FRAGMENT vbuaa=_neg_vbuxx -dex -txa -eor #$ff -//FRAGMENT vbuxx=_neg_vbuz1 -lda {z1} -eor #$ff -tax -inx -//FRAGMENT vbuxx=_neg_vbuaa -eor #$ff -tax -inx -//FRAGMENT vbuyy=_neg_vbuz1 -lda {z1} -eor #$ff -tay -iny -//FRAGMENT vbuyy=_neg_vbuaa -eor #$ff -tay -iny -//FRAGMENT vbuyy=_neg_vbuxx -txa -eor #$ff -tay -iny -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -sta {z1} -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy -lda ({z1}),y -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 +//FRAGMENT vbuz1=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +stx {z1} +//FRAGMENT pbuz1_derefidx_vbuaa=vbuc1 tay -lda #{c2} -cmp {c1},y -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 -lda #{c2} -cmp {c1},y -bne {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuxx -ldy {z1} -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuyy -tya -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuz1 -lda {z1} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuxx -txa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=_word_vbuyy -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuz1 -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuxx -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=_word_vbuyy -tya -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vwuc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuxx=pbuz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT qbuc1_derefidx_vbuyy=pbuz1 -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} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vwuz1=vwuz1_rol_4 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -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 -adc {z1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=vbuc1 +txa +tay +lda #{c1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=vbuc1 +lda #{c1} +sta ({z1}),y +//FRAGMENT vbuaa_eq_vbuc1_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx +ldy {z2} +txa +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy +tya +ldy {z2} +sta ({z1}),y +//FRAGMENT vbuc1_neq_vbuaa_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT vbuz1=vbuaa sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuz2_minus_vwuz3 -lda {z2} +//FRAGMENT vbsaa=_sbyte_vwuz1 +lda {z1} +//FRAGMENT vbsxx=_sbyte_vwuz1 +lda {z1} +tax +//FRAGMENT vbsyy=_sbyte_vwuz1 +lda {z1} +tay +//FRAGMENT vbsz1=vbsc1_minus_vbsaa +eor #$ff sec -sbc {z3} +adc #{c1} sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y +//FRAGMENT vbsz1=vbsc1_minus_vbsxx +txa +eor #$ff +sec +adc #{c1} sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuz1_le_0_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT vwuz1_eq_vwuc1_then_la1 -lda {z1} -cmp #<{c1} -bne !+ -lda {z1}+1 -cmp #>{c1} -beq {la1} -!: -//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 -dec {c1} -//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y +//FRAGMENT vbsz1=vbsc1_minus_vbsyy +tya +eor #$ff +sec +adc #{c1} sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT _deref_pbuz1_eq_vbuc1_then_la1 +//FRAGMENT vbsxx=vbsc1_minus_vbsz1 lda #{c1} -ldy #0 -cmp ({z1}),y +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 vbsc1_neq_vbsxx_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuc1_eq_vbuxx_then_la1 +cpx #{c1} beq {la1} -//FRAGMENT _deref_pbuz1_gt_vbuz2_then_la1 -ldy #0 -lda ({z1}),y -cmp {z2} +//FRAGMENT vbuxx=_deref_pbuc1 +ldx {c1} +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vbuz1_lt_vbuxx_then_la1 +txa +cmp {z1} beq !+ bcs {la1} !: -//FRAGMENT pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) -ldy #0 -lda ({z2}),y -tay -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pbuz2_rol_1 -ldy #0 -lda ({z2}),y -asl -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 -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT _deref_qwuz1=pwuz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1_neq_vbuc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwuz1_neq_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT pwuz1=_deref_qwuz2 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=pbuz2_minus_pbuz3 -lda {z2} +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuaa=vbuz1_minus_1 +lda {z1} sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1_derefidx_vbuz2=vwuz3 -ldy {z2} -lda {z3} -sta ({z1}),y -iny -lda {z3}+1 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vwuz1=pwuz2_minus_pwuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuyy -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuaa_le_0_then_la1 -cmp #0 -beq {la1} +sbc #1 +//FRAGMENT vbuaa_lt_vbuz1_then_la1 +cmp {z1} +bcc {la1} //FRAGMENT vwuz1=pwuz2_derefidx_vbuaa tay lda ({z2}),y @@ -7650,269 +978,6 @@ sta {z1} iny lda ({z2}),y sta {z1}+1 -//FRAGMENT _deref_pbuz1_gt_vbuxx_then_la1 -ldy #0 -lda ({z1}),y -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuxx=vwuz2 -txa -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuyy=vwuz2 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=_inc_pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vbuxx_le_0_then_la1 -cpx #0 -beq {la1} -//FRAGMENT pbuz1=pbuz2_minus_vwuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT qwuz1=qwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=_deref_qwuz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=pwuz1_minus_pwuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -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 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 -lda {z1} -tax -//FRAGMENT vbsyy=_sbyte_vwuz1 -lda {z1} -tay //FRAGMENT vbsz1=vbsz2_minus_vbsaa eor #$ff sec @@ -7930,6 +995,26 @@ eor #$ff sec adc {z2} sta {z1} +//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=vbsz1_minus_vbsz2 lda {z1} sec @@ -7952,26 +1037,6 @@ 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 @@ -7992,108 +1057,76 @@ 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 +//FRAGMENT vbuaa=vbuz1 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 +//FRAGMENT vbuaa=vbuaa_plus_vbuc1 +clc +adc #{c1} +//FRAGMENT vbuxx=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +//FRAGMENT vbuyy=vbuyy_plus_vbuc1 tya -sec -sbc #1 -sta {z1} -//FRAGMENT vbuz1_le_vbuaa_then_la1 -cmp {z1} -bcs {la1} +clc +adc #{c1} +tay //FRAGMENT vbuxx_le_vbuc1_then_la1 cpx #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} //FRAGMENT vbuyy_le_vbuc1_then_la1 cpy #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuaa=vbuxx +txa +//FRAGMENT vbuaa=vbuyy +tya +//FRAGMENT vbuxx=vbuaa +tax +//FRAGMENT vbuxx=vbuyy +tya +tax +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuyy=vbuaa +tay +//FRAGMENT vbuyy=vbuxx +txa +tay +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vbuyy_eq_vbuc1_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbuz1_lt_vbuaa_then_la1 +cmp {z1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbuxx=vbuz1_minus_1 +ldx {z1} +dex +//FRAGMENT vbuyy=vbuz1_minus_1 +lda {z1} +tay +dey +//FRAGMENT vbuz1_lt_vbuyy_then_la1 +tya +cmp {z1} +beq !+ +bcs {la1} +!: //FRAGMENT vbsaa=_inc_vbsaa clc adc #1 @@ -8101,216 +1134,91 @@ adc #1 inx //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 +//FRAGMENT vbuc1_eq_vbuyy_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbsz1=vbsz1_minus_vbsxx txa -sta $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 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 +eor #$ff +sec +adc {z1} +sta {z1} +//FRAGMENT vbuaa=_deref_pbuc1 +lda {c1} +//FRAGMENT vbuc1_eq_vbuaa_then_la1 +cmp #{c1} +beq {la1} +//FRAGMENT vbuyy=_deref_pbuc1 +ldy {c1} +//FRAGMENT vwuz1=vwuz2_rol_1 lda {z2} -sec -sbc {z1} +asl sta {z1} -//FRAGMENT vbsz1=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT pwsz1=pwsc1_plus_vwuz2 +lda {z2} +clc +adc #<{c1} sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuz1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=vbuz1_band_vbuc1 +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vdsz1=vdsz2_rol_4 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda {z2}+2 +sta {z1}+2 +lda {z2}+3 +sta {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +//FRAGMENT vwuz1=_hi_vdsz2 +lda {z2}+2 +sta {z1} +lda {z2}+3 +sta {z1}+1 +//FRAGMENT vwuz1=vbuc1_plus_vwuz2 lda #{c1} -and {z1} +clc +adc {z2} sta {z1} -//FRAGMENT pbuz1_le_pbuc1_then_la1 +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1_neq_vwuc1_then_la1 lda {z1}+1 cmp #>{c1} -bne !+ +bne {la1} lda {z1} cmp #<{c1} -!: -bcc {la1} -beq {la1} -//FRAGMENT pbuz1_gt_pbuc1_then_la1 -lda #>{c1} -cmp {z1}+1 -bcc {la1} -bne !+ -lda #<{c1} -cmp {z1} -bcc {la1} -!: -//FRAGMENT vbuz1=vbuz1_rol_1 -asl {z1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -beq {la1} +bne {la1} //FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx {z1} inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuc2_then_la1 -tay -lda {c1},y -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuc2_then_la1 -lda {c1},y -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx -inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_inc_pbuc1_derefidx_vbuyy -tya -tax -inc {c1},x -//FRAGMENT vduz1=vduc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} +//FRAGMENT pwsz1=pwsc1 +lda #<{c1} sta {z1} lda #>{c1} -adc #0 sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT pbuz1_derefidx_vbuaa=vbuz2 -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuaa -tay -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuxx -tay -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuyy -sta $ff -tya -ldy $ff -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 +//FRAGMENT vwuz1_lt_vwuc1_then_la1 lda {z1}+1 cmp #>{c1} bcc {la1} @@ -8319,11 +1227,82 @@ lda {z1} cmp #<{c1} bcc {la1} !: -//FRAGMENT vwuz1=_word_vduz2 +//FRAGMENT pwsz1=pwsz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=vbuz1_ror_1 +lsr {z1} +//FRAGMENT vbuz1_neq_0_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1=_lo_pbuz2 lda {z2} sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz3 +lda {z2} +ora {z3} +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 _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vwuz1=vwuz2_band_vwuc1 +lda {z2} +and #<{c1} +sta {z1} +lda {z2}+1 +and #>{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 vbuz1=_lo_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +ldy #0 +sta ({z1}),y //FRAGMENT vduz1=vwuz2_dword_vwuz3 lda {z2} sta {z1}+2 @@ -8333,3854 +1312,6 @@ lda {z3} sta {z1} lda {z3}+1 sta {z1}+1 -//FRAGMENT _deref_pbuz1_eq_vbuz2_then_la1 -lda {z2} -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT _deref_pbuz1_neq_0_then_la1 -ldy #0 -lda ({z1}),y -cmp #0 -bne {la1} -//FRAGMENT _deref_pbuz1_eq_vbuxx_then_la1 -txa -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT _deref_pbuz1_eq_vbuyy_then_la1 -tya -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT vwuz1=vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=pwuc1_derefidx_vbuz2_band_vbuc2 -lda #{c2} -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vwuz1=vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuaa=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuaa_band_vbuc2 -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -//FRAGMENT vbuxx=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tay -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 -ldx {z2} -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy -ldx {c1},y -tay -txa -sta ({z1}),y -//FRAGMENT _deref_pbuz1_neq_vbuc1_then_la1 -ldy #0 -lda ({z1}),y -cmp #{c1} -bne {la1} -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuz4 -ldy {z4} -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuxx -txa -tay -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuyy -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_plus_vwsz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -bcs !+ -dec {z1}+1 -!: -//FRAGMENT vwsz1=vwsz1_plus_pbuz2_derefidx_vbuyy -clc -lda {z1} -adc ({z2}),y -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 -lda {z2} -ldy #{c1} -clc -adc ({z3}),y -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuaa -tax -tya -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -tay -//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -tay -//FRAGMENT vbuaa=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -//FRAGMENT vbuxx=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -tay -//FRAGMENT vbuz1=vbuaa_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuz2_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -tay -//FRAGMENT vwuz1=vbuz2_word_vbuz3 -lda {z2} -sta {z1}+1 -lda {z3} -sta {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuz2 -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuz2 -txa -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuz2 -tya -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuaa -tay -lda {z2} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuaa -tay -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuaa -tay -txa -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuaa -tax -tya -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuxx -lda {z2} -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuxx -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuxx -tya -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuyy -lda {z2} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuyy -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuyy -txa -sta {z1}+1 -sty {z1} -//FRAGMENT _deref_pbsc1=vbsc2 -lda #{c2} -sta {c1} -//FRAGMENT vbuz1=_dec_vbuz2 -ldy {z2} -dey -sty {z1} -//FRAGMENT vbuz1=_dec_vbuaa -sec -sbc #1 -sta {z1} -//FRAGMENT vbuz1=_dec_vbuxx -dex -stx {z1} -//FRAGMENT vbuz1=_dec_vbuyy -dey -sty {z1} -//FRAGMENT vbuaa=_dec_vbuz1 -lda {z1} -sec -sbc #1 -//FRAGMENT vbuaa=_dec_vbuxx -txa -sec -sbc #1 -//FRAGMENT vbuaa=_dec_vbuyy -tya -sec -sbc #1 -//FRAGMENT vbuxx=_dec_vbuz1 -ldx {z1} -dex -//FRAGMENT vbuxx=_dec_vbuaa -tax -dex -//FRAGMENT vbuxx=_dec_vbuyy -tya -tax -dex -//FRAGMENT vbuyy=_dec_vbuz1 -ldy {z1} -dey -//FRAGMENT vbuyy=_dec_vbuaa -tay -dey -//FRAGMENT vbuyy=_dec_vbuxx -txa -tay -dey -//FRAGMENT vwuz1=vwuz2_bor_vbuz3 -lda {z3} -ora {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -tay -//FRAGMENT vwuz1=vwuz2_bor_vbuxx -txa -ora {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_bor_vbuyy -tya -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} -sta {z1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1},y -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1},y -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_gt_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1_lt_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bne {la1} -//FRAGMENT vbuz1_neq_vbuz1_then_la1 -lda {z1} -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -lda {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuyy_then_la1 -lda {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_vbuxx_then_la1 -txa -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_ge_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bcs {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_le_vbuxx_then_la1 -txa -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_le_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bcc {la1} -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -stx $ff -cmp $ff -bcc {la1} -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -tax -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_gt_vbuxx_then_la1 -txa -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_gt_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuyy_then_la1 -lda {z1} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_vbuxx_then_la1 -txa -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_lt_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_vbuxx_then_la1 -txa -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_neq_vbuyy_then_la1 -tya -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT _deref_qbuc1=pbuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_plus_2 -lda {z2} -clc -adc #2 -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_2 -lda {z1} -clc -adc #2 -//FRAGMENT vbuxx=vbuz1_plus_2 -ldx {z1} -inx -inx -//FRAGMENT vbuyy=vbuz1_plus_2 -ldy {z1} -iny -iny -//FRAGMENT vbuxx=vbuaa_plus_2 -tax -inx -inx -//FRAGMENT vbuxx=vbuyy_plus_2 -tya -clc -adc #2 -tax -//FRAGMENT vbsz1_lt_vbsc1_then_la1 -lda {z1} -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsaa_lt_vbsc1_then_la1 -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsxx_lt_vbsc1_then_la1 -txa -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsyy_lt_vbsc1_then_la1 -tya -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsyy=vbsc1 -ldy #{c1} -//FRAGMENT vwsz1=vwsz2_ror_7 -// ROL once instead of RORing 7 times -lda {z2} // {z2} low byte to tmp $ff -sta $ff -lda {z2}+1 // {z2} high byte to {z1} low byte -sta {z1} -lda #0 -bit {z2}+1 -bpl !+ // {z2} high byte positive? -lda #$ff -!: -sta {z1}+1 // sign extended {z2} into {z1} high byte -// ROL once -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz2_ror_5 -lda {z2} -sta $ff -lda {z2}+1 -sta {z1} -lda #0 -bit {z2}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT _deref_pbuc1=_byte_vwsz1 -lda {z1} -sta {c1} -//FRAGMENT vwsz1=vwsc1_minus_vwsz1 -lda #<{c1} -sec -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT _deref_pbsc1=vbsz1 -lda {z1} -sta {c1} -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuz1 -tay -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuxx -tay -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuyy -tax -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT vbuxx_neq_vbuaa_then_la1 -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT _deref_pbuc1=_deref_pbuz1 -ldy #0 -lda ({z1}),y -sta {c1} -//FRAGMENT vwuz1=pbuc1_minus_pbuz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=pbuc1_minus_pbuz1 -sec -lda #<{c1} -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuz1 -tax -ldy #0 -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuz1 -tya -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=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 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 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 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 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 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 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} -sta ({z1}),y -//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuc1=vbuaa -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuxx -ldy #{c1} -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuyy -tya -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tay -//FRAGMENT vwuz1=vwuc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT qbuz1_derefidx_vbuc1=pbuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT qwuz1_derefidx_vbuc1=pwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pwuz2 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwsz1_neq_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwsz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -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 -lda {z2} -clc -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_4 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vwuz1=vwuz2_ror_8 -lda {z2}+1 -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1_ge_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT vwuz1_ge_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp #{c1} -bcs {la1} -!: -//FRAGMENT vwuz1=vwuz1_plus_1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_rol_8 -lda {z1} -sta {z1}+1 -lda #0 -sta {z1} -//FRAGMENT vwuz1=vwuz1_ror_4 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT pwsc1_derefidx_vbuz1=vwsc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT _deref_pwsc1=_deref_pwsc2 -lda {c2} -sta {c1} -lda {c2}+1 -sta {c1}+1 -//FRAGMENT pwsc1_derefidx_vbuaa=vwsc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=vwsc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=vwsc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT _deref_pbuc1=_byte_vwuz1 -lda {z1} -sta {c1} -//FRAGMENT vbuz1=_deref_pbuz2_band_vbuc1 -lda #{c1} -ldy #0 -and ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -tay -//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 -lda {c1} -cmp {z1} -beq {la1} -//FRAGMENT _deref_pbuc1_eq_0_then_la1 -lda {c1} -cmp #0 -beq {la1} -//FRAGMENT vbuz1=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor__deref_pbuc1 -lda {c1} -ora {z2} -sta {z1} -//FRAGMENT vduz1=vduz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -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 -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT vbsz1=_dec_vbsz1 -dec {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=_dec_pbuc1_derefidx_vbuz1 -ldx {z1} -dec {c1},x -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldx {z2} -ldy {c2},x -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_le_pbuc2_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c2},y -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 -ldy {z1} -lda ({z2}),y -sta {c1},y -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 -lda {z2} -ldy {z3} -eor {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 -lda {z2} -ldy {z3} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuc1 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT vduz1=vduz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1=vwuc1_plus_vwuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1} -//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 -cpx {c1} -beq {la1} -//FRAGMENT vbuxx=vbuxx_bor_vbuc1 -txa -ora #{c1} -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuc1 -tya -ora #{c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -//FRAGMENT vbuxx=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -tay -//FRAGMENT vbuaa=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -tay -//FRAGMENT vbuz1=vbuaa_bor__deref_pbuc1 -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_bor__deref_pbuc1 -ora {c1} -//FRAGMENT vbuxx=vbuaa_bor__deref_pbuc1 -ora {c1} -tax -//FRAGMENT vbuyy=vbuaa_bor__deref_pbuc1 -ora {c1} -tay -//FRAGMENT vbuz1=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -//FRAGMENT vbuxx=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -tax -//FRAGMENT vbuyy=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -tay -//FRAGMENT vbuz1=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -//FRAGMENT vbuxx=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -tax -//FRAGMENT vbuyy=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -tay -//FRAGMENT vduz1=vduz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tax -ldy {c2},x -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -lda {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldy {z2} -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tay -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -ldx {c1},y -tay -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldy {z2} -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tay -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -txa -tay -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldx {z2} -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tax -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuxx=_dec_pbuc1_derefidx_vbuxx -dec {c1},x -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuxx_le_pbuc2_derefidx_vbuxx_then_la1 -txa -tay -lda {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -tay -//FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -sta {c1},y -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuaa_then_la1 -tay -lda {c1},y -cmp {z1} -bne {la1} -//FRAGMENT vbuaa_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -eor {c1},y -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -tay -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuz2 -ldy {z2} -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -eor {c1},y -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldx {z1} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuz2 -ldy {z2} -txa -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -eor {c1},y -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -eor {c1},y -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -eor {c1},y -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -eor {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -tay -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -and {c1},y -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -and {c1},x -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -and {c1},y -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuz2 -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuz1 -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuz1 -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuz1 -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sax {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -and {c1},y -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -and {c1},y -tay -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -tax -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -tay -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuxx -lda {c1},x -sax {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuxx -txa -and {c1},x -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuxx -lda {c1},x -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuxx -txa -and {c1},x -tay -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuyy -ldx {c1},y -axs #0 -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuyy -lda {c1},y -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuyy -txa -and {c1},y -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuyy -lda {c1},y -axs #0 -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuyy -ldx {c1},y -tya -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuyy -txa -and {c1},y -tay -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -tay -//FRAGMENT vbuaa=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuc1 -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuc1 -txa -ora #{c1} -//FRAGMENT vbuyy=vbuxx_bor_vbuc1 -txa -ora #{c1} -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuc1 -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuc1 -tya -ora #{c1} -//FRAGMENT vbuxx=vbuyy_bor_vbuc1 -tya -ora #{c1} -tax -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1} -//FRAGMENT vbuz1=vbuaa_ror_3 -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_3 -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuaa_ror_3 -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_3 -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuaa -tay -txa -and {c1},y -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuaa -tax -lda {c1},x -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -axs #0 -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuaa -tay -txa -and {c1},y -tay -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -tay -//FRAGMENT vbsxx=_dec_vbsxx -dex -//FRAGMENT vduz1=vduz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz1_band_vwuc1 -lda {z1} -and #<{c1} -sta {z1} -lda {z1}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -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 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 vbuz1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {z1} -//FRAGMENT pwsz1=pwsc1_plus_vwuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuc1 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbsaa_eq_vbsc1_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbsaa_neq_vbsc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbsaa=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -//FRAGMENT vbsaa=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -//FRAGMENT vbsyy=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -tay -//FRAGMENT vbsyy=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -tay -//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 vbsxx_eq_vbsc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tay -//FRAGMENT vbsc1_eq_vbsxx_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 pwsz1=pwsc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {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 -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsc1 -lax {z2} -axs #{c1} -stx {z1} -//FRAGMENT vbsaa=vbsz1_rol_1 -lda {z1} -asl -//FRAGMENT vbsxx=vbsz1_rol_1 -lda {z1} -asl -tax -//FRAGMENT vbsyy=vbsz1_rol_1 -lda {z1} -asl -tay -//FRAGMENT vbsz1=vbsxx_rol_1 -txa -asl -sta {z1} -//FRAGMENT vbsaa=vbsxx_rol_1 -txa -asl -//FRAGMENT vbsxx=vbsxx_rol_1 -txa -asl -tax -//FRAGMENT vbsyy=vbsxx_rol_1 -txa -asl -tay -//FRAGMENT vbsz1=vbsyy_rol_1 -tya -asl -sta {z1} -//FRAGMENT vbsaa=vbsyy_rol_1 -tya -asl -//FRAGMENT vbsxx=vbsyy_rol_1 -tya -asl -tax -//FRAGMENT vbsyy=vbsyy_rol_1 -tya -asl -tay -//FRAGMENT vbsz1=vbsaa_minus_vbsc1 -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsc1 -txa -axs #{c1} -stx {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsc1 -lda {z1} -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsaa_minus_vbsc1 -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsxx_minus_vbsc1 -txa -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -//FRAGMENT vbsxx=vbsz1_minus_vbsc1 -lax {z1} -axs #{c1} -//FRAGMENT vbsxx=vbsaa_minus_vbsc1 -tax -axs #{c1} -//FRAGMENT vbsxx=vbsyy_minus_vbsc1 -tya -tax -axs #{c1} -//FRAGMENT vbsyy=vbsz1_minus_vbsc1 -lda {z1} -sec -sbc #{c1} -tay -//FRAGMENT vbsyy=vbsaa_minus_vbsc1 -sec -sbc #{c1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsc1 -txa -sec -sbc #{c1} -tay -//FRAGMENT vbuc1_gt_vbuz1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT vbuc1_gt_vbuxx_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vwuz1=vbuz2_rol_1 -lda {z2} -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT vwuz1=vbuxx_rol_1 -txa -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT vwuz1=vbuyy_rol_1 -tya -asl -sta {z1} -lda #0 -rol -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_lt_0_then_la1 -cpy #0 -bmi {la1} -//FRAGMENT pwsz1=pwsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_hi_vdsz2 -lda {z2}+2 -sta {z1} -lda {z2}+3 -sta {z1}+1 -//FRAGMENT pwsz1=pwsz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: //FRAGMENT vduz1_lt_vduc1_then_la1 lda {z1}+3 cmp #>{c1}>>$10 @@ -12198,6 +1329,20 @@ lda {z1} cmp #<{c1} bcc {la1} !: +//FRAGMENT vduz1=vduz1_minus_vduc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +lda {z1}+2 +sbc #<{c1}>>$10 +sta {z1}+2 +lda {z1}+3 +sbc #>{c1}>>$10 +sta {z1}+3 //FRAGMENT vduz1=vduc1_minus_vduz1 lda #<{c1} sec @@ -12233,20 +1378,41 @@ asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 -//FRAGMENT vwuz1=vwuz2_minus_vwuc1 +//FRAGMENT vwuz1=vwuz2_ror_4 +lda {z2}+1 +lsr +sta {z1}+1 lda {z2} +ror +sta {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1_le_0_then_la1 +lda {z1} +bne !+ +lda {z1}+1 +beq {la1} +!: +//FRAGMENT vwuz1=vwuz1_minus_vwuc1 +lda {z1} sec sbc #<{c1} sta {z1} -lda {z2}+1 +lda {z1}+1 sbc #>{c1} sta {z1}+1 -//FRAGMENT vbuz1=_byte_vwsz2 -lda {z2} -sta {z1} -//FRAGMENT vbsz1=_sbyte_vwsz2 -lda {z2} -sta {z1} //FRAGMENT vduz1=vduz2_rol_vbuz3 lda {z2} sta {z1} @@ -12266,22 +1432,91 @@ rol {z1}+3 dex bne !- !e: -//FRAGMENT vbuaa=_byte_vwsz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vwsz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vwsz1 -lda {z1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuz1 tay -//FRAGMENT vbsaa=_sbyte_vwsz1 lda {z1} -//FRAGMENT vbsxx=_sbyte_vwsz1 +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 lda {z1} -tax -//FRAGMENT vbsyy=_sbyte_vwsz1 +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +//FRAGMENT vbuaa_neq_0_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuaa=_lo_pbuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pbuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuaa_bor_vbuz2 +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bor_vbuz2 +txa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bor_vbuz2 +tya +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuaa +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuaa_bor_vbuaa +sta {z1} +//FRAGMENT vbuaa=_hi_pbuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pbuz1 +ldx {z1}+1 +//FRAGMENT vbuaa_neq_vbuc1_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT vbuxx_neq_0_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_pbuc2_derefidx_vbuaa tay +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx +lda {c1},x +sta {z1}+1 +lda {c2},x +sta {z1} +//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy +lda {c1},y +sta {z1}+1 +lda {c2},y +sta {z1} +//FRAGMENT vbuaa=_lo_vwuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_vwuz1 +ldx {z1} +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa +tay +lda {c1},y +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx +lda {c1},x +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y +//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy +lda {c1},y +ldy #0 +ora ({z1}),y +ldy #0 +sta ({z1}),y //FRAGMENT vduz1=vduz2_rol_vbuxx lda {z2} sta {z1} @@ -12320,2952 +1555,54 @@ rol {z1}+3 dey bne !- !e: -//FRAGMENT vduz1=vduz1_rol_3 -ldy #3 -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -//FRAGMENT vduz1=vduz1_rol_vbuxx -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dex -bne !- -!e: -//FRAGMENT vwsz1_neq_vwsc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 -lda {z1} -ldx {z2} -tay -txa -sta {c1},y -//FRAGMENT _deref_pbuc1_lt_vbuz1_then_la1 -lda {c1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 -lda {z1} -ldx {z2} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 -lda {z1} -ldx {z2} -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -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 -sta {z1} -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx -lda {z1} -tay -txa -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuz1 -ldx {z1} -tay -txa -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuxx -tay -txa -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuyy -sty $ff -ldx $ff -tay -txa -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx -tya -tay -txa -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT _deref_pbuc1_lt_vbuaa_then_la1 -ldy {c1} -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuaa)_then_la1 -tax -lda {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -lda {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -lda {z1} -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuaa_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -lda {z1} -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -lda {z1} -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldy {z1} -txa -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -txa -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -txa -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -tya -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -tya -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -tya -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldx {z1} -ldy {c2},x -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldx {z1} -ldy {c2},x -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldy {z1} -ldx {c2},y -ldy {c1},x -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -sta {z1} -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1}+1,x -tax -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -tay -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -tay -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldy {z1} -txa -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -txa -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -txa -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -tya -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -tya -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -tya -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT _deref_pbuc1_lt_vbuxx_then_la1 -lda {c1} -stx $ff -cmp $ff -bcc {la1} -//FRAGMENT _deref_pbuc1_lt_vbuyy_then_la1 -ldx {c1} -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc2 -ldx {z1} -ldy #{c2} -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 -tya -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 -lda ({z1}),y -sta {c1},x -//FRAGMENT _deref_qssc1=pssc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT pssc1_neq_pssz1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuc1_plus__deref_pbuz2 -lda #{c1} -clc -ldy #0 -adc ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_lo_qssz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_hi_qssz2_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z2}),y -sta {z1} -//FRAGMENT pssz1=qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vbuaa=vbuc1_plus__deref_pbuz1 -lda #{c1} -clc -ldy #0 -adc ({z1}),y -//FRAGMENT vbuxx=vbuc1_plus__deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus__deref_pbuz1 -lda #{c1} -clc -ldy #0 -adc ({z1}),y -tay -//FRAGMENT vbuaa=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -//FRAGMENT vbuxx=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tax -//FRAGMENT vbuyy=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tay -//FRAGMENT vbuaa=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -//FRAGMENT vbuxx=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -tay -//FRAGMENT pssc1_derefidx_vbuz1=pssc2_derefidx_vbuz1_memcpy_vbuc3 -ldx #{c3} -ldy {z1} -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 -ldx #{c3} -tay -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2},x -sta {c1},x -inx -dey -bne !- -//FRAGMENT pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuc3 -ldx #{c3} -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT vbum1_lt_vbuc1_then_la1 -lda {m1} -cmp #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbum1=vbum1 -ldy {m1} -tya -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT _deref_pbuc1_ge_vbuc2_then_la1 -lda {c1} -cmp #{c2} -bcs {la1} -//FRAGMENT vboz1=vboxx -txa -sta {z1} -//FRAGMENT vboaa=vboxx -txa -//FRAGMENT vboxx=vboaa -tax -//FRAGMENT vboxx=vboyy -tya -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 -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vbsz1=pbsc1_derefidx_vbuz2_minus_pbsc2_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT pbsz1=pbsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbsz1=vbsz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbsz1=_inc_pbsz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldx {z1} -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tax -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -//FRAGMENT vbsxx=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT _deref_pbsz1=vbsaa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbsz1=vbsxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbsz1=vbsyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pwuc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_1 -ldx {z1} -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_minus_1 -tax -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_1 -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_1 -sec -lda {c1},y -sbc #$01 -sta {c1},y -lda {c1}+1,y -sbc #$00 -sta {c1}+1,y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_1 -ldx {z2} -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_1 -ldy {z1} -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_1 -ldy {z1} -ldx {c1},y -inx -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_1 -ldx {z1} -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_1 -tax -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_1 -tay -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_1 -tay -ldx {c1},y -inx -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_1 -tax -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_1 -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_1 -lda {c1},x -clc -adc #1 -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_1 -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_1 -ldx {c1},y -inx -stx {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_1 -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_1 -ldx {c1},y -inx -//FRAGMENT vwuz1_eq_vwuz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -beq {la1} -!: -//FRAGMENT vwuz1_le_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1} -cmp {z2} -beq {la1} -!: -bcc {la1} -//FRAGMENT vduz1=vwuz2_dword_vwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -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} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuz2 -ldy {z2} -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -clc -adc {c1},y -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -clc -adc {c1},x -tax -//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -tax -//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -tax -//FRAGMENT vduz1_lt_vwuc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vduz1_lt_vwsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vduz1=vduz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -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 -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -//FRAGMENT vduz1=vduz1_plus_vwuc1 -lda {z1} -clc -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_rol_2 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -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 vbsz1_neq_0_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vbuz1=vbuc1_minus_vbuz1 -lda #{c1} -sec -sbc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz2_ror_vbuz3 -lda {z2} -ldy {z3} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -sta {z1} -//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 vbsxx_neq_0_then_la1 -txa -cmp #0 -bne {la1} -//FRAGMENT vbsyy_neq_0_then_la1 -tya -cmp #0 -bne {la1} -//FRAGMENT vbsaa=vbsz1_ror_vbuz2 -lda {z1} -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuz2 -lda {z1} -ldx {z2} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuz2 -lda {z1} -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuz2 -ldy {z2} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuz1 -ldy {z1} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuz1 -txa -ldx {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuz1 -ldy {z1} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuz2 -tya -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuz1 -tya -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuz1 -ldx {z1} -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuz1 -tya -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz2_ror_vbuxx -lda {z2} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz2_ror_vbuyy -lda {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsxx -txa -clc -adc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsyy -tya -clc -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuxx -lda {z1} -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuxx -txa -tax -sec -sbc {c1},x -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuxx -tya -sec -sbc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuyy -lda {z1} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuyy -txa -sec -sbc {c1},y -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuyy -tya -tay -sec -sbc {c1},y -tay -//FRAGMENT _deref_pduc1=vduz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -lda {z1}+2 -sta {c1}+2 -lda {z1}+3 -sta {c1}+3 -//FRAGMENT vduz1=_dec_vduz2 -lda {z2} -sec -sbc #1 -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -lda {z2}+2 -sbc #0 -sta {z1}+2 -lda {z2}+3 -sbc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_plus_vbuc1 -lda {z1} -clc -adc #{c1} -sta {z1} -bcc !+ -inc {z1}+1 -bne !+ -inc {z1}+2 -bne !+ -inc {z1}+3 -!: -//FRAGMENT vduz1=_dec_vduz1 -lda {z1} -sec -sbc #1 -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -lda {z1}+2 -sbc #0 -sta {z1}+2 -lda {z1}+3 -sbc #0 -sta {z1}+3 -//FRAGMENT vwuz1=_stackidxword_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -lda STACK_BASE+{c1}+1,x -sta {z1}+1 -//FRAGMENT _stackidxword_vbuc1=vwuz1 -tsx -lda {z1} -sta STACK_BASE+{c1},x -lda {z1}+1 -sta STACK_BASE+{c1}+1,x -//FRAGMENT _stackpushword_=vwuc1 -lda #>{c1} -pha -lda #<{c1} -pha -//FRAGMENT vwuz1=_stackpullword_ -pla -sta {z1} -pla -sta {z1}+1 -//FRAGMENT _stackpushword_=vbuc1 -lda #0 -pha -lda #<{c1} -pha -//FRAGMENT _stackidxsword_vbuc1=vwsz1 -tsx -lda {z1} -sta STACK_BASE+{c1},x -lda {z1}+1 -sta STACK_BASE+{c1}+1,x -//FRAGMENT _stackpushbyte_2 -pha -pha -//FRAGMENT vwsz1=_stackpullsword_ -pla -sta {z1} -pla -sta {z1}+1 -//FRAGMENT _deref_pwsc1=vwsz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=_inc_pbuc1_derefidx_vbuaa -tax -inc {c1},x -//FRAGMENT vbuaa=vbuaa_bor_vbuc1 -ora #{c1} -//FRAGMENT vbuz1=_deref_pbuz2_rol_1 -ldy #0 -lda ({z2}),y -asl -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=_inc_pwuc1_derefidx_vbuz1 -ldx {z1} -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT vbuaa=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -//FRAGMENT vbuxx=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -tay -//FRAGMENT pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuaa -tax -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuxx=_inc_pwuc1_derefidx_vbuxx -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuyy=_inc_pwuc1_derefidx_vbuyy -tya -tax -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz1) -ldx {z1} -ldy {c3},x -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(pbuc3_derefidx_vbuxx) -ldy {c3},x -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(pbuc3_derefidx_vbuyy) -ldx {c3},y -lda {c2},x -sta {c1},y -//FRAGMENT pwsz1_lt_pwsc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbuz1=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuaa -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuxx -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuyy -tya -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuaa -eor #{c1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuxx -txa -eor #{c1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuyy -tya -eor #{c1} -//FRAGMENT vbuxx=vbuc1_bxor_vbuaa -eor #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bxor_vbuxx -txa -eor #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bxor_vbuyy -tya -eor #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bxor_vbuaa -eor #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bxor_vbuxx -txa -eor #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bxor_vbuyy -tya -eor #{c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -//FRAGMENT vbuxx=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -tay -//FRAGMENT vbuz1=vbuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -//FRAGMENT vduz1_neq_vduc1_then_la1 -lda {z1}+3 -cmp #>{c1}>>$10 -bne {la1} -lda {z1}+2 -cmp #<{c1}>>$10 -bne {la1} -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vduz1=vduz2_sethi_vwuz3 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z3} -sta {z1}+2 -lda {z3}+1 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_setlo_vwuz3 -lda {z3} -sta {z1} -lda {z3}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_setlo_vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuaa=vbuaa_plus_2 -clc -adc #2 -//FRAGMENT vbuz1_ge__deref_pbuc1_then_la1 -lda {c1} -ldy {z1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuxx_ge__deref_pbuc1_then_la1 -ldy {c1} -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuyy_ge__deref_pbuc1_then_la1 -lda {c1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vduz1=_deref_pduc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -lda {c1}+2 -sta {z1}+2 -lda {c1}+3 -sta {z1}+3 -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuz3 -ldy {z2} -lda {c1},y -sta {z1}+1 -lda {z3} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuz2 -tay -lda {c1},y -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuz2 -lda {c1},x -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuz2 -lda {c1},y -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuaa -ldx {z2} -tay -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuaa -tay -lda {c1},y -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuaa -tay -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuaa -tax -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuxx -ldy {z2} -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuxx -tay -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuxx -lda {c1},x -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuxx -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuyy -ldx {z2} -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuyy -tax -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuyy -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuyy -lda {c1},y -sta {z1}+1 -sty {z1} -//FRAGMENT _deref_(_deref_qwuc1)=_deref_(_deref_qwuc2) -ldy {c2} -sty $fe -ldy {c2}+1 -sty $ff -ldy #0 -lda ($fe),y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -tay -//FRAGMENT _deref_pbuc1_eq__deref_pbuc2_then_la1 -lda {c1} -cmp {c2} -beq {la1} -//FRAGMENT _deref_pbsc1=_deref_pbsc2 -lda {c2} -sta {c1} -//FRAGMENT vwsz1_eq_vwsz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -beq {la1} -!: -//FRAGMENT vwsz1_neq_vwsz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vwsz1_lt_vwsz2_then_la1 -lda {z1} -cmp {z2} -lda {z1}+1 -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bmi {la1} -!e: -//FRAGMENT vwsz1_gt_vwsz2_then_la1 -lda {z2} -cmp {z1} -lda {z2}+1 -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bmi {la1} -!e: -//FRAGMENT vwsz1_ge_vwsz2_then_la1 -lda {z1} -cmp {z2} -lda {z1}+1 -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_1 -ldy {c1} -iny -sty {z1} -//FRAGMENT vbuz1=_deref_pbuc1_minus_1 -ldx {c1} -dex -stx {z1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_plus_1 -lda {c1} -clc -adc #1 -//FRAGMENT vbuaa=_deref_pbuc1_minus_1 -lda {c1} -sec -sbc #1 -//FRAGMENT vbuaa=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -//FRAGMENT vbuxx=_deref_pbuc1_plus_vbuc2 -lda {c1} -tax -axs #-[{c2}] -//FRAGMENT vbuyy=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -//FRAGMENT vbuxx=_deref_pbuc1_minus_vbuc2 -lda {c1} -tax -axs #{c2} -//FRAGMENT vbuyy=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -tay -//FRAGMENT vbuaa_ge_vbuxx_then_la1 -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuaa_ge_vbuyy_then_la1 -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx=_deref_pbuc1_plus_1 -ldx {c1} -inx -//FRAGMENT vbuyy=_deref_pbuc1_plus_1 -ldy {c1} -iny -//FRAGMENT vbuxx=_deref_pbuc1_minus_1 -ldx {c1} -dex -//FRAGMENT vbuyy=_deref_pbuc1_minus_1 -lda {c1} -tay -dey -//FRAGMENT vbsz1_neq_vbsz2_then_la1 -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vbsz1_neq_vbsxx_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbsxx_neq_vbsz1_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT pwuz1=pwuc1_plus_vwuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuz1=vbum2 -lda {m2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbum1=vbuc2 -lda #{c2} -ldy {m1} -sta {c1},y -//FRAGMENT vbuz1=vbum2 -lda {m2} -sta {z1} -//FRAGMENT vbuaa=vbum1 -lda {m1} -//FRAGMENT vbuxx=vbum1 -ldx {m1} -//FRAGMENT vbuyy=vbum1 -ldy {m1} -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=_byte_vwuz3 -lda {z3} -ldy {z2} -sta ({z1}),y -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuaa -tay -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuxx=_byte_vwuz2 -txa -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=_byte_vwuz2 -tya -tay -lda {z2} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_bor__hi_vwuz3 -lda {z2} -ora {z3}+1 -sta {z1} -//FRAGMENT vbuz1=vbuz1_bor_vbuaa -ora {z1} -sta {z1} -//FRAGMENT pbuz1_ge_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT vbuz1=_deref_pbuc1_ror_1 -lda {c1} +//FRAGMENT vbuaa=vbuaa_ror_1 lsr -sta {z1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuz1 +//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx ldy {z1} -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_qbuc1=_inc__deref_qbuc1 -inc {c1} -bne !+ -inc {c1}+1 -!: -//FRAGMENT vbuaa=_deref_pbuc1_ror_1 -lda {c1} -lsr -//FRAGMENT vbuxx=_deref_pbuc1_ror_1 -lda {c1} +txa +sta {c1},y +//FRAGMENT vbuxx=vbuxx_ror_1 +txa lsr tax -//FRAGMENT vbuyy=_deref_pbuc1_ror_1 -lda {c1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +//FRAGMENT vbuyy=vbuyy_ror_1 +tya lsr tay -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuaa_then_la1 -tay -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuxx_then_la1 -lda {c1}+1,x -cmp {z1}+1 -bne !+ -lda {c1},x -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuyy_then_la1 -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuyy -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT vbuyy=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -tay -//FRAGMENT _deref_pwuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuaa -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT vboz1=vboc1 -lda #{c1} -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 -ldy {z4} -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 -ldy {z3} -sta $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3 -ldy {z3} -stx $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 -sty $ff - -ldy {z3} -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuaa -tay -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa -stx $ff -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa -sty $ff - -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuxx -txa -tay -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx -sta $ff -txa -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx -sty $ff - -txa -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuyy -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy -sta $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy -stx $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT vbsz1=vbsaa_rol_1 -asl -sta {z1} -//FRAGMENT vbsaa=vbsaa_rol_1 -asl -//FRAGMENT vbsxx=vbsaa_rol_1 -asl -tax -//FRAGMENT vbsyy=vbsaa_rol_1 -asl -tay -//FRAGMENT pwsz1=pwsc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsz2 -ldx {z1} -ldy #0 -lda ({z2}),y -sta {c1},x -iny -lda ({z2}),y -sta {c1}+1,x -//FRAGMENT pwsz1=pwsc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsz1=pwsc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsz1=pwsc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsz1 -tax -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsz1 -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsz1 -tya -tax -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -tax -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuz1 -ldx {z1} -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -tay -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -sta {z1} -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -tay -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -tay -//FRAGMENT _deref_pboc1=vboc2 -lda #{c2} -sta {c1} -//FRAGMENT _deref_pboc1_then_la1 -lda {c1} -cmp #0 +//FRAGMENT vbuyy_neq_0_then_la1 +cpy #0 bne {la1} -//FRAGMENT _deref_pbuz1=_byte_vwuz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pssz1=pssc1_plus_vwuz2 -lda {z2} +//FRAGMENT vbuaa=_inc_vbuaa clc -adc #<{c1} +adc #1 +//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx +tay +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy +tax +tya +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +//FRAGMENT vbuz1=vbuz2_bor_vbuxx +txa +ora {z2} sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pssz1=_deref_pssz2_memcpy_vbuc1 -ldy #00 -!: -lda ({z2}),y -sta ({z1}),y -iny -cpy #{c1} -bne !- -//FRAGMENT pssz1=pssc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbsc1_derefidx_vbuz1=vbsz2 -lda {z2} +//FRAGMENT vbuyy=_lo_vwuz1 ldy {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuxx=vbsz1 -lda {z1} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsz1 -lda {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuz1=vbsxx -ldy {z1} -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsxx -tay -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuxx=vbsxx -txa -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsxx -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuz1=vbsyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsyy -tax -tya -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuxx=vbsyy -tya -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsyy -tya -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -sta {c1} -//FRAGMENT pssz1=pssz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pssz1_lt_pssc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbuz1_lt__deref_pbuc1_then_la1 -lda {z1} -cmp {c1} -bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=(_deref_qwuc2)_derefidx_vbuz1 -ldy {z1} -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT vbuaa_lt__deref_pbuc1_then_la1 -cmp {c1} -bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuaa=(_deref_qwuc2)_derefidx_vbuaa -tay -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuxx=(_deref_qwuc2)_derefidx_vbuxx -txa -tay -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuyy=(_deref_qwuc2)_derefidx_vbuyy -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT vbuxx_lt__deref_pbuc1_then_la1 -cpx {c1} -bcc {la1} -//FRAGMENT (_deref_qbuc1)_derefidx_vbuc2=vbuc3 -lda #{c3} -ldy #{c2} -ldx {c1} -stx $fe -ldx {c1}+1 -stx $ff -sta ($fe),y -//FRAGMENT pssz1_neq_pssc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT pssz1=pssz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=(_deref_qwuc1)_derefidx_vbuc2 -ldy #{c2} -lda {c1} -sta $fe -lda {c1}+1 -sta $ff -lda ($fe),y -sta {z1} -iny -lda ($fe),y -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(_deref_pbuz2) -ldy #0 -lda ({z2}),y -tay -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(_deref_pbuz1) -ldy #0 -lda ({z1}),y -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_(_deref_pbuz1) -tax -ldy #0 -lda ({z1}),y -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(_deref_pbuz1) -tya -tax -ldy #0 -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 -lda #{c1} -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 -sta {z1} -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_minus_2 -lda {z2} -sec -sbc #2 -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_2 -lda {z1} -sec -sbc #2 -//FRAGMENT vbuxx=vbuz1_minus_2 -ldx {z1} -dex -dex -//FRAGMENT vbuz1=_deref_pbuc1_plus_2 -lda {c1} -clc -adc #2 -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_plus_2 -lda {c1} -clc -adc #2 -//FRAGMENT vbuxx=_deref_pbuc1_plus_2 -ldx {c1} -inx -inx -//FRAGMENT vbuyy=_deref_pbuc1_plus_2 -ldy {c1} -iny -iny -//FRAGMENT _deref_pbuz1=_byte_vwsz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT vbuz1=vbuxx_band_pbuz2_derefidx_vbuc1 -ldy #{c1} -txa -and ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -and ({z1}),y -//FRAGMENT vbuxx=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -and ({z1}),y -tay -//FRAGMENT pbuz1=pbuz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT _deref_pbuc1_eq_vbuc2_then_la1 -lda #{c2} -cmp {c1} -beq {la1} -//FRAGMENT vbsz1=vbsz2_ror_1 -lda {z2} -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -//FRAGMENT vbsxx=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsaa_ror_1 -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_1 -cmp #$80 -ror -//FRAGMENT vbsxx=vbsaa_ror_1 -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsaa_ror_1 -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsxx_ror_1 -txa -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_1 -txa -cmp #$80 -ror -//FRAGMENT vbsxx=vbsxx_ror_1 -txa -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsxx_ror_1 -txa -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsyy_ror_1 -tya -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_1 -tya -cmp #$80 -ror -//FRAGMENT vbsxx=vbsyy_ror_1 -tya -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsyy_ror_1 -tya -cmp #$80 -ror -tay -//FRAGMENT vbuz1=_neg_vbuyy -dey -tya -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_neg_vbuyy -dey -tya -eor #$ff -//FRAGMENT vbuxx=_neg_vbuyy -tya -eor #$ff -tax -inx -//FRAGMENT vbuz1=vbuz2_band_vbuz3 -lda {z2} -and {z3} -sta {z1} -//FRAGMENT vbuz1=vbuaa_band_vbuz2 -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuz2 -lda {z2} -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_vbuz2 -tya -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuxx -lda {z2} -sax {z1} -//FRAGMENT vbuz1=vbuaa_band_vbuxx -sax {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuz2 -lda {z1} -and {z2} -//FRAGMENT vbuaa=vbuaa_band_vbuz1 -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuz1 -txa -and {z1} -//FRAGMENT vbuaa=vbuyy_band_vbuz1 -tya -and {z1} -//FRAGMENT vbuxx=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tax -//FRAGMENT vbuxx=vbuaa_band_vbuz1 -ldx {z1} -axs #0 -//FRAGMENT vbuxx=vbuxx_band_vbuz1 -lda {z1} -axs #0 -//FRAGMENT vbuxx=vbuyy_band_vbuz1 -ldx {z1} -tya -axs #0 -//FRAGMENT vbuyy=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tay -//FRAGMENT vbuyy=vbuaa_band_vbuz1 -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuz1 -txa -and {z1} -tay -//FRAGMENT vbuyy=vbuyy_band_vbuz1 -tya -and {z1} -tay -//FRAGMENT vdsz1=vdsz2_rol_4 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 //FRAGMENT vwuz1=vbuc1_plus__hi_vdsz2 NO_SYNTHESIS //FRAGMENT vwuz1=vwuc1_plus__hi_vdsz2 @@ -15278,6 +1615,16 @@ adc {z2}+3 sta {z1}+1 //FRAGMENT vwuz1=vbsc1_plus__hi_vdsz2 NO_SYNTHESIS +//FRAGMENT vbuaa=vbuz1_bor_vbuaa +ora {z1} +//FRAGMENT vbuyy=vbuz1_bor_vbuaa +ora {z1} +tay +//FRAGMENT vbuyy=_hi_pbuz1 +ldy {z1}+1 +//FRAGMENT vbuaa=vbuyy_bor_vbuaa +sty $ff +ora $ff //FRAGMENT vwuz1=vwuz2_minus_vwuz1 lda {z2} sec @@ -15286,6 +1633,58 @@ sta {z1} lda {z2}+1 sbc {z1}+1 sta {z1}+1 +//FRAGMENT vduz1=vduz1_rol_3 +ldy #3 +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dey +bne !- +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwsz1=pwsc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vduz1=vduz1_rol_vbuxx +cpx #0 +beq !e+ +!: +asl {z1} +rol {z1}+1 +rol {z1}+2 +rol {z1}+3 +dex +bne !- +!e: +//FRAGMENT vwuz1=vwuz1_plus_vwuz2 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 //FRAGMENT vdsz1=vdsz1_rol_4 asl {z1} rol {z1}+1 @@ -15303,2580 +1702,12 @@ asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 -//FRAGMENT vwsz1=vwsz2_ror_2 -lda {z2}+1 -cmp #$80 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 +//FRAGMENT vwuz1=vwuz1_ror_4 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 ror {z1} -//FRAGMENT vwsz1=vbsc1_plus_vwsz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbuz2 -clc -lda {z1} -adc {z2} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_plus_vwsz1 -lda {z1} -clc -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pbuz1_ge_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT pbuc1_derefidx_vbuz1=vbum2 -lda {m2} -ldy {z1} -sta {c1},y -//FRAGMENT vbum1=vbum1_plus_vbuz2 -lda {m1} -clc -adc {z2} -sta {m1} -//FRAGMENT pbuc1_derefidx_vbuaa=vbum1 -tay -lda {m1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbum1 -lda {m1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbum1 -lda {m1} -sta {c1},y -//FRAGMENT vbum1=vbum1_plus_vbuxx -txa -clc -adc {m1} -sta {m1} -//FRAGMENT vbum1=vbum1_plus_vbuyy -tya -clc -adc {m1} -sta {m1} -//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuc2 -lda {c2} -ldy {z1} -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuz1 -lda {c1} -clc -adc {z1} -sta {c1} -//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuc2 -tay -lda {c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuc2 -lda {c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuc2 -lda {c2} -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuxx -txa -clc -adc {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuyy -tya -clc -adc {c1} -sta {c1} -//FRAGMENT pbum1=pbum1_plus_vbuc1 -lda #{c1} -clc -adc {m1} -sta {m1} -bcc !+ -inc {m1}+1 -!: -//FRAGMENT vwsz1=vwsz1_plus_vbsz2 -lda {z2} -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsaa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsxx -txa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsyy -tya -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuz2 -lda {z2} -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT pbuz1=pbuz2_setlo_vbuz3 -lda {z3} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_sethi_vbuz2 -lda {z2} -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT vwuz1=vwuz2_setlo_vbuz3 -lda {z3} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuaa -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT pbuz1=pbuc1_sethi_vbuxx -stx {z1}+1 -ldx #<{c1} -stx {z1} -//FRAGMENT pbuz1=pbuz2_setlo_vbuaa -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_setlo_vbuxx -stx {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_setlo_vbuyy -sty {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_sethi_vbuaa -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT vwuz1=vwuc1_sethi_vbuxx -stx {z1}+1 -ldx #<{c1} -stx {z1} -//FRAGMENT vwuz1=vwuz2_setlo_vbuaa -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_setlo_vbuxx -stx {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_setlo_vbuyy -sty {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT vwuz1=vwuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT pbuz1=pbuz1_setlo_vbuaa -sta {z1} -//FRAGMENT vwuz1=vwuz1_setlo_vbuaa -sta {z1} -//FRAGMENT vdsz1=vdsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vdsz1_lt_0_then_la1 -lda {z1}+3 -bmi {la1} -//FRAGMENT vdsz1=_neg_vdsz1 -sec -lda {z1} -eor #$ff -adc #$0 -sta {z1} -lda {z1}+1 -eor #$ff -adc #$0 -sta {z1}+1 -lda {z1}+2 -eor #$ff -adc #$0 -sta {z1}+2 -lda {z1}+3 -eor #$ff -adc #$0 -sta {z1}+3 -//FRAGMENT pwsc1_derefidx_vbuz1_ge_vwsz2_then_la1 -ldy {z1} -lda {c1},y -cmp {z2} -lda {c1}+1,y -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT pwsc1_derefidx_vbuaa_ge_vwsz1_then_la1 -tay -lda {c1},y -cmp {z1} -lda {c1}+1,y -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsc1_derefidx_vbuxx_ge_vwsz1_then_la1 -lda {c1},x -cmp {z1} -lda {c1}+1,x -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsc1_derefidx_vbuyy_ge_vwsz1_then_la1 -lda {c1},y -cmp {z1} -lda {c1}+1,y -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuz2 -lda {z2} -tay -sta ({z1}),y -//FRAGMENT pbuz1=pbuz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT _deref_qssz1=pssz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1=vwuz1_plus_pwuz2_derefidx_vbuc1 -ldy #{c1} -clc -lda {z1} -adc ({z2}),y -sta {z1} -iny -lda {z1}+1 -adc ({z2}),y -sta {z1}+1 -//FRAGMENT pssz1=_deref_qssz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT _deref_pbuz1_eq__deref_pbuz2_then_la1 -ldy #0 -lda ({z1}),y -ldy #0 -cmp ({z2}),y -beq {la1} -//FRAGMENT vbsz1_le_0_then_la1 -lda {z1} -cmp #1 -bmi {la1} -//FRAGMENT vwsz1=vwsz1_minus_vbsz2 -lda {z2} -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vbsaa_le_0_then_la1 -cmp #1 -bmi {la1} -//FRAGMENT vbsaa_neq_vbsz1_then_la1 -cmp {z1} -bne {la1} -//FRAGMENT vwsz1=vwsz1_minus_vbsxx -txa -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbsyy -tya -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vbsyy_neq_vbsc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbsxx_le_0_then_la1 -cpx #1 -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 -bne {la1} -//FRAGMENT vbsyy_le_0_then_la1 -cpy #1 -bmi {la1} -//FRAGMENT vbsz1_neq_vbsyy_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbsxx_neq_vbsyy_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuc1_neq_vwuz1_then_la1 -NO_SYNTHESIS -//FRAGMENT vbsc1_neq_vwuz1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwuc1_neq_vwuz1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -ora {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -ora {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -ora {c1},y -tay -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuxx -txa -ora {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx -tya -ora {c1},x -tay -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuyy -txa -ora {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuyy -tya -ora {c1},y -tay -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz2 -tay -lda {c1},y -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tax -lda {c1},x -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz2 -lda {c1},x -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz2 -lda {c1},y -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz2 -tay -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tax -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz2 -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz2 -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -tay -//FRAGMENT vbuaa_le_vbuxx_then_la1 -tay -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldx {z1} -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuz4)_plus_pbuz5_derefidx_(pbuz6_derefidx_vbuz4) -ldy {z4} -lda ({z6}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z5}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuaa -tay -txa -ora {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuaa -tax -tya -ora {c1},x -tay -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuaa)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuaa) -tay -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuxx)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuxx) -txa -tay -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuyy)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuyy) -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT _deref_pbuc1=_deref_(_deref_qbuc2) -ldy {c2} -sty $fe -ldy {c2}+1 -sty $ff -ldy #0 -lda ($fe),y -sta {c1} -//FRAGMENT vbuz1=_hi_pvoz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=_lo_pvoz2 -lda {z2} -sta {z1} -//FRAGMENT vbuaa=_hi_pvoz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pvoz1 -ldx {z1}+1 -//FRAGMENT vbuaa=_lo_pvoz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pvoz1 -ldx {z1} -//FRAGMENT vbuyy=_hi_pvoz1 -ldy {z1}+1 -//FRAGMENT vbuyy=_lo_pvoz1 -ldy {z1} -//FRAGMENT _deref_pwsz1=vwsc1 -ldy #0 -lda #<{c1} -sta ({z1}),y -iny -lda #>{c1} -sta ({z1}),y -//FRAGMENT vwsz1=_deref_pwsz2_band_vwsc1 -ldy #0 -lda ({z2}),y -and #<{c1} -sta {z1} -iny -lda ({z2}),y -and #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_hi__deref_pwsz2 -ldy #1 -lda ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -//FRAGMENT vbuxx=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -tay -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuz2 -ldx {z1} -sec -lda {c1},x -sbc {z2} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuxx -ldy {z1} -stx $ff -sec -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1},y -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuyy -tya -ldy {z1} -clc -sbc {c1},y -eor #$ff -sta {c1},y -bcc !+ -lda {c1}+1,y -sbc #$01 -sta {c1}+1,y -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuz1 -tax -sec -lda {c1},x -sbc {z1} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuxx -sec -stx $ff -tax -lda {c1},x -sbc $ff -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuyy -sec -sty $ff -tay -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #$00 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuz1 -sec -lda {c1},x -sbc {z1} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuxx -txa -clc -sbc {c1},x -eor #$ff -sta {c1},x -bcc !+ -lda {c1}+1,x -sbc #$01 -sta {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuyy -tya -clc -sbc {c1},x -eor #$ff -sta {c1},x -bcc !+ -lda {c1}+1,x -sbc #$01 -sta {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuz1 -sec -lda {c1},y -sbc {z1} -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuxx -stx $ff -sec -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1},y -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuyy -tya -clc -sbc {c1},y -eor #$ff -sta {c1},y -bcc !+ -lda {c1}+1,y -sbc #$01 -sta {c1}+1,y -!: -//FRAGMENT vbuz1=_deref_pbuz2_ror_4 -ldy #0 -lda ({z2}),y -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tay -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -sta {c1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuc2 -ldy {z1} -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_vwuc2 -tay -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuc2 -clc -lda {c1},x -adc #<{c2} -sta {c1},x -lda {c1}+1,x -adc #>{c2} -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwuc2 -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT vwsz1=_deref_pwsz2_minus__deref_pwsz3 -ldy #0 -sec -lda ({z2}),y -sbc ({z3}),y -sta {z1} -iny -lda ({z2}),y -sbc ({z3}),y -sta {z1}+1 -//FRAGMENT vduz1=vduz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT _deref_(_deref_qbuc1)=vbuc2 -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)=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 vwsz1=vwsz2_minus_vwsc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsz2 -lda {z2} -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_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 vwsz1=vwsz2_ror_6 -lda {z2} -sta $ff -lda {z2}+1 -sta {z1} -lda #0 -bit {z2}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=_deref_pwsc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsaa -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsxx -txa -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsyy -tya -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_minus_vwsz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_6 -lda {z1} -sta $ff -lda {z1}+1 -sta {z1} -lda #0 -bit {z1}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz1_rol_3 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbsz1_le_vbsc1_then_la1 -lda #{c1} -sec -sbc {z1} -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbsaa_le_vbsc1_then_la1 -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsxx_le_vbsc1_then_la1 -txa -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsyy_le_vbsc1_then_la1 -tya -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1=vbsz2_plus_vwsc1 -lda {z2} -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsaa_plus_vwsc1 -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsxx_plus_vwsc1 -txa -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsyy_plus_vwsc1 -tya -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuaa_gt_vbuz1_then_la1 -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_0_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT qbuc1_derefidx_vbuaa=pbuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -lda {c2}+1,x -sta {c1}+1,x -lda {c2}+2,x -sta {c1}+2,x -lda {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuxx_eq_0_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_0_then_la1 -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 -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc1_derefidx_vbuxx_plus_pduc2_derefidx_vbuxx -clc -lda {c1},x -adc {c2},x -sta {c1},x -lda {c1}+1,x -adc {c2}+1,x -sta {c1}+1,x -lda {c1}+2,x -adc {c2}+2,x -sta {c1}+2,x -lda {c1}+3,x -adc {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc1_derefidx_vbuyy_plus_pduc2_derefidx_vbuyy -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1=_dec_pbuz2 -lda {z2} -sec -sbc #1 -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vduz1_eq_vduz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1}+2 -cmp {z2}+2 -bne !+ -lda {z1}+3 -cmp {z2}+3 -beq {la1} -!: -//FRAGMENT vdsz1_eq_vdsz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1}+2 -cmp {z2}+2 -bne !+ -lda {z1}+3 -cmp {z2}+3 -beq {la1} -!: -//FRAGMENT vdsz1=vdsz1_plus_vwsz2 -lda {z2}+1 -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc $ff -sta {z1}+2 -lda {z1}+3 -adc $ff -sta {z1}+3 -//FRAGMENT vdsz1=vdsz1_minus_vwsz2 -lda {z2}+1 -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -lda {z1}+2 -sbc $ff -sta {z1}+2 -lda {z1}+3 -sbc $ff -sta {z1}+3 -//FRAGMENT vwsz1=_dec_vwsz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT vwsz1_lt_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwsz1_lt_vwuc1_then_la1 -lda {z1}+1 -bmi {la1} -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 -ldy {z2} -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_rol_4 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbsc1_derefidx_vbuz1=vbsc2 -lda #{c2} -ldy {z1} -sta {c1},y -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_minus_pwsc2_derefidx_vbuaa -tay -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_minus_pwsc2_derefidx_vbuxx -sec -lda {c1},x -sbc {c2},x -sta {z1} -lda {c1}+1,x -sbc {c2}+1,x -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_minus_pwsc2_derefidx_vbuyy -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa_rol_4 -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_rol_4 -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_rol_4 -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbsc1_derefidx_vbuxx=vbsc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsc2 -lda #{c2} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuz1=vbsaa -ldy {z1} -sta {c1},y -//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vwuc2 -lda #<{c2} -clc -adc {c1} -sta {c1} -lda #>{c2} -adc {c1}+1 -sta {c1}+1 -//FRAGMENT vbuz1=vbuz2_plus__deref_pbuc1 -lda {c1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -//FRAGMENT vbuxx=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -tay -//FRAGMENT vbuz1=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -//FRAGMENT vbuxx=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -tay -//FRAGMENT vbuz1=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -//FRAGMENT vbuxx=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuyy_plus__deref_pbuc1 -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 -ldy #0 -lda {c1},x -adc ({z3}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z3}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz2 -tax -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_plus__deref_pwsz2 -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_plus__deref_pwsz2 -tya -tax -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz1 -tax -clc -ldy #0 -lda {c1},x -adc ({z1}),y -pha -iny -lda {c1}+1,x -adc ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=vwuz2_rol_5 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_5 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT vbuaa_le_vbuyy_then_la1 -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuxx_ge_vbuaa_then_la1 -tay -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuyy_ge_vbuaa_then_la1 -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuz2_derefidx_vbuc2 -ldx {z1} -ldy #{c2} -lda ({z2}),y -sta {c1},x -iny -lda ({z2}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuaa=pwuz1_derefidx_vbuc2 -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=pwuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuz1_derefidx_vbuc2 -tya -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT vbsaa=vbsc1 -lda #{c1} -//FRAGMENT vbsc1_neq_vbsyy_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbum1=vbum2 -lda {m2} -sta {m1} -//FRAGMENT vbum1=vbum1_plus_vbuc1 -lax {m1} -axs #-[{c1}] -stx {m1} -//FRAGMENT pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 -ldy {m2} -lda {c2},y -ldy {m1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_bor_vbuc2 -lda #{c2} -ldy {z1} -ora {c1},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_bor_vbuc2 -lda #{c2} -ora {c1},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_bor_vbuc2 -lda #{c2} -ora {c1},y -sta {c1},y diff --git a/src/main/fragment/mos6502-common/vwsm1=vbsaa.asm b/src/main/fragment/mos6502-common/vwsm1=vbsaa.asm new file mode 100644 index 000000000..a248a7946 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vbsaa.asm @@ -0,0 +1,6 @@ +sta {m1} +ora #$7f +bmi !+ +lda #0 +!: +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwsm1=vbsc1.asm b/src/main/fragment/mos6502-common/vwsm1=vbsc1.asm new file mode 100644 index 000000000..f77bf0af2 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vbsc1.asm @@ -0,0 +1,4 @@ +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 \ 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 4d07dc313..0967b574c 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java @@ -818,15 +818,25 @@ class AsmFragmentTemplateSynthesisRule { synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*c1.*)", rvalAa, "lda {c1},x", "vb$1aa_$2_$3", null, null)); // Use unsigned ASM to synthesize signed ASM ( ...vbs... -> ...vbu... ) - synths.add(new AsmFragmentTemplateSynthesisRule("(v.s..)_(eq|neq)_(v.s..)_then_(.*)", null, null, "$1_$2_$3_then_$4", null, mapSToU)); - synths.add(new AsmFragmentTemplateSynthesisRule("(v.s..)=(v.s..)", null, null, "$1=$2", null, mapSToU)); - synths.add(new AsmFragmentTemplateSynthesisRule("(v.s..)=(v.s..)_(band|bxor|bor)_(v.s..)", null, null, "$1=$2_$3_$4", null, mapSToU)); - synths.add(new AsmFragmentTemplateSynthesisRule("(v.s..)=(p.s..)_derefidx_(vbu..)", null, null, "$1=$2_derefidx_$3", null, mapSToU)); - synths.add(new AsmFragmentTemplateSynthesisRule("(v.s..)=_(inc|dec)_(v.s..)", null, null, "$1=_$2_$3", null, mapSToU)); - synths.add(new AsmFragmentTemplateSynthesisRule("(vbuz.|vbuaa|vbuxx|vbuyy)=_(lo|hi)_vws(z.|c.|m.)", null, null, "$1=_$2_vwu$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)=(vbs..)", null, null, "$1=$2", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)=(vws..)", null, null, "$1=$2", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)=(vds..)", null, null, "$1=$2", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)_(eq|neq)_(vbs..)_then_(.*)", null, null, "$1_$2_$3_then_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)_(eq|neq)_(vws..)_then_(.*)", null, null, "$1_$2_$3_then_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)_(eq|neq)_(vds..)_then_(.*)", null, null, "$1_$2_$3_then_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)=(vbs..)_(band|bxor|bor)_(v.s..)", null, null, "$1=$2_$3_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)=(vws..)_(band|bxor|bor)_(v.s..)", null, null, "$1=$2_$3_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)=(vds..)_(band|bxor|bor)_(v.s..)", null, null, "$1=$2_$3_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)=(pbs..)_derefidx_(vbu..)", null, null, "$1=$2_derefidx_$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)=(pws..)_derefidx_(vbu..)", null, null, "$1=$2_derefidx_$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)=(pds..)_derefidx_(vbu..)", null, null, "$1=$2_derefidx_$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)=_(inc|dec)_(vbs..)", null, null, "$1=_$2_$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)=_(inc|dec)_(vws..)", null, null, "$1=_$2_$3", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)=_(inc|dec)_(vds..)", null, null, "$1=_$2_$3", null, mapSToU)); synths.add(new AsmFragmentTemplateSynthesisRule("(vb[su]..)=(vb[su]..)_(plus|minus)_(vb[su]..)", null, null, "$1=$2_$3_$4", null, mapSToU)); synths.add(new AsmFragmentTemplateSynthesisRule("(vw[su]..)=(vw[su]..)_(plus|minus)_(vw[su]..)", null, null, "$1=$2_$3_$4", null, mapSToU)); synths.add(new AsmFragmentTemplateSynthesisRule("(vd[su]..)=(vd[su]..)_(plus|minus)_(vd[su]..)", null, null, "$1=$2_$3_$4", null, mapSToU)); + synths.add(new AsmFragmentTemplateSynthesisRule("(vbu..)=_(lo|hi)_vws(z.|c.|m.)", null, null, "$1=_$2_vwu$3", null, mapSToU)); // Use Z1/Z2 ASM to synthesize Z1-only code ( ...z1...z1... -> ...z1...z2... ) synths.add(new AsmFragmentTemplateSynthesisRule("(v..[zm])1=(v..[zm])1_(plus|minus|band|bxor|bor)_(.*)", oneZM2, null, "$11=$22_$3_$4", null, mapZM1, false)); diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 16f644a36..9f811e7db 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -42,6 +42,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testCastingNegative() throws IOException, URISyntaxException { + compileAndCompare("casting-negative.c"); + } + @Test public void testForEver2() throws IOException, URISyntaxException { compileAndCompare("for-ever-2.c"); @@ -188,12 +193,12 @@ public class TestPrograms { } @Test - public void testPolygon() throws IOException, URISyntaxException { + public void testXyScroller() throws IOException, URISyntaxException { compileAndCompare("complex/xy-scroller/xy-scroller.c"); } @Test - public void testXyScroller() throws IOException, URISyntaxException { + public void testPolygon() throws IOException, URISyntaxException { compileAndCompare("complex/polygon/polygon.c"); } diff --git a/src/test/kc/casting-negative.c b/src/test/kc/casting-negative.c new file mode 100644 index 000000000..a860a63e5 --- /dev/null +++ b/src/test/kc/casting-negative.c @@ -0,0 +1,19 @@ +// Demonstrates problem with Casting of negative signed values +// https://gitlab.com/camelot/kickc/-/issues/496 + +#include +#include + +void test_casting(signed short signed_short_value) { + printf("%d\n", signed_short_value); +} + +void main() { + clrscr(); + signed char signed_char_value = -5; + while (signed_char_value != 0) { + ++signed_char_value; + test_casting(signed_char_value); + //printf("%d\n", (signed short)signed_char_value); + } +} diff --git a/src/test/ref/casting-negative.asm b/src/test/ref/casting-negative.asm new file mode 100644 index 000000000..925d4b9a1 --- /dev/null +++ b/src/test/ref/casting-negative.asm @@ -0,0 +1,552 @@ +// Demonstrates problem with Casting of negative signed values +// https://gitlab.com/camelot/kickc/-/issues/496 +.pc = $801 "Basic" +:BasicUpstart(__start) +.pc = $80d "Program" + .const LIGHT_BLUE = $e + .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c + // Color Ram + .label COLORRAM = $d800 + // Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $a + // The current cursor y-position + .label conio_cursor_y = $b + // The current text cursor line start + .label conio_line_text = $c + // The current color cursor line start + .label conio_line_color = $e +__start: { + // conio_cursor_x = 0 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y = 0 + sta.z conio_cursor_y + // conio_line_text = CONIO_SCREEN_TEXT + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // conio_line_color = CONIO_SCREEN_COLORS + lda #COLORRAM + sta.z conio_line_color+1 + jsr main + rts +} +main: { + .label signed_char_value = 2 + // clrscr() + jsr clrscr + lda #-5 + sta.z signed_char_value + __b1: + // while (signed_char_value != 0) + lda.z signed_char_value + cmp #0 + bne __b2 + // } + rts + __b2: + // ++signed_char_value; + inc.z signed_char_value + // test_casting(signed_char_value) + lda.z signed_char_value + sta.z test_casting.signed_short_value + ora #$7f + bmi !+ + lda #0 + !: + sta.z test_casting.signed_short_value+1 + jsr test_casting + jmp __b1 +} +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 3 + .label line_cols = 5 + lda #COLORRAM + sta.z line_cols+1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + ldx #0 + __b1: + // for( char l=0;lDEFAULT_SCREEN + sta.z conio_line_text+1 + // conio_line_color = CONIO_SCREEN_COLORS + lda #COLORRAM + sta.z conio_line_color+1 + // } + rts + __b2: + ldy #0 + __b3: + // for( char c=0;cs + sta.z cputs.s+1 + jsr cputs + // } + rts + s: .text @"\n" + .byte 0 +} +// Print a signed integer using a specific format +// printf_sint(signed word zp(3) value) +printf_sint: { + .label value = 3 + // printf_buffer.sign = 0 + // Handle any sign + lda #0 + sta printf_buffer + // if(value<0) + lda.z value+1 + bmi __b1 + jmp __b2 + __b1: + // value = -value + sec + lda #0 + sbc.z value + sta.z value + lda #0 + sbc.z value+1 + sta.z value+1 + // printf_buffer.sign = '-' + lda #'-' + sta printf_buffer + __b2: + // utoa(uvalue, printf_buffer.digits, format.radix) + jsr utoa + // printf_number_buffer(printf_buffer, format) + lda printf_buffer + // Print using format + jsr printf_number_buffer + // } + rts +} +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(5) s) +cputs: { + .label s = 5 + __b1: + // while(c=*s++) + ldy #0 + lda (s),y + inc.z s + bne !+ + inc.z s+1 + !: + cmp #0 + bne __b2 + // } + rts + __b2: + // cputc(c) + jsr cputc + jmp __b1 +} +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// utoa(word zp(3) value, byte* zp($12) buffer) +utoa: { + .const max_digits = 5 + .label digit_value = $10 + .label buffer = $12 + .label digit = 7 + .label value = 3 + lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + sta.z buffer+1 + ldx #0 + txa + sta.z digit + __b1: + // for( char digit=0; digit= digit_value) + cpx #0 + bne __b5 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + __b4: + // for( char digit=0; digitbuffer_digits + sta.z cputs.s+1 + jsr cputs + // } + rts +} +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// cputc(byte register(A) c) +cputc: { + // if(c=='\n') + cmp #'\n' + beq __b1 + // conio_line_text[conio_cursor_x] = c + ldy.z conio_cursor_x + sta (conio_line_text),y + // conio_line_color[conio_cursor_x] = conio_textcolor + lda #LIGHT_BLUE + sta (conio_line_color),y + // if(++conio_cursor_x==CONIO_WIDTH) + inc.z conio_cursor_x + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // cputln() + jsr cputln + __breturn: + // } + rts + __b1: + // cputln() + jsr cputln + rts +} +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// utoa_append(byte* zp($12) buffer, word zp(3) value, word zp($10) sub) +utoa_append: { + .label buffer = $12 + .label value = 3 + .label sub = $10 + .label return = 3 + ldx #0 + __b1: + // while (value >= sub) + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + // *buffer = DIGITS[digit] + lda DIGITS,x + ldy #0 + sta (buffer),y + // } + rts + __b2: + // digit++; + inx + // value -= sub + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + jmp __b1 +} +// Print a newline +cputln: { + // conio_line_text += CONIO_WIDTH + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // conio_line_color += CONIO_WIDTH + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // conio_cursor_x = 0 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y++; + inc.z conio_cursor_y + // cscroll() + jsr cscroll + // } + rts +} +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // if(conio_cursor_y==CONIO_HEIGHT) + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + lda #COLORRAM + sta.z memcpy.destination+1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) + ldx #' ' + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) + ldx #LIGHT_BLUE + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // conio_line_text -= CONIO_WIDTH + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // conio_line_color -= CONIO_WIDTH + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // conio_cursor_y--; + dec.z conio_cursor_y + __breturn: + // } + rts +} +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// memcpy(void* zp(8) destination, void* zp($12) source) +memcpy: { + .label src_end = $10 + .label dst = 8 + .label src = $12 + .label source = $12 + .label destination = 8 + // src_end = (char*)source+num + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + __b1: + // while(src!=src_end) + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + // } + rts + __b2: + // *dst++ = *src++ + ldy #0 + lda (src),y + sta (dst),y + // *dst++ = *src++; + inc.z dst + bne !+ + inc.z dst+1 + !: + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1 +} +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zp(8) str, byte register(X) c) +memset: { + .label end = $12 + .label dst = 8 + .label str = 8 + // end = (char*)str + num + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + __b2: + // for(char* dst = str; dst!=end; dst++) + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // } + rts + __b3: + // *dst = c + txa + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // Buffer used for stringified number being printed + printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 diff --git a/src/test/ref/casting-negative.cfg b/src/test/ref/casting-negative.cfg new file mode 100644 index 000000000..5e3077113 --- /dev/null +++ b/src/test/ref/casting-negative.cfg @@ -0,0 +1,316 @@ + +(void()) __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] (byte) conio_cursor_x ← (byte) 0 + [2] (byte) conio_cursor_y ← (byte) 0 + [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN + [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [5] phi() + [6] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [7] return + to:@return + +(void()) main() +main: scope:[main] from __start::@1 + [8] phi() + [9] call clrscr + to:main::@1 +main::@1: scope:[main] from main main::@2 + [10] (signed byte) main::signed_char_value#2 ← phi( main/(signed byte) -5 main::@2/(signed byte) main::signed_char_value#1 ) + [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [12] return + to:@return +main::@2: scope:[main] from main::@1 + [13] (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#2 + [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 + [15] call test_casting + to:main::@1 + +(void()) clrscr() +clrscr: scope:[clrscr] from main + [16] phi() + to:clrscr::@1 +clrscr::@1: scope:[clrscr] from clrscr clrscr::@5 + [17] (byte*) clrscr::line_cols#5 ← phi( clrscr/(const nomodify byte*) COLORRAM clrscr::@5/(byte*) clrscr::line_cols#1 ) + [17] (byte*) clrscr::line_text#5 ← phi( clrscr/(const nomodify byte*) DEFAULT_SCREEN clrscr::@5/(byte*) clrscr::line_text#1 ) + [17] (byte) clrscr::l#2 ← phi( clrscr/(byte) 0 clrscr::@5/(byte) clrscr::l#1 ) + [18] if((byte) clrscr::l#2<(byte) $19) goto clrscr::@3 + to:clrscr::@2 +clrscr::@2: scope:[clrscr] from clrscr::@1 + [19] (byte) conio_cursor_x ← (byte) 0 + [20] (byte) conio_cursor_y ← (byte) 0 + [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN + [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM + to:clrscr::@return +clrscr::@return: scope:[clrscr] from clrscr::@2 + [23] return + to:@return +clrscr::@3: scope:[clrscr] from clrscr::@1 clrscr::@4 + [24] (byte) clrscr::c#2 ← phi( clrscr::@1/(byte) 0 clrscr::@4/(byte) clrscr::c#1 ) + [25] if((byte) clrscr::c#2<(byte) $28) goto clrscr::@4 + to:clrscr::@5 +clrscr::@5: scope:[clrscr] from clrscr::@3 + [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 + [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 + [28] (byte) clrscr::l#1 ← ++ (byte) clrscr::l#2 + to:clrscr::@1 +clrscr::@4: scope:[clrscr] from clrscr::@3 + [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' + [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE + [31] (byte) clrscr::c#1 ← ++ (byte) clrscr::c#2 + to:clrscr::@3 + +(void()) test_casting((signed word) test_casting::signed_short_value) +test_casting: scope:[test_casting] from main::@2 + [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 + [33] call printf_sint + to:test_casting::@1 +test_casting::@1: scope:[test_casting] from test_casting + [34] phi() + [35] call cputs + to:test_casting::@return +test_casting::@return: scope:[test_casting] from test_casting::@1 + [36] return + to:@return + +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +printf_sint: scope:[printf_sint] from test_casting + [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 + to:printf_sint::@2 +printf_sint::@1: scope:[printf_sint] from printf_sint + [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 + [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' + to:printf_sint::@2 +printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1 + [41] (signed word) printf_sint::value#4 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint/(signed word) printf_sint::value#1 ) + [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 + [43] call utoa + to:printf_sint::@3 +printf_sint::@3: scope:[printf_sint] from printf_sint::@2 + [44] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [45] call printf_number_buffer + to:printf_sint::@return +printf_sint::@return: scope:[printf_sint] from printf_sint::@3 + [46] return + to:@return + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from printf_number_buffer::@2 test_casting::@1 + [47] (to_nomodify byte*) cputs::s#4 ← phi( printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 test_casting::@1/(const byte*) test_casting::s ) + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [48] (to_nomodify byte*) cputs::s#3 ← phi( cputs/(to_nomodify byte*) cputs::s#4 cputs::@2/(to_nomodify byte*) cputs::s#0 ) + [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) + [50] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 + [51] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [52] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [53] (byte) cputc::c#0 ← (byte) cputs::c#1 + [54] call cputc + to:cputs::@1 + +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +utoa: scope:[utoa] from printf_sint::@2 + [55] phi() + to:utoa::@1 +utoa::@1: scope:[utoa] from utoa utoa::@4 + [56] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [56] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) + [56] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 ) + [56] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) + [57] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + to:utoa::@3 +utoa::@3: scope:[utoa] from utoa::@1 + [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 + [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) + [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [61] *((byte*) utoa::buffer#3) ← (byte) 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@3 + [62] return + to:@return +utoa::@2: scope:[utoa] from utoa::@1 + [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 + [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) + [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + to:utoa::@7 +utoa::@7: scope:[utoa] from utoa::@2 + [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 + to:utoa::@4 +utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 + [67] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) + [67] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) + [67] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) + [68] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + to:utoa::@1 +utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 + [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + [70] (word) utoa_append::value#0 ← (word) utoa::value#2 + [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + [72] call utoa_append + [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + to:utoa::@6 +utoa::@6: scope:[utoa] from utoa::@5 + [74] (word) utoa::value#0 ← (word) utoa_append::return#0 + [75] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + to:utoa::@4 + +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3 + [76] phi() + to:printf_number_buffer::@1 +printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer + [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 + to:printf_number_buffer::@3 +printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1 + [78] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 + [79] call cputc + to:printf_number_buffer::@2 +printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3 + [80] phi() + [81] call cputs + to:printf_number_buffer::@return +printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2 + [82] return + to:@return + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@3 + [83] (byte) cputc::c#3 ← phi( cputs::@2/(byte) cputc::c#0 printf_number_buffer::@3/(byte) cputc::c#2 ) + [84] if((byte) cputc::c#3==(byte) ' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 + [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE + [87] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x + [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [89] phi() + [90] call cputln + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 + [91] return + to:@return +cputc::@1: scope:[cputc] from cputc + [92] phi() + [93] call cputln + to:cputc::@return + +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +utoa_append: scope:[utoa_append] from utoa::@5 + [94] phi() + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + [95] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [95] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + [98] return + to:@return +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + [99] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + to:utoa_append::@1 + +(void()) cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 + [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 + [103] (byte) conio_cursor_x ← (byte) 0 + [104] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y + [105] call cscroll + to:cputln::@return +cputln::@return: scope:[cputln] from cputln + [106] return + to:@return + +(void()) cscroll() +cscroll: scope:[cscroll] from cputln + [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return + to:cscroll::@1 +cscroll::@1: scope:[cscroll] from cscroll + [108] phi() + [109] call memcpy + to:cscroll::@2 +cscroll::@2: scope:[cscroll] from cscroll::@1 + [110] phi() + [111] call memcpy + to:cscroll::@3 +cscroll::@3: scope:[cscroll] from cscroll::@2 + [112] phi() + [113] call memset + to:cscroll::@4 +cscroll::@4: scope:[cscroll] from cscroll::@3 + [114] phi() + [115] call memset + to:cscroll::@5 +cscroll::@5: scope:[cscroll] from cscroll::@4 + [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 + [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 + [118] (byte) conio_cursor_y ← -- (byte) conio_cursor_y + to:cscroll::@return +cscroll::@return: scope:[cscroll] from cscroll cscroll::@5 + [119] return + to:@return + +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +memcpy: scope:[memcpy] from cscroll::@1 cscroll::@2 + [120] (void*) memcpy::destination#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) DEFAULT_SCREEN cscroll::@2/(void*)(const nomodify byte*) COLORRAM ) + [120] (void*) memcpy::source#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 cscroll::@2/(void*)(const nomodify byte*) COLORRAM+(byte) $28 ) + [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 + [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 + [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 + to:memcpy::@1 +memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 + [124] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*) memcpy::dst#4 memcpy::@2/(byte*) memcpy::dst#1 ) + [124] (byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#4 memcpy::@2/(byte*) memcpy::src#1 ) + [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 + to:memcpy::@return +memcpy::@return: scope:[memcpy] from memcpy::@1 + [126] return + to:@return +memcpy::@2: scope:[memcpy] from memcpy::@1 + [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) + [128] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 + [129] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 + to:memcpy::@1 + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from cscroll::@3 cscroll::@4 + [130] (byte) memset::c#4 ← phi( cscroll::@3/(byte) ' ' cscroll::@4/(const nomodify byte) LIGHT_BLUE ) + [130] (void*) memset::str#3 ← phi( cscroll::@3/(void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 cscroll::@4/(void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 ) + to:memset::@1 +memset::@1: scope:[memset] from memset + [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 + [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [133] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + to:memset::@return +memset::@return: scope:[memset] from memset::@2 + [135] return + to:@return +memset::@3: scope:[memset] from memset::@2 + [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [137] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log new file mode 100644 index 000000000..9ed792295 --- /dev/null +++ b/src/test/ref/casting-negative.log @@ -0,0 +1,6798 @@ +Fixing struct type size struct printf_buffer_number to 12 +Fixing struct type size struct printf_buffer_number to 12 +Fixing struct type SIZE_OF struct printf_buffer_number to 12 +Fixing struct type SIZE_OF struct printf_buffer_number to 12 +Added struct type cast to parameter value list call printf_sint (signed word) test_casting::signed_short_value (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call call __init +Eliminating unused variable with no statement (void~) test_casting::$0 + +CONTROL FLOW GRAPH SSA + +(byte()) toupper((byte) toupper::ch) +toupper: scope:[toupper] from strupr::@2 + (byte) toupper::ch#1 ← phi( strupr::@2/(byte) toupper::ch#0 ) + (bool~) toupper::$0 ← (byte) toupper::ch#1 >= (byte) 'a' + (bool~) toupper::$1 ← (byte) toupper::ch#1 <= (byte) 'z' + (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1 + if((bool~) toupper::$2) goto toupper::@1 + to:toupper::@2 +toupper::@1: scope:[toupper] from toupper + (byte) toupper::ch#2 ← phi( toupper/(byte) toupper::ch#1 ) + (byte~) toupper::$3 ← (byte) toupper::ch#2 + (byte) 'A'-(byte) 'a' + (byte) toupper::return#0 ← (byte~) toupper::$3 + to:toupper::@return +toupper::@2: scope:[toupper] from toupper + (byte) toupper::ch#3 ← phi( toupper/(byte) toupper::ch#1 ) + (byte) toupper::return#1 ← (byte) toupper::ch#3 + to:toupper::@return +toupper::@return: scope:[toupper] from toupper::@1 toupper::@2 + (byte) toupper::return#4 ← phi( toupper::@1/(byte) toupper::return#0 toupper::@2/(byte) toupper::return#1 ) + (byte) toupper::return#2 ← (byte) toupper::return#4 + return + to:@return + +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +memcpy: scope:[memcpy] from cscroll::@3 cscroll::@4 + (word) memcpy::num#2 ← phi( cscroll::@3/(word) memcpy::num#0 cscroll::@4/(word) memcpy::num#1 ) + (void*) memcpy::destination#2 ← phi( cscroll::@3/(void*) memcpy::destination#0 cscroll::@4/(void*) memcpy::destination#1 ) + (void*) memcpy::source#2 ← phi( cscroll::@3/(void*) memcpy::source#0 cscroll::@4/(void*) memcpy::source#1 ) + (byte*) memcpy::src#0 ← ((byte*)) (void*) memcpy::source#2 + (byte*) memcpy::dst#0 ← ((byte*)) (void*) memcpy::destination#2 + (byte*~) memcpy::$2 ← (byte*)(void*) memcpy::source#2 + (byte*~) memcpy::$0 ← (byte*~) memcpy::$2 + (word) memcpy::num#2 + (byte*) memcpy::src_end#0 ← (byte*~) memcpy::$0 + to:memcpy::@1 +memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 + (void*) memcpy::destination#4 ← phi( memcpy/(void*) memcpy::destination#2 memcpy::@2/(void*) memcpy::destination#5 ) + (byte*) memcpy::dst#3 ← phi( memcpy/(byte*) memcpy::dst#0 memcpy::@2/(byte*) memcpy::dst#1 ) + (byte*) memcpy::src_end#1 ← phi( memcpy/(byte*) memcpy::src_end#0 memcpy::@2/(byte*) memcpy::src_end#2 ) + (byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#0 memcpy::@2/(byte*) memcpy::src#1 ) + (bool~) memcpy::$1 ← (byte*) memcpy::src#2 != (byte*) memcpy::src_end#1 + if((bool~) memcpy::$1) goto memcpy::@2 + to:memcpy::@3 +memcpy::@2: scope:[memcpy] from memcpy::@1 + (void*) memcpy::destination#5 ← phi( memcpy::@1/(void*) memcpy::destination#4 ) + (byte*) memcpy::src_end#2 ← phi( memcpy::@1/(byte*) memcpy::src_end#1 ) + (byte*) memcpy::dst#2 ← phi( memcpy::@1/(byte*) memcpy::dst#3 ) + (byte*) memcpy::src#3 ← phi( memcpy::@1/(byte*) memcpy::src#2 ) + *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#3) + (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 + (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#3 + to:memcpy::@1 +memcpy::@3: scope:[memcpy] from memcpy::@1 + (void*) memcpy::destination#3 ← phi( memcpy::@1/(void*) memcpy::destination#4 ) + (void*) memcpy::return#0 ← (void*) memcpy::destination#3 + to:memcpy::@return +memcpy::@return: scope:[memcpy] from memcpy::@3 + (void*) memcpy::return#4 ← phi( memcpy::@3/(void*) memcpy::return#0 ) + (void*) memcpy::return#1 ← (void*) memcpy::return#4 + return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from cscroll::@5 cscroll::@6 + (byte) memset::c#5 ← phi( cscroll::@5/(byte) memset::c#0 cscroll::@6/(byte) memset::c#1 ) + (void*) memset::str#4 ← phi( cscroll::@5/(void*) memset::str#0 cscroll::@6/(void*) memset::str#1 ) + (word) memset::num#2 ← phi( cscroll::@5/(word) memset::num#0 cscroll::@6/(word) memset::num#1 ) + (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 + (bool~) memset::$1 ← ! (bool~) memset::$0 + if((bool~) memset::$1) goto memset::@1 + to:memset::@2 +memset::@1: scope:[memset] from memset memset::@3 + (void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@3/(void*) memset::str#5 ) + (void*) memset::return#0 ← (void*) memset::str#2 + to:memset::@return +memset::@2: scope:[memset] from memset + (byte) memset::c#4 ← phi( memset/(byte) memset::c#5 ) + (word) memset::num#3 ← phi( memset/(word) memset::num#2 ) + (void*) memset::str#3 ← phi( memset/(void*) memset::str#4 ) + (byte*~) memset::$4 ← (byte*)(void*) memset::str#3 + (byte*~) memset::$2 ← (byte*~) memset::$4 + (word) memset::num#3 + (byte*) memset::end#0 ← (byte*~) memset::$2 + (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#3 + to:memset::@3 +memset::@3: scope:[memset] from memset::@2 memset::@4 + (byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@4/(byte) memset::c#2 ) + (void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@4/(void*) memset::str#6 ) + (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#2 ) + (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 ) + (bool~) memset::$3 ← (byte*) memset::dst#2 != (byte*) memset::end#1 + if((bool~) memset::$3) goto memset::@4 + to:memset::@1 +memset::@4: scope:[memset] from memset::@3 + (void*) memset::str#6 ← phi( memset::@3/(void*) memset::str#5 ) + (byte*) memset::end#2 ← phi( memset::@3/(byte*) memset::end#1 ) + (byte*) memset::dst#3 ← phi( memset::@3/(byte*) memset::dst#2 ) + (byte) memset::c#2 ← phi( memset::@3/(byte) memset::c#3 ) + *((byte*) memset::dst#3) ← (byte) memset::c#2 + (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3 + to:memset::@3 +memset::@return: scope:[memset] from memset::@1 + (void*) memset::return#4 ← phi( memset::@1/(void*) memset::return#0 ) + (void*) memset::return#1 ← (void*) memset::return#4 + return + to:@return + +(byte*()) strupr((byte*) strupr::str) +strupr: scope:[strupr] from printf_number_buffer::@11 + (byte*) strupr::str#1 ← phi( printf_number_buffer::@11/(byte*) strupr::str#0 ) + (byte*) strupr::src#0 ← (byte*) strupr::str#1 + to:strupr::@1 +strupr::@1: scope:[strupr] from strupr strupr::@4 + (byte*) strupr::str#3 ← phi( strupr/(byte*) strupr::str#1 strupr::@4/(byte*) strupr::str#4 ) + (byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::src#0 strupr::@4/(byte*) strupr::src#1 ) + (bool~) strupr::$1 ← (number) 0 != *((byte*) strupr::src#2) + if((bool~) strupr::$1) goto strupr::@2 + to:strupr::@3 +strupr::@2: scope:[strupr] from strupr::@1 + (byte*) strupr::str#5 ← phi( strupr::@1/(byte*) strupr::str#3 ) + (byte*) strupr::src#3 ← phi( strupr::@1/(byte*) strupr::src#2 ) + (byte) toupper::ch#0 ← *((byte*) strupr::src#3) + call toupper + (byte) toupper::return#3 ← (byte) toupper::return#2 + to:strupr::@4 +strupr::@4: scope:[strupr] from strupr::@2 + (byte*) strupr::str#4 ← phi( strupr::@2/(byte*) strupr::str#5 ) + (byte*) strupr::src#4 ← phi( strupr::@2/(byte*) strupr::src#3 ) + (byte) toupper::return#5 ← phi( strupr::@2/(byte) toupper::return#3 ) + (byte~) strupr::$0 ← (byte) toupper::return#5 + *((byte*) strupr::src#4) ← (byte~) strupr::$0 + (byte*) strupr::src#1 ← ++ (byte*) strupr::src#4 + to:strupr::@1 +strupr::@3: scope:[strupr] from strupr::@1 + (byte*) strupr::str#2 ← phi( strupr::@1/(byte*) strupr::str#3 ) + (byte*) strupr::return#0 ← (byte*) strupr::str#2 + to:strupr::@return +strupr::@return: scope:[strupr] from strupr::@3 + (byte*) strupr::return#3 ← phi( strupr::@3/(byte*) strupr::return#0 ) + (byte*) strupr::return#1 ← (byte*) strupr::return#3 + return + to:@return + +(word()) strlen((byte*) strlen::str) +strlen: scope:[strlen] from printf_number_buffer::@6 + (byte*) strlen::str#4 ← phi( printf_number_buffer::@6/(byte*) strlen::str#1 ) + (word) strlen::len#0 ← (word) 0 + to:strlen::@1 +strlen::@1: scope:[strlen] from strlen strlen::@2 + (word) strlen::len#4 ← phi( strlen/(word) strlen::len#0 strlen::@2/(word) strlen::len#1 ) + (byte*) strlen::str#2 ← phi( strlen/(byte*) strlen::str#4 strlen::@2/(byte*) strlen::str#0 ) + (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2) + if((bool~) strlen::$0) goto strlen::@2 + to:strlen::@3 +strlen::@2: scope:[strlen] from strlen::@1 + (byte*) strlen::str#3 ← phi( strlen::@1/(byte*) strlen::str#2 ) + (word) strlen::len#2 ← phi( strlen::@1/(word) strlen::len#4 ) + (word) strlen::len#1 ← ++ (word) strlen::len#2 + (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 + to:strlen::@1 +strlen::@3: scope:[strlen] from strlen::@1 + (word) strlen::len#3 ← phi( strlen::@1/(word) strlen::len#4 ) + (word) strlen::return#0 ← (word) strlen::len#3 + to:strlen::@return +strlen::@return: scope:[strlen] from strlen::@3 + (word) strlen::return#3 ← phi( strlen::@3/(word) strlen::return#0 ) + (word) strlen::return#1 ← (word) strlen::return#3 + return + to:@return + +(void()) clrscr() +clrscr: scope:[clrscr] from main + (byte*) clrscr::line_text#0 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (byte*) clrscr::line_cols#0 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (byte) clrscr::l#0 ← (byte) 0 + to:clrscr::@1 +clrscr::@1: scope:[clrscr] from clrscr clrscr::@6 + (byte*) clrscr::line_cols#6 ← phi( clrscr/(byte*) clrscr::line_cols#0 clrscr::@6/(byte*) clrscr::line_cols#1 ) + (byte*) clrscr::line_text#6 ← phi( clrscr/(byte*) clrscr::line_text#0 clrscr::@6/(byte*) clrscr::line_text#1 ) + (byte) clrscr::l#2 ← phi( clrscr/(byte) clrscr::l#0 clrscr::@6/(byte) clrscr::l#1 ) + (bool~) clrscr::$0 ← (byte) clrscr::l#2 < (number) $19 + if((bool~) clrscr::$0) goto clrscr::@2 + to:clrscr::@3 +clrscr::@2: scope:[clrscr] from clrscr::@1 + (byte) clrscr::l#5 ← phi( clrscr::@1/(byte) clrscr::l#2 ) + (byte*) clrscr::line_cols#5 ← phi( clrscr::@1/(byte*) clrscr::line_cols#6 ) + (byte*) clrscr::line_text#5 ← phi( clrscr::@1/(byte*) clrscr::line_text#6 ) + (byte) clrscr::c#0 ← (byte) 0 + to:clrscr::@4 +clrscr::@3: scope:[clrscr] from clrscr::@1 + (byte) conio_cursor_x ← (number) 0 + (byte) conio_cursor_y ← (number) 0 + (byte*) conio_line_text ← (const nomodify byte*) CONIO_SCREEN_TEXT + (byte*) conio_line_color ← (const nomodify byte*) CONIO_SCREEN_COLORS + to:clrscr::@return +clrscr::@4: scope:[clrscr] from clrscr::@2 clrscr::@5 + (byte) clrscr::l#4 ← phi( clrscr::@2/(byte) clrscr::l#5 clrscr::@5/(byte) clrscr::l#6 ) + (byte*) clrscr::line_cols#4 ← phi( clrscr::@2/(byte*) clrscr::line_cols#5 clrscr::@5/(byte*) clrscr::line_cols#2 ) + (byte*) clrscr::line_text#4 ← phi( clrscr::@2/(byte*) clrscr::line_text#5 clrscr::@5/(byte*) clrscr::line_text#2 ) + (byte) clrscr::c#2 ← phi( clrscr::@2/(byte) clrscr::c#0 clrscr::@5/(byte) clrscr::c#1 ) + (bool~) clrscr::$1 ← (byte) clrscr::c#2 < (number) $28 + if((bool~) clrscr::$1) goto clrscr::@5 + to:clrscr::@6 +clrscr::@5: scope:[clrscr] from clrscr::@4 + (byte) clrscr::l#6 ← phi( clrscr::@4/(byte) clrscr::l#4 ) + (byte*) clrscr::line_cols#2 ← phi( clrscr::@4/(byte*) clrscr::line_cols#4 ) + (byte) clrscr::c#3 ← phi( clrscr::@4/(byte) clrscr::c#2 ) + (byte*) clrscr::line_text#2 ← phi( clrscr::@4/(byte*) clrscr::line_text#4 ) + *((byte*) clrscr::line_text#2 + (byte) clrscr::c#3) ← (byte) ' ' + *((byte*) clrscr::line_cols#2 + (byte) clrscr::c#3) ← (byte) conio_textcolor + (byte) clrscr::c#1 ← ++ (byte) clrscr::c#3 + to:clrscr::@4 +clrscr::@6: scope:[clrscr] from clrscr::@4 + (byte) clrscr::l#3 ← phi( clrscr::@4/(byte) clrscr::l#4 ) + (byte*) clrscr::line_cols#3 ← phi( clrscr::@4/(byte*) clrscr::line_cols#4 ) + (byte*) clrscr::line_text#3 ← phi( clrscr::@4/(byte*) clrscr::line_text#4 ) + (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#3 + (number) $28 + (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#3 + (number) $28 + (byte) clrscr::l#1 ← ++ (byte) clrscr::l#3 + to:clrscr::@1 +clrscr::@return: scope:[clrscr] from clrscr::@3 + return + to:@return + +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +gotoxy: scope:[gotoxy] from cscroll::@2 + (byte) gotoxy::x#4 ← phi( cscroll::@2/(byte) gotoxy::x#1 ) + (byte) gotoxy::y#2 ← phi( cscroll::@2/(byte) gotoxy::y#1 ) + (bool~) gotoxy::$0 ← (byte) gotoxy::y#2 > (number) $19 + (bool~) gotoxy::$1 ← ! (bool~) gotoxy::$0 + if((bool~) gotoxy::$1) goto gotoxy::@1 + to:gotoxy::@3 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 + (byte) gotoxy::y#4 ← phi( gotoxy/(byte) gotoxy::y#2 gotoxy::@3/(byte) gotoxy::y#0 ) + (byte) gotoxy::x#2 ← phi( gotoxy/(byte) gotoxy::x#4 gotoxy::@3/(byte) gotoxy::x#5 ) + (bool~) gotoxy::$2 ← (byte) gotoxy::x#2 >= (number) $28 + (bool~) gotoxy::$3 ← ! (bool~) gotoxy::$2 + if((bool~) gotoxy::$3) goto gotoxy::@2 + to:gotoxy::@4 +gotoxy::@3: scope:[gotoxy] from gotoxy + (byte) gotoxy::x#5 ← phi( gotoxy/(byte) gotoxy::x#4 ) + (byte) gotoxy::y#0 ← (number) 0 + to:gotoxy::@1 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 + (byte) gotoxy::y#3 ← phi( gotoxy::@1/(byte) gotoxy::y#4 gotoxy::@4/(byte) gotoxy::y#5 ) + (byte) gotoxy::x#3 ← phi( gotoxy::@1/(byte) gotoxy::x#2 gotoxy::@4/(byte) gotoxy::x#0 ) + (byte) conio_cursor_x ← (byte) gotoxy::x#3 + (byte) conio_cursor_y ← (byte) gotoxy::y#3 + (word~) gotoxy::$7 ← (word)(byte) gotoxy::y#3 + (number~) gotoxy::$4 ← (word~) gotoxy::$7 * (number) $28 + (word) gotoxy::line_offset#0 ← (number~) gotoxy::$4 + (byte*~) gotoxy::$5 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::line_offset#0 + (byte*) conio_line_text ← (byte*~) gotoxy::$5 + (byte*~) gotoxy::$6 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::line_offset#0 + (byte*) conio_line_color ← (byte*~) gotoxy::$6 + to:gotoxy::@return +gotoxy::@4: scope:[gotoxy] from gotoxy::@1 + (byte) gotoxy::y#5 ← phi( gotoxy::@1/(byte) gotoxy::y#4 ) + (byte) gotoxy::x#0 ← (number) 0 + to:gotoxy::@2 +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + return + to:@return + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@9 printf_padding::@2 + (byte) cputc::c#3 ← phi( cputs::@2/(byte) cputc::c#0 printf_number_buffer::@9/(byte) cputc::c#2 printf_padding::@2/(byte) cputc::c#1 ) + (bool~) cputc::$0 ← (byte) cputc::c#3 == (byte) ' +' + if((bool~) cputc::$0) goto cputc::@1 + to:cputc::@2 +cputc::@1: scope:[cputc] from cputc + call cputln + to:cputc::@4 +cputc::@4: scope:[cputc] from cputc::@1 + to:cputc::@return +cputc::@2: scope:[cputc] from cputc + (byte) cputc::c#4 ← phi( cputc/(byte) cputc::c#3 ) + *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#4 + *((byte*) conio_line_color + (byte) conio_cursor_x) ← (byte) conio_textcolor + (byte) conio_cursor_x ← ++ (byte) conio_cursor_x + (bool~) cputc::$1 ← (byte) conio_cursor_x == (number) $28 + (bool~) cputc::$2 ← ! (bool~) cputc::$1 + if((bool~) cputc::$2) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + call cputln + to:cputc::@5 +cputc::@5: scope:[cputc] from cputc::@3 + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@2 cputc::@4 cputc::@5 + return + to:@return + +(void()) cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + (byte*) conio_line_text ← (byte*) conio_line_text + (number) $28 + (byte*) conio_line_color ← (byte*) conio_line_color + (number) $28 + (byte) conio_cursor_x ← (number) 0 + (byte) conio_cursor_y ← ++ (byte) conio_cursor_y + call cscroll + to:cputln::@1 +cputln::@1: scope:[cputln] from cputln + to:cputln::@return +cputln::@return: scope:[cputln] from cputln::@1 + return + to:@return + +(void()) cscroll() +cscroll: scope:[cscroll] from cputln + (bool~) cscroll::$0 ← (byte) conio_cursor_y == (number) $19 + (bool~) cscroll::$1 ← ! (bool~) cscroll::$0 + if((bool~) cscroll::$1) goto cscroll::@return + to:cscroll::@1 +cscroll::@1: scope:[cscroll] from cscroll + (bool~) cscroll::$7 ← (number) 0 != (byte) conio_scroll_enable + if((bool~) cscroll::$7) goto cscroll::@3 + to:cscroll::@2 +cscroll::@3: scope:[cscroll] from cscroll::@1 + (void*) memcpy::destination#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT + (void*) memcpy::source#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $28 + (word) memcpy::num#0 ← (number) $19*(number) $28-(number) $28 + call memcpy + (void*) memcpy::return#2 ← (void*) memcpy::return#1 + to:cscroll::@4 +cscroll::@4: scope:[cscroll] from cscroll::@3 + (void*) memcpy::destination#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS + (void*) memcpy::source#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $28 + (word) memcpy::num#1 ← (number) $19*(number) $28-(number) $28 + call memcpy + (void*) memcpy::return#3 ← (void*) memcpy::return#1 + to:cscroll::@5 +cscroll::@5: scope:[cscroll] from cscroll::@4 + (void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(number) $28 + (byte) memset::c#0 ← (byte) ' ' + (word) memset::num#0 ← (number) $28 + call memset + (void*) memset::return#2 ← (void*) memset::return#1 + to:cscroll::@6 +cscroll::@6: scope:[cscroll] from cscroll::@5 + (void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(number) $28 + (byte) memset::c#1 ← (byte) conio_textcolor + (word) memset::num#1 ← (number) $28 + call memset + (void*) memset::return#3 ← (void*) memset::return#1 + to:cscroll::@7 +cscroll::@7: scope:[cscroll] from cscroll::@6 + (byte*) conio_line_text ← (byte*) conio_line_text - (number) $28 + (byte*) conio_line_color ← (byte*) conio_line_color - (number) $28 + (byte) conio_cursor_y ← -- (byte) conio_cursor_y + to:cscroll::@return +cscroll::@2: scope:[cscroll] from cscroll::@1 + (byte) gotoxy::x#1 ← (number) 0 + (byte) gotoxy::y#1 ← (number) 0 + call gotoxy + to:cscroll::@8 +cscroll::@8: scope:[cscroll] from cscroll::@2 + to:cscroll::@return +cscroll::@return: scope:[cscroll] from cscroll cscroll::@7 cscroll::@8 + return + to:@return + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from printf_number_buffer::@5 test_casting::@1 + (to_nomodify byte*) cputs::s#4 ← phi( printf_number_buffer::@5/(to_nomodify byte*) cputs::s#1 test_casting::@1/(to_nomodify byte*) cputs::s#2 ) + (byte) cputs::c#0 ← (byte) 0 + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@3 + (to_nomodify byte*) cputs::s#3 ← phi( cputs/(to_nomodify byte*) cputs::s#4 cputs::@3/(to_nomodify byte*) cputs::s#5 ) + (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) + (byte~) cputs::$0 ← (byte) cputs::c#1 + (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 + (bool~) cputs::$2 ← (number) 0 != (byte~) cputs::$0 + if((bool~) cputs::$2) goto cputs::@2 + to:cputs::@return +cputs::@2: scope:[cputs] from cputs::@1 + (to_nomodify byte*) cputs::s#6 ← phi( cputs::@1/(to_nomodify byte*) cputs::s#0 ) + (byte) cputs::c#2 ← phi( cputs::@1/(byte) cputs::c#1 ) + (byte) cputc::c#0 ← (byte) cputs::c#2 + call cputc + to:cputs::@3 +cputs::@3: scope:[cputs] from cputs::@2 + (to_nomodify byte*) cputs::s#5 ← phi( cputs::@2/(to_nomodify byte*) cputs::s#6 ) + to:cputs::@1 +cputs::@return: scope:[cputs] from cputs::@1 + return + to:@return + +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +utoa: scope:[utoa] from printf_sint::@2 + (byte*) utoa::buffer#21 ← phi( printf_sint::@2/(byte*) utoa::buffer#5 ) + (word) utoa::value#12 ← phi( printf_sint::@2/(word) utoa::value#1 ) + (byte) utoa::radix#1 ← phi( printf_sint::@2/(byte) utoa::radix#0 ) + (byte) utoa::max_digits#0 ← (byte) 0 + (word*) utoa::digit_values#0 ← (word*) 0 + (bool~) utoa::$0 ← (byte) utoa::radix#1 == (const byte) DECIMAL + if((bool~) utoa::$0) goto utoa::@1 + to:utoa::@6 +utoa::@1: scope:[utoa] from utoa + (byte*) utoa::buffer#17 ← phi( utoa/(byte*) utoa::buffer#21 ) + (word) utoa::value#8 ← phi( utoa/(word) utoa::value#12 ) + (byte) utoa::max_digits#1 ← (number) 5 + (word*) utoa::digit_values#1 ← (const word*) RADIX_DECIMAL_VALUES + to:utoa::@5 +utoa::@6: scope:[utoa] from utoa + (word) utoa::value#13 ← phi( utoa/(word) utoa::value#12 ) + (byte*) utoa::buffer#16 ← phi( utoa/(byte*) utoa::buffer#21 ) + (byte) utoa::radix#2 ← phi( utoa/(byte) utoa::radix#1 ) + (bool~) utoa::$1 ← (byte) utoa::radix#2 == (const byte) HEXADECIMAL + if((bool~) utoa::$1) goto utoa::@2 + to:utoa::@7 +utoa::@2: scope:[utoa] from utoa::@6 + (byte*) utoa::buffer#18 ← phi( utoa::@6/(byte*) utoa::buffer#16 ) + (word) utoa::value#9 ← phi( utoa::@6/(word) utoa::value#13 ) + (byte) utoa::max_digits#2 ← (number) 4 + (word*) utoa::digit_values#2 ← (const word*) RADIX_HEXADECIMAL_VALUES + to:utoa::@5 +utoa::@7: scope:[utoa] from utoa::@6 + (word) utoa::value#14 ← phi( utoa::@6/(word) utoa::value#13 ) + (byte*) utoa::buffer#13 ← phi( utoa::@6/(byte*) utoa::buffer#16 ) + (byte) utoa::radix#3 ← phi( utoa::@6/(byte) utoa::radix#2 ) + (bool~) utoa::$2 ← (byte) utoa::radix#3 == (const byte) OCTAL + if((bool~) utoa::$2) goto utoa::@3 + to:utoa::@8 +utoa::@3: scope:[utoa] from utoa::@7 + (byte*) utoa::buffer#19 ← phi( utoa::@7/(byte*) utoa::buffer#13 ) + (word) utoa::value#10 ← phi( utoa::@7/(word) utoa::value#14 ) + (byte) utoa::max_digits#3 ← (number) 6 + (word*) utoa::digit_values#3 ← (const word*) RADIX_OCTAL_VALUES + to:utoa::@5 +utoa::@8: scope:[utoa] from utoa::@7 + (word) utoa::value#15 ← phi( utoa::@7/(word) utoa::value#14 ) + (byte*) utoa::buffer#10 ← phi( utoa::@7/(byte*) utoa::buffer#13 ) + (byte) utoa::radix#4 ← phi( utoa::@7/(byte) utoa::radix#3 ) + (bool~) utoa::$3 ← (byte) utoa::radix#4 == (const byte) BINARY + if((bool~) utoa::$3) goto utoa::@4 + to:utoa::@9 +utoa::@4: scope:[utoa] from utoa::@8 + (byte*) utoa::buffer#20 ← phi( utoa::@8/(byte*) utoa::buffer#10 ) + (word) utoa::value#11 ← phi( utoa::@8/(word) utoa::value#15 ) + (byte) utoa::max_digits#4 ← (number) $10 + (word*) utoa::digit_values#4 ← (const word*) RADIX_BINARY_VALUES + to:utoa::@5 +utoa::@9: scope:[utoa] from utoa::@8 + (byte*) utoa::buffer#6 ← phi( utoa::@8/(byte*) utoa::buffer#10 ) + *((byte*) utoa::buffer#6) ← (byte) 'e' + (byte*) utoa::buffer#0 ← ++ (byte*) utoa::buffer#6 + *((byte*) utoa::buffer#0) ← (byte) 'r' + (byte*) utoa::buffer#1 ← ++ (byte*) utoa::buffer#0 + *((byte*) utoa::buffer#1) ← (byte) 'r' + (byte*) utoa::buffer#2 ← ++ (byte*) utoa::buffer#1 + *((byte*) utoa::buffer#2) ← (number) 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@12 utoa::@9 + return + to:@return +utoa::@5: scope:[utoa] from utoa::@1 utoa::@2 utoa::@3 utoa::@4 + (byte*) utoa::buffer#15 ← phi( utoa::@1/(byte*) utoa::buffer#17 utoa::@2/(byte*) utoa::buffer#18 utoa::@3/(byte*) utoa::buffer#19 utoa::@4/(byte*) utoa::buffer#20 ) + (word) utoa::value#7 ← phi( utoa::@1/(word) utoa::value#8 utoa::@2/(word) utoa::value#9 utoa::@3/(word) utoa::value#10 utoa::@4/(word) utoa::value#11 ) + (word*) utoa::digit_values#8 ← phi( utoa::@1/(word*) utoa::digit_values#1 utoa::@2/(word*) utoa::digit_values#2 utoa::@3/(word*) utoa::digit_values#3 utoa::@4/(word*) utoa::digit_values#4 ) + (byte) utoa::max_digits#7 ← phi( utoa::@1/(byte) utoa::max_digits#1 utoa::@2/(byte) utoa::max_digits#2 utoa::@3/(byte) utoa::max_digits#3 utoa::@4/(byte) utoa::max_digits#4 ) + (byte) utoa::started#0 ← (byte) 0 + (byte) utoa::digit#0 ← (byte) 0 + to:utoa::@10 +utoa::@10: scope:[utoa] from utoa::@13 utoa::@5 + (byte*) utoa::buffer#11 ← phi( utoa::@13/(byte*) utoa::buffer#14 utoa::@5/(byte*) utoa::buffer#15 ) + (byte) utoa::started#3 ← phi( utoa::@13/(byte) utoa::started#4 utoa::@5/(byte) utoa::started#0 ) + (word) utoa::value#5 ← phi( utoa::@13/(word) utoa::value#6 utoa::@5/(word) utoa::value#7 ) + (word*) utoa::digit_values#6 ← phi( utoa::@13/(word*) utoa::digit_values#7 utoa::@5/(word*) utoa::digit_values#8 ) + (byte) utoa::digit#2 ← phi( utoa::@13/(byte) utoa::digit#1 utoa::@5/(byte) utoa::digit#0 ) + (byte) utoa::max_digits#5 ← phi( utoa::@13/(byte) utoa::max_digits#6 utoa::@5/(byte) utoa::max_digits#7 ) + (number~) utoa::$4 ← (byte) utoa::max_digits#5 - (number) 1 + (bool~) utoa::$5 ← (byte) utoa::digit#2 < (number~) utoa::$4 + if((bool~) utoa::$5) goto utoa::@11 + to:utoa::@12 +utoa::@11: scope:[utoa] from utoa::@10 + (byte) utoa::max_digits#8 ← phi( utoa::@10/(byte) utoa::max_digits#5 ) + (byte*) utoa::buffer#12 ← phi( utoa::@10/(byte*) utoa::buffer#11 ) + (byte) utoa::started#2 ← phi( utoa::@10/(byte) utoa::started#3 ) + (word) utoa::value#2 ← phi( utoa::@10/(word) utoa::value#5 ) + (word*) utoa::digit_values#5 ← phi( utoa::@10/(word*) utoa::digit_values#6 ) + (byte) utoa::digit#3 ← phi( utoa::@10/(byte) utoa::digit#2 ) + (byte~) utoa::$10 ← (byte) utoa::digit#3 * (const byte) SIZEOF_WORD + (word) utoa::digit_value#0 ← *((word*) utoa::digit_values#5 + (byte~) utoa::$10) + (bool~) utoa::$6 ← (word) utoa::value#2 >= (word) utoa::digit_value#0 + (bool~) utoa::$7 ← (byte) utoa::started#2 || (bool~) utoa::$6 + (bool~) utoa::$8 ← ! (bool~) utoa::$7 + if((bool~) utoa::$8) goto utoa::@13 + to:utoa::@14 +utoa::@12: scope:[utoa] from utoa::@10 + (byte*) utoa::buffer#7 ← phi( utoa::@10/(byte*) utoa::buffer#11 ) + (word) utoa::value#3 ← phi( utoa::@10/(word) utoa::value#5 ) + (byte~) utoa::$11 ← (byte)(word) utoa::value#3 + *((byte*) utoa::buffer#7) ← *((const byte*) DIGITS + (byte~) utoa::$11) + (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#7 + *((byte*) utoa::buffer#3) ← (number) 0 + to:utoa::@return +utoa::@13: scope:[utoa] from utoa::@11 utoa::@15 + (byte*) utoa::buffer#14 ← phi( utoa::@11/(byte*) utoa::buffer#12 utoa::@15/(byte*) utoa::buffer#4 ) + (byte) utoa::started#4 ← phi( utoa::@11/(byte) utoa::started#2 utoa::@15/(byte) utoa::started#1 ) + (word) utoa::value#6 ← phi( utoa::@11/(word) utoa::value#2 utoa::@15/(word) utoa::value#0 ) + (word*) utoa::digit_values#7 ← phi( utoa::@11/(word*) utoa::digit_values#5 utoa::@15/(word*) utoa::digit_values#9 ) + (byte) utoa::max_digits#6 ← phi( utoa::@11/(byte) utoa::max_digits#8 utoa::@15/(byte) utoa::max_digits#9 ) + (byte) utoa::digit#4 ← phi( utoa::@11/(byte) utoa::digit#3 utoa::@15/(byte) utoa::digit#5 ) + (byte) utoa::digit#1 ← ++ (byte) utoa::digit#4 + to:utoa::@10 +utoa::@14: scope:[utoa] from utoa::@11 + (word*) utoa::digit_values#10 ← phi( utoa::@11/(word*) utoa::digit_values#5 ) + (byte) utoa::max_digits#10 ← phi( utoa::@11/(byte) utoa::max_digits#8 ) + (byte) utoa::digit#6 ← phi( utoa::@11/(byte) utoa::digit#3 ) + (word) utoa::digit_value#1 ← phi( utoa::@11/(word) utoa::digit_value#0 ) + (word) utoa::value#4 ← phi( utoa::@11/(word) utoa::value#2 ) + (byte*) utoa::buffer#8 ← phi( utoa::@11/(byte*) utoa::buffer#12 ) + (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#8 + (word) utoa_append::value#0 ← (word) utoa::value#4 + (word) utoa_append::sub#0 ← (word) utoa::digit_value#1 + call utoa_append + (word) utoa_append::return#0 ← (word) utoa_append::return#2 + to:utoa::@15 +utoa::@15: scope:[utoa] from utoa::@14 + (word*) utoa::digit_values#9 ← phi( utoa::@14/(word*) utoa::digit_values#10 ) + (byte) utoa::max_digits#9 ← phi( utoa::@14/(byte) utoa::max_digits#10 ) + (byte) utoa::digit#5 ← phi( utoa::@14/(byte) utoa::digit#6 ) + (byte*) utoa::buffer#9 ← phi( utoa::@14/(byte*) utoa::buffer#8 ) + (word) utoa_append::return#3 ← phi( utoa::@14/(word) utoa_append::return#0 ) + (word~) utoa::$9 ← (word) utoa_append::return#3 + (word) utoa::value#0 ← (word~) utoa::$9 + (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#9 + (byte) utoa::started#1 ← (number) 1 + to:utoa::@13 + +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +utoa_append: scope:[utoa_append] from utoa::@14 + (byte*) utoa_append::buffer#3 ← phi( utoa::@14/(byte*) utoa_append::buffer#0 ) + (word) utoa_append::sub#3 ← phi( utoa::@14/(word) utoa_append::sub#0 ) + (word) utoa_append::value#5 ← phi( utoa::@14/(word) utoa_append::value#0 ) + (byte) utoa_append::digit#0 ← (byte) 0 + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + (byte*) utoa_append::buffer#2 ← phi( utoa_append/(byte*) utoa_append::buffer#3 utoa_append::@2/(byte*) utoa_append::buffer#4 ) + (byte) utoa_append::digit#4 ← phi( utoa_append/(byte) utoa_append::digit#0 utoa_append::@2/(byte) utoa_append::digit#1 ) + (word) utoa_append::sub#1 ← phi( utoa_append/(word) utoa_append::sub#3 utoa_append::@2/(word) utoa_append::sub#2 ) + (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#5 utoa_append::@2/(word) utoa_append::value#1 ) + (bool~) utoa_append::$0 ← (word) utoa_append::value#2 >= (word) utoa_append::sub#1 + if((bool~) utoa_append::$0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + (byte*) utoa_append::buffer#4 ← phi( utoa_append::@1/(byte*) utoa_append::buffer#2 ) + (word) utoa_append::sub#2 ← phi( utoa_append::@1/(word) utoa_append::sub#1 ) + (word) utoa_append::value#3 ← phi( utoa_append::@1/(word) utoa_append::value#2 ) + (byte) utoa_append::digit#2 ← phi( utoa_append::@1/(byte) utoa_append::digit#4 ) + (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + (word) utoa_append::value#1 ← (word) utoa_append::value#3 - (word) utoa_append::sub#2 + to:utoa_append::@1 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + (word) utoa_append::value#4 ← phi( utoa_append::@1/(word) utoa_append::value#2 ) + (byte*) utoa_append::buffer#1 ← phi( utoa_append::@1/(byte*) utoa_append::buffer#2 ) + (byte) utoa_append::digit#3 ← phi( utoa_append::@1/(byte) utoa_append::digit#4 ) + *((byte*) utoa_append::buffer#1) ← *((const byte*) DIGITS + (byte) utoa_append::digit#3) + (word) utoa_append::return#1 ← (word) utoa_append::value#4 + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + (word) utoa_append::return#4 ← phi( utoa_append::@3/(word) utoa_append::return#1 ) + (word) utoa_append::return#2 ← (word) utoa_append::return#4 + return + to:@return + +(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) +printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 + (byte) printf_padding::pad#5 ← phi( printf_number_buffer::@10/(byte) printf_padding::pad#1 printf_number_buffer::@12/(byte) printf_padding::pad#2 printf_number_buffer::@8/(byte) printf_padding::pad#0 ) + (byte) printf_padding::length#4 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) + (byte) printf_padding::i#0 ← (byte) 0 + to:printf_padding::@1 +printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 + (byte) printf_padding::pad#4 ← phi( printf_padding/(byte) printf_padding::pad#5 printf_padding::@3/(byte) printf_padding::pad#6 ) + (byte) printf_padding::length#3 ← phi( printf_padding/(byte) printf_padding::length#4 printf_padding::@3/(byte) printf_padding::length#5 ) + (byte) printf_padding::i#2 ← phi( printf_padding/(byte) printf_padding::i#0 printf_padding::@3/(byte) printf_padding::i#1 ) + (bool~) printf_padding::$0 ← (byte) printf_padding::i#2 < (byte) printf_padding::length#3 + if((bool~) printf_padding::$0) goto printf_padding::@2 + to:printf_padding::@return +printf_padding::@2: scope:[printf_padding] from printf_padding::@1 + (byte) printf_padding::length#6 ← phi( printf_padding::@1/(byte) printf_padding::length#3 ) + (byte) printf_padding::i#4 ← phi( printf_padding::@1/(byte) printf_padding::i#2 ) + (byte) printf_padding::pad#3 ← phi( printf_padding::@1/(byte) printf_padding::pad#4 ) + (byte) cputc::c#1 ← (byte) printf_padding::pad#3 + call cputc + to:printf_padding::@3 +printf_padding::@3: scope:[printf_padding] from printf_padding::@2 + (byte) printf_padding::pad#6 ← phi( printf_padding::@2/(byte) printf_padding::pad#3 ) + (byte) printf_padding::length#5 ← phi( printf_padding::@2/(byte) printf_padding::length#6 ) + (byte) printf_padding::i#3 ← phi( printf_padding::@2/(byte) printf_padding::i#4 ) + (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#3 + to:printf_padding::@1 +printf_padding::@return: scope:[printf_padding] from printf_padding::@1 + return + to:@return + +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +printf_sint: scope:[printf_sint] from test_casting + (byte) printf_sint::format_upper_case#6 ← phi( test_casting/(byte) printf_sint::format_upper_case#0 ) + (byte) printf_sint::format_zero_padding#6 ← phi( test_casting/(byte) printf_sint::format_zero_padding#0 ) + (byte) printf_sint::format_justify_left#6 ← phi( test_casting/(byte) printf_sint::format_justify_left#0 ) + (byte) printf_sint::format_min_length#6 ← phi( test_casting/(byte) printf_sint::format_min_length#0 ) + (byte) printf_sint::format_radix#6 ← phi( test_casting/(byte) printf_sint::format_radix#0 ) + (byte) printf_sint::format_sign_always#3 ← phi( test_casting/(byte) printf_sint::format_sign_always#0 ) + (signed word) printf_sint::value#2 ← phi( test_casting/(signed word) printf_sint::value#1 ) + *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (number) 0 + (bool~) printf_sint::$0 ← (signed word) printf_sint::value#2 < (number) 0 + if((bool~) printf_sint::$0) goto printf_sint::@1 + to:printf_sint::@3 +printf_sint::@1: scope:[printf_sint] from printf_sint + (byte) printf_sint::format_upper_case#3 ← phi( printf_sint/(byte) printf_sint::format_upper_case#6 ) + (byte) printf_sint::format_zero_padding#3 ← phi( printf_sint/(byte) printf_sint::format_zero_padding#6 ) + (byte) printf_sint::format_sign_always#5 ← phi( printf_sint/(byte) printf_sint::format_sign_always#3 ) + (byte) printf_sint::format_justify_left#3 ← phi( printf_sint/(byte) printf_sint::format_justify_left#6 ) + (byte) printf_sint::format_min_length#3 ← phi( printf_sint/(byte) printf_sint::format_min_length#6 ) + (byte) printf_sint::format_radix#3 ← phi( printf_sint/(byte) printf_sint::format_radix#6 ) + (signed word) printf_sint::value#3 ← phi( printf_sint/(signed word) printf_sint::value#2 ) + (signed word~) printf_sint::$4 ← - (signed word) printf_sint::value#3 + (signed word) printf_sint::value#0 ← (signed word~) printf_sint::$4 + *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte) '-' + to:printf_sint::@2 +printf_sint::@3: scope:[printf_sint] from printf_sint + (byte) printf_sint::format_upper_case#4 ← phi( printf_sint/(byte) printf_sint::format_upper_case#6 ) + (byte) printf_sint::format_zero_padding#4 ← phi( printf_sint/(byte) printf_sint::format_zero_padding#6 ) + (byte) printf_sint::format_justify_left#4 ← phi( printf_sint/(byte) printf_sint::format_justify_left#6 ) + (byte) printf_sint::format_min_length#4 ← phi( printf_sint/(byte) printf_sint::format_min_length#6 ) + (byte) printf_sint::format_radix#4 ← phi( printf_sint/(byte) printf_sint::format_radix#6 ) + (signed word) printf_sint::value#5 ← phi( printf_sint/(signed word) printf_sint::value#2 ) + (byte) printf_sint::format_sign_always#1 ← phi( printf_sint/(byte) printf_sint::format_sign_always#3 ) + (bool~) printf_sint::$5 ← (number) 0 != (byte) printf_sint::format_sign_always#1 + (bool~) printf_sint::$3 ← ! (bool~) printf_sint::$5 + if((bool~) printf_sint::$3) goto printf_sint::@2 + to:printf_sint::@4 +printf_sint::@4: scope:[printf_sint] from printf_sint::@3 + (byte) printf_sint::format_upper_case#5 ← phi( printf_sint::@3/(byte) printf_sint::format_upper_case#4 ) + (byte) printf_sint::format_zero_padding#5 ← phi( printf_sint::@3/(byte) printf_sint::format_zero_padding#4 ) + (byte) printf_sint::format_sign_always#6 ← phi( printf_sint::@3/(byte) printf_sint::format_sign_always#1 ) + (byte) printf_sint::format_justify_left#5 ← phi( printf_sint::@3/(byte) printf_sint::format_justify_left#4 ) + (byte) printf_sint::format_min_length#5 ← phi( printf_sint::@3/(byte) printf_sint::format_min_length#4 ) + (byte) printf_sint::format_radix#5 ← phi( printf_sint::@3/(byte) printf_sint::format_radix#4 ) + (signed word) printf_sint::value#6 ← phi( printf_sint::@3/(signed word) printf_sint::value#5 ) + *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte) '+' + to:printf_sint::@2 +printf_sint::@2: scope:[printf_sint] from printf_sint::@1 printf_sint::@3 printf_sint::@4 + (byte) printf_sint::format_upper_case#2 ← phi( printf_sint::@1/(byte) printf_sint::format_upper_case#3 printf_sint::@3/(byte) printf_sint::format_upper_case#4 printf_sint::@4/(byte) printf_sint::format_upper_case#5 ) + (byte) printf_sint::format_zero_padding#2 ← phi( printf_sint::@1/(byte) printf_sint::format_zero_padding#3 printf_sint::@3/(byte) printf_sint::format_zero_padding#4 printf_sint::@4/(byte) printf_sint::format_zero_padding#5 ) + (byte) printf_sint::format_sign_always#4 ← phi( printf_sint::@1/(byte) printf_sint::format_sign_always#5 printf_sint::@3/(byte) printf_sint::format_sign_always#1 printf_sint::@4/(byte) printf_sint::format_sign_always#6 ) + (byte) printf_sint::format_justify_left#2 ← phi( printf_sint::@1/(byte) printf_sint::format_justify_left#3 printf_sint::@3/(byte) printf_sint::format_justify_left#4 printf_sint::@4/(byte) printf_sint::format_justify_left#5 ) + (byte) printf_sint::format_min_length#2 ← phi( printf_sint::@1/(byte) printf_sint::format_min_length#3 printf_sint::@3/(byte) printf_sint::format_min_length#4 printf_sint::@4/(byte) printf_sint::format_min_length#5 ) + (byte) printf_sint::format_radix#1 ← phi( printf_sint::@1/(byte) printf_sint::format_radix#3 printf_sint::@3/(byte) printf_sint::format_radix#4 printf_sint::@4/(byte) printf_sint::format_radix#5 ) + (signed word) printf_sint::value#4 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint::@3/(signed word) printf_sint::value#5 printf_sint::@4/(signed word) printf_sint::value#6 ) + (word) printf_sint::uvalue#0 ← (word)(signed word) printf_sint::value#4 + (word) utoa::value#1 ← (word) printf_sint::uvalue#0 + (byte*) utoa::buffer#5 ← (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + (byte) utoa::radix#0 ← (byte) printf_sint::format_radix#1 + call utoa + to:printf_sint::@5 +printf_sint::@5: scope:[printf_sint] from printf_sint::@2 + (byte) printf_sint::format_radix#2 ← phi( printf_sint::@2/(byte) printf_sint::format_radix#1 ) + (byte) printf_sint::format_upper_case#1 ← phi( printf_sint::@2/(byte) printf_sint::format_upper_case#2 ) + (byte) printf_sint::format_zero_padding#1 ← phi( printf_sint::@2/(byte) printf_sint::format_zero_padding#2 ) + (byte) printf_sint::format_sign_always#2 ← phi( printf_sint::@2/(byte) printf_sint::format_sign_always#4 ) + (byte) printf_sint::format_justify_left#1 ← phi( printf_sint::@2/(byte) printf_sint::format_justify_left#2 ) + (byte) printf_sint::format_min_length#1 ← phi( printf_sint::@2/(byte) printf_sint::format_min_length#2 ) + (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) + (byte*) printf_number_buffer::buffer_digits#0 ← (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + (byte) printf_number_buffer::format_min_length#0 ← (byte) printf_sint::format_min_length#1 + (byte) printf_number_buffer::format_justify_left#0 ← (byte) printf_sint::format_justify_left#1 + (byte) printf_number_buffer::format_sign_always#0 ← (byte) printf_sint::format_sign_always#2 + (byte) printf_number_buffer::format_zero_padding#0 ← (byte) printf_sint::format_zero_padding#1 + (byte) printf_number_buffer::format_upper_case#0 ← (byte) printf_sint::format_upper_case#1 + (byte) printf_number_buffer::format_radix#0 ← (byte) printf_sint::format_radix#2 + call printf_number_buffer + to:printf_sint::@6 +printf_sint::@6: scope:[printf_sint] from printf_sint::@5 + to:printf_sint::@return +printf_sint::@return: scope:[printf_sint] from printf_sint::@6 + return + to:@return + +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@5 + (byte) printf_number_buffer::format_upper_case#10 ← phi( printf_sint::@5/(byte) printf_number_buffer::format_upper_case#0 ) + (byte) printf_number_buffer::buffer_sign#7 ← phi( printf_sint::@5/(byte) printf_number_buffer::buffer_sign#0 ) + (byte*) printf_number_buffer::buffer_digits#4 ← phi( printf_sint::@5/(byte*) printf_number_buffer::buffer_digits#0 ) + (byte) printf_number_buffer::format_zero_padding#4 ← phi( printf_sint::@5/(byte) printf_number_buffer::format_zero_padding#0 ) + (byte) printf_number_buffer::format_justify_left#3 ← phi( printf_sint::@5/(byte) printf_number_buffer::format_justify_left#0 ) + (byte) printf_number_buffer::format_min_length#1 ← phi( printf_sint::@5/(byte) printf_number_buffer::format_min_length#0 ) + (signed byte) printf_number_buffer::padding#0 ← (signed byte) 0 + (bool~) printf_number_buffer::$26 ← (number) 0 != (byte) printf_number_buffer::format_min_length#1 + (bool~) printf_number_buffer::$0 ← ! (bool~) printf_number_buffer::$26 + if((bool~) printf_number_buffer::$0) goto printf_number_buffer::@1 + to:printf_number_buffer::@6 +printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@14 + (byte*) printf_number_buffer::buffer_digits#12 ← phi( printf_number_buffer/(byte*) printf_number_buffer::buffer_digits#4 printf_number_buffer::@13/(byte*) printf_number_buffer::buffer_digits#15 printf_number_buffer::@14/(byte*) printf_number_buffer::buffer_digits#16 ) + (byte) printf_number_buffer::format_upper_case#7 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_upper_case#10 printf_number_buffer::@13/(byte) printf_number_buffer::format_upper_case#11 printf_number_buffer::@14/(byte) printf_number_buffer::format_upper_case#12 ) + (byte) printf_number_buffer::buffer_sign#5 ← phi( printf_number_buffer/(byte) printf_number_buffer::buffer_sign#7 printf_number_buffer::@13/(byte) printf_number_buffer::buffer_sign#8 printf_number_buffer::@14/(byte) printf_number_buffer::buffer_sign#9 ) + (signed byte) printf_number_buffer::padding#3 ← phi( printf_number_buffer/(signed byte) printf_number_buffer::padding#0 printf_number_buffer::@13/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@14/(signed byte) printf_number_buffer::padding#2 ) + (byte) printf_number_buffer::format_zero_padding#1 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_zero_padding#4 printf_number_buffer::@13/(byte) printf_number_buffer::format_zero_padding#5 printf_number_buffer::@14/(byte) printf_number_buffer::format_zero_padding#6 ) + (byte) printf_number_buffer::format_justify_left#1 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_justify_left#3 printf_number_buffer::@13/(byte) printf_number_buffer::format_justify_left#4 printf_number_buffer::@14/(byte) printf_number_buffer::format_justify_left#5 ) + (bool~) printf_number_buffer::$27 ← (number) 0 != (byte) printf_number_buffer::format_justify_left#1 + (bool~) printf_number_buffer::$1 ← ! (bool~) printf_number_buffer::$27 + (bool~) printf_number_buffer::$28 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#1 + (bool~) printf_number_buffer::$2 ← ! (bool~) printf_number_buffer::$28 + (bool~) printf_number_buffer::$3 ← (bool~) printf_number_buffer::$1 && (bool~) printf_number_buffer::$2 + (bool~) printf_number_buffer::$4 ← (bool~) printf_number_buffer::$3 && (signed byte) printf_number_buffer::padding#3 + (bool~) printf_number_buffer::$5 ← ! (bool~) printf_number_buffer::$4 + if((bool~) printf_number_buffer::$5) goto printf_number_buffer::@2 + to:printf_number_buffer::@8 +printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer + (byte) printf_number_buffer::format_upper_case#16 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_upper_case#10 ) + (byte) printf_number_buffer::format_zero_padding#16 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_zero_padding#4 ) + (byte) printf_number_buffer::format_justify_left#11 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_justify_left#3 ) + (byte) printf_number_buffer::format_min_length#5 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_min_length#1 ) + (byte) printf_number_buffer::buffer_sign#4 ← phi( printf_number_buffer/(byte) printf_number_buffer::buffer_sign#7 ) + (byte*) printf_number_buffer::buffer_digits#1 ← phi( printf_number_buffer/(byte*) printf_number_buffer::buffer_digits#4 ) + (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#1 + call strlen + (word) strlen::return#2 ← (word) strlen::return#1 + to:printf_number_buffer::@15 +printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@6 + (byte*) printf_number_buffer::buffer_digits#18 ← phi( printf_number_buffer::@6/(byte*) printf_number_buffer::buffer_digits#1 ) + (byte) printf_number_buffer::format_upper_case#14 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_upper_case#16 ) + (byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_zero_padding#16 ) + (byte) printf_number_buffer::format_justify_left#7 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_justify_left#11 ) + (byte) printf_number_buffer::format_min_length#3 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_min_length#5 ) + (byte) printf_number_buffer::buffer_sign#1 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::buffer_sign#4 ) + (word) strlen::return#4 ← phi( printf_number_buffer::@6/(word) strlen::return#2 ) + (word~) printf_number_buffer::$19 ← (word) strlen::return#4 + (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 + (bool~) printf_number_buffer::$29 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#1 + (bool~) printf_number_buffer::$20 ← ! (bool~) printf_number_buffer::$29 + if((bool~) printf_number_buffer::$20) goto printf_number_buffer::@13 + to:printf_number_buffer::@7 +printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@15 printf_number_buffer::@7 + (byte*) printf_number_buffer::buffer_digits#15 ← phi( printf_number_buffer::@15/(byte*) printf_number_buffer::buffer_digits#18 printf_number_buffer::@7/(byte*) printf_number_buffer::buffer_digits#19 ) + (byte) printf_number_buffer::format_upper_case#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_upper_case#14 printf_number_buffer::@7/(byte) printf_number_buffer::format_upper_case#15 ) + (byte) printf_number_buffer::buffer_sign#8 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::buffer_sign#1 printf_number_buffer::@7/(byte) printf_number_buffer::buffer_sign#11 ) + (byte) printf_number_buffer::format_zero_padding#5 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_zero_padding#10 printf_number_buffer::@7/(byte) printf_number_buffer::format_zero_padding#11 ) + (byte) printf_number_buffer::format_justify_left#4 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_justify_left#7 printf_number_buffer::@7/(byte) printf_number_buffer::format_justify_left#8 ) + (signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@15/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 ) + (byte) printf_number_buffer::format_min_length#2 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_min_length#3 printf_number_buffer::@7/(byte) printf_number_buffer::format_min_length#4 ) + (signed byte~) printf_number_buffer::$25 ← (signed byte)(byte) printf_number_buffer::format_min_length#2 + (signed byte~) printf_number_buffer::$21 ← (signed byte~) printf_number_buffer::$25 - (signed byte) printf_number_buffer::len#2 + (signed byte) printf_number_buffer::padding#1 ← (signed byte~) printf_number_buffer::$21 + (bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (number) 0 + (bool~) printf_number_buffer::$23 ← ! (bool~) printf_number_buffer::$22 + if((bool~) printf_number_buffer::$23) goto printf_number_buffer::@1 + to:printf_number_buffer::@14 +printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@15 + (byte*) printf_number_buffer::buffer_digits#19 ← phi( printf_number_buffer::@15/(byte*) printf_number_buffer::buffer_digits#18 ) + (byte) printf_number_buffer::format_upper_case#15 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_upper_case#14 ) + (byte) printf_number_buffer::buffer_sign#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::buffer_sign#1 ) + (byte) printf_number_buffer::format_zero_padding#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_zero_padding#10 ) + (byte) printf_number_buffer::format_justify_left#8 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_justify_left#7 ) + (byte) printf_number_buffer::format_min_length#4 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_min_length#3 ) + (signed byte) printf_number_buffer::len#3 ← phi( printf_number_buffer::@15/(signed byte) printf_number_buffer::len#0 ) + (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#3 + to:printf_number_buffer::@13 +printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@13 + (byte*) printf_number_buffer::buffer_digits#16 ← phi( printf_number_buffer::@13/(byte*) printf_number_buffer::buffer_digits#15 ) + (byte) printf_number_buffer::format_upper_case#12 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_upper_case#11 ) + (byte) printf_number_buffer::buffer_sign#9 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::buffer_sign#8 ) + (byte) printf_number_buffer::format_zero_padding#6 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_zero_padding#5 ) + (byte) printf_number_buffer::format_justify_left#5 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_justify_left#4 ) + (signed byte) printf_number_buffer::padding#2 ← (number) 0 + to:printf_number_buffer::@1 +printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 + (byte) printf_number_buffer::format_justify_left#16 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_justify_left#1 printf_number_buffer::@16/(byte) printf_number_buffer::format_justify_left#18 ) + (byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_number_buffer::@1/(byte*) printf_number_buffer::buffer_digits#12 printf_number_buffer::@16/(byte*) printf_number_buffer::buffer_digits#13 ) + (byte) printf_number_buffer::format_upper_case#5 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_upper_case#7 printf_number_buffer::@16/(byte) printf_number_buffer::format_upper_case#8 ) + (signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer::@1/(signed byte) printf_number_buffer::padding#3 printf_number_buffer::@16/(signed byte) printf_number_buffer::padding#12 ) + (byte) printf_number_buffer::format_zero_padding#8 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_zero_padding#1 printf_number_buffer::@16/(byte) printf_number_buffer::format_zero_padding#12 ) + (byte) printf_number_buffer::buffer_sign#2 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::buffer_sign#5 printf_number_buffer::@16/(byte) printf_number_buffer::buffer_sign#6 ) + (bool~) printf_number_buffer::$30 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#2 + (bool~) printf_number_buffer::$7 ← ! (bool~) printf_number_buffer::$30 + if((bool~) printf_number_buffer::$7) goto printf_number_buffer::@3 + to:printf_number_buffer::@9 +printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@1 + (byte) printf_number_buffer::format_justify_left#20 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_justify_left#1 ) + (byte*) printf_number_buffer::buffer_digits#17 ← phi( printf_number_buffer::@1/(byte*) printf_number_buffer::buffer_digits#12 ) + (byte) printf_number_buffer::format_upper_case#13 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_upper_case#7 ) + (byte) printf_number_buffer::format_zero_padding#17 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_zero_padding#1 ) + (byte) printf_number_buffer::buffer_sign#10 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::buffer_sign#5 ) + (signed byte) printf_number_buffer::padding#4 ← phi( printf_number_buffer::@1/(signed byte) printf_number_buffer::padding#3 ) + (byte) printf_padding::pad#0 ← (byte) ' ' + (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#4 + call printf_padding + to:printf_number_buffer::@16 +printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@8 + (byte) printf_number_buffer::format_justify_left#18 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_justify_left#20 ) + (byte*) printf_number_buffer::buffer_digits#13 ← phi( printf_number_buffer::@8/(byte*) printf_number_buffer::buffer_digits#17 ) + (byte) printf_number_buffer::format_upper_case#8 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_upper_case#13 ) + (signed byte) printf_number_buffer::padding#12 ← phi( printf_number_buffer::@8/(signed byte) printf_number_buffer::padding#4 ) + (byte) printf_number_buffer::format_zero_padding#12 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_zero_padding#17 ) + (byte) printf_number_buffer::buffer_sign#6 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::buffer_sign#10 ) + to:printf_number_buffer::@2 +printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@17 printf_number_buffer::@2 + (byte) printf_number_buffer::format_justify_left#13 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_justify_left#15 printf_number_buffer::@2/(byte) printf_number_buffer::format_justify_left#16 ) + (byte*) printf_number_buffer::buffer_digits#8 ← phi( printf_number_buffer::@17/(byte*) printf_number_buffer::buffer_digits#9 printf_number_buffer::@2/(byte*) printf_number_buffer::buffer_digits#10 ) + (byte) printf_number_buffer::format_upper_case#3 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_upper_case#4 printf_number_buffer::@2/(byte) printf_number_buffer::format_upper_case#5 ) + (signed byte) printf_number_buffer::padding#5 ← phi( printf_number_buffer::@17/(signed byte) printf_number_buffer::padding#9 printf_number_buffer::@2/(signed byte) printf_number_buffer::padding#10 ) + (byte) printf_number_buffer::format_zero_padding#2 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_zero_padding#7 printf_number_buffer::@2/(byte) printf_number_buffer::format_zero_padding#8 ) + (bool~) printf_number_buffer::$9 ← (byte) printf_number_buffer::format_zero_padding#2 && (signed byte) printf_number_buffer::padding#5 + (bool~) printf_number_buffer::$10 ← ! (bool~) printf_number_buffer::$9 + if((bool~) printf_number_buffer::$10) goto printf_number_buffer::@4 + to:printf_number_buffer::@10 +printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 + (byte) printf_number_buffer::format_justify_left#19 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_justify_left#16 ) + (byte*) printf_number_buffer::buffer_digits#14 ← phi( printf_number_buffer::@2/(byte*) printf_number_buffer::buffer_digits#10 ) + (byte) printf_number_buffer::format_upper_case#9 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_upper_case#5 ) + (signed byte) printf_number_buffer::padding#13 ← phi( printf_number_buffer::@2/(signed byte) printf_number_buffer::padding#10 ) + (byte) printf_number_buffer::format_zero_padding#13 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_zero_padding#8 ) + (byte) printf_number_buffer::buffer_sign#3 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::buffer_sign#2 ) + (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#3 + call cputc + to:printf_number_buffer::@17 +printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@9 + (byte) printf_number_buffer::format_justify_left#15 ← phi( printf_number_buffer::@9/(byte) printf_number_buffer::format_justify_left#19 ) + (byte*) printf_number_buffer::buffer_digits#9 ← phi( printf_number_buffer::@9/(byte*) printf_number_buffer::buffer_digits#14 ) + (byte) printf_number_buffer::format_upper_case#4 ← phi( printf_number_buffer::@9/(byte) printf_number_buffer::format_upper_case#9 ) + (signed byte) printf_number_buffer::padding#9 ← phi( printf_number_buffer::@9/(signed byte) printf_number_buffer::padding#13 ) + (byte) printf_number_buffer::format_zero_padding#7 ← phi( printf_number_buffer::@9/(byte) printf_number_buffer::format_zero_padding#13 ) + to:printf_number_buffer::@3 +printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@18 printf_number_buffer::@3 + (signed byte) printf_number_buffer::padding#15 ← phi( printf_number_buffer::@18/(signed byte) printf_number_buffer::padding#16 printf_number_buffer::@3/(signed byte) printf_number_buffer::padding#5 ) + (byte) printf_number_buffer::format_justify_left#10 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_justify_left#12 printf_number_buffer::@3/(byte) printf_number_buffer::format_justify_left#13 ) + (byte) printf_number_buffer::format_zero_padding#15 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_zero_padding#18 printf_number_buffer::@3/(byte) printf_number_buffer::format_zero_padding#2 ) + (byte*) printf_number_buffer::buffer_digits#6 ← phi( printf_number_buffer::@18/(byte*) printf_number_buffer::buffer_digits#7 printf_number_buffer::@3/(byte*) printf_number_buffer::buffer_digits#8 ) + (byte) printf_number_buffer::format_upper_case#1 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_upper_case#2 printf_number_buffer::@3/(byte) printf_number_buffer::format_upper_case#3 ) + (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1 + (bool~) printf_number_buffer::$12 ← ! (bool~) printf_number_buffer::$31 + if((bool~) printf_number_buffer::$12) goto printf_number_buffer::@5 + to:printf_number_buffer::@11 +printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@3 + (byte) printf_number_buffer::format_justify_left#17 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_justify_left#13 ) + (byte) printf_number_buffer::format_zero_padding#20 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_zero_padding#2 ) + (byte*) printf_number_buffer::buffer_digits#11 ← phi( printf_number_buffer::@3/(byte*) printf_number_buffer::buffer_digits#8 ) + (byte) printf_number_buffer::format_upper_case#6 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_upper_case#3 ) + (signed byte) printf_number_buffer::padding#6 ← phi( printf_number_buffer::@3/(signed byte) printf_number_buffer::padding#5 ) + (byte) printf_padding::pad#1 ← (byte) '0' + (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#6 + call printf_padding + to:printf_number_buffer::@18 +printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@10 + (signed byte) printf_number_buffer::padding#16 ← phi( printf_number_buffer::@10/(signed byte) printf_number_buffer::padding#6 ) + (byte) printf_number_buffer::format_justify_left#12 ← phi( printf_number_buffer::@10/(byte) printf_number_buffer::format_justify_left#17 ) + (byte) printf_number_buffer::format_zero_padding#18 ← phi( printf_number_buffer::@10/(byte) printf_number_buffer::format_zero_padding#20 ) + (byte*) printf_number_buffer::buffer_digits#7 ← phi( printf_number_buffer::@10/(byte*) printf_number_buffer::buffer_digits#11 ) + (byte) printf_number_buffer::format_upper_case#2 ← phi( printf_number_buffer::@10/(byte) printf_number_buffer::format_upper_case#6 ) + to:printf_number_buffer::@4 +printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@20 printf_number_buffer::@4 + (signed byte) printf_number_buffer::padding#11 ← phi( printf_number_buffer::@20/(signed byte) printf_number_buffer::padding#14 printf_number_buffer::@4/(signed byte) printf_number_buffer::padding#15 ) + (byte) printf_number_buffer::format_justify_left#6 ← phi( printf_number_buffer::@20/(byte) printf_number_buffer::format_justify_left#9 printf_number_buffer::@4/(byte) printf_number_buffer::format_justify_left#10 ) + (byte) printf_number_buffer::format_zero_padding#9 ← phi( printf_number_buffer::@20/(byte) printf_number_buffer::format_zero_padding#14 printf_number_buffer::@4/(byte) printf_number_buffer::format_zero_padding#15 ) + (byte*) printf_number_buffer::buffer_digits#2 ← phi( printf_number_buffer::@20/(byte*) printf_number_buffer::buffer_digits#5 printf_number_buffer::@4/(byte*) printf_number_buffer::buffer_digits#6 ) + (to_nomodify byte*) cputs::s#1 ← (byte*) printf_number_buffer::buffer_digits#2 + call cputs + to:printf_number_buffer::@19 +printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@5 + (signed byte) printf_number_buffer::padding#7 ← phi( printf_number_buffer::@5/(signed byte) printf_number_buffer::padding#11 ) + (byte) printf_number_buffer::format_justify_left#2 ← phi( printf_number_buffer::@5/(byte) printf_number_buffer::format_justify_left#6 ) + (byte) printf_number_buffer::format_zero_padding#3 ← phi( printf_number_buffer::@5/(byte) printf_number_buffer::format_zero_padding#9 ) + (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3 + (bool~) printf_number_buffer::$14 ← ! (bool~) printf_number_buffer::$32 + (bool~) printf_number_buffer::$15 ← (byte) printf_number_buffer::format_justify_left#2 && (bool~) printf_number_buffer::$14 + (bool~) printf_number_buffer::$16 ← (bool~) printf_number_buffer::$15 && (signed byte) printf_number_buffer::padding#7 + (bool~) printf_number_buffer::$17 ← ! (bool~) printf_number_buffer::$16 + if((bool~) printf_number_buffer::$17) goto printf_number_buffer::@return + to:printf_number_buffer::@12 +printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 + (signed byte) printf_number_buffer::padding#17 ← phi( printf_number_buffer::@4/(signed byte) printf_number_buffer::padding#15 ) + (byte) printf_number_buffer::format_justify_left#14 ← phi( printf_number_buffer::@4/(byte) printf_number_buffer::format_justify_left#10 ) + (byte) printf_number_buffer::format_zero_padding#19 ← phi( printf_number_buffer::@4/(byte) printf_number_buffer::format_zero_padding#15 ) + (byte*) printf_number_buffer::buffer_digits#3 ← phi( printf_number_buffer::@4/(byte*) printf_number_buffer::buffer_digits#6 ) + (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#3 + call strupr + (byte*) strupr::return#2 ← (byte*) strupr::return#1 + to:printf_number_buffer::@20 +printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@11 + (signed byte) printf_number_buffer::padding#14 ← phi( printf_number_buffer::@11/(signed byte) printf_number_buffer::padding#17 ) + (byte) printf_number_buffer::format_justify_left#9 ← phi( printf_number_buffer::@11/(byte) printf_number_buffer::format_justify_left#14 ) + (byte) printf_number_buffer::format_zero_padding#14 ← phi( printf_number_buffer::@11/(byte) printf_number_buffer::format_zero_padding#19 ) + (byte*) printf_number_buffer::buffer_digits#5 ← phi( printf_number_buffer::@11/(byte*) printf_number_buffer::buffer_digits#3 ) + to:printf_number_buffer::@5 +printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 + (signed byte) printf_number_buffer::padding#8 ← phi( printf_number_buffer::@19/(signed byte) printf_number_buffer::padding#7 ) + (byte) printf_padding::pad#2 ← (byte) ' ' + (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#8 + call printf_padding + to:printf_number_buffer::@21 +printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@12 + to:printf_number_buffer::@return +printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@19 printf_number_buffer::@21 + return + to:@return + +(void()) test_casting((signed word) test_casting::signed_short_value) +test_casting: scope:[test_casting] from main::@2 + (signed word) test_casting::signed_short_value#1 ← phi( main::@2/(signed word) test_casting::signed_short_value#0 ) + (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#1 + (byte) printf_sint::format_min_length#0 ← (byte) 0 + (byte) printf_sint::format_justify_left#0 ← (byte) 0 + (byte) printf_sint::format_sign_always#0 ← (byte) 0 + (byte) printf_sint::format_zero_padding#0 ← (byte) 0 + (byte) printf_sint::format_upper_case#0 ← (byte) 0 + (byte) printf_sint::format_radix#0 ← (const byte) DECIMAL + call printf_sint + to:test_casting::@1 +test_casting::@1: scope:[test_casting] from test_casting + (to_nomodify byte*) cputs::s#2 ← (const byte*) test_casting::s + call cputs + to:test_casting::@2 +test_casting::@2: scope:[test_casting] from test_casting::@1 + to:test_casting::@return +test_casting::@return: scope:[test_casting] from test_casting::@2 + return + to:@return + +(void()) main() +main: scope:[main] from __start::@1 + call clrscr + to:main::@3 +main::@3: scope:[main] from main + (signed byte) main::signed_char_value#0 ← (signed byte) -5 + to:main::@1 +main::@1: scope:[main] from main::@3 main::@4 + (signed byte) main::signed_char_value#2 ← phi( main::@3/(signed byte) main::signed_char_value#0 main::@4/(signed byte) main::signed_char_value#4 ) + (bool~) main::$1 ← (signed byte) main::signed_char_value#2 != (number) 0 + if((bool~) main::$1) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + (signed byte) main::signed_char_value#3 ← phi( main::@1/(signed byte) main::signed_char_value#2 ) + (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#3 + (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 + call test_casting + to:main::@4 +main::@4: scope:[main] from main::@2 + (signed byte) main::signed_char_value#4 ← phi( main::@2/(signed byte) main::signed_char_value#1 ) + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +(void()) __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + (byte) conio_cursor_x ← (byte) 0 + (byte) conio_cursor_y ← (byte) 0 + (byte*) conio_line_text ← (const nomodify byte*) CONIO_SCREEN_TEXT + (byte*) conio_line_color ← (const nomodify byte*) CONIO_SCREEN_COLORS + (byte) conio_textcolor ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT + (byte) conio_scroll_enable ← (byte) 1 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + return + to:@return + +SYMBOL TABLE SSA +(const byte) BINARY = (number) 2 +(const nomodify byte*) COLORRAM = (byte*)(number) $d800 +(const nomodify byte*) CONIO_SCREEN_COLORS = (const nomodify byte*) COLORRAM +(const nomodify byte*) CONIO_SCREEN_TEXT = (const nomodify byte*) DEFAULT_SCREEN +(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (const nomodify byte) LIGHT_BLUE +(const byte) DECIMAL = (number) $a +(const nomodify byte*) DEFAULT_SCREEN = (byte*)(number) $400 +(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(const byte) HEXADECIMAL = (number) $10 +(const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) MOS6569_VICII::BG_COLOR +(byte) MOS6569_VICII::BG_COLOR1 +(byte) MOS6569_VICII::BG_COLOR2 +(byte) MOS6569_VICII::BG_COLOR3 +(byte) MOS6569_VICII::BORDER_COLOR +(byte) MOS6569_VICII::CONTROL1 +(byte) MOS6569_VICII::CONTROL2 +(byte) MOS6569_VICII::IRQ_ENABLE +(byte) MOS6569_VICII::IRQ_STATUS +(byte) MOS6569_VICII::LIGHTPEN_X +(byte) MOS6569_VICII::LIGHTPEN_Y +(byte) MOS6569_VICII::MEMORY +(byte) MOS6569_VICII::RASTER +(byte) MOS6569_VICII::SPRITE0_COLOR +(byte) MOS6569_VICII::SPRITE0_X +(byte) MOS6569_VICII::SPRITE0_Y +(byte) MOS6569_VICII::SPRITE1_COLOR +(byte) MOS6569_VICII::SPRITE1_X +(byte) MOS6569_VICII::SPRITE1_Y +(byte) MOS6569_VICII::SPRITE2_COLOR +(byte) MOS6569_VICII::SPRITE2_X +(byte) MOS6569_VICII::SPRITE2_Y +(byte) MOS6569_VICII::SPRITE3_COLOR +(byte) MOS6569_VICII::SPRITE3_X +(byte) MOS6569_VICII::SPRITE3_Y +(byte) MOS6569_VICII::SPRITE4_COLOR +(byte) MOS6569_VICII::SPRITE4_X +(byte) MOS6569_VICII::SPRITE4_Y +(byte) MOS6569_VICII::SPRITE5_COLOR +(byte) MOS6569_VICII::SPRITE5_X +(byte) MOS6569_VICII::SPRITE5_Y +(byte) MOS6569_VICII::SPRITE6_COLOR +(byte) MOS6569_VICII::SPRITE6_X +(byte) MOS6569_VICII::SPRITE6_Y +(byte) MOS6569_VICII::SPRITE7_COLOR +(byte) MOS6569_VICII::SPRITE7_X +(byte) MOS6569_VICII::SPRITE7_Y +(byte) MOS6569_VICII::SPRITES_BG_COLLISION +(byte) MOS6569_VICII::SPRITES_COLLISION +(byte) MOS6569_VICII::SPRITES_ENABLE +(byte) MOS6569_VICII::SPRITES_EXPAND_X +(byte) MOS6569_VICII::SPRITES_EXPAND_Y +(byte) MOS6569_VICII::SPRITES_MC +(byte) MOS6569_VICII::SPRITES_MCOLOR1 +(byte) MOS6569_VICII::SPRITES_MCOLOR2 +(byte) MOS6569_VICII::SPRITES_PRIORITY +(byte) MOS6569_VICII::SPRITES_XMSB +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OCTAL = (number) 8 +(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 +(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN = (byte) 0 +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 +(const word*) RADIX_BINARY_VALUES[] = { (word) $8000, (word) $4000, (word) $2000, (word) $1000, (word) $800, (word) $400, (word) $200, (word) $100, (word) $80, (word) $40, (word) $20, (word) $10, (word) 8, (word) 4, (word) 2 } +(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } +(const word*) RADIX_HEXADECIMAL_VALUES[] = { (word) $1000, (word) $100, (word) $10 } +(const word*) RADIX_OCTAL_VALUES[] = { (word) $8000, (word) $1000, (word) $200, (word) $40, (word) 8 } +(const byte) SIZEOF_WORD = (byte) 2 +(void()) __start() +(label) __start::@1 +(label) __start::@2 +(label) __start::@return +(label) __start::__init1 +(void()) clrscr() +(bool~) clrscr::$0 +(bool~) clrscr::$1 +(label) clrscr::@1 +(label) clrscr::@2 +(label) clrscr::@3 +(label) clrscr::@4 +(label) clrscr::@5 +(label) clrscr::@6 +(label) clrscr::@return +(byte) clrscr::c +(byte) clrscr::c#0 +(byte) clrscr::c#1 +(byte) clrscr::c#2 +(byte) clrscr::c#3 +(byte) clrscr::l +(byte) clrscr::l#0 +(byte) clrscr::l#1 +(byte) clrscr::l#2 +(byte) clrscr::l#3 +(byte) clrscr::l#4 +(byte) clrscr::l#5 +(byte) clrscr::l#6 +(byte*) clrscr::line_cols +(byte*) clrscr::line_cols#0 +(byte*) clrscr::line_cols#1 +(byte*) clrscr::line_cols#2 +(byte*) clrscr::line_cols#3 +(byte*) clrscr::line_cols#4 +(byte*) clrscr::line_cols#5 +(byte*) clrscr::line_cols#6 +(byte*) clrscr::line_text +(byte*) clrscr::line_text#0 +(byte*) clrscr::line_text#1 +(byte*) clrscr::line_text#2 +(byte*) clrscr::line_text#3 +(byte*) clrscr::line_text#4 +(byte*) clrscr::line_text#5 +(byte*) clrscr::line_text#6 +(byte) conio_cursor_x loadstore +(byte) conio_cursor_y loadstore +(byte*) conio_line_color loadstore +(byte*) conio_line_text loadstore +(byte) conio_scroll_enable loadstore +(byte) conio_textcolor loadstore +(void()) cputc((byte) cputc::c) +(bool~) cputc::$0 +(bool~) cputc::$1 +(bool~) cputc::$2 +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@4 +(label) cputc::@5 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 +(byte) cputc::c#1 +(byte) cputc::c#2 +(byte) cputc::c#3 +(byte) cputc::c#4 +(void()) cputln() +(label) cputln::@1 +(label) cputln::@return +(void()) cputs((to_nomodify byte*) cputs::s) +(byte~) cputs::$0 +(bool~) cputs::$2 +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@3 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#0 +(byte) cputs::c#1 +(byte) cputs::c#2 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 +(to_nomodify byte*) cputs::s#1 +(to_nomodify byte*) cputs::s#2 +(to_nomodify byte*) cputs::s#3 +(to_nomodify byte*) cputs::s#4 +(to_nomodify byte*) cputs::s#5 +(to_nomodify byte*) cputs::s#6 +(void()) cscroll() +(bool~) cscroll::$0 +(bool~) cscroll::$1 +(bool~) cscroll::$7 +(label) cscroll::@1 +(label) cscroll::@2 +(label) cscroll::@3 +(label) cscroll::@4 +(label) cscroll::@5 +(label) cscroll::@6 +(label) cscroll::@7 +(label) cscroll::@8 +(label) cscroll::@return +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +(bool~) gotoxy::$0 +(bool~) gotoxy::$1 +(bool~) gotoxy::$2 +(bool~) gotoxy::$3 +(number~) gotoxy::$4 +(byte*~) gotoxy::$5 +(byte*~) gotoxy::$6 +(word~) gotoxy::$7 +(label) gotoxy::@1 +(label) gotoxy::@2 +(label) gotoxy::@3 +(label) gotoxy::@4 +(label) gotoxy::@return +(word) gotoxy::line_offset +(word) gotoxy::line_offset#0 +(byte) gotoxy::x +(byte) gotoxy::x#0 +(byte) gotoxy::x#1 +(byte) gotoxy::x#2 +(byte) gotoxy::x#3 +(byte) gotoxy::x#4 +(byte) gotoxy::x#5 +(byte) gotoxy::y +(byte) gotoxy::y#0 +(byte) gotoxy::y#1 +(byte) gotoxy::y#2 +(byte) gotoxy::y#3 +(byte) gotoxy::y#4 +(byte) gotoxy::y#5 +(void()) main() +(bool~) main::$1 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(signed byte) main::signed_char_value +(signed byte) main::signed_char_value#0 +(signed byte) main::signed_char_value#1 +(signed byte) main::signed_char_value#2 +(signed byte) main::signed_char_value#3 +(signed byte) main::signed_char_value#4 +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +(byte*~) memcpy::$0 +(bool~) memcpy::$1 +(byte*~) memcpy::$2 +(label) memcpy::@1 +(label) memcpy::@2 +(label) memcpy::@3 +(label) memcpy::@return +(void*) memcpy::destination +(void*) memcpy::destination#0 +(void*) memcpy::destination#1 +(void*) memcpy::destination#2 +(void*) memcpy::destination#3 +(void*) memcpy::destination#4 +(void*) memcpy::destination#5 +(byte*) memcpy::dst +(byte*) memcpy::dst#0 +(byte*) memcpy::dst#1 +(byte*) memcpy::dst#2 +(byte*) memcpy::dst#3 +(word) memcpy::num +(word) memcpy::num#0 +(word) memcpy::num#1 +(word) memcpy::num#2 +(void*) memcpy::return +(void*) memcpy::return#0 +(void*) memcpy::return#1 +(void*) memcpy::return#2 +(void*) memcpy::return#3 +(void*) memcpy::return#4 +(void*) memcpy::source +(void*) memcpy::source#0 +(void*) memcpy::source#1 +(void*) memcpy::source#2 +(byte*) memcpy::src +(byte*) memcpy::src#0 +(byte*) memcpy::src#1 +(byte*) memcpy::src#2 +(byte*) memcpy::src#3 +(byte*) memcpy::src_end +(byte*) memcpy::src_end#0 +(byte*) memcpy::src_end#1 +(byte*) memcpy::src_end#2 +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(bool~) memset::$0 +(bool~) memset::$1 +(byte*~) memset::$2 +(bool~) memset::$3 +(byte*~) memset::$4 +(label) memset::@1 +(label) memset::@2 +(label) memset::@3 +(label) memset::@4 +(label) memset::@return +(byte) memset::c +(byte) memset::c#0 +(byte) memset::c#1 +(byte) memset::c#2 +(byte) memset::c#3 +(byte) memset::c#4 +(byte) memset::c#5 +(byte*) memset::dst +(byte*) memset::dst#0 +(byte*) memset::dst#1 +(byte*) memset::dst#2 +(byte*) memset::dst#3 +(byte*) memset::end +(byte*) memset::end#0 +(byte*) memset::end#1 +(byte*) memset::end#2 +(word) memset::num +(word) memset::num#0 +(word) memset::num#1 +(word) memset::num#2 +(word) memset::num#3 +(void*) memset::return +(void*) memset::return#0 +(void*) memset::return#1 +(void*) memset::return#2 +(void*) memset::return#3 +(void*) memset::return#4 +(void*) memset::str +(void*) memset::str#0 +(void*) memset::str#1 +(void*) memset::str#2 +(void*) memset::str#3 +(void*) memset::str#4 +(void*) memset::str#5 +(void*) memset::str#6 +(struct printf_buffer_number) printf_buffer loadstore = {} +(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) } +(byte) printf_buffer_number::sign +(byte) printf_format_number::justify_left +(byte) printf_format_number::min_length +(byte) printf_format_number::radix +(byte) printf_format_number::sign_always +(byte) printf_format_number::upper_case +(byte) printf_format_number::zero_padding +(byte) printf_format_string::justify_left +(byte) printf_format_string::min_length +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +(bool~) printf_number_buffer::$0 +(bool~) printf_number_buffer::$1 +(bool~) printf_number_buffer::$10 +(bool~) printf_number_buffer::$12 +(bool~) printf_number_buffer::$14 +(bool~) printf_number_buffer::$15 +(bool~) printf_number_buffer::$16 +(bool~) printf_number_buffer::$17 +(word~) printf_number_buffer::$19 +(bool~) printf_number_buffer::$2 +(bool~) printf_number_buffer::$20 +(signed byte~) printf_number_buffer::$21 +(bool~) printf_number_buffer::$22 +(bool~) printf_number_buffer::$23 +(signed byte~) printf_number_buffer::$25 +(bool~) printf_number_buffer::$26 +(bool~) printf_number_buffer::$27 +(bool~) printf_number_buffer::$28 +(bool~) printf_number_buffer::$29 +(bool~) printf_number_buffer::$3 +(bool~) printf_number_buffer::$30 +(bool~) printf_number_buffer::$31 +(bool~) printf_number_buffer::$32 +(bool~) printf_number_buffer::$4 +(bool~) printf_number_buffer::$5 +(bool~) printf_number_buffer::$7 +(bool~) printf_number_buffer::$9 +(label) printf_number_buffer::@1 +(label) printf_number_buffer::@10 +(label) printf_number_buffer::@11 +(label) printf_number_buffer::@12 +(label) printf_number_buffer::@13 +(label) printf_number_buffer::@14 +(label) printf_number_buffer::@15 +(label) printf_number_buffer::@16 +(label) printf_number_buffer::@17 +(label) printf_number_buffer::@18 +(label) printf_number_buffer::@19 +(label) printf_number_buffer::@2 +(label) printf_number_buffer::@20 +(label) printf_number_buffer::@21 +(label) printf_number_buffer::@3 +(label) printf_number_buffer::@4 +(label) printf_number_buffer::@5 +(label) printf_number_buffer::@6 +(label) printf_number_buffer::@7 +(label) printf_number_buffer::@8 +(label) printf_number_buffer::@9 +(label) printf_number_buffer::@return +(struct printf_buffer_number) printf_number_buffer::buffer +(byte*) printf_number_buffer::buffer_digits +(byte*) printf_number_buffer::buffer_digits#0 +(byte*) printf_number_buffer::buffer_digits#1 +(byte*) printf_number_buffer::buffer_digits#10 +(byte*) printf_number_buffer::buffer_digits#11 +(byte*) printf_number_buffer::buffer_digits#12 +(byte*) printf_number_buffer::buffer_digits#13 +(byte*) printf_number_buffer::buffer_digits#14 +(byte*) printf_number_buffer::buffer_digits#15 +(byte*) printf_number_buffer::buffer_digits#16 +(byte*) printf_number_buffer::buffer_digits#17 +(byte*) printf_number_buffer::buffer_digits#18 +(byte*) printf_number_buffer::buffer_digits#19 +(byte*) printf_number_buffer::buffer_digits#2 +(byte*) printf_number_buffer::buffer_digits#3 +(byte*) printf_number_buffer::buffer_digits#4 +(byte*) printf_number_buffer::buffer_digits#5 +(byte*) printf_number_buffer::buffer_digits#6 +(byte*) printf_number_buffer::buffer_digits#7 +(byte*) printf_number_buffer::buffer_digits#8 +(byte*) printf_number_buffer::buffer_digits#9 +(byte) printf_number_buffer::buffer_sign +(byte) printf_number_buffer::buffer_sign#0 +(byte) printf_number_buffer::buffer_sign#1 +(byte) printf_number_buffer::buffer_sign#10 +(byte) printf_number_buffer::buffer_sign#11 +(byte) printf_number_buffer::buffer_sign#2 +(byte) printf_number_buffer::buffer_sign#3 +(byte) printf_number_buffer::buffer_sign#4 +(byte) printf_number_buffer::buffer_sign#5 +(byte) printf_number_buffer::buffer_sign#6 +(byte) printf_number_buffer::buffer_sign#7 +(byte) printf_number_buffer::buffer_sign#8 +(byte) printf_number_buffer::buffer_sign#9 +(struct printf_format_number) printf_number_buffer::format +(byte) printf_number_buffer::format_justify_left +(byte) printf_number_buffer::format_justify_left#0 +(byte) printf_number_buffer::format_justify_left#1 +(byte) printf_number_buffer::format_justify_left#10 +(byte) printf_number_buffer::format_justify_left#11 +(byte) printf_number_buffer::format_justify_left#12 +(byte) printf_number_buffer::format_justify_left#13 +(byte) printf_number_buffer::format_justify_left#14 +(byte) printf_number_buffer::format_justify_left#15 +(byte) printf_number_buffer::format_justify_left#16 +(byte) printf_number_buffer::format_justify_left#17 +(byte) printf_number_buffer::format_justify_left#18 +(byte) printf_number_buffer::format_justify_left#19 +(byte) printf_number_buffer::format_justify_left#2 +(byte) printf_number_buffer::format_justify_left#20 +(byte) printf_number_buffer::format_justify_left#3 +(byte) printf_number_buffer::format_justify_left#4 +(byte) printf_number_buffer::format_justify_left#5 +(byte) printf_number_buffer::format_justify_left#6 +(byte) printf_number_buffer::format_justify_left#7 +(byte) printf_number_buffer::format_justify_left#8 +(byte) printf_number_buffer::format_justify_left#9 +(byte) printf_number_buffer::format_min_length +(byte) printf_number_buffer::format_min_length#0 +(byte) printf_number_buffer::format_min_length#1 +(byte) printf_number_buffer::format_min_length#2 +(byte) printf_number_buffer::format_min_length#3 +(byte) printf_number_buffer::format_min_length#4 +(byte) printf_number_buffer::format_min_length#5 +(byte) printf_number_buffer::format_radix +(byte) printf_number_buffer::format_radix#0 +(byte) printf_number_buffer::format_sign_always +(byte) printf_number_buffer::format_sign_always#0 +(byte) printf_number_buffer::format_upper_case +(byte) printf_number_buffer::format_upper_case#0 +(byte) printf_number_buffer::format_upper_case#1 +(byte) printf_number_buffer::format_upper_case#10 +(byte) printf_number_buffer::format_upper_case#11 +(byte) printf_number_buffer::format_upper_case#12 +(byte) printf_number_buffer::format_upper_case#13 +(byte) printf_number_buffer::format_upper_case#14 +(byte) printf_number_buffer::format_upper_case#15 +(byte) printf_number_buffer::format_upper_case#16 +(byte) printf_number_buffer::format_upper_case#2 +(byte) printf_number_buffer::format_upper_case#3 +(byte) printf_number_buffer::format_upper_case#4 +(byte) printf_number_buffer::format_upper_case#5 +(byte) printf_number_buffer::format_upper_case#6 +(byte) printf_number_buffer::format_upper_case#7 +(byte) printf_number_buffer::format_upper_case#8 +(byte) printf_number_buffer::format_upper_case#9 +(byte) printf_number_buffer::format_zero_padding +(byte) printf_number_buffer::format_zero_padding#0 +(byte) printf_number_buffer::format_zero_padding#1 +(byte) printf_number_buffer::format_zero_padding#10 +(byte) printf_number_buffer::format_zero_padding#11 +(byte) printf_number_buffer::format_zero_padding#12 +(byte) printf_number_buffer::format_zero_padding#13 +(byte) printf_number_buffer::format_zero_padding#14 +(byte) printf_number_buffer::format_zero_padding#15 +(byte) printf_number_buffer::format_zero_padding#16 +(byte) printf_number_buffer::format_zero_padding#17 +(byte) printf_number_buffer::format_zero_padding#18 +(byte) printf_number_buffer::format_zero_padding#19 +(byte) printf_number_buffer::format_zero_padding#2 +(byte) printf_number_buffer::format_zero_padding#20 +(byte) printf_number_buffer::format_zero_padding#3 +(byte) printf_number_buffer::format_zero_padding#4 +(byte) printf_number_buffer::format_zero_padding#5 +(byte) printf_number_buffer::format_zero_padding#6 +(byte) printf_number_buffer::format_zero_padding#7 +(byte) printf_number_buffer::format_zero_padding#8 +(byte) printf_number_buffer::format_zero_padding#9 +(signed byte) printf_number_buffer::len +(signed byte) printf_number_buffer::len#0 +(signed byte) printf_number_buffer::len#1 +(signed byte) printf_number_buffer::len#2 +(signed byte) printf_number_buffer::len#3 +(signed byte) printf_number_buffer::padding +(signed byte) printf_number_buffer::padding#0 +(signed byte) printf_number_buffer::padding#1 +(signed byte) printf_number_buffer::padding#10 +(signed byte) printf_number_buffer::padding#11 +(signed byte) printf_number_buffer::padding#12 +(signed byte) printf_number_buffer::padding#13 +(signed byte) printf_number_buffer::padding#14 +(signed byte) printf_number_buffer::padding#15 +(signed byte) printf_number_buffer::padding#16 +(signed byte) printf_number_buffer::padding#17 +(signed byte) printf_number_buffer::padding#2 +(signed byte) printf_number_buffer::padding#3 +(signed byte) printf_number_buffer::padding#4 +(signed byte) printf_number_buffer::padding#5 +(signed byte) printf_number_buffer::padding#6 +(signed byte) printf_number_buffer::padding#7 +(signed byte) printf_number_buffer::padding#8 +(signed byte) printf_number_buffer::padding#9 +(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) +(bool~) printf_padding::$0 +(label) printf_padding::@1 +(label) printf_padding::@2 +(label) printf_padding::@3 +(label) printf_padding::@return +(byte) printf_padding::i +(byte) printf_padding::i#0 +(byte) printf_padding::i#1 +(byte) printf_padding::i#2 +(byte) printf_padding::i#3 +(byte) printf_padding::i#4 +(byte) printf_padding::length +(byte) printf_padding::length#0 +(byte) printf_padding::length#1 +(byte) printf_padding::length#2 +(byte) printf_padding::length#3 +(byte) printf_padding::length#4 +(byte) printf_padding::length#5 +(byte) printf_padding::length#6 +(byte) printf_padding::pad +(byte) printf_padding::pad#0 +(byte) printf_padding::pad#1 +(byte) printf_padding::pad#2 +(byte) printf_padding::pad#3 +(byte) printf_padding::pad#4 +(byte) printf_padding::pad#5 +(byte) printf_padding::pad#6 +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +(bool~) printf_sint::$0 +(bool~) printf_sint::$3 +(signed word~) printf_sint::$4 +(bool~) printf_sint::$5 +(label) printf_sint::@1 +(label) printf_sint::@2 +(label) printf_sint::@3 +(label) printf_sint::@4 +(label) printf_sint::@5 +(label) printf_sint::@6 +(label) printf_sint::@return +(struct printf_format_number) printf_sint::format +(byte) printf_sint::format_justify_left +(byte) printf_sint::format_justify_left#0 +(byte) printf_sint::format_justify_left#1 +(byte) printf_sint::format_justify_left#2 +(byte) printf_sint::format_justify_left#3 +(byte) printf_sint::format_justify_left#4 +(byte) printf_sint::format_justify_left#5 +(byte) printf_sint::format_justify_left#6 +(byte) printf_sint::format_min_length +(byte) printf_sint::format_min_length#0 +(byte) printf_sint::format_min_length#1 +(byte) printf_sint::format_min_length#2 +(byte) printf_sint::format_min_length#3 +(byte) printf_sint::format_min_length#4 +(byte) printf_sint::format_min_length#5 +(byte) printf_sint::format_min_length#6 +(byte) printf_sint::format_radix +(byte) printf_sint::format_radix#0 +(byte) printf_sint::format_radix#1 +(byte) printf_sint::format_radix#2 +(byte) printf_sint::format_radix#3 +(byte) printf_sint::format_radix#4 +(byte) printf_sint::format_radix#5 +(byte) printf_sint::format_radix#6 +(byte) printf_sint::format_sign_always +(byte) printf_sint::format_sign_always#0 +(byte) printf_sint::format_sign_always#1 +(byte) printf_sint::format_sign_always#2 +(byte) printf_sint::format_sign_always#3 +(byte) printf_sint::format_sign_always#4 +(byte) printf_sint::format_sign_always#5 +(byte) printf_sint::format_sign_always#6 +(byte) printf_sint::format_upper_case +(byte) printf_sint::format_upper_case#0 +(byte) printf_sint::format_upper_case#1 +(byte) printf_sint::format_upper_case#2 +(byte) printf_sint::format_upper_case#3 +(byte) printf_sint::format_upper_case#4 +(byte) printf_sint::format_upper_case#5 +(byte) printf_sint::format_upper_case#6 +(byte) printf_sint::format_zero_padding +(byte) printf_sint::format_zero_padding#0 +(byte) printf_sint::format_zero_padding#1 +(byte) printf_sint::format_zero_padding#2 +(byte) printf_sint::format_zero_padding#3 +(byte) printf_sint::format_zero_padding#4 +(byte) printf_sint::format_zero_padding#5 +(byte) printf_sint::format_zero_padding#6 +(word) printf_sint::uvalue +(word) printf_sint::uvalue#0 +(signed word) printf_sint::value +(signed word) printf_sint::value#0 +(signed word) printf_sint::value#1 +(signed word) printf_sint::value#2 +(signed word) printf_sint::value#3 +(signed word) printf_sint::value#4 +(signed word) printf_sint::value#5 +(signed word) printf_sint::value#6 +(word()) strlen((byte*) strlen::str) +(bool~) strlen::$0 +(label) strlen::@1 +(label) strlen::@2 +(label) strlen::@3 +(label) strlen::@return +(word) strlen::len +(word) strlen::len#0 +(word) strlen::len#1 +(word) strlen::len#2 +(word) strlen::len#3 +(word) strlen::len#4 +(word) strlen::return +(word) strlen::return#0 +(word) strlen::return#1 +(word) strlen::return#2 +(word) strlen::return#3 +(word) strlen::return#4 +(byte*) strlen::str +(byte*) strlen::str#0 +(byte*) strlen::str#1 +(byte*) strlen::str#2 +(byte*) strlen::str#3 +(byte*) strlen::str#4 +(byte*()) strupr((byte*) strupr::str) +(byte~) strupr::$0 +(bool~) strupr::$1 +(label) strupr::@1 +(label) strupr::@2 +(label) strupr::@3 +(label) strupr::@4 +(label) strupr::@return +(byte*) strupr::return +(byte*) strupr::return#0 +(byte*) strupr::return#1 +(byte*) strupr::return#2 +(byte*) strupr::return#3 +(byte*) strupr::src +(byte*) strupr::src#0 +(byte*) strupr::src#1 +(byte*) strupr::src#2 +(byte*) strupr::src#3 +(byte*) strupr::src#4 +(byte*) strupr::str +(byte*) strupr::str#0 +(byte*) strupr::str#1 +(byte*) strupr::str#2 +(byte*) strupr::str#3 +(byte*) strupr::str#4 +(byte*) strupr::str#5 +(void()) test_casting((signed word) test_casting::signed_short_value) +(label) test_casting::@1 +(label) test_casting::@2 +(label) test_casting::@return +(const byte*) test_casting::s[(byte) 2] = (byte*) " +" +(signed word) test_casting::signed_short_value +(signed word) test_casting::signed_short_value#0 +(signed word) test_casting::signed_short_value#1 +(byte()) toupper((byte) toupper::ch) +(bool~) toupper::$0 +(bool~) toupper::$1 +(bool~) toupper::$2 +(byte~) toupper::$3 +(label) toupper::@1 +(label) toupper::@2 +(label) toupper::@return +(byte) toupper::ch +(byte) toupper::ch#0 +(byte) toupper::ch#1 +(byte) toupper::ch#2 +(byte) toupper::ch#3 +(byte) toupper::return +(byte) toupper::return#0 +(byte) toupper::return#1 +(byte) toupper::return#2 +(byte) toupper::return#3 +(byte) toupper::return#4 +(byte) toupper::return#5 +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +(bool~) utoa::$0 +(bool~) utoa::$1 +(byte~) utoa::$10 +(byte~) utoa::$11 +(bool~) utoa::$2 +(bool~) utoa::$3 +(number~) utoa::$4 +(bool~) utoa::$5 +(bool~) utoa::$6 +(bool~) utoa::$7 +(bool~) utoa::$8 +(word~) utoa::$9 +(label) utoa::@1 +(label) utoa::@10 +(label) utoa::@11 +(label) utoa::@12 +(label) utoa::@13 +(label) utoa::@14 +(label) utoa::@15 +(label) utoa::@2 +(label) utoa::@3 +(label) utoa::@4 +(label) utoa::@5 +(label) utoa::@6 +(label) utoa::@7 +(label) utoa::@8 +(label) utoa::@9 +(label) utoa::@return +(byte*) utoa::buffer +(byte*) utoa::buffer#0 +(byte*) utoa::buffer#1 +(byte*) utoa::buffer#10 +(byte*) utoa::buffer#11 +(byte*) utoa::buffer#12 +(byte*) utoa::buffer#13 +(byte*) utoa::buffer#14 +(byte*) utoa::buffer#15 +(byte*) utoa::buffer#16 +(byte*) utoa::buffer#17 +(byte*) utoa::buffer#18 +(byte*) utoa::buffer#19 +(byte*) utoa::buffer#2 +(byte*) utoa::buffer#20 +(byte*) utoa::buffer#21 +(byte*) utoa::buffer#3 +(byte*) utoa::buffer#4 +(byte*) utoa::buffer#5 +(byte*) utoa::buffer#6 +(byte*) utoa::buffer#7 +(byte*) utoa::buffer#8 +(byte*) utoa::buffer#9 +(byte) utoa::digit +(byte) utoa::digit#0 +(byte) utoa::digit#1 +(byte) utoa::digit#2 +(byte) utoa::digit#3 +(byte) utoa::digit#4 +(byte) utoa::digit#5 +(byte) utoa::digit#6 +(word) utoa::digit_value +(word) utoa::digit_value#0 +(word) utoa::digit_value#1 +(word*) utoa::digit_values +(word*) utoa::digit_values#0 +(word*) utoa::digit_values#1 +(word*) utoa::digit_values#10 +(word*) utoa::digit_values#2 +(word*) utoa::digit_values#3 +(word*) utoa::digit_values#4 +(word*) utoa::digit_values#5 +(word*) utoa::digit_values#6 +(word*) utoa::digit_values#7 +(word*) utoa::digit_values#8 +(word*) utoa::digit_values#9 +(byte) utoa::max_digits +(byte) utoa::max_digits#0 +(byte) utoa::max_digits#1 +(byte) utoa::max_digits#10 +(byte) utoa::max_digits#2 +(byte) utoa::max_digits#3 +(byte) utoa::max_digits#4 +(byte) utoa::max_digits#5 +(byte) utoa::max_digits#6 +(byte) utoa::max_digits#7 +(byte) utoa::max_digits#8 +(byte) utoa::max_digits#9 +(byte) utoa::radix +(byte) utoa::radix#0 +(byte) utoa::radix#1 +(byte) utoa::radix#2 +(byte) utoa::radix#3 +(byte) utoa::radix#4 +(byte) utoa::started +(byte) utoa::started#0 +(byte) utoa::started#1 +(byte) utoa::started#2 +(byte) utoa::started#3 +(byte) utoa::started#4 +(word) utoa::value +(word) utoa::value#0 +(word) utoa::value#1 +(word) utoa::value#10 +(word) utoa::value#11 +(word) utoa::value#12 +(word) utoa::value#13 +(word) utoa::value#14 +(word) utoa::value#15 +(word) utoa::value#2 +(word) utoa::value#3 +(word) utoa::value#4 +(word) utoa::value#5 +(word) utoa::value#6 +(word) utoa::value#7 +(word) utoa::value#8 +(word) utoa::value#9 +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +(bool~) utoa_append::$0 +(label) utoa_append::@1 +(label) utoa_append::@2 +(label) utoa_append::@3 +(label) utoa_append::@return +(byte*) utoa_append::buffer +(byte*) utoa_append::buffer#0 +(byte*) utoa_append::buffer#1 +(byte*) utoa_append::buffer#2 +(byte*) utoa_append::buffer#3 +(byte*) utoa_append::buffer#4 +(byte) utoa_append::digit +(byte) utoa_append::digit#0 +(byte) utoa_append::digit#1 +(byte) utoa_append::digit#2 +(byte) utoa_append::digit#3 +(byte) utoa_append::digit#4 +(word) utoa_append::return +(word) utoa_append::return#0 +(word) utoa_append::return#1 +(word) utoa_append::return#2 +(word) utoa_append::return#3 +(word) utoa_append::return#4 +(word) utoa_append::sub +(word) utoa_append::sub#0 +(word) utoa_append::sub#1 +(word) utoa_append::sub#2 +(word) utoa_append::sub#3 +(word) utoa_append::value +(word) utoa_append::value#0 +(word) utoa_append::value#1 +(word) utoa_append::value#2 +(word) utoa_append::value#3 +(word) utoa_append::value#4 +(word) utoa_append::value#5 + +Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) strupr::$1 ← (number) 0 != *((byte*) strupr::src#2) +Adding number conversion cast (unumber) 0 in (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2) +Adding number conversion cast (unumber) $19 in (bool~) clrscr::$0 ← (byte) clrscr::l#2 < (number) $19 +Adding number conversion cast (unumber) 0 in (byte) conio_cursor_x ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) conio_cursor_y ← (number) 0 +Adding number conversion cast (unumber) $28 in (bool~) clrscr::$1 ← (byte) clrscr::c#2 < (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#3 + (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#3 + (number) $28 +Adding number conversion cast (unumber) $19 in (bool~) gotoxy::$0 ← (byte) gotoxy::y#2 > (number) $19 +Adding number conversion cast (unumber) $28 in (bool~) gotoxy::$2 ← (byte) gotoxy::x#2 >= (number) $28 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#0 ← (number) 0 +Adding number conversion cast (unumber) $28 in (number~) gotoxy::$4 ← (word~) gotoxy::$7 * (number) $28 +Adding number conversion cast (unumber) gotoxy::$4 in (number~) gotoxy::$4 ← (word~) gotoxy::$7 * (unumber)(number) $28 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#0 ← (number) 0 +Adding number conversion cast (unumber) $28 in (bool~) cputc::$1 ← (byte) conio_cursor_x == (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) conio_line_text ← (byte*) conio_line_text + (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) conio_line_color ← (byte*) conio_line_color + (number) $28 +Adding number conversion cast (unumber) 0 in (byte) conio_cursor_x ← (number) 0 +Adding number conversion cast (unumber) $19 in (bool~) cscroll::$0 ← (byte) conio_cursor_y == (number) $19 +Adding number conversion cast (unumber) 0 in (bool~) cscroll::$7 ← (number) 0 != (byte) conio_scroll_enable +Adding number conversion cast (unumber) $28 in (void*) memcpy::source#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $28 +Adding number conversion cast (unumber) $19*$28-$28 in (word) memcpy::num#0 ← (number) $19*(number) $28-(number) $28 +Adding number conversion cast (unumber) $28 in (void*) memcpy::source#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $28 +Adding number conversion cast (unumber) $19*$28-$28 in (word) memcpy::num#1 ← (number) $19*(number) $28-(number) $28 +Adding number conversion cast (unumber) $28 in (void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(number) $28 +Adding number conversion cast (unumber) $19*$28 in (void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(unumber)(number) $28 +Adding number conversion cast (unumber) $28 in (word) memset::num#0 ← (number) $28 +Adding number conversion cast (unumber) $28 in (void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(number) $28 +Adding number conversion cast (unumber) $19*$28 in (void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(unumber)(number) $28 +Adding number conversion cast (unumber) $28 in (word) memset::num#1 ← (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) conio_line_text ← (byte*) conio_line_text - (number) $28 +Adding number conversion cast (unumber) $28 in (byte*) conio_line_color ← (byte*) conio_line_color - (number) $28 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#1 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#1 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) cputs::$2 ← (number) 0 != (byte~) cputs::$0 +Adding number conversion cast (unumber) 5 in (byte) utoa::max_digits#1 ← (number) 5 +Adding number conversion cast (unumber) 4 in (byte) utoa::max_digits#2 ← (number) 4 +Adding number conversion cast (unumber) 6 in (byte) utoa::max_digits#3 ← (number) 6 +Adding number conversion cast (unumber) $10 in (byte) utoa::max_digits#4 ← (number) $10 +Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#2) ← (number) 0 +Adding number conversion cast (unumber) 1 in (number~) utoa::$4 ← (byte) utoa::max_digits#5 - (number) 1 +Adding number conversion cast (unumber) utoa::$4 in (number~) utoa::$4 ← (byte) utoa::max_digits#5 - (unumber)(number) 1 +Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#3) ← (number) 0 +Adding number conversion cast (unumber) 1 in (byte) utoa::started#1 ← (number) 1 +Adding number conversion cast (unumber) 0 in *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) printf_sint::$0 ← (signed word) printf_sint::value#2 < (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) printf_sint::$5 ← (number) 0 != (byte) printf_sint::format_sign_always#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$26 ← (number) 0 != (byte) printf_number_buffer::format_min_length#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$27 ← (number) 0 != (byte) printf_number_buffer::format_justify_left#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$28 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$29 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#1 +Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (number) 0 +Adding number conversion cast (snumber) 0 in (signed byte) printf_number_buffer::padding#2 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$30 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#2 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3 +Adding number conversion cast (snumber) 0 in (bool~) main::$1 ← (signed byte) main::signed_char_value#2 != (number) 0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) memcpy::src#0 ← (byte*)(void*) memcpy::source#2 +Inlining cast (byte*) memcpy::dst#0 ← (byte*)(void*) memcpy::destination#2 +Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 +Inlining cast (byte) conio_cursor_x ← (unumber)(number) 0 +Inlining cast (byte) conio_cursor_y ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::y#0 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::x#0 ← (unumber)(number) 0 +Inlining cast (byte) conio_cursor_x ← (unumber)(number) 0 +Inlining cast (word) memcpy::num#0 ← (unumber)(number) $19*(number) $28-(number) $28 +Inlining cast (word) memcpy::num#1 ← (unumber)(number) $19*(number) $28-(number) $28 +Inlining cast (word) memset::num#0 ← (unumber)(number) $28 +Inlining cast (word) memset::num#1 ← (unumber)(number) $28 +Inlining cast (byte) gotoxy::x#1 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::y#1 ← (unumber)(number) 0 +Inlining cast (byte) utoa::max_digits#1 ← (unumber)(number) 5 +Inlining cast (byte) utoa::max_digits#2 ← (unumber)(number) 4 +Inlining cast (byte) utoa::max_digits#3 ← (unumber)(number) 6 +Inlining cast (byte) utoa::max_digits#4 ← (unumber)(number) $10 +Inlining cast *((byte*) utoa::buffer#2) ← (unumber)(number) 0 +Inlining cast *((byte*) utoa::buffer#3) ← (unumber)(number) 0 +Inlining cast (byte) utoa::started#1 ← (unumber)(number) 1 +Inlining cast *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (unumber)(number) 0 +Inlining cast (signed byte) printf_number_buffer::padding#2 ← (snumber)(number) 0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 55296 +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $19 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 5 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast $10 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $19 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $19 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $19 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 6 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to word in (unumber~) gotoxy::$4 ← (word~) gotoxy::$7 * (byte) $28 +Inferred type updated to byte in (unumber~) utoa::$4 ← (byte) utoa::max_digits#5 - (byte) 1 +Inversing boolean not [33] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [32] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0 +Inversing boolean not [108] (bool~) gotoxy::$1 ← (byte) gotoxy::y#2 <= (byte) $19 from [107] (bool~) gotoxy::$0 ← (byte) gotoxy::y#2 > (byte) $19 +Inversing boolean not [112] (bool~) gotoxy::$3 ← (byte) gotoxy::x#2 < (byte) $28 from [111] (bool~) gotoxy::$2 ← (byte) gotoxy::x#2 >= (byte) $28 +Inversing boolean not [138] (bool~) cputc::$2 ← (byte) conio_cursor_x != (byte) $28 from [137] (bool~) cputc::$1 ← (byte) conio_cursor_x == (byte) $28 +Inversing boolean not [149] (bool~) cscroll::$1 ← (byte) conio_cursor_y != (byte) $19 from [148] (bool~) cscroll::$0 ← (byte) conio_cursor_y == (byte) $19 +Inversing boolean not [295] (bool~) printf_sint::$3 ← (byte) 0 == (byte) printf_sint::format_sign_always#1 from [294] (bool~) printf_sint::$5 ← (byte) 0 != (byte) printf_sint::format_sign_always#1 +Inversing boolean not [319] (bool~) printf_number_buffer::$0 ← (byte) 0 == (byte) printf_number_buffer::format_min_length#1 from [318] (bool~) printf_number_buffer::$26 ← (byte) 0 != (byte) printf_number_buffer::format_min_length#1 +Inversing boolean not [323] (bool~) printf_number_buffer::$1 ← (byte) 0 == (byte) printf_number_buffer::format_justify_left#1 from [322] (bool~) printf_number_buffer::$27 ← (byte) 0 != (byte) printf_number_buffer::format_justify_left#1 +Inversing boolean not [325] (bool~) printf_number_buffer::$2 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#1 from [324] (bool~) printf_number_buffer::$28 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#1 +Inversing boolean not [338] (bool~) printf_number_buffer::$20 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#1 from [337] (bool~) printf_number_buffer::$29 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#1 +Inversing boolean not [345] (bool~) printf_number_buffer::$23 ← (signed byte) printf_number_buffer::padding#1 >= (signed byte) 0 from [344] (bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (signed byte) 0 +Inversing boolean not [353] (bool~) printf_number_buffer::$7 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#2 from [352] (bool~) printf_number_buffer::$30 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#2 +Inversing boolean not [370] (bool~) printf_number_buffer::$12 ← (byte) 0 == (byte) printf_number_buffer::format_upper_case#1 from [369] (bool~) printf_number_buffer::$31 ← (byte) 0 != (byte) printf_number_buffer::format_upper_case#1 +Inversing boolean not [382] (bool~) printf_number_buffer::$14 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#3 from [381] (bool~) printf_number_buffer::$32 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#3 +Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias toupper::ch#1 = toupper::ch#2 toupper::ch#3 toupper::return#1 +Alias toupper::return#0 = toupper::$3 +Alias toupper::return#2 = toupper::return#4 +Alias memcpy::src_end#0 = memcpy::$0 +Alias memcpy::src#2 = memcpy::src#3 +Alias memcpy::dst#2 = memcpy::dst#3 +Alias memcpy::src_end#1 = memcpy::src_end#2 +Alias memcpy::destination#3 = memcpy::destination#5 memcpy::destination#4 memcpy::return#0 memcpy::return#4 memcpy::return#1 +Alias memset::return#0 = memset::str#2 memset::return#4 memset::return#1 +Alias memset::str#3 = memset::str#4 +Alias memset::num#2 = memset::num#3 +Alias memset::c#4 = memset::c#5 +Alias memset::end#0 = memset::$2 +Alias memset::c#2 = memset::c#3 +Alias memset::dst#2 = memset::dst#3 +Alias memset::end#1 = memset::end#2 +Alias memset::str#5 = memset::str#6 +Alias strupr::src#0 = strupr::str#1 +Alias strupr::src#2 = strupr::src#3 strupr::src#4 +Alias strupr::str#2 = strupr::str#5 strupr::str#3 strupr::str#4 strupr::return#0 strupr::return#3 strupr::return#1 +Alias toupper::return#3 = toupper::return#5 +Alias strlen::len#2 = strlen::len#4 strlen::len#3 strlen::return#0 strlen::return#3 strlen::return#1 +Alias strlen::str#2 = strlen::str#3 +Alias clrscr::line_text#5 = clrscr::line_text#6 +Alias clrscr::line_cols#5 = clrscr::line_cols#6 +Alias clrscr::l#2 = clrscr::l#5 +Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::line_text#3 +Alias clrscr::c#2 = clrscr::c#3 +Alias clrscr::line_cols#2 = clrscr::line_cols#4 clrscr::line_cols#3 +Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 +Alias gotoxy::x#4 = gotoxy::x#5 +Alias gotoxy::line_offset#0 = gotoxy::$4 +Alias gotoxy::y#4 = gotoxy::y#5 +Alias cputc::c#3 = cputc::c#4 +Alias cputs::c#1 = cputs::$0 cputs::c#2 +Alias cputs::s#0 = cputs::s#6 cputs::s#5 +Alias utoa::value#10 = utoa::value#8 utoa::value#12 utoa::value#13 utoa::value#9 utoa::value#14 utoa::value#15 utoa::value#11 +Alias utoa::buffer#10 = utoa::buffer#17 utoa::buffer#21 utoa::buffer#16 utoa::buffer#18 utoa::buffer#13 utoa::buffer#19 utoa::buffer#20 utoa::buffer#6 +Alias utoa::radix#1 = utoa::radix#2 utoa::radix#3 utoa::radix#4 +Alias utoa::digit#2 = utoa::digit#3 utoa::digit#6 utoa::digit#5 +Alias utoa::digit_values#10 = utoa::digit_values#5 utoa::digit_values#6 utoa::digit_values#9 +Alias utoa::value#2 = utoa::value#5 utoa::value#3 utoa::value#4 +Alias utoa::started#2 = utoa::started#3 +Alias utoa::buffer#11 = utoa::buffer#12 utoa::buffer#7 utoa::buffer#8 utoa::buffer#9 +Alias utoa::max_digits#10 = utoa::max_digits#8 utoa::max_digits#5 utoa::max_digits#9 +Alias utoa::digit_value#0 = utoa::digit_value#1 +Alias utoa_append::return#0 = utoa_append::return#3 +Alias utoa::value#0 = utoa::$9 +Alias utoa_append::digit#2 = utoa_append::digit#4 utoa_append::digit#3 +Alias utoa_append::value#2 = utoa_append::value#3 utoa_append::value#4 utoa_append::return#1 utoa_append::return#4 utoa_append::return#2 +Alias utoa_append::sub#1 = utoa_append::sub#2 +Alias utoa_append::buffer#1 = utoa_append::buffer#4 utoa_append::buffer#2 +Alias printf_padding::pad#3 = printf_padding::pad#4 printf_padding::pad#6 +Alias printf_padding::i#2 = printf_padding::i#4 printf_padding::i#3 +Alias printf_padding::length#3 = printf_padding::length#6 printf_padding::length#5 +Alias printf_sint::value#2 = printf_sint::value#3 printf_sint::value#5 printf_sint::value#6 +Alias printf_sint::format_radix#3 = printf_sint::format_radix#6 printf_sint::format_radix#4 printf_sint::format_radix#5 +Alias printf_sint::format_min_length#3 = printf_sint::format_min_length#6 printf_sint::format_min_length#4 printf_sint::format_min_length#5 +Alias printf_sint::format_justify_left#3 = printf_sint::format_justify_left#6 printf_sint::format_justify_left#4 printf_sint::format_justify_left#5 +Alias printf_sint::format_sign_always#1 = printf_sint::format_sign_always#5 printf_sint::format_sign_always#3 printf_sint::format_sign_always#6 +Alias printf_sint::format_zero_padding#3 = printf_sint::format_zero_padding#6 printf_sint::format_zero_padding#4 printf_sint::format_zero_padding#5 +Alias printf_sint::format_upper_case#3 = printf_sint::format_upper_case#6 printf_sint::format_upper_case#4 printf_sint::format_upper_case#5 +Alias printf_sint::value#0 = printf_sint::$4 +Alias printf_sint::format_min_length#1 = printf_sint::format_min_length#2 +Alias printf_sint::format_justify_left#1 = printf_sint::format_justify_left#2 +Alias printf_sint::format_sign_always#2 = printf_sint::format_sign_always#4 +Alias printf_sint::format_zero_padding#1 = printf_sint::format_zero_padding#2 +Alias printf_sint::format_upper_case#1 = printf_sint::format_upper_case#2 +Alias printf_sint::format_radix#1 = printf_sint::format_radix#2 +Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#4 printf_number_buffer::buffer_digits#18 printf_number_buffer::buffer_digits#19 +Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#4 printf_number_buffer::buffer_sign#7 printf_number_buffer::buffer_sign#11 +Alias printf_number_buffer::format_min_length#1 = printf_number_buffer::format_min_length#5 printf_number_buffer::format_min_length#3 printf_number_buffer::format_min_length#4 +Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#3 printf_number_buffer::format_justify_left#7 printf_number_buffer::format_justify_left#8 +Alias printf_number_buffer::format_zero_padding#10 = printf_number_buffer::format_zero_padding#16 printf_number_buffer::format_zero_padding#4 printf_number_buffer::format_zero_padding#11 +Alias printf_number_buffer::format_upper_case#10 = printf_number_buffer::format_upper_case#16 printf_number_buffer::format_upper_case#14 printf_number_buffer::format_upper_case#15 +Alias strlen::return#2 = strlen::return#4 +Alias printf_number_buffer::padding#1 = printf_number_buffer::$21 +Alias printf_number_buffer::len#0 = printf_number_buffer::len#3 +Alias printf_number_buffer::format_justify_left#4 = printf_number_buffer::format_justify_left#5 +Alias printf_number_buffer::format_zero_padding#5 = printf_number_buffer::format_zero_padding#6 +Alias printf_number_buffer::buffer_sign#8 = printf_number_buffer::buffer_sign#9 +Alias printf_number_buffer::format_upper_case#11 = printf_number_buffer::format_upper_case#12 +Alias printf_number_buffer::buffer_digits#15 = printf_number_buffer::buffer_digits#16 +Alias printf_number_buffer::padding#12 = printf_number_buffer::padding#4 printf_number_buffer::padding#3 +Alias printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#5 printf_number_buffer::buffer_sign#6 +Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#17 printf_number_buffer::format_zero_padding#12 +Alias printf_number_buffer::format_upper_case#13 = printf_number_buffer::format_upper_case#7 printf_number_buffer::format_upper_case#8 +Alias printf_number_buffer::buffer_digits#12 = printf_number_buffer::buffer_digits#17 printf_number_buffer::buffer_digits#13 +Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#20 printf_number_buffer::format_justify_left#18 +Alias printf_number_buffer::buffer_sign#2 = printf_number_buffer::buffer_sign#3 +Alias printf_number_buffer::format_zero_padding#13 = printf_number_buffer::format_zero_padding#8 printf_number_buffer::format_zero_padding#7 +Alias printf_number_buffer::padding#10 = printf_number_buffer::padding#13 printf_number_buffer::padding#9 +Alias printf_number_buffer::format_upper_case#4 = printf_number_buffer::format_upper_case#9 printf_number_buffer::format_upper_case#5 +Alias printf_number_buffer::buffer_digits#10 = printf_number_buffer::buffer_digits#14 printf_number_buffer::buffer_digits#9 +Alias printf_number_buffer::format_justify_left#15 = printf_number_buffer::format_justify_left#19 printf_number_buffer::format_justify_left#16 +Alias printf_number_buffer::padding#16 = printf_number_buffer::padding#6 printf_number_buffer::padding#5 +Alias printf_number_buffer::format_upper_case#2 = printf_number_buffer::format_upper_case#6 printf_number_buffer::format_upper_case#3 +Alias printf_number_buffer::buffer_digits#11 = printf_number_buffer::buffer_digits#8 printf_number_buffer::buffer_digits#7 +Alias printf_number_buffer::format_zero_padding#18 = printf_number_buffer::format_zero_padding#20 printf_number_buffer::format_zero_padding#2 +Alias printf_number_buffer::format_justify_left#12 = printf_number_buffer::format_justify_left#17 printf_number_buffer::format_justify_left#13 +Alias printf_number_buffer::format_zero_padding#3 = printf_number_buffer::format_zero_padding#9 +Alias printf_number_buffer::format_justify_left#2 = printf_number_buffer::format_justify_left#6 +Alias printf_number_buffer::padding#11 = printf_number_buffer::padding#7 printf_number_buffer::padding#8 +Alias printf_number_buffer::buffer_digits#3 = printf_number_buffer::buffer_digits#6 printf_number_buffer::buffer_digits#5 +Alias printf_number_buffer::format_zero_padding#14 = printf_number_buffer::format_zero_padding#19 printf_number_buffer::format_zero_padding#15 +Alias printf_number_buffer::format_justify_left#10 = printf_number_buffer::format_justify_left#14 printf_number_buffer::format_justify_left#9 +Alias printf_number_buffer::padding#14 = printf_number_buffer::padding#17 printf_number_buffer::padding#15 +Alias main::signed_char_value#2 = main::signed_char_value#3 +Alias main::signed_char_value#1 = main::signed_char_value#4 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias gotoxy::x#2 = gotoxy::x#4 +Alias gotoxy::y#3 = gotoxy::y#4 +Alias utoa::value#10 = utoa::value#7 +Alias utoa::buffer#10 = utoa::buffer#15 +Alias utoa::digit#2 = utoa::digit#4 +Alias utoa::max_digits#10 = utoa::max_digits#6 +Alias utoa::digit_values#10 = utoa::digit_values#7 +Alias printf_sint::format_radix#1 = printf_sint::format_radix#3 +Alias printf_sint::format_min_length#1 = printf_sint::format_min_length#3 +Alias printf_sint::format_justify_left#1 = printf_sint::format_justify_left#3 +Alias printf_sint::format_sign_always#1 = printf_sint::format_sign_always#2 +Alias printf_sint::format_zero_padding#1 = printf_sint::format_zero_padding#3 +Alias printf_sint::format_upper_case#1 = printf_sint::format_upper_case#3 +Alias printf_number_buffer::format_min_length#1 = printf_number_buffer::format_min_length#2 +Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#4 +Alias printf_number_buffer::format_zero_padding#10 = printf_number_buffer::format_zero_padding#5 +Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#8 +Alias printf_number_buffer::format_upper_case#10 = printf_number_buffer::format_upper_case#11 +Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#15 +Alias printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 +Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#13 printf_number_buffer::format_zero_padding#18 printf_number_buffer::format_zero_padding#14 printf_number_buffer::format_zero_padding#3 +Alias printf_number_buffer::padding#10 = printf_number_buffer::padding#12 printf_number_buffer::padding#16 printf_number_buffer::padding#14 printf_number_buffer::padding#11 +Alias printf_number_buffer::format_upper_case#1 = printf_number_buffer::format_upper_case#4 printf_number_buffer::format_upper_case#13 printf_number_buffer::format_upper_case#2 +Alias printf_number_buffer::buffer_digits#10 = printf_number_buffer::buffer_digits#12 printf_number_buffer::buffer_digits#11 printf_number_buffer::buffer_digits#3 printf_number_buffer::buffer_digits#2 +Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#15 printf_number_buffer::format_justify_left#12 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_justify_left#2 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#11 +Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#10 +Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 +Alias printf_number_buffer::format_upper_case#1 = printf_number_buffer::format_upper_case#10 +Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#10 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Identical Phi Values (byte) toupper::ch#1 (byte) toupper::ch#0 +Identical Phi Values (byte*) memcpy::src_end#1 (byte*) memcpy::src_end#0 +Identical Phi Values (void*) memcpy::destination#3 (void*) memcpy::destination#2 +Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 +Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 +Identical Phi Values (byte) memset::c#2 (byte) memset::c#4 +Identical Phi Values (byte*) strupr::src#0 (byte*) strupr::str#0 +Identical Phi Values (byte*) strupr::str#2 (byte*) strupr::src#0 +Identical Phi Values (byte*) strlen::str#4 (byte*) strlen::str#1 +Identical Phi Values (byte*) clrscr::line_text#2 (byte*) clrscr::line_text#5 +Identical Phi Values (byte*) clrscr::line_cols#2 (byte*) clrscr::line_cols#5 +Identical Phi Values (byte) clrscr::l#3 (byte) clrscr::l#2 +Identical Phi Values (byte) gotoxy::y#2 (byte) gotoxy::y#1 +Identical Phi Values (byte) gotoxy::x#2 (byte) gotoxy::x#1 +Identical Phi Values (byte) utoa::radix#1 (byte) utoa::radix#0 +Identical Phi Values (word) utoa::value#10 (word) utoa::value#1 +Identical Phi Values (byte*) utoa::buffer#10 (byte*) utoa::buffer#5 +Identical Phi Values (byte) utoa::max_digits#10 (byte) utoa::max_digits#7 +Identical Phi Values (word*) utoa::digit_values#10 (word*) utoa::digit_values#8 +Identical Phi Values (word) utoa_append::value#5 (word) utoa_append::value#0 +Identical Phi Values (word) utoa_append::sub#3 (word) utoa_append::sub#0 +Identical Phi Values (byte*) utoa_append::buffer#3 (byte*) utoa_append::buffer#0 +Identical Phi Values (word) utoa_append::sub#1 (word) utoa_append::sub#3 +Identical Phi Values (byte*) utoa_append::buffer#1 (byte*) utoa_append::buffer#3 +Identical Phi Values (byte) printf_padding::length#3 (byte) printf_padding::length#4 +Identical Phi Values (byte) printf_padding::pad#3 (byte) printf_padding::pad#5 +Identical Phi Values (signed word) printf_sint::value#2 (signed word) printf_sint::value#1 +Identical Phi Values (byte) printf_sint::format_sign_always#1 (byte) printf_sint::format_sign_always#0 +Identical Phi Values (byte) printf_sint::format_radix#1 (byte) printf_sint::format_radix#0 +Identical Phi Values (byte) printf_sint::format_min_length#1 (byte) printf_sint::format_min_length#0 +Identical Phi Values (byte) printf_sint::format_justify_left#1 (byte) printf_sint::format_justify_left#0 +Identical Phi Values (byte) printf_sint::format_zero_padding#1 (byte) printf_sint::format_zero_padding#0 +Identical Phi Values (byte) printf_sint::format_upper_case#1 (byte) printf_sint::format_upper_case#0 +Identical Phi Values (byte) printf_number_buffer::format_min_length#1 (byte) printf_number_buffer::format_min_length#0 +Identical Phi Values (byte) printf_number_buffer::format_justify_left#1 (byte) printf_number_buffer::format_justify_left#0 +Identical Phi Values (byte) printf_number_buffer::format_zero_padding#1 (byte) printf_number_buffer::format_zero_padding#0 +Identical Phi Values (byte*) printf_number_buffer::buffer_digits#1 (byte*) printf_number_buffer::buffer_digits#0 +Identical Phi Values (byte) printf_number_buffer::buffer_sign#1 (byte) printf_number_buffer::buffer_sign#0 +Identical Phi Values (byte) printf_number_buffer::format_upper_case#1 (byte) printf_number_buffer::format_upper_case#0 +Identical Phi Values (signed word) test_casting::signed_short_value#1 (signed word) test_casting::signed_short_value#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) memcpy::$1 [15] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 +Simple Condition (bool~) memset::$1 [22] if((word) memset::num#2<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$3 [29] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 +Simple Condition (bool~) strupr::$1 [36] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 +Simple Condition (bool~) strlen::$0 [48] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 +Simple Condition (bool~) clrscr::$0 [57] if((byte) clrscr::l#2<(byte) $19) goto clrscr::@2 +Simple Condition (bool~) clrscr::$1 [65] if((byte) clrscr::c#2<(byte) $28) goto clrscr::@5 +Simple Condition (bool~) gotoxy::$1 [75] if((byte) gotoxy::y#1<=(byte) $19) goto gotoxy::@1 +Simple Condition (bool~) gotoxy::$3 [78] if((byte) gotoxy::x#1<(byte) $28) goto gotoxy::@2 +Simple Condition (bool~) cputc::$0 [93] if((byte) cputc::c#3==(byte) ' +') goto cputc::@1 +Simple Condition (bool~) cputc::$2 [99] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return +Simple Condition (bool~) cscroll::$1 [109] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return +Simple Condition (bool~) cscroll::$7 [111] if((byte) 0!=(byte) conio_scroll_enable) goto cscroll::@3 +Simple Condition (bool~) cputs::$2 [145] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 +Simple Condition (bool~) utoa::$0 [153] if((byte) utoa::radix#0==(const byte) DECIMAL) goto utoa::@1 +Simple Condition (bool~) utoa::$1 [157] if((byte) utoa::radix#0==(const byte) HEXADECIMAL) goto utoa::@2 +Simple Condition (bool~) utoa::$2 [161] if((byte) utoa::radix#0==(const byte) OCTAL) goto utoa::@3 +Simple Condition (bool~) utoa::$3 [165] if((byte) utoa::radix#0==(const byte) BINARY) goto utoa::@4 +Simple Condition (bool~) utoa::$5 [182] if((byte) utoa::digit#2<(byte~) utoa::$4) goto utoa::@11 +Simple Condition (bool~) utoa_append::$0 [207] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 +Simple Condition (bool~) printf_padding::$0 [216] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 +Simple Condition (bool~) printf_sint::$0 [224] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 +Simple Condition (bool~) printf_sint::$3 [228] if((byte) 0==(byte) printf_sint::format_sign_always#0) goto printf_sint::@2 +Simple Condition (bool~) printf_number_buffer::$0 [249] if((byte) 0==(byte) printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1 +Simple Condition (bool~) printf_number_buffer::$20 [263] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@13 +Simple Condition (bool~) printf_number_buffer::$23 [268] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@1 +Simple Condition (bool~) printf_number_buffer::$7 [272] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3 +Simple Condition (bool~) printf_number_buffer::$12 [282] if((byte) 0==(byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5 +Simple Condition (bool~) main::$1 [316] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Rewriting && if()-condition to two if()s [3] (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1 +Rewriting ! if()-condition to reversed if() [187] (bool~) utoa::$8 ← ! (bool~) utoa::$7 +Rewriting || if()-condition to two if()s [186] (bool~) utoa::$7 ← (byte) utoa::started#2 || (bool~) utoa::$6 +Rewriting ! if()-condition to reversed if() [255] (bool~) printf_number_buffer::$5 ← ! (bool~) printf_number_buffer::$4 +Rewriting && if()-condition to two if()s [254] (bool~) printf_number_buffer::$4 ← (bool~) printf_number_buffer::$3 && (signed byte) printf_number_buffer::padding#10 +Rewriting && if()-condition to two if()s [253] (bool~) printf_number_buffer::$3 ← (bool~) printf_number_buffer::$1 && (bool~) printf_number_buffer::$2 +Rewriting ! if()-condition to reversed if() [277] (bool~) printf_number_buffer::$10 ← ! (bool~) printf_number_buffer::$9 +Rewriting && if()-condition to two if()s [276] (bool~) printf_number_buffer::$9 ← (byte) printf_number_buffer::format_zero_padding#0 && (signed byte) printf_number_buffer::padding#10 +Rewriting ! if()-condition to reversed if() [291] (bool~) printf_number_buffer::$17 ← ! (bool~) printf_number_buffer::$16 +Rewriting && if()-condition to two if()s [290] (bool~) printf_number_buffer::$16 ← (bool~) printf_number_buffer::$15 && (signed byte) printf_number_buffer::padding#10 +Rewriting && if()-condition to two if()s [289] (bool~) printf_number_buffer::$15 ← (byte) printf_number_buffer::format_justify_left#0 && (bool~) printf_number_buffer::$14 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Warning! Adding boolean cast to non-boolean condition (byte) utoa::started#2 +Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_zero_padding#0 +Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_justify_left#0 +Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 +Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 +Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 +Constant right-side identified [114] (word) memcpy::num#0 ← (unumber)(number) $19*(number) $28-(number) $28 +Constant right-side identified [119] (word) memcpy::num#1 ← (unumber)(number) $19*(number) $28-(number) $28 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) strlen::len#0 = 0 +Constant (const byte*) clrscr::line_text#0 = CONIO_SCREEN_TEXT +Constant (const byte*) clrscr::line_cols#0 = CONIO_SCREEN_COLORS +Constant (const byte) clrscr::l#0 = 0 +Constant (const byte) clrscr::c#0 = 0 +Constant (const byte) gotoxy::y#0 = 0 +Constant (const byte) gotoxy::x#0 = 0 +Constant (const void*) memcpy::destination#0 = (void*)CONIO_SCREEN_TEXT +Constant (const void*) memcpy::source#0 = (void*)CONIO_SCREEN_TEXT+$28 +Constant (const word) memcpy::num#0 = (unumber)$19*$28-$28 +Constant (const void*) memcpy::destination#1 = (void*)CONIO_SCREEN_COLORS +Constant (const void*) memcpy::source#1 = (void*)CONIO_SCREEN_COLORS+$28 +Constant (const word) memcpy::num#1 = (unumber)$19*$28-$28 +Constant (const void*) memset::str#0 = (void*)CONIO_SCREEN_TEXT+(word)$19*$28-$28 +Constant (const byte) memset::c#0 = ' ' +Constant (const word) memset::num#0 = $28 +Constant (const void*) memset::str#1 = (void*)CONIO_SCREEN_COLORS+(word)$19*$28-$28 +Constant (const word) memset::num#1 = $28 +Constant (const byte) gotoxy::x#1 = 0 +Constant (const byte) gotoxy::y#1 = 0 +Constant (const byte) cputs::c#0 = 0 +Constant (const byte) utoa::max_digits#0 = 0 +Constant (const word*) utoa::digit_values#0 = (word*) 0 +Constant (const byte) utoa::max_digits#1 = 5 +Constant (const word*) utoa::digit_values#1 = RADIX_DECIMAL_VALUES +Constant (const byte) utoa::max_digits#2 = 4 +Constant (const word*) utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES +Constant (const byte) utoa::max_digits#3 = 6 +Constant (const word*) utoa::digit_values#3 = RADIX_OCTAL_VALUES +Constant (const byte) utoa::max_digits#4 = $10 +Constant (const word*) utoa::digit_values#4 = RADIX_BINARY_VALUES +Constant (const byte) utoa::started#0 = 0 +Constant (const byte) utoa::digit#0 = 0 +Constant (const byte) utoa::started#1 = 1 +Constant (const byte) utoa_append::digit#0 = 0 +Constant (const byte) printf_padding::i#0 = 0 +Constant (const byte*) utoa::buffer#5 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS +Constant (const byte*) printf_number_buffer::buffer_digits#0 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS +Constant (const signed byte) printf_number_buffer::padding#0 = 0 +Constant (const signed byte) printf_number_buffer::padding#2 = 0 +Constant (const byte) printf_padding::pad#0 = ' ' +Constant (const byte) printf_padding::pad#1 = '0' +Constant (const byte) printf_padding::pad#2 = ' ' +Constant (const byte) printf_sint::format_min_length#0 = 0 +Constant (const byte) printf_sint::format_justify_left#0 = 0 +Constant (const byte) printf_sint::format_sign_always#0 = 0 +Constant (const byte) printf_sint::format_zero_padding#0 = 0 +Constant (const byte) printf_sint::format_upper_case#0 = 0 +Constant (const byte) printf_sint::format_radix#0 = DECIMAL +Constant (const to_nomodify byte*) cputs::s#2 = test_casting::s +Constant (const signed byte) main::signed_char_value#0 = -5 +Constant (const byte) conio_textcolor = CONIO_TEXTCOLOR_DEFAULT +Constant (const byte) conio_scroll_enable = 1 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) memset::c#1 = conio_textcolor +Constant (const byte) utoa::radix#0 = printf_sint::format_radix#0 +Constant (const byte) printf_number_buffer::format_min_length#0 = printf_sint::format_min_length#0 +Constant (const byte) printf_number_buffer::format_justify_left#0 = printf_sint::format_justify_left#0 +Constant (const byte) printf_number_buffer::format_sign_always#0 = printf_sint::format_sign_always#0 +Constant (const byte) printf_number_buffer::format_zero_padding#0 = printf_sint::format_zero_padding#0 +Constant (const byte) printf_number_buffer::format_upper_case#0 = printf_sint::format_upper_case#0 +Constant (const byte) printf_number_buffer::format_radix#0 = printf_sint::format_radix#0 +Constant (const byte*) strlen::str#1 = printf_number_buffer::buffer_digits#0 +Constant (const to_nomodify byte*) cputs::s#1 = printf_number_buffer::buffer_digits#0 +Constant (const byte*) strupr::str#0 = printf_number_buffer::buffer_digits#0 +Successful SSA optimization Pass2ConstantIdentification +Constant (const signed byte) printf_number_buffer::$25 = (signed byte)printf_number_buffer::format_min_length#0 +Constant (const byte*) strupr::return#2 = strupr::str#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [75] if((const byte) gotoxy::y#1<=(byte) $19) goto gotoxy::@1 +if() condition always true - replacing block destination [78] if((const byte) gotoxy::x#1<(byte) $28) goto gotoxy::@2 +if() condition always true - replacing block destination [111] if((byte) 0!=(const byte) conio_scroll_enable) goto cscroll::@3 +if() condition always true - replacing block destination [153] if((const byte) utoa::radix#0==(const byte) DECIMAL) goto utoa::@1 +if() condition always false - eliminating [157] if((const byte) utoa::radix#0==(const byte) HEXADECIMAL) goto utoa::@2 +if() condition always false - eliminating [161] if((const byte) utoa::radix#0==(const byte) OCTAL) goto utoa::@3 +if() condition always false - eliminating [165] if((const byte) utoa::radix#0==(const byte) BINARY) goto utoa::@4 +if() condition always true - replacing block destination [228] if((byte) 0==(const byte) printf_sint::format_sign_always#0) goto printf_sint::@2 +if() condition always true - replacing block destination [249] if((byte) 0==(const byte) printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1 +if() condition always true - replacing block destination [282] if((byte) 0==(const byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5 +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (signed byte)(const byte) printf_number_buffer::format_min_length#0 in +Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)&printf_buffer in [222] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte) 0 +Simplifying expression containing zero (byte*)&printf_buffer in [226] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte) '-' +Simplifying expression containing zero (byte*)&printf_buffer in [229] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte) '+' +Simplifying expression containing zero (byte*)&printf_buffer in [236] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) +Simplifying expression containing zero printf_number_buffer::len#2 in [266] (signed byte) printf_number_buffer::padding#1 ← (const signed byte) printf_number_buffer::$25 - (signed byte) printf_number_buffer::len#2 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable (void*) memcpy::return#2 and assignment [84] (void*) memcpy::return#2 ← (void*) memcpy::destination#2 +Eliminating unused variable (void*) memcpy::return#3 and assignment [86] (void*) memcpy::return#3 ← (void*) memcpy::destination#2 +Eliminating unused variable (void*) memset::return#2 and assignment [88] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [90] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused constant (const byte*) strupr::return#2 +Eliminating unused constant (const byte) cputs::c#0 +Eliminating unused constant (const byte) BINARY +Eliminating unused constant (const byte) OCTAL +Eliminating unused constant (const byte) HEXADECIMAL +Eliminating unused constant (const byte) utoa::max_digits#0 +Eliminating unused constant (const word*) utoa::digit_values#0 +Eliminating unused constant (const byte) utoa::radix#0 +Eliminating unused constant (const byte) printf_number_buffer::format_min_length#0 +Eliminating unused constant (const byte) printf_number_buffer::format_sign_always#0 +Eliminating unused constant (const byte) printf_number_buffer::format_upper_case#0 +Eliminating unused constant (const byte) printf_number_buffer::format_radix#0 +Eliminating unused constant (const signed byte) printf_number_buffer::$25 +Eliminating unused constant (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN +Eliminating unused constant (const byte) conio_scroll_enable +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte) printf_sint::format_min_length#0 +Eliminating unused constant (const byte) printf_sint::format_sign_always#0 +Eliminating unused constant (const byte) printf_sint::format_upper_case#0 +Eliminating unused constant (const byte) printf_sint::format_radix#0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte) DECIMAL +Successful SSA optimization PassNEliminateUnusedVars +Eliminating variable (bool~) toupper::$0 from unused block toupper +Eliminating variable (bool~) toupper::$1 from unused block toupper +Eliminating variable (byte) toupper::return#0 from unused block toupper::@1 +Eliminating variable (byte) toupper::return#2 from unused block toupper::@return +Eliminating variable (byte*) strupr::src#2 from unused block strupr::@1 +Eliminating variable (byte) toupper::ch#0 from unused block strupr::@2 +Eliminating variable (byte) toupper::return#3 from unused block strupr::@2 +Eliminating variable (byte~) strupr::$0 from unused block strupr::@4 +Eliminating variable (byte*) strupr::src#1 from unused block strupr::@4 +Eliminating variable (byte*) strlen::str#2 from unused block strlen::@1 +Eliminating variable (word) strlen::len#2 from unused block strlen::@1 +Eliminating variable (word) strlen::len#1 from unused block strlen::@2 +Eliminating variable (byte*) strlen::str#0 from unused block strlen::@2 +Eliminating variable (byte) gotoxy::y#3 from unused block gotoxy::@1 +Eliminating variable (byte) gotoxy::x#3 from unused block gotoxy::@2 +Eliminating variable (word~) gotoxy::$7 from unused block gotoxy::@2 +Eliminating variable (word) gotoxy::line_offset#0 from unused block gotoxy::@2 +Eliminating variable (byte*~) gotoxy::$5 from unused block gotoxy::@2 +Eliminating variable (byte*~) gotoxy::$6 from unused block gotoxy::@2 +Eliminating variable (byte*) utoa::buffer#0 from unused block utoa::@9 +Eliminating variable (byte*) utoa::buffer#1 from unused block utoa::@9 +Eliminating variable (byte*) utoa::buffer#2 from unused block utoa::@9 +Eliminating variable (word) strlen::return#2 from unused block printf_number_buffer::@6 +Eliminating variable (word~) printf_number_buffer::$19 from unused block printf_number_buffer::@15 +Eliminating variable (signed byte) printf_number_buffer::len#0 from unused block printf_number_buffer::@15 +Eliminating variable (signed byte) printf_number_buffer::len#2 from unused block printf_number_buffer::@13 +Eliminating variable (signed byte) printf_number_buffer::padding#1 from unused block printf_number_buffer::@13 +Eliminating variable (signed byte) printf_number_buffer::len#1 from unused block printf_number_buffer::@7 +Removing unused procedure toupper +Removing unused procedure block toupper +Removing unused procedure block toupper::@1 +Removing PHI-reference to removed block (toupper::@1) in block toupper::@return +Removing unused procedure block toupper::@2 +Removing PHI-reference to removed block (toupper::@2) in block toupper::@return +Removing unused procedure block toupper::@return +Removing unused procedure block toupper::@3 +Removing unused procedure strupr +Removing unused procedure block strupr +Removing PHI-reference to removed block (strupr) in block strupr::@1 +Removing unused procedure block strupr::@1 +Removing unused procedure block strupr::@2 +Removing unused procedure block strupr::@4 +Removing unused procedure block strupr::@3 +Removing unused procedure block strupr::@return +Removing unused procedure strlen +Removing unused procedure block strlen +Removing PHI-reference to removed block (strlen) in block strlen::@1 +Removing PHI-reference to removed block (strlen) in block strlen::@1 +Removing unused procedure block strlen::@1 +Removing unused procedure block strlen::@2 +Removing unused procedure block strlen::@3 +Removing unused procedure block strlen::@return +Removing unused procedure gotoxy +Removing unused procedure block gotoxy +Removing PHI-reference to removed block (gotoxy) in block gotoxy::@1 +Removing unused procedure block gotoxy::@1 +Removing PHI-reference to removed block (gotoxy::@1) in block gotoxy::@2 +Removing unused procedure block gotoxy::@3 +Removing unused procedure block gotoxy::@2 +Removing unused procedure block gotoxy::@4 +Removing unused procedure block gotoxy::@return +Removing unused block cscroll::@2 +Removing unused block cscroll::@8 +Removing unused block utoa::@6 +Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 +Removing unused block utoa::@2 +Removing unused block utoa::@7 +Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 +Removing unused block utoa::@3 +Removing unused block utoa::@8 +Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 +Removing unused block utoa::@4 +Removing unused block utoa::@9 +Removing PHI-reference to removed block (printf_sint::@4) in block printf_sint::@2 +Removing unused block printf_sint::@4 +Removing unused block printf_number_buffer::@6 +Removing PHI-reference to removed block (printf_number_buffer::@15) in block printf_number_buffer::@13 +Removing unused block printf_number_buffer::@15 +Removing PHI-reference to removed block (printf_number_buffer::@13) in block printf_number_buffer::@1 +Removing unused block printf_number_buffer::@13 +Removing unused block printf_number_buffer::@7 +Removing PHI-reference to removed block (printf_number_buffer::@14) in block printf_number_buffer::@1 +Removing unused block printf_number_buffer::@14 +Removing unused block printf_number_buffer::@11 +Removing unused block printf_number_buffer::@20 +Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) 0 in (bool~) utoa::$12 ← (number) 0 != (byte) utoa::started#2 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$33 ← (number) 0 != (const byte) printf_number_buffer::format_zero_padding#0 +Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$34 ← (number) 0 != (const byte) printf_number_buffer::format_justify_left#0 +Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$35 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 +Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$36 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 +Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$37 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Identical Phi Values (byte) utoa::max_digits#7 (const byte) utoa::max_digits#1 +Identical Phi Values (word*) utoa::digit_values#8 (const word*) utoa::digit_values#1 +Identical Phi Values (signed byte) printf_number_buffer::padding#10 (const signed byte) printf_number_buffer::padding#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) utoa::$12 [77] if((byte) 0!=(byte) utoa::started#2) goto utoa::@14 +Simple Condition (bool~) printf_number_buffer::$1 [118] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@23 +Simple Condition (bool~) printf_number_buffer::$33 [123] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@24 +Simple Condition (bool~) printf_number_buffer::$34 [131] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@26 +Simple Condition (bool~) utoa::$6 [152] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14 +Simple Condition (bool~) printf_number_buffer::$35 [154] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8 +Simple Condition (bool~) printf_number_buffer::$2 [155] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@22 +Simple Condition (bool~) printf_number_buffer::$36 [157] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10 +Simple Condition (bool~) printf_number_buffer::$37 [159] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12 +Simple Condition (bool~) printf_number_buffer::$14 [160] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@25 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [118] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 +Negating conditional jump and destination [123] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 +Negating conditional jump and destination [131] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return +Negating conditional jump and destination [155] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 +Negating conditional jump and destination [160] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant right-side identified [71] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1 +Constant right-side identified [120] (byte) printf_padding::length#0 ← (byte)(const signed byte) printf_number_buffer::padding#0 +Constant right-side identified [126] (byte) printf_padding::length#1 ← (byte)(const signed byte) printf_number_buffer::padding#0 +Constant right-side identified [132] (byte) printf_padding::length#2 ← (byte)(const signed byte) printf_number_buffer::padding#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) utoa::$4 = utoa::max_digits#1-1 +Constant (const byte) printf_padding::length#0 = (byte)printf_number_buffer::padding#0 +Constant (const byte) printf_padding::length#1 = (byte)printf_number_buffer::padding#0 +Constant (const byte) printf_padding::length#2 = (byte)printf_number_buffer::padding#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [118] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 +if() condition always true - replacing block destination [123] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 +if() condition always true - replacing block destination [131] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return +if() condition always false - eliminating [154] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8 +if() condition always false - eliminating [155] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 +if() condition always false - eliminating [157] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10 +if() condition always false - eliminating [159] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12 +if() condition always false - eliminating [160] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in +Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in +Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in +Successful SSA optimization PassNSimplifyConstantZero +Eliminating unused constant (const byte) utoa::max_digits#2 +Eliminating unused constant (const word*) utoa::digit_values#2 +Eliminating unused constant (const byte) utoa::max_digits#3 +Eliminating unused constant (const word*) utoa::digit_values#3 +Eliminating unused constant (const byte) utoa::max_digits#4 +Eliminating unused constant (const word*) utoa::digit_values#4 +Eliminating unused constant (const signed byte) printf_number_buffer::padding#0 +Eliminating unused constant (const signed byte) printf_number_buffer::padding#2 +Eliminating unused constant (const byte) printf_number_buffer::format_justify_left#0 +Eliminating unused constant (const byte) printf_number_buffer::format_zero_padding#0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const word*) RADIX_BINARY_VALUES +Eliminating unused constant (const word*) RADIX_OCTAL_VALUES +Eliminating unused constant (const word*) RADIX_HEXADECIMAL_VALUES +Eliminating unused constant (const byte) printf_sint::format_justify_left#0 +Eliminating unused constant (const byte) printf_sint::format_zero_padding#0 +Successful SSA optimization PassNEliminateUnusedVars +Eliminating variable (byte) printf_padding::length#4 from unused block printf_padding +Eliminating variable (byte) printf_padding::pad#5 from unused block printf_padding +Eliminating variable (byte) printf_padding::i#2 from unused block printf_padding::@1 +Eliminating variable (byte) cputc::c#1 from unused block printf_padding::@2 +Eliminating variable (byte) printf_padding::i#1 from unused block printf_padding::@3 +Removing unused procedure printf_padding +Removing unused procedure block printf_padding +Removing PHI-reference to removed block (printf_padding) in block printf_padding::@1 +Removing unused procedure block printf_padding::@1 +Removing unused procedure block printf_padding::@2 +Removing PHI-reference to removed block (printf_padding::@2) in block cputc +Removing unused procedure block printf_padding::@3 +Removing unused procedure block printf_padding::@return +Removing unused block printf_number_buffer::@8 +Removing unused block printf_number_buffer::@16 +Removing unused block printf_number_buffer::@10 +Removing unused block printf_number_buffer::@18 +Removing unused block printf_number_buffer::@12 +Removing unused block printf_number_buffer::@21 +Removing unused block printf_number_buffer::@24 +Removing unused block printf_number_buffer::@25 +Removing unused block printf_number_buffer::@26 +Successful SSA optimization Pass2EliminateUnusedBlocks +Inlining Noop Cast [1] (byte*) memcpy::src#0 ← (byte*)(void*) memcpy::source#2 keeping memcpy::source#2 +Inlining Noop Cast [2] (byte*) memcpy::dst#0 ← (byte*)(void*) memcpy::destination#2 keeping memcpy::destination#2 +Inlining Noop Cast [3] (byte*~) memcpy::$2 ← (byte*)(void*) memcpy::source#2 keeping memcpy::source#2 +Inlining Noop Cast [13] (byte*~) memset::$4 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [15] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [98] (word) printf_sint::uvalue#0 ← (word)(signed word) printf_sint::value#4 keeping printf_sint::value#4 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift [71] (byte~) utoa::$10 ← (byte) utoa::digit#2 * (const byte) SIZEOF_WORD +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings (const void*) memcpy::destination#0 +Inlining constant with var siblings (const void*) memcpy::source#0 +Inlining constant with var siblings (const word) memcpy::num#0 +Inlining constant with var siblings (const void*) memcpy::destination#1 +Inlining constant with var siblings (const void*) memcpy::source#1 +Inlining constant with var siblings (const word) memcpy::num#1 +Inlining constant with var siblings (const void*) memset::str#0 +Inlining constant with var siblings (const byte) memset::c#0 +Inlining constant with var siblings (const word) memset::num#0 +Inlining constant with var siblings (const void*) memset::str#1 +Inlining constant with var siblings (const word) memset::num#1 +Inlining constant with var siblings (const byte) memset::c#1 +Inlining constant with var siblings (const byte*) clrscr::line_text#0 +Inlining constant with var siblings (const byte*) clrscr::line_cols#0 +Inlining constant with var siblings (const byte) clrscr::l#0 +Inlining constant with var siblings (const byte) clrscr::c#0 +Inlining constant with var siblings (const to_nomodify byte*) cputs::s#2 +Inlining constant with var siblings (const to_nomodify byte*) cputs::s#1 +Inlining constant with var siblings (const byte) utoa::started#0 +Inlining constant with var siblings (const byte) utoa::digit#0 +Inlining constant with var siblings (const byte) utoa::started#1 +Inlining constant with var siblings (const byte*) utoa::buffer#5 +Inlining constant with var siblings (const byte) utoa_append::digit#0 +Inlining constant with var siblings (const signed byte) main::signed_char_value#0 +Constant inlined utoa_append::digit#0 = (byte) 0 +Constant inlined utoa::digit_values#1 = (const word*) RADIX_DECIMAL_VALUES +Constant inlined cputs::s#1 = (const byte*) printf_number_buffer::buffer_digits#0 +Constant inlined cputs::s#2 = (const byte*) test_casting::s +Constant inlined conio_textcolor = (const nomodify byte) LIGHT_BLUE +Constant inlined memcpy::destination#0 = (void*)(const nomodify byte*) DEFAULT_SCREEN +Constant inlined memset::num#1 = (byte) $28 +Constant inlined memcpy::destination#1 = (void*)(const nomodify byte*) COLORRAM +Constant inlined memset::num#0 = (byte) $28 +Constant inlined clrscr::l#0 = (byte) 0 +Constant inlined memcpy::source#1 = (void*)(const nomodify byte*) COLORRAM+(byte) $28 +Constant inlined utoa::digit#0 = (byte) 0 +Constant inlined CONIO_SCREEN_TEXT = (const nomodify byte*) DEFAULT_SCREEN +Constant inlined main::signed_char_value#0 = (signed byte) -5 +Constant inlined utoa::$4 = (const byte) utoa::max_digits#1-(byte) 1 +Constant inlined CONIO_TEXTCOLOR_DEFAULT = (const nomodify byte) LIGHT_BLUE +Constant inlined memset::str#1 = (void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 +Constant inlined memset::str#0 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 +Constant inlined CONIO_SCREEN_COLORS = (const nomodify byte*) COLORRAM +Constant inlined clrscr::line_text#0 = (const nomodify byte*) DEFAULT_SCREEN +Constant inlined utoa::started#1 = (byte) 1 +Constant inlined utoa::started#0 = (byte) 0 +Constant inlined memcpy::source#0 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 +Constant inlined memcpy::num#1 = (word)(number) $19*(number) $28-(number) $28 +Constant inlined memcpy::num#0 = (word)(number) $19*(number) $28-(number) $28 +Constant inlined utoa::buffer#5 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS +Constant inlined memset::c#0 = (byte) ' ' +Constant inlined memset::c#1 = (const nomodify byte) LIGHT_BLUE +Constant inlined clrscr::c#0 = (byte) 0 +Constant inlined clrscr::line_cols#0 = (const nomodify byte*) COLORRAM +Successful SSA optimization Pass2ConstantInlining +Identical Phi Values (word) memcpy::num#2 (word)(number) $19*(number) $28-(number) $28 +Identical Phi Values (word) memset::num#2 (byte) $28 +Successful SSA optimization Pass2IdenticalPhiElimination +if() condition always false - eliminating [9] if((byte) $28<=(byte) 0) goto memset::@1 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const byte) SIZEOF_WORD +Successful SSA optimization PassNEliminateUnusedVars +Added new block during phi lifting utoa::@17(between utoa::@16 and utoa::@13) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of clrscr +Adding NOP phi() at start of clrscr::@2 +Adding NOP phi() at start of test_casting::@1 +Adding NOP phi() at start of test_casting::@2 +Adding NOP phi() at start of printf_sint::@6 +Adding NOP phi() at start of utoa +Adding NOP phi() at start of utoa::@1 +Adding NOP phi() at start of printf_number_buffer +Adding NOP phi() at start of printf_number_buffer::@1 +Adding NOP phi() at start of printf_number_buffer::@23 +Adding NOP phi() at start of printf_number_buffer::@22 +Adding NOP phi() at start of printf_number_buffer::@17 +Adding NOP phi() at start of printf_number_buffer::@3 +Adding NOP phi() at start of printf_number_buffer::@4 +Adding NOP phi() at start of printf_number_buffer::@5 +Adding NOP phi() at start of printf_number_buffer::@19 +Adding NOP phi() at start of cputc::@3 +Adding NOP phi() at start of cputc::@5 +Adding NOP phi() at start of cputc::@1 +Adding NOP phi() at start of cputc::@4 +Adding NOP phi() at start of cputln::@1 +Adding NOP phi() at start of cscroll::@1 +Adding NOP phi() at start of cscroll::@3 +Adding NOP phi() at start of cscroll::@4 +Adding NOP phi() at start of cscroll::@5 +Adding NOP phi() at start of cscroll::@6 +Adding NOP phi() at start of memcpy::@3 +Adding NOP phi() at start of memset::@1 +CALL GRAPH +Calls in [__start] to main:6 +Calls in [main] to clrscr:10 test_casting:17 +Calls in [test_casting] to printf_sint:41 cputs:43 +Calls in [printf_sint] to utoa:51 printf_number_buffer:53 +Calls in [cputs] to cputc:68 +Calls in [utoa] to utoa_append:96 +Calls in [printf_number_buffer] to cputc:109 cputs:114 +Calls in [cputc] to cputln:124 cputln:128 +Calls in [cputln] to cscroll:143 +Calls in [cscroll] to memcpy:149 memcpy:151 memset:153 memset:155 + +Created 25 initial phi equivalence classes +Coalesced [18] main::signed_char_value#5 ← main::signed_char_value#1 +Coalesced [33] clrscr::l#7 ← clrscr::l#1 +Coalesced [34] clrscr::line_text#7 ← clrscr::line_text#1 +Coalesced [35] clrscr::line_cols#7 ← clrscr::line_cols#1 +Coalesced [39] clrscr::c#4 ← clrscr::c#1 +Coalesced [48] printf_sint::value#8 ← printf_sint::value#1 +Coalesced [58] printf_sint::value#7 ← printf_sint::value#0 +Coalesced [60] cputs::s#7 ← cputs::s#4 +Coalesced [67] cputc::c#5 ← cputc::c#0 +Coalesced [69] cputs::s#8 ← cputs::s#0 +Coalesced [72] utoa::value#17 ← utoa::value#1 +Coalesced [84] utoa::value#18 ← utoa::value#2 +Coalesced [85] utoa::started#6 ← utoa::started#2 +Coalesced [86] utoa::buffer#23 ← utoa::buffer#11 +Coalesced [89] utoa::digit#7 ← utoa::digit#1 +Coalesced (already) [90] utoa::value#16 ← utoa::value#6 +Coalesced (already) [91] utoa::started#5 ← utoa::started#4 +Coalesced (already) [92] utoa::buffer#22 ← utoa::buffer#14 +Coalesced [100] utoa::value#19 ← utoa::value#0 +Coalesced [101] utoa::buffer#24 ← utoa::buffer#4 +Coalesced [108] cputc::c#6 ← cputc::c#2 +Coalesced [130] utoa_append::value#6 ← utoa_append::value#0 +Coalesced [137] utoa_append::value#7 ← utoa_append::value#1 +Coalesced [138] utoa_append::digit#5 ← utoa_append::digit#1 +Coalesced [171] memcpy::src#5 ← memcpy::src#1 +Coalesced [172] memcpy::dst#5 ← memcpy::dst#1 +Coalesced [182] memset::dst#5 ← memset::dst#1 +Coalesced down to 21 phi equivalence classes +Culled Empty Block (label) __start::@2 +Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@4 +Culled Empty Block (label) clrscr::@2 +Culled Empty Block (label) test_casting::@2 +Culled Empty Block (label) printf_sint::@3 +Culled Empty Block (label) printf_sint::@6 +Culled Empty Block (label) cputs::@3 +Culled Empty Block (label) utoa::@1 +Culled Empty Block (label) utoa::@5 +Culled Empty Block (label) utoa::@17 +Culled Empty Block (label) printf_number_buffer::@1 +Culled Empty Block (label) printf_number_buffer::@23 +Culled Empty Block (label) printf_number_buffer::@22 +Culled Empty Block (label) printf_number_buffer::@17 +Culled Empty Block (label) printf_number_buffer::@3 +Culled Empty Block (label) printf_number_buffer::@4 +Culled Empty Block (label) printf_number_buffer::@19 +Culled Empty Block (label) cputc::@5 +Culled Empty Block (label) cputc::@4 +Culled Empty Block (label) cputln::@1 +Culled Empty Block (label) cscroll::@1 +Culled Empty Block (label) memcpy::@3 +Culled Empty Block (label) memset::@1 +Renumbering block memset::@2 to memset::@1 +Renumbering block memset::@3 to memset::@2 +Renumbering block memset::@4 to memset::@3 +Renumbering block clrscr::@3 to clrscr::@2 +Renumbering block clrscr::@4 to clrscr::@3 +Renumbering block clrscr::@5 to clrscr::@4 +Renumbering block clrscr::@6 to clrscr::@5 +Renumbering block cscroll::@3 to cscroll::@1 +Renumbering block cscroll::@4 to cscroll::@2 +Renumbering block cscroll::@5 to cscroll::@3 +Renumbering block cscroll::@6 to cscroll::@4 +Renumbering block cscroll::@7 to cscroll::@5 +Renumbering block utoa::@10 to utoa::@1 +Renumbering block utoa::@11 to utoa::@2 +Renumbering block utoa::@12 to utoa::@3 +Renumbering block utoa::@13 to utoa::@4 +Renumbering block utoa::@14 to utoa::@5 +Renumbering block utoa::@15 to utoa::@6 +Renumbering block utoa::@16 to utoa::@7 +Renumbering block printf_sint::@5 to printf_sint::@3 +Renumbering block printf_number_buffer::@2 to printf_number_buffer::@1 +Renumbering block printf_number_buffer::@5 to printf_number_buffer::@2 +Renumbering block printf_number_buffer::@9 to printf_number_buffer::@3 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of clrscr +Adding NOP phi() at start of test_casting::@1 +Adding NOP phi() at start of utoa +Adding NOP phi() at start of printf_number_buffer +Adding NOP phi() at start of printf_number_buffer::@2 +Adding NOP phi() at start of cputc::@3 +Adding NOP phi() at start of cputc::@1 +Adding NOP phi() at start of utoa_append +Adding NOP phi() at start of cscroll::@1 +Adding NOP phi() at start of cscroll::@2 +Adding NOP phi() at start of cscroll::@3 +Adding NOP phi() at start of cscroll::@4 + +FINAL CONTROL FLOW GRAPH + +(void()) __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] (byte) conio_cursor_x ← (byte) 0 + [2] (byte) conio_cursor_y ← (byte) 0 + [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN + [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [5] phi() + [6] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [7] return + to:@return + +(void()) main() +main: scope:[main] from __start::@1 + [8] phi() + [9] call clrscr + to:main::@1 +main::@1: scope:[main] from main main::@2 + [10] (signed byte) main::signed_char_value#2 ← phi( main/(signed byte) -5 main::@2/(signed byte) main::signed_char_value#1 ) + [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [12] return + to:@return +main::@2: scope:[main] from main::@1 + [13] (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#2 + [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 + [15] call test_casting + to:main::@1 + +(void()) clrscr() +clrscr: scope:[clrscr] from main + [16] phi() + to:clrscr::@1 +clrscr::@1: scope:[clrscr] from clrscr clrscr::@5 + [17] (byte*) clrscr::line_cols#5 ← phi( clrscr/(const nomodify byte*) COLORRAM clrscr::@5/(byte*) clrscr::line_cols#1 ) + [17] (byte*) clrscr::line_text#5 ← phi( clrscr/(const nomodify byte*) DEFAULT_SCREEN clrscr::@5/(byte*) clrscr::line_text#1 ) + [17] (byte) clrscr::l#2 ← phi( clrscr/(byte) 0 clrscr::@5/(byte) clrscr::l#1 ) + [18] if((byte) clrscr::l#2<(byte) $19) goto clrscr::@3 + to:clrscr::@2 +clrscr::@2: scope:[clrscr] from clrscr::@1 + [19] (byte) conio_cursor_x ← (byte) 0 + [20] (byte) conio_cursor_y ← (byte) 0 + [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN + [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM + to:clrscr::@return +clrscr::@return: scope:[clrscr] from clrscr::@2 + [23] return + to:@return +clrscr::@3: scope:[clrscr] from clrscr::@1 clrscr::@4 + [24] (byte) clrscr::c#2 ← phi( clrscr::@1/(byte) 0 clrscr::@4/(byte) clrscr::c#1 ) + [25] if((byte) clrscr::c#2<(byte) $28) goto clrscr::@4 + to:clrscr::@5 +clrscr::@5: scope:[clrscr] from clrscr::@3 + [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 + [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 + [28] (byte) clrscr::l#1 ← ++ (byte) clrscr::l#2 + to:clrscr::@1 +clrscr::@4: scope:[clrscr] from clrscr::@3 + [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' + [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE + [31] (byte) clrscr::c#1 ← ++ (byte) clrscr::c#2 + to:clrscr::@3 + +(void()) test_casting((signed word) test_casting::signed_short_value) +test_casting: scope:[test_casting] from main::@2 + [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 + [33] call printf_sint + to:test_casting::@1 +test_casting::@1: scope:[test_casting] from test_casting + [34] phi() + [35] call cputs + to:test_casting::@return +test_casting::@return: scope:[test_casting] from test_casting::@1 + [36] return + to:@return + +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +printf_sint: scope:[printf_sint] from test_casting + [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 + to:printf_sint::@2 +printf_sint::@1: scope:[printf_sint] from printf_sint + [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 + [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' + to:printf_sint::@2 +printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1 + [41] (signed word) printf_sint::value#4 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint/(signed word) printf_sint::value#1 ) + [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 + [43] call utoa + to:printf_sint::@3 +printf_sint::@3: scope:[printf_sint] from printf_sint::@2 + [44] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [45] call printf_number_buffer + to:printf_sint::@return +printf_sint::@return: scope:[printf_sint] from printf_sint::@3 + [46] return + to:@return + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from printf_number_buffer::@2 test_casting::@1 + [47] (to_nomodify byte*) cputs::s#4 ← phi( printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 test_casting::@1/(const byte*) test_casting::s ) + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [48] (to_nomodify byte*) cputs::s#3 ← phi( cputs/(to_nomodify byte*) cputs::s#4 cputs::@2/(to_nomodify byte*) cputs::s#0 ) + [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) + [50] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 + [51] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [52] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [53] (byte) cputc::c#0 ← (byte) cputs::c#1 + [54] call cputc + to:cputs::@1 + +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +utoa: scope:[utoa] from printf_sint::@2 + [55] phi() + to:utoa::@1 +utoa::@1: scope:[utoa] from utoa utoa::@4 + [56] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [56] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) + [56] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 ) + [56] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) + [57] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + to:utoa::@3 +utoa::@3: scope:[utoa] from utoa::@1 + [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 + [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) + [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [61] *((byte*) utoa::buffer#3) ← (byte) 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@3 + [62] return + to:@return +utoa::@2: scope:[utoa] from utoa::@1 + [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 + [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) + [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + to:utoa::@7 +utoa::@7: scope:[utoa] from utoa::@2 + [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 + to:utoa::@4 +utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 + [67] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) + [67] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) + [67] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) + [68] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + to:utoa::@1 +utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 + [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + [70] (word) utoa_append::value#0 ← (word) utoa::value#2 + [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + [72] call utoa_append + [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + to:utoa::@6 +utoa::@6: scope:[utoa] from utoa::@5 + [74] (word) utoa::value#0 ← (word) utoa_append::return#0 + [75] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + to:utoa::@4 + +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3 + [76] phi() + to:printf_number_buffer::@1 +printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer + [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 + to:printf_number_buffer::@3 +printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1 + [78] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 + [79] call cputc + to:printf_number_buffer::@2 +printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3 + [80] phi() + [81] call cputs + to:printf_number_buffer::@return +printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2 + [82] return + to:@return + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@3 + [83] (byte) cputc::c#3 ← phi( cputs::@2/(byte) cputc::c#0 printf_number_buffer::@3/(byte) cputc::c#2 ) + [84] if((byte) cputc::c#3==(byte) ' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 + [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE + [87] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x + [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [89] phi() + [90] call cputln + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 + [91] return + to:@return +cputc::@1: scope:[cputc] from cputc + [92] phi() + [93] call cputln + to:cputc::@return + +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +utoa_append: scope:[utoa_append] from utoa::@5 + [94] phi() + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + [95] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [95] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + [98] return + to:@return +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + [99] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + to:utoa_append::@1 + +(void()) cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 + [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 + [103] (byte) conio_cursor_x ← (byte) 0 + [104] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y + [105] call cscroll + to:cputln::@return +cputln::@return: scope:[cputln] from cputln + [106] return + to:@return + +(void()) cscroll() +cscroll: scope:[cscroll] from cputln + [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return + to:cscroll::@1 +cscroll::@1: scope:[cscroll] from cscroll + [108] phi() + [109] call memcpy + to:cscroll::@2 +cscroll::@2: scope:[cscroll] from cscroll::@1 + [110] phi() + [111] call memcpy + to:cscroll::@3 +cscroll::@3: scope:[cscroll] from cscroll::@2 + [112] phi() + [113] call memset + to:cscroll::@4 +cscroll::@4: scope:[cscroll] from cscroll::@3 + [114] phi() + [115] call memset + to:cscroll::@5 +cscroll::@5: scope:[cscroll] from cscroll::@4 + [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 + [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 + [118] (byte) conio_cursor_y ← -- (byte) conio_cursor_y + to:cscroll::@return +cscroll::@return: scope:[cscroll] from cscroll cscroll::@5 + [119] return + to:@return + +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +memcpy: scope:[memcpy] from cscroll::@1 cscroll::@2 + [120] (void*) memcpy::destination#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) DEFAULT_SCREEN cscroll::@2/(void*)(const nomodify byte*) COLORRAM ) + [120] (void*) memcpy::source#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 cscroll::@2/(void*)(const nomodify byte*) COLORRAM+(byte) $28 ) + [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 + [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 + [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 + to:memcpy::@1 +memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 + [124] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*) memcpy::dst#4 memcpy::@2/(byte*) memcpy::dst#1 ) + [124] (byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#4 memcpy::@2/(byte*) memcpy::src#1 ) + [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 + to:memcpy::@return +memcpy::@return: scope:[memcpy] from memcpy::@1 + [126] return + to:@return +memcpy::@2: scope:[memcpy] from memcpy::@1 + [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) + [128] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 + [129] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 + to:memcpy::@1 + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from cscroll::@3 cscroll::@4 + [130] (byte) memset::c#4 ← phi( cscroll::@3/(byte) ' ' cscroll::@4/(const nomodify byte) LIGHT_BLUE ) + [130] (void*) memset::str#3 ← phi( cscroll::@3/(void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 cscroll::@4/(void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 ) + to:memset::@1 +memset::@1: scope:[memset] from memset + [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 + [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [133] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + to:memset::@return +memset::@return: scope:[memset] from memset::@2 + [135] return + to:@return +memset::@3: scope:[memset] from memset::@2 + [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [137] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 + + +VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) MOS6569_VICII::BG_COLOR +(byte) MOS6569_VICII::BG_COLOR1 +(byte) MOS6569_VICII::BG_COLOR2 +(byte) MOS6569_VICII::BG_COLOR3 +(byte) MOS6569_VICII::BORDER_COLOR +(byte) MOS6569_VICII::CONTROL1 +(byte) MOS6569_VICII::CONTROL2 +(byte) MOS6569_VICII::IRQ_ENABLE +(byte) MOS6569_VICII::IRQ_STATUS +(byte) MOS6569_VICII::LIGHTPEN_X +(byte) MOS6569_VICII::LIGHTPEN_Y +(byte) MOS6569_VICII::MEMORY +(byte) MOS6569_VICII::RASTER +(byte) MOS6569_VICII::SPRITE0_COLOR +(byte) MOS6569_VICII::SPRITE0_X +(byte) MOS6569_VICII::SPRITE0_Y +(byte) MOS6569_VICII::SPRITE1_COLOR +(byte) MOS6569_VICII::SPRITE1_X +(byte) MOS6569_VICII::SPRITE1_Y +(byte) MOS6569_VICII::SPRITE2_COLOR +(byte) MOS6569_VICII::SPRITE2_X +(byte) MOS6569_VICII::SPRITE2_Y +(byte) MOS6569_VICII::SPRITE3_COLOR +(byte) MOS6569_VICII::SPRITE3_X +(byte) MOS6569_VICII::SPRITE3_Y +(byte) MOS6569_VICII::SPRITE4_COLOR +(byte) MOS6569_VICII::SPRITE4_X +(byte) MOS6569_VICII::SPRITE4_Y +(byte) MOS6569_VICII::SPRITE5_COLOR +(byte) MOS6569_VICII::SPRITE5_X +(byte) MOS6569_VICII::SPRITE5_Y +(byte) MOS6569_VICII::SPRITE6_COLOR +(byte) MOS6569_VICII::SPRITE6_X +(byte) MOS6569_VICII::SPRITE6_Y +(byte) MOS6569_VICII::SPRITE7_COLOR +(byte) MOS6569_VICII::SPRITE7_X +(byte) MOS6569_VICII::SPRITE7_Y +(byte) MOS6569_VICII::SPRITES_BG_COLLISION +(byte) MOS6569_VICII::SPRITES_COLLISION +(byte) MOS6569_VICII::SPRITES_ENABLE +(byte) MOS6569_VICII::SPRITES_EXPAND_X +(byte) MOS6569_VICII::SPRITES_EXPAND_Y +(byte) MOS6569_VICII::SPRITES_MC +(byte) MOS6569_VICII::SPRITES_MCOLOR1 +(byte) MOS6569_VICII::SPRITES_MCOLOR2 +(byte) MOS6569_VICII::SPRITES_PRIORITY +(byte) MOS6569_VICII::SPRITES_XMSB +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(void()) __start() +(void()) clrscr() +(byte) clrscr::c +(byte) clrscr::c#1 20002.0 +(byte) clrscr::c#2 12501.25 +(byte) clrscr::l +(byte) clrscr::l#1 2002.0 +(byte) clrscr::l#2 333.6666666666667 +(byte*) clrscr::line_cols +(byte*) clrscr::line_cols#1 1001.0 +(byte*) clrscr::line_cols#5 1500.375 +(byte*) clrscr::line_text +(byte*) clrscr::line_text#1 667.3333333333334 +(byte*) clrscr::line_text#5 1714.7142857142858 +(byte) conio_cursor_x loadstore 2.777777797962963E8 +(byte) conio_cursor_y loadstore 4.571428572971429E9 +(byte*) conio_line_color loadstore 3.2500000015882354E9 +(byte*) conio_line_text loadstore 3.202898552289855E9 +(void()) cputc((byte) cputc::c) +(byte) cputc::c +(byte) cputc::c#0 2.00000002E8 +(byte) cputc::c#2 200002.0 +(byte) cputc::c#3 1.050050002E9 +(void()) cputln() +(void()) cputs((to_nomodify byte*) cputs::s) +(byte) cputs::c +(byte) cputs::c#1 1.00000001E8 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 5.00000005E7 +(to_nomodify byte*) cputs::s#3 1.50500002E8 +(to_nomodify byte*) cputs::s#4 1000001.0 +(void()) cscroll() +(void()) main() +(signed byte) main::signed_char_value +(signed byte) main::signed_char_value#1 101.0 +(signed byte) main::signed_char_value#2 151.5 +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +(void*) memcpy::destination +(void*) memcpy::destination#2 +(byte*) memcpy::dst +(byte*) memcpy::dst#1 1.000000000000001E15 +(byte*) memcpy::dst#2 1.0003333333333348E15 +(byte*) memcpy::dst#4 2.000000000002E12 +(word) memcpy::num +(void*) memcpy::return +(void*) memcpy::source +(void*) memcpy::source#2 +(byte*) memcpy::src +(byte*) memcpy::src#1 2.000000000000002E15 +(byte*) memcpy::src#2 1.0002500000000012E15 +(byte*) memcpy::src#4 1.000000000001E12 +(byte*) memcpy::src_end +(byte*) memcpy::src_end#0 1.2512500000000025E14 +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(byte) memset::c +(byte) memset::c#4 1.42857142857143E14 +(byte*) memset::dst +(byte*) memset::dst#1 2.000000000000002E15 +(byte*) memset::dst#2 1.3336666666666685E15 +(byte*) memset::dst#4 2.000000000002E12 +(byte*) memset::end +(byte*) memset::end#0 1.668333333333337E14 +(word) memset::num +(void*) memset::return +(void*) memset::str +(void*) memset::str#3 +(struct printf_buffer_number) printf_buffer loadstore = {} +(byte) printf_buffer_number::sign +(byte) printf_format_number::justify_left +(byte) printf_format_number::min_length +(byte) printf_format_number::radix +(byte) printf_format_number::sign_always +(byte) printf_format_number::upper_case +(byte) printf_format_number::zero_padding +(byte) printf_format_string::justify_left +(byte) printf_format_string::min_length +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +(struct printf_buffer_number) printf_number_buffer::buffer +(byte*) printf_number_buffer::buffer_digits +(byte) printf_number_buffer::buffer_sign +(byte) printf_number_buffer::buffer_sign#0 70001.0 +(struct printf_format_number) printf_number_buffer::format +(byte) printf_number_buffer::format_justify_left +(byte) printf_number_buffer::format_min_length +(byte) printf_number_buffer::format_radix +(byte) printf_number_buffer::format_sign_always +(byte) printf_number_buffer::format_upper_case +(byte) printf_number_buffer::format_zero_padding +(signed byte) printf_number_buffer::len +(signed byte) printf_number_buffer::padding +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +(struct printf_format_number) printf_sint::format +(byte) printf_sint::format_justify_left +(byte) printf_sint::format_min_length +(byte) printf_sint::format_radix +(byte) printf_sint::format_sign_always +(byte) printf_sint::format_upper_case +(byte) printf_sint::format_zero_padding +(word) printf_sint::uvalue +(signed word) printf_sint::value +(signed word) printf_sint::value#0 10001.0 +(signed word) printf_sint::value#1 10334.666666666666 +(signed word) printf_sint::value#4 20002.0 +(void()) test_casting((signed word) test_casting::signed_short_value) +(signed word) test_casting::signed_short_value +(signed word) test_casting::signed_short_value#0 1102.0 +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +(byte~) utoa::$10 2.0000002E7 +(byte~) utoa::$11 200002.0 +(byte*) utoa::buffer +(byte*) utoa::buffer#11 2871429.0 +(byte*) utoa::buffer#14 1.50000015E7 +(byte*) utoa::buffer#3 200002.0 +(byte*) utoa::buffer#4 2.0000002E7 +(byte) utoa::digit +(byte) utoa::digit#1 2.0000002E7 +(byte) utoa::digit#2 2857143.1428571427 +(word) utoa::digit_value +(word) utoa::digit_value#0 6000000.6 +(word*) utoa::digit_values +(byte) utoa::max_digits +(byte) utoa::radix +(byte) utoa::started +(byte) utoa::started#2 5000000.5 +(byte) utoa::started#4 1.0000001E7 +(word) utoa::value +(word) utoa::value#0 1.0000001E7 +(word) utoa::value#1 55001.0 +(word) utoa::value#2 5728572.142857142 +(word) utoa::value#6 1.50000015E7 +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +(byte*) utoa_append::buffer +(byte*) utoa_append::buffer#0 1.375000025E7 +(byte) utoa_append::digit +(byte) utoa_append::digit#1 1.00000000001E11 +(byte) utoa_append::digit#2 1.000500000015E11 +(word) utoa_append::return +(word) utoa_append::return#0 2.0000002E7 +(word) utoa_append::sub +(word) utoa_append::sub#0 3.33350000005E10 +(word) utoa_append::value +(word) utoa_append::value#0 3.6666667333333336E7 +(word) utoa_append::value#1 2.00000000002E11 +(word) utoa_append::value#2 5.001833333416667E10 + +Initial phi equivalence classes +[ main::signed_char_value#2 main::signed_char_value#1 ] +[ clrscr::l#2 clrscr::l#1 ] +[ clrscr::line_text#5 clrscr::line_text#1 ] +[ clrscr::line_cols#5 clrscr::line_cols#1 ] +[ clrscr::c#2 clrscr::c#1 ] +[ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] +[ cputs::s#3 cputs::s#4 cputs::s#0 ] +[ utoa::digit#2 utoa::digit#1 ] +[ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] +[ utoa::started#2 utoa::started#4 ] +[ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +[ cputc::c#3 cputc::c#0 cputc::c#2 ] +[ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] +[ utoa_append::digit#2 utoa_append::digit#1 ] +[ memcpy::source#2 ] +[ memcpy::destination#2 ] +[ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] +[ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +[ memset::str#3 ] +[ memset::c#4 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] +Added variable conio_cursor_x to live range equivalence class [ conio_cursor_x ] +Added variable conio_cursor_y to live range equivalence class [ conio_cursor_y ] +Added variable conio_line_text to live range equivalence class [ conio_line_text ] +Added variable conio_line_color to live range equivalence class [ conio_line_color ] +Added variable test_casting::signed_short_value#0 to live range equivalence class [ test_casting::signed_short_value#0 ] +Added variable printf_number_buffer::buffer_sign#0 to live range equivalence class [ printf_number_buffer::buffer_sign#0 ] +Added variable cputs::c#1 to live range equivalence class [ cputs::c#1 ] +Added variable utoa::$11 to live range equivalence class [ utoa::$11 ] +Added variable utoa::buffer#3 to live range equivalence class [ utoa::buffer#3 ] +Added variable utoa::$10 to live range equivalence class [ utoa::$10 ] +Added variable utoa::digit_value#0 to live range equivalence class [ utoa::digit_value#0 ] +Added variable utoa_append::buffer#0 to live range equivalence class [ utoa_append::buffer#0 ] +Added variable utoa_append::sub#0 to live range equivalence class [ utoa_append::sub#0 ] +Added variable utoa_append::return#0 to live range equivalence class [ utoa_append::return#0 ] +Added variable memcpy::src_end#0 to live range equivalence class [ memcpy::src_end#0 ] +Added variable memset::end#0 to live range equivalence class [ memset::end#0 ] +Added variable printf_buffer to live range equivalence class [ printf_buffer ] +Complete equivalence classes +[ main::signed_char_value#2 main::signed_char_value#1 ] +[ clrscr::l#2 clrscr::l#1 ] +[ clrscr::line_text#5 clrscr::line_text#1 ] +[ clrscr::line_cols#5 clrscr::line_cols#1 ] +[ clrscr::c#2 clrscr::c#1 ] +[ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] +[ cputs::s#3 cputs::s#4 cputs::s#0 ] +[ utoa::digit#2 utoa::digit#1 ] +[ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] +[ utoa::started#2 utoa::started#4 ] +[ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +[ cputc::c#3 cputc::c#0 cputc::c#2 ] +[ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] +[ utoa_append::digit#2 utoa_append::digit#1 ] +[ memcpy::source#2 ] +[ memcpy::destination#2 ] +[ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] +[ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +[ memset::str#3 ] +[ memset::c#4 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] +[ conio_cursor_x ] +[ conio_cursor_y ] +[ conio_line_text ] +[ conio_line_color ] +[ test_casting::signed_short_value#0 ] +[ printf_number_buffer::buffer_sign#0 ] +[ cputs::c#1 ] +[ utoa::$11 ] +[ utoa::buffer#3 ] +[ utoa::$10 ] +[ utoa::digit_value#0 ] +[ utoa_append::buffer#0 ] +[ utoa_append::sub#0 ] +[ utoa_append::return#0 ] +[ memcpy::src_end#0 ] +[ memset::end#0 ] +[ printf_buffer ] +Allocated zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Allocated zp[1]:3 [ clrscr::l#2 clrscr::l#1 ] +Allocated zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] +Allocated zp[2]:6 [ clrscr::line_cols#5 clrscr::line_cols#1 ] +Allocated zp[1]:8 [ clrscr::c#2 clrscr::c#1 ] +Allocated zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] +Allocated zp[2]:11 [ cputs::s#3 cputs::s#4 cputs::s#0 ] +Allocated zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] +Allocated zp[2]:14 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] +Allocated zp[1]:16 [ utoa::started#2 utoa::started#4 ] +Allocated zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +Allocated zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ] +Allocated zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] +Allocated zp[1]:22 [ utoa_append::digit#2 utoa_append::digit#1 ] +Allocated zp[2]:23 [ memcpy::source#2 ] +Allocated zp[2]:25 [ memcpy::destination#2 ] +Allocated zp[2]:27 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] +Allocated zp[2]:29 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +Allocated zp[2]:31 [ memset::str#3 ] +Allocated zp[1]:33 [ memset::c#4 ] +Allocated zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp[1]:36 [ conio_cursor_x ] +Allocated zp[1]:37 [ conio_cursor_y ] +Allocated zp[2]:38 [ conio_line_text ] +Allocated zp[2]:40 [ conio_line_color ] +Allocated zp[2]:42 [ test_casting::signed_short_value#0 ] +Allocated zp[1]:44 [ printf_number_buffer::buffer_sign#0 ] +Allocated zp[1]:45 [ cputs::c#1 ] +Allocated zp[1]:46 [ utoa::$11 ] +Allocated zp[2]:47 [ utoa::buffer#3 ] +Allocated zp[1]:49 [ utoa::$10 ] +Allocated zp[2]:50 [ utoa::digit_value#0 ] +Allocated zp[2]:52 [ utoa_append::buffer#0 ] +Allocated zp[2]:54 [ utoa_append::sub#0 ] +Allocated zp[2]:56 [ utoa_append::return#0 ] +Allocated zp[2]:58 [ memcpy::src_end#0 ] +Allocated zp[2]:60 [ memset::end#0 ] +Allocated mem[12] [ printf_buffer ] + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Demonstrates problem with Casting of negative signed values +// https://gitlab.com/camelot/kickc/-/issues/496 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__start) +.pc = $80d "Program" + // Global Constants & labels + .const LIGHT_BLUE = $e + .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + // Color Ram + .label COLORRAM = $d800 + // Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $24 + // The current cursor y-position + .label conio_cursor_y = $25 + // The current text cursor line start + .label conio_line_text = $26 + // The current color cursor line start + .label conio_line_color = $28 + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_y + // [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [6] call main + // [8] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [7] return + rts +} + // main +main: { + .label signed_char_value = 2 + // [9] call clrscr + // [16] phi from main to clrscr [phi:main->clrscr] + clrscr_from_main: + jsr clrscr + // [10] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 + lda #-5 + sta.z signed_char_value + jmp __b1 + // main::@1 + __b1: + // [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 -- vbsz1_neq_0_then_la1 + lda.z signed_char_value + cmp #0 + bne __b2 + jmp __breturn + // main::@return + __breturn: + // [12] return + rts + // main::@2 + __b2: + // [13] (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#2 -- vbsz1=_inc_vbsz1 + inc.z signed_char_value + // [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 -- vwsz1=vbsz2 + lda.z signed_char_value + sta.z test_casting.signed_short_value + ora #$7f + bmi !+ + lda #0 + !: + sta.z test_casting.signed_short_value+1 + // [15] call test_casting + jsr test_casting + // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // clrscr +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label c = 8 + .label line_text = 4 + .label line_cols = 6 + .label l = 3 + // [17] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] + __b1_from_clrscr: + // [17] phi (byte*) clrscr::line_cols#5 = (const nomodify byte*) COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 + lda #COLORRAM + sta.z line_cols+1 + // [17] phi (byte*) clrscr::line_text#5 = (const nomodify byte*) DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + // [17] phi (byte) clrscr::l#2 = (byte) 0 [phi:clrscr->clrscr::@1#2] -- vbuz1=vbuc1 + lda #0 + sta.z l + jmp __b1 + // clrscr::@1 + __b1: + // [18] if((byte) clrscr::l#2<(byte) $19) goto clrscr::@3 -- vbuz1_lt_vbuc1_then_la1 + lda.z l + cmp #$19 + bcc __b3_from___b1 + jmp __b2 + // clrscr::@2 + __b2: + // [19] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [20] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_y + // [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + jmp __breturn + // clrscr::@return + __breturn: + // [23] return + rts + // [24] phi from clrscr::@1 to clrscr::@3 [phi:clrscr::@1->clrscr::@3] + __b3_from___b1: + // [24] phi (byte) clrscr::c#2 = (byte) 0 [phi:clrscr::@1->clrscr::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z c + jmp __b3 + // clrscr::@3 + __b3: + // [25] if((byte) clrscr::c#2<(byte) $28) goto clrscr::@4 -- vbuz1_lt_vbuc1_then_la1 + lda.z c + cmp #$28 + bcc __b4 + jmp __b5 + // clrscr::@5 + __b5: + // [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_text + sta.z line_text + bcc !+ + inc.z line_text+1 + !: + // [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_cols + sta.z line_cols + bcc !+ + inc.z line_cols+1 + !: + // [28] (byte) clrscr::l#1 ← ++ (byte) clrscr::l#2 -- vbuz1=_inc_vbuz1 + inc.z l + // [17] phi from clrscr::@5 to clrscr::@1 [phi:clrscr::@5->clrscr::@1] + __b1_from___b5: + // [17] phi (byte*) clrscr::line_cols#5 = (byte*) clrscr::line_cols#1 [phi:clrscr::@5->clrscr::@1#0] -- register_copy + // [17] phi (byte*) clrscr::line_text#5 = (byte*) clrscr::line_text#1 [phi:clrscr::@5->clrscr::@1#1] -- register_copy + // [17] phi (byte) clrscr::l#2 = (byte) clrscr::l#1 [phi:clrscr::@5->clrscr::@1#2] -- register_copy + jmp __b1 + // clrscr::@4 + __b4: + // [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 + lda #' ' + ldy.z c + sta (line_text),y + // [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + lda #LIGHT_BLUE + ldy.z c + sta (line_cols),y + // [31] (byte) clrscr::c#1 ← ++ (byte) clrscr::c#2 -- vbuz1=_inc_vbuz1 + inc.z c + // [24] phi from clrscr::@4 to clrscr::@3 [phi:clrscr::@4->clrscr::@3] + __b3_from___b4: + // [24] phi (byte) clrscr::c#2 = (byte) clrscr::c#1 [phi:clrscr::@4->clrscr::@3#0] -- register_copy + jmp __b3 +} + // test_casting +// test_casting(signed word zp($2a) signed_short_value) +test_casting: { + .label signed_short_value = $2a + // [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 -- vwsz1=vwsz2 + lda.z signed_short_value + sta.z printf_sint.value + lda.z signed_short_value+1 + sta.z printf_sint.value+1 + // [33] call printf_sint + jsr printf_sint + // [34] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] + __b1_from_test_casting: + jmp __b1 + // test_casting::@1 + __b1: + // [35] call cputs + // [47] phi from test_casting::@1 to cputs [phi:test_casting::@1->cputs] + cputs_from___b1: + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) test_casting::s [phi:test_casting::@1->cputs#0] -- pbuz1=pbuc1 + lda #s + sta.z cputs.s+1 + jsr cputs + jmp __breturn + // test_casting::@return + __breturn: + // [36] return + rts + s: .text @"\n" + .byte 0 +} + // printf_sint +// Print a signed integer using a specific format +// printf_sint(signed word zp(9) value) +printf_sint: { + .label value = 9 + // [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Handle any sign + lda #0 + sta printf_buffer + // [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 + lda.z value+1 + bmi __b1 + // [41] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] + __b2_from_printf_sint: + __b2_from___b1: + // [41] phi (signed word) printf_sint::value#4 = (signed word) printf_sint::value#1 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy + jmp __b2 + // printf_sint::@1 + __b1: + // [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc.z value + sta.z value + lda #0 + sbc.z value+1 + sta.z value+1 + // [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' -- _deref_pbuc1=vbuc2 + lda #'-' + sta printf_buffer + jmp __b2_from___b1 + // printf_sint::@2 + __b2: + // [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 -- vwuz1=vwuz2 + lda.z value + sta.z utoa.value + lda.z value+1 + sta.z utoa.value+1 + // [43] call utoa + // [55] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + utoa_from___b2: + jsr utoa + jmp __b3 + // printf_sint::@3 + __b3: + // [44] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + lda printf_buffer + sta.z printf_number_buffer.buffer_sign + // [45] call printf_number_buffer + // Print using format + // [76] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + printf_number_buffer_from___b3: + jsr printf_number_buffer + jmp __breturn + // printf_sint::@return + __breturn: + // [46] return + rts +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp($b) s) +cputs: { + .label c = $2d + .label s = $b + // [48] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] + __b1_from_cputs: + __b1_from___b2: + // [48] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy + jmp __b1 + // cputs::@1 + __b1: + // [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuz1=_deref_pbuz2 + ldy #0 + lda (s),y + sta.z c + // [50] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [51] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z c + bne __b2 + jmp __breturn + // cputs::@return + __breturn: + // [52] return + rts + // cputs::@2 + __b2: + // [53] (byte) cputc::c#0 ← (byte) cputs::c#1 -- vbuz1=vbuz2 + lda.z c + sta.z cputc.c + // [54] call cputc + // [83] phi from cputs::@2 to cputc [phi:cputs::@2->cputc] + cputc_from___b2: + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy + jsr cputc + jmp __b1_from___b2 +} + // utoa +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// utoa(word zp($e) value, byte* zp($2f) buffer) +utoa: { + .const max_digits = 5 + .label __10 = $31 + .label __11 = $2e + .label digit_value = $32 + .label buffer = $2f + .label digit = $d + .label value = $e + .label buffer_1 = $11 + .label started = $10 + // [56] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + __b1_from_utoa: + // [56] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + sta.z buffer_1+1 + // [56] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z started + // [56] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z digit + jmp __b1 + // utoa::@1 + __b1: + // [57] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z digit + cmp #max_digits-1 + bcc __b2 + jmp __b3 + // utoa::@3 + __b3: + // [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuz1=_byte_vwuz2 + lda.z value + sta.z __11 + // [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z __11 + lda DIGITS,y + ldy #0 + sta (buffer_1),y + // [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2 + lda.z buffer_1 + clc + adc #1 + sta.z buffer + lda.z buffer_1+1 + adc #0 + sta.z buffer+1 + // [61] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (buffer),y + jmp __breturn + // utoa::@return + __breturn: + // [62] return + rts + // utoa::@2 + __b2: + // [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z digit + asl + sta.z __10 + // [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuz2 + ldy.z __10 + lda RADIX_DECIMAL_VALUES,y + sta.z digit_value + lda RADIX_DECIMAL_VALUES+1,y + sta.z digit_value+1 + // [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z started + bne __b5 + jmp __b7 + // utoa::@7 + __b7: + // [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda.z digit_value+1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + // [67] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + __b4_from___b7: + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [67] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + jmp __b4 + // utoa::@4 + __b4: + // [68] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // [56] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + __b1_from___b4: + // [56] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [56] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [56] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + jmp __b1 + // utoa::@5 + __b5: + // [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 -- pbuz1=pbuz2 + lda.z buffer_1 + sta.z utoa_append.buffer + lda.z buffer_1+1 + sta.z utoa_append.buffer+1 + // [70] (word) utoa_append::value#0 ← (word) utoa::value#2 -- vwuz1=vwuz2 + lda.z value + sta.z utoa_append.value + lda.z value+1 + sta.z utoa_append.value+1 + // [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 -- vwuz1=vwuz2 + lda.z digit_value + sta.z utoa_append.sub + lda.z digit_value+1 + sta.z utoa_append.sub+1 + // [72] call utoa_append + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + utoa_append_from___b5: + jsr utoa_append + // [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2 + lda.z utoa_append.value + sta.z utoa_append.return + lda.z utoa_append.value+1 + sta.z utoa_append.return+1 + jmp __b6 + // utoa::@6 + __b6: + // [74] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2 + lda.z utoa_append.return + sta.z value + lda.z utoa_append.return+1 + sta.z value+1 + // [75] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + inc.z buffer_1 + bne !+ + inc.z buffer_1+1 + !: + // [67] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + __b4_from___b6: + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 + lda #1 + sta.z started + // [67] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + jmp __b4 +} + // printf_number_buffer +// Print the contents of the number buffer using a specific format. +// This handles minimum length, zero-filling, and left/right justification from the format +// printf_number_buffer(byte zp($2c) buffer_sign) +printf_number_buffer: { + .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + .label buffer_sign = $2c + jmp __b1 + // printf_number_buffer::@1 + __b1: + // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z buffer_sign + beq __b2_from___b1 + jmp __b3 + // printf_number_buffer::@3 + __b3: + // [78] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 -- vbuz1=vbuz2 + lda.z buffer_sign + sta.z cputc.c + // [79] call cputc + // [83] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc] + cputc_from___b3: + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy + jsr cputc + // [80] phi from printf_number_buffer::@1 printf_number_buffer::@3 to printf_number_buffer::@2 [phi:printf_number_buffer::@1/printf_number_buffer::@3->printf_number_buffer::@2] + __b2_from___b1: + __b2_from___b3: + jmp __b2 + // printf_number_buffer::@2 + __b2: + // [81] call cputs + // [47] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs] + cputs_from___b2: + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->cputs#0] -- pbuz1=pbuc1 + lda #buffer_digits + sta.z cputs.s+1 + jsr cputs + jmp __breturn + // printf_number_buffer::@return + __breturn: + // [82] return + rts +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// cputc(byte zp($13) c) +cputc: { + .label c = $13 + // [84] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #'\n' + cmp.z c + beq __b1_from_cputc + jmp __b2 + // cputc::@2 + __b2: + // [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuz3 + lda.z c + ldy.z conio_cursor_x + sta (conio_line_text),y + // [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + lda #LIGHT_BLUE + ldy.z conio_cursor_x + sta (conio_line_color),y + // [87] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // [89] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + __b3_from___b2: + jmp __b3 + // cputc::@3 + __b3: + // [90] call cputln + jsr cputln + jmp __breturn + // cputc::@return + __breturn: + // [91] return + rts + // [92] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + __b1_from_cputc: + jmp __b1 + // cputc::@1 + __b1: + // [93] call cputln + jsr cputln + jmp __breturn +} + // utoa_append +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// utoa_append(byte* zp($34) buffer, word zp($14) value, word zp($36) sub) +utoa_append: { + .label buffer = $34 + .label value = $14 + .label sub = $36 + .label return = $38 + .label digit = $16 + // [95] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + __b1_from_utoa_append: + // [95] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z digit + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + jmp __b1 + // utoa_append::@1 + __b1: + // [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + jmp __b3 + // utoa_append::@3 + __b3: + // [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z digit + lda DIGITS,y + ldy #0 + sta (buffer),y + jmp __breturn + // utoa_append::@return + __breturn: + // [98] return + rts + // utoa_append::@2 + __b2: + // [99] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + // [95] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + __b1_from___b2: + // [95] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + jmp __b1 +} + // cputln +// Print a newline +cputln: { + // [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // [103] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [104] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [105] call cscroll + jsr cscroll + jmp __breturn + // cputln::@return + __breturn: + // [106] return + rts +} + // cscroll +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // [108] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + __b1_from_cscroll: + jmp __b1 + // cscroll::@1 + __b1: + // [109] call memcpy + // [120] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + memcpy_from___b1: + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // [110] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + __b2_from___b1: + jmp __b2 + // cscroll::@2 + __b2: + // [111] call memcpy + // [120] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + memcpy_from___b2: + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + lda #COLORRAM + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) COLORRAM+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // [112] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + __b3_from___b2: + jmp __b3 + // cscroll::@3 + __b3: + // [113] call memset + // [130] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + memset_from___b3: + // [130] phi (byte) memset::c#4 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 + lda #' ' + sta.z memset.c + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // [114] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] + __b4_from___b3: + jmp __b4 + // cscroll::@4 + __b4: + // [115] call memset + // [130] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + memset_from___b4: + // [130] phi (byte) memset::c#4 = (const nomodify byte) LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuz1=vbuc1 + lda #LIGHT_BLUE + sta.z memset.c + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + jmp __b5 + // cscroll::@5 + __b5: + // [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // [118] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1 + dec.z conio_cursor_y + jmp __breturn + // cscroll::@return + __breturn: + // [119] return + rts +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// memcpy(void* zp($19) destination, void* zp($17) source) +memcpy: { + .label src_end = $3a + .label dst = $1d + .label src = $1b + .label source = $17 + .label destination = $19 + // [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 -- pbuz1=pbuz2_plus_vwuc1 + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + // [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 -- pbuz1=pbuz2 + lda.z source + sta.z src + lda.z source+1 + sta.z src+1 + // [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 -- pbuz1=pbuz2 + lda.z destination + sta.z dst + lda.z destination+1 + sta.z dst+1 + // [124] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + __b1_from_memcpy: + __b1_from___b2: + // [124] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [124] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + jmp __b1 + // memcpy::@1 + __b1: + // [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + jmp __breturn + // memcpy::@return + __breturn: + // [126] return + rts + // memcpy::@2 + __b2: + // [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + ldy #0 + sta (dst),y + // [128] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + // [129] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1 + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1_from___b2 +} + // 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 zp($21) c) +memset: { + .label end = $3c + .label dst = $22 + .label str = $1f + .label c = $21 + jmp __b1 + // memset::@1 + __b1: + // [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + // [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + lda.z str + sta.z dst + lda.z str+1 + sta.z dst+1 + // [133] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [133] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + jmp __breturn + // memset::@return + __breturn: + // [135] return + rts + // memset::@3 + __b3: + // [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + lda.z c + ldy #0 + sta (dst),y + // [137] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2_from___b3 +} + // File Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // Buffer used for stringified number being printed + printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Statement [19] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a +Statement [20] (byte) conio_cursor_y ← (byte) 0 [ conio_cursor_x conio_cursor_y ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a +Statement [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN [ conio_cursor_x conio_cursor_y conio_line_text ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text ] { } ) always clobbers reg byte a +Statement [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a +Statement [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:3 [ clrscr::l#2 clrscr::l#1 ] +Statement [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a +Statement [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ clrscr::c#2 clrscr::c#1 ] +Statement [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] ( main:6::test_casting:15::cputs:35 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Statement [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 utoa::$11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Statement [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#3 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [61] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Statement [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:16 [ utoa::started#2 utoa::started#4 ] +Statement [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [70] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [74] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y +Statement [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Statement [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:22 [ utoa_append::digit#2 utoa_append::digit#1 ] +Statement [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] +Statement [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [103] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Statement [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:33 [ memset::c#4 ] +Statement [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:33 [ memset::c#4 ] +Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#2 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#2 printf_buffer ] { } ) always clobbers reg byte a +Statement [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } ) always clobbers reg byte a +Statement [19] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a +Statement [20] (byte) conio_cursor_y ← (byte) 0 [ conio_cursor_x conio_cursor_y ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a +Statement [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN [ conio_cursor_x conio_cursor_y conio_line_text ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text ] { } ) always clobbers reg byte a +Statement [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::clrscr:9 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a +Statement [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a +Statement [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a +Statement [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:6::clrscr:9 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] ( main:6::test_casting:15::printf_sint:33 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] ( main:6::test_casting:15::cputs:35 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Statement [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 utoa::$11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Statement [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#3 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [61] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y +Statement [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [70] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [74] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:6::test_casting:15::printf_sint:33::utoa:43 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a +Statement [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y +Statement [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Statement [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:6::test_casting:15::printf_sint:33::utoa:43::utoa_append:72 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [103] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:109 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memcpy:111 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Statement [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a +Statement [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:113 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:90::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::test_casting:15::cputs:35::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputs:81::cputc:54::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::test_casting:15::printf_sint:33::printf_number_buffer:45::cputc:79::cputln:93::cscroll:105::memset:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y +Potential registers zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] : zp[1]:2 , reg byte x , +Potential registers zp[1]:3 [ clrscr::l#2 clrscr::l#1 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]:4 , +Potential registers zp[2]:6 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:6 , +Potential registers zp[1]:8 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:8 , reg byte x , reg byte y , +Potential registers zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] : zp[2]:9 , +Potential registers zp[2]:11 [ cputs::s#3 cputs::s#4 cputs::s#0 ] : zp[2]:11 , +Potential registers zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:13 , reg byte x , +Potential registers zp[2]:14 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp[2]:14 , +Potential registers zp[1]:16 [ utoa::started#2 utoa::started#4 ] : zp[1]:16 , reg byte x , reg byte y , +Potential registers zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:17 , +Potential registers zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:20 , +Potential registers zp[1]:22 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:22 , reg byte x , reg byte y , +Potential registers zp[2]:23 [ memcpy::source#2 ] : zp[2]:23 , +Potential registers zp[2]:25 [ memcpy::destination#2 ] : zp[2]:25 , +Potential registers zp[2]:27 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] : zp[2]:27 , +Potential registers zp[2]:29 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] : zp[2]:29 , +Potential registers zp[2]:31 [ memset::str#3 ] : zp[2]:31 , +Potential registers zp[1]:33 [ memset::c#4 ] : zp[1]:33 , reg byte x , +Potential registers zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:34 , +Potential registers zp[1]:36 [ conio_cursor_x ] : zp[1]:36 , +Potential registers zp[1]:37 [ conio_cursor_y ] : zp[1]:37 , +Potential registers zp[2]:38 [ conio_line_text ] : zp[2]:38 , +Potential registers zp[2]:40 [ conio_line_color ] : zp[2]:40 , +Potential registers zp[2]:42 [ test_casting::signed_short_value#0 ] : zp[2]:42 , +Potential registers zp[1]:44 [ printf_number_buffer::buffer_sign#0 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ cputs::c#1 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ utoa::$11 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:47 [ utoa::buffer#3 ] : zp[2]:47 , +Potential registers zp[1]:49 [ utoa::$10 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:50 [ utoa::digit_value#0 ] : zp[2]:50 , +Potential registers zp[2]:52 [ utoa_append::buffer#0 ] : zp[2]:52 , +Potential registers zp[2]:54 [ utoa_append::sub#0 ] : zp[2]:54 , +Potential registers zp[2]:56 [ utoa_append::return#0 ] : zp[2]:56 , +Potential registers zp[2]:58 [ memcpy::src_end#0 ] : zp[2]:58 , +Potential registers zp[2]:60 [ memset::end#0 ] : zp[2]:60 , +Potential registers mem[12] [ printf_buffer ] : mem[12] , + +REGISTER UPLIFT SCOPES +Uplift Scope [memcpy] 3,001,250,000,000,004: zp[2]:27 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 2,002,333,333,333,337.8: zp[2]:29 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 125,125,000,000,000.25: zp[2]:58 [ memcpy::src_end#0 ] 0: zp[2]:23 [ memcpy::source#2 ] 0: zp[2]:25 [ memcpy::destination#2 ] +Uplift Scope [memset] 3,335,666,666,666,672.5: zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 166,833,333,333,333.7: zp[2]:60 [ memset::end#0 ] 142,857,142,857,143: zp[1]:33 [ memset::c#4 ] 0: zp[2]:31 [ memset::str#3 ] +Uplift Scope [utoa_append] 250,055,000,003.5: zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 200,050,000,002.5: zp[1]:22 [ utoa_append::digit#2 utoa_append::digit#1 ] 33,335,000,000.5: zp[2]:54 [ utoa_append::sub#0 ] 20,000,002: zp[2]:56 [ utoa_append::return#0 ] 13,750,000.25: zp[2]:52 [ utoa_append::buffer#0 ] +Uplift Scope [] 4,571,428,572.97: zp[1]:37 [ conio_cursor_y ] 3,250,000,001.59: zp[2]:40 [ conio_line_color ] 3,202,898,552.29: zp[2]:38 [ conio_line_text ] 277,777,779.8: zp[1]:36 [ conio_cursor_x ] 0: mem[12] [ printf_buffer ] +Uplift Scope [cputc] 1,250,250,006: zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ] +Uplift Scope [cputs] 201,500,003.5: zp[2]:11 [ cputs::s#3 cputs::s#4 cputs::s#0 ] 100,000,001: zp[1]:45 [ cputs::c#1 ] +Uplift Scope [utoa] 37,871,432.5: zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,783,575.64: zp[2]:14 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,857,145.14: zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] 20,000,002: zp[1]:49 [ utoa::$10 ] 15,000,001.5: zp[1]:16 [ utoa::started#2 utoa::started#4 ] 6,000,000.6: zp[2]:50 [ utoa::digit_value#0 ] 200,002: zp[1]:46 [ utoa::$11 ] 200,002: zp[2]:47 [ utoa::buffer#3 ] +Uplift Scope [printf_number_buffer] 70,001: zp[1]:44 [ printf_number_buffer::buffer_sign#0 ] +Uplift Scope [printf_sint] 40,337.67: zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] +Uplift Scope [clrscr] 32,503.25: zp[1]:8 [ clrscr::c#2 clrscr::c#1 ] 2,501.38: zp[2]:6 [ clrscr::line_cols#5 clrscr::line_cols#1 ] 2,382.05: zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] 2,335.67: zp[1]:3 [ clrscr::l#2 clrscr::l#1 ] +Uplift Scope [test_casting] 1,102: zp[2]:42 [ test_casting::signed_short_value#0 ] +Uplift Scope [main] 252.5: zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6569_VICII] +Uplift Scope [MOS6581_SID] +Uplift Scope [cputln] +Uplift Scope [cscroll] +Uplift Scope [RADIX] +Uplift Scope [printf_format_number] +Uplift Scope [printf_buffer_number] +Uplift Scope [printf_format_string] +Uplift Scope [__start] + +Uplifting [memcpy] best 204151 combination zp[2]:27 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:29 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:58 [ memcpy::src_end#0 ] zp[2]:23 [ memcpy::source#2 ] zp[2]:25 [ memcpy::destination#2 ] +Uplifting [memset] best 203145 combination zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:60 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:31 [ memset::str#3 ] +Uplifting [utoa_append] best 197142 combination zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:54 [ utoa_append::sub#0 ] zp[2]:56 [ utoa_append::return#0 ] zp[2]:52 [ utoa_append::buffer#0 ] +Uplifting [] best 197142 combination zp[1]:37 [ conio_cursor_y ] zp[2]:40 [ conio_line_color ] zp[2]:38 [ conio_line_text ] zp[1]:36 [ conio_cursor_x ] mem[12] [ printf_buffer ] +Uplifting [cputc] best 196833 combination reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] +Uplifting [cputs] best 195933 combination zp[2]:11 [ cputs::s#3 cputs::s#4 cputs::s#0 ] reg byte a [ cputs::c#1 ] +Uplifting [utoa] best 194629 combination zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:14 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:50 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:47 [ utoa::buffer#3 ] +Uplifting [printf_number_buffer] best 194620 combination reg byte a [ printf_number_buffer::buffer_sign#0 ] +Uplifting [printf_sint] best 194620 combination zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] +Uplifting [clrscr] best 193030 combination reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:6 [ clrscr::line_cols#5 clrscr::line_cols#1 ] zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] reg byte x [ clrscr::l#2 clrscr::l#1 ] +Uplifting [test_casting] best 193030 combination zp[2]:42 [ test_casting::signed_short_value#0 ] +Uplifting [main] best 193030 combination zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Uplifting [MOS6526_CIA] best 193030 combination +Uplifting [MOS6569_VICII] best 193030 combination +Uplifting [MOS6581_SID] best 193030 combination +Uplifting [cputln] best 193030 combination +Uplifting [cscroll] best 193030 combination +Uplifting [RADIX] best 193030 combination +Uplifting [printf_format_number] best 193030 combination +Uplifting [printf_buffer_number] best 193030 combination +Uplifting [printf_format_string] best 193030 combination +Uplifting [__start] best 193030 combination +Attempting to uplift remaining variables inzp[1]:37 [ conio_cursor_y ] +Uplifting [] best 193030 combination zp[1]:37 [ conio_cursor_y ] +Attempting to uplift remaining variables inzp[1]:36 [ conio_cursor_x ] +Uplifting [] best 193030 combination zp[1]:36 [ conio_cursor_x ] +Attempting to uplift remaining variables inzp[1]:13 [ utoa::digit#2 utoa::digit#1 ] +Uplifting [utoa] best 193030 combination zp[1]:13 [ utoa::digit#2 utoa::digit#1 ] +Attempting to uplift remaining variables inzp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Uplifting [main] best 193030 combination zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +Coalescing zero page register [ zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] ] with [ zp[2]:14 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp[2]:42 [ test_casting::signed_short_value#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:47 [ utoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:52 [ utoa_append::buffer#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:56 [ utoa_append::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:23 [ memcpy::source#2 ] ] with [ zp[2]:27 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:25 [ memcpy::destination#2 ] ] with [ zp[2]:29 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ memset::str#3 ] ] with [ zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:50 [ utoa::digit_value#0 ] ] with [ zp[2]:54 [ utoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 ] ] with [ zp[2]:20 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] - score: 2 +Coalescing zero page register [ zp[2]:9 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] ] +Coalescing zero page register [ zp[2]:11 [ cputs::s#3 cputs::s#4 cputs::s#0 ] ] with [ zp[2]:6 [ clrscr::line_cols#5 clrscr::line_cols#1 ] ] +Coalescing zero page register [ zp[2]:23 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] with [ zp[2]:17 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] +Coalescing zero page register [ zp[2]:31 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:25 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] +Coalescing zero page register [ zp[2]:58 [ memcpy::src_end#0 ] ] with [ zp[2]:50 [ utoa::digit_value#0 utoa_append::sub#0 ] ] +Coalescing zero page register [ zp[2]:60 [ memset::end#0 ] ] with [ zp[2]:23 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] +Allocated (was zp[2]:9) zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ] +Allocated (was zp[2]:11) zp[2]:5 [ cputs::s#3 cputs::s#4 cputs::s#0 clrscr::line_cols#5 clrscr::line_cols#1 ] +Allocated (was zp[1]:13) zp[1]:7 [ utoa::digit#2 utoa::digit#1 ] +Allocated (was zp[2]:31) zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +Allocated (was zp[1]:36) zp[1]:10 [ conio_cursor_x ] +Allocated (was zp[1]:37) zp[1]:11 [ conio_cursor_y ] +Allocated (was zp[2]:38) zp[2]:12 [ conio_line_text ] +Allocated (was zp[2]:40) zp[2]:14 [ conio_line_color ] +Allocated (was zp[2]:58) zp[2]:16 [ memcpy::src_end#0 utoa::digit_value#0 utoa_append::sub#0 ] +Allocated (was zp[2]:60) zp[2]:18 [ memset::end#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Demonstrates problem with Casting of negative signed values +// https://gitlab.com/camelot/kickc/-/issues/496 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__start) +.pc = $80d "Program" + // Global Constants & labels + .const LIGHT_BLUE = $e + .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c + // Color Ram + .label COLORRAM = $d800 + // Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $a + // The current cursor y-position + .label conio_cursor_y = $b + // The current text cursor line start + .label conio_line_text = $c + // The current color cursor line start + .label conio_line_color = $e + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_y + // [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [6] call main + // [8] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [7] return + rts +} + // main +main: { + .label signed_char_value = 2 + // [9] call clrscr + // [16] phi from main to clrscr [phi:main->clrscr] + clrscr_from_main: + jsr clrscr + // [10] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 + lda #-5 + sta.z signed_char_value + jmp __b1 + // main::@1 + __b1: + // [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 -- vbsz1_neq_0_then_la1 + lda.z signed_char_value + cmp #0 + bne __b2 + jmp __breturn + // main::@return + __breturn: + // [12] return + rts + // main::@2 + __b2: + // [13] (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#2 -- vbsz1=_inc_vbsz1 + inc.z signed_char_value + // [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 -- vwsz1=vbsz2 + lda.z signed_char_value + sta.z test_casting.signed_short_value + ora #$7f + bmi !+ + lda #0 + !: + sta.z test_casting.signed_short_value+1 + // [15] call test_casting + jsr test_casting + // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // clrscr +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 3 + .label line_cols = 5 + // [17] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] + __b1_from_clrscr: + // [17] phi (byte*) clrscr::line_cols#5 = (const nomodify byte*) COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 + lda #COLORRAM + sta.z line_cols+1 + // [17] phi (byte*) clrscr::line_text#5 = (const nomodify byte*) DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + // [17] phi (byte) clrscr::l#2 = (byte) 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // clrscr::@1 + __b1: + // [18] if((byte) clrscr::l#2<(byte) $19) goto clrscr::@3 -- vbuxx_lt_vbuc1_then_la1 + cpx #$19 + bcc __b3_from___b1 + jmp __b2 + // clrscr::@2 + __b2: + // [19] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [20] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_y + // [21] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + jmp __breturn + // clrscr::@return + __breturn: + // [23] return + rts + // [24] phi from clrscr::@1 to clrscr::@3 [phi:clrscr::@1->clrscr::@3] + __b3_from___b1: + // [24] phi (byte) clrscr::c#2 = (byte) 0 [phi:clrscr::@1->clrscr::@3#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b3 + // clrscr::@3 + __b3: + // [25] if((byte) clrscr::c#2<(byte) $28) goto clrscr::@4 -- vbuyy_lt_vbuc1_then_la1 + cpy #$28 + bcc __b4 + jmp __b5 + // clrscr::@5 + __b5: + // [26] (byte*) clrscr::line_text#1 ← (byte*) clrscr::line_text#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_text + sta.z line_text + bcc !+ + inc.z line_text+1 + !: + // [27] (byte*) clrscr::line_cols#1 ← (byte*) clrscr::line_cols#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_cols + sta.z line_cols + bcc !+ + inc.z line_cols+1 + !: + // [28] (byte) clrscr::l#1 ← ++ (byte) clrscr::l#2 -- vbuxx=_inc_vbuxx + inx + // [17] phi from clrscr::@5 to clrscr::@1 [phi:clrscr::@5->clrscr::@1] + __b1_from___b5: + // [17] phi (byte*) clrscr::line_cols#5 = (byte*) clrscr::line_cols#1 [phi:clrscr::@5->clrscr::@1#0] -- register_copy + // [17] phi (byte*) clrscr::line_text#5 = (byte*) clrscr::line_text#1 [phi:clrscr::@5->clrscr::@1#1] -- register_copy + // [17] phi (byte) clrscr::l#2 = (byte) clrscr::l#1 [phi:clrscr::@5->clrscr::@1#2] -- register_copy + jmp __b1 + // clrscr::@4 + __b4: + // [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #' ' + sta (line_text),y + // [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 + lda #LIGHT_BLUE + sta (line_cols),y + // [31] (byte) clrscr::c#1 ← ++ (byte) clrscr::c#2 -- vbuyy=_inc_vbuyy + iny + // [24] phi from clrscr::@4 to clrscr::@3 [phi:clrscr::@4->clrscr::@3] + __b3_from___b4: + // [24] phi (byte) clrscr::c#2 = (byte) clrscr::c#1 [phi:clrscr::@4->clrscr::@3#0] -- register_copy + jmp __b3 +} + // test_casting +// test_casting(signed word zp(3) signed_short_value) +test_casting: { + .label signed_short_value = 3 + // [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 + // [33] call printf_sint + jsr printf_sint + // [34] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] + __b1_from_test_casting: + jmp __b1 + // test_casting::@1 + __b1: + // [35] call cputs + // [47] phi from test_casting::@1 to cputs [phi:test_casting::@1->cputs] + cputs_from___b1: + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) test_casting::s [phi:test_casting::@1->cputs#0] -- pbuz1=pbuc1 + lda #s + sta.z cputs.s+1 + jsr cputs + jmp __breturn + // test_casting::@return + __breturn: + // [36] return + rts + s: .text @"\n" + .byte 0 +} + // printf_sint +// Print a signed integer using a specific format +// printf_sint(signed word zp(3) value) +printf_sint: { + .label value = 3 + // [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Handle any sign + lda #0 + sta printf_buffer + // [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 + lda.z value+1 + bmi __b1 + // [41] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] + __b2_from_printf_sint: + __b2_from___b1: + // [41] phi (signed word) printf_sint::value#4 = (signed word) printf_sint::value#1 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy + jmp __b2 + // printf_sint::@1 + __b1: + // [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc.z value + sta.z value + lda #0 + sbc.z value+1 + sta.z value+1 + // [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' -- _deref_pbuc1=vbuc2 + lda #'-' + sta printf_buffer + jmp __b2_from___b1 + // printf_sint::@2 + __b2: + // [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 + // [43] call utoa + // [55] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + utoa_from___b2: + jsr utoa + jmp __b3 + // printf_sint::@3 + __b3: + // [44] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuaa=_deref_pbuc1 + lda printf_buffer + // [45] call printf_number_buffer + // Print using format + // [76] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + printf_number_buffer_from___b3: + jsr printf_number_buffer + jmp __breturn + // printf_sint::@return + __breturn: + // [46] return + rts +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(5) s) +cputs: { + .label s = 5 + // [48] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] + __b1_from_cputs: + __b1_from___b2: + // [48] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy + jmp __b1 + // cputs::@1 + __b1: + // [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (s),y + // [50] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [51] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b2 + jmp __breturn + // cputs::@return + __breturn: + // [52] return + rts + // cputs::@2 + __b2: + // [53] (byte) cputc::c#0 ← (byte) cputs::c#1 + // [54] call cputc + // [83] phi from cputs::@2 to cputc [phi:cputs::@2->cputc] + cputc_from___b2: + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy + jsr cputc + jmp __b1_from___b2 +} + // utoa +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// utoa(word zp(3) value, byte* zp($12) buffer) +utoa: { + .const max_digits = 5 + .label digit_value = $10 + .label buffer = $12 + .label digit = 7 + .label value = 3 + // [56] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + __b1_from_utoa: + // [56] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + sta.z buffer+1 + // [56] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + ldx #0 + // [56] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z digit + jmp __b1 + // utoa::@1 + __b1: + // [57] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z digit + cmp #max_digits-1 + bcc __b2 + jmp __b3 + // utoa::@3 + __b3: + // [58] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1 + lda.z value + // [59] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + tay + lda DIGITS,y + ldy #0 + sta (buffer),y + // [60] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [61] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (buffer),y + jmp __breturn + // utoa::@return + __breturn: + // [62] return + rts + // utoa::@2 + __b2: + // [63] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z digit + asl + // [64] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuaa + tay + lda RADIX_DECIMAL_VALUES,y + sta.z digit_value + lda RADIX_DECIMAL_VALUES+1,y + sta.z digit_value+1 + // [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne __b5 + jmp __b7 + // utoa::@7 + __b7: + // [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda.z digit_value+1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + // [67] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + __b4_from___b7: + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [67] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + jmp __b4 + // utoa::@4 + __b4: + // [68] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // [56] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + __b1_from___b4: + // [56] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [56] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [56] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + jmp __b1 + // utoa::@5 + __b5: + // [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + // [70] (word) utoa_append::value#0 ← (word) utoa::value#2 + // [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + // [72] call utoa_append + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + utoa_append_from___b5: + jsr utoa_append + // [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + jmp __b6 + // utoa::@6 + __b6: + // [74] (word) utoa::value#0 ← (word) utoa_append::return#0 + // [75] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [67] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + __b4_from___b6: + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + ldx #1 + // [67] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + jmp __b4 +} + // printf_number_buffer +// Print the contents of the number buffer using a specific format. +// This handles minimum length, zero-filling, and left/right justification from the format +// printf_number_buffer(byte register(A) buffer_sign) +printf_number_buffer: { + .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + jmp __b1 + // printf_number_buffer::@1 + __b1: + // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq __b2_from___b1 + jmp __b3 + // printf_number_buffer::@3 + __b3: + // [78] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 + // [79] call cputc + // [83] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc] + cputc_from___b3: + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy + jsr cputc + // [80] phi from printf_number_buffer::@1 printf_number_buffer::@3 to printf_number_buffer::@2 [phi:printf_number_buffer::@1/printf_number_buffer::@3->printf_number_buffer::@2] + __b2_from___b1: + __b2_from___b3: + jmp __b2 + // printf_number_buffer::@2 + __b2: + // [81] call cputs + // [47] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs] + cputs_from___b2: + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->cputs#0] -- pbuz1=pbuc1 + lda #buffer_digits + sta.z cputs.s+1 + jsr cputs + jmp __breturn + // printf_number_buffer::@return + __breturn: + // [82] return + rts +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// cputc(byte register(A) c) +cputc: { + // [84] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b1_from_cputc + jmp __b2 + // cputc::@2 + __b2: + // [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa + ldy.z conio_cursor_x + sta (conio_line_text),y + // [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + lda #LIGHT_BLUE + ldy.z conio_cursor_x + sta (conio_line_color),y + // [87] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // [89] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + __b3_from___b2: + jmp __b3 + // cputc::@3 + __b3: + // [90] call cputln + jsr cputln + jmp __breturn + // cputc::@return + __breturn: + // [91] return + rts + // [92] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + __b1_from_cputc: + jmp __b1 + // cputc::@1 + __b1: + // [93] call cputln + jsr cputln + jmp __breturn +} + // utoa_append +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// utoa_append(byte* zp($12) buffer, word zp(3) value, word zp($10) sub) +utoa_append: { + .label buffer = $12 + .label value = 3 + .label sub = $10 + .label return = 3 + // [95] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + __b1_from_utoa_append: + // [95] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + jmp __b1 + // utoa_append::@1 + __b1: + // [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + jmp __b3 + // utoa_append::@3 + __b3: + // [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda DIGITS,x + ldy #0 + sta (buffer),y + jmp __breturn + // utoa_append::@return + __breturn: + // [98] return + rts + // utoa_append::@2 + __b2: + // [99] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + inx + // [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + // [95] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + __b1_from___b2: + // [95] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + jmp __b1 +} + // cputln +// Print a newline +cputln: { + // [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // [103] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [104] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [105] call cscroll + jsr cscroll + jmp __breturn + // cputln::@return + __breturn: + // [106] return + rts +} + // cscroll +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // [108] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + __b1_from_cscroll: + jmp __b1 + // cscroll::@1 + __b1: + // [109] call memcpy + // [120] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + memcpy_from___b1: + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // [110] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + __b2_from___b1: + jmp __b2 + // cscroll::@2 + __b2: + // [111] call memcpy + // [120] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + memcpy_from___b2: + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + lda #COLORRAM + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) COLORRAM+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // [112] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + __b3_from___b2: + jmp __b3 + // cscroll::@3 + __b3: + // [113] call memset + // [130] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + memset_from___b3: + // [130] phi (byte) memset::c#4 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 + ldx #' ' + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // [114] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] + __b4_from___b3: + jmp __b4 + // cscroll::@4 + __b4: + // [115] call memset + // [130] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + memset_from___b4: + // [130] phi (byte) memset::c#4 = (const nomodify byte) LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 + ldx #LIGHT_BLUE + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + jmp __b5 + // cscroll::@5 + __b5: + // [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // [118] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1 + dec.z conio_cursor_y + jmp __breturn + // cscroll::@return + __breturn: + // [119] return + rts +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// memcpy(void* zp(8) destination, void* zp($12) source) +memcpy: { + .label src_end = $10 + .label dst = 8 + .label src = $12 + .label source = $12 + .label destination = 8 + // [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 -- pbuz1=pbuz2_plus_vwuc1 + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + // [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 + // [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 + // [124] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + __b1_from_memcpy: + __b1_from___b2: + // [124] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [124] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + jmp __b1 + // memcpy::@1 + __b1: + // [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + jmp __breturn + // memcpy::@return + __breturn: + // [126] return + rts + // memcpy::@2 + __b2: + // [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + ldy #0 + sta (dst),y + // [128] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + // [129] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1 + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1_from___b2 +} + // 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(8) str, byte register(X) c) +memset: { + .label end = $12 + .label dst = 8 + .label str = 8 + jmp __b1 + // memset::@1 + __b1: + // [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + // [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [133] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [133] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + jmp __breturn + // memset::@return + __breturn: + // [135] return + rts + // memset::@3 + __b3: + // [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (dst),y + // [137] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2_from___b3 +} + // File Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // Buffer used for stringified number being printed + printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __b3 +Removing instruction jmp __b5 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b7 +Removing instruction jmp __b4 +Removing instruction jmp __b6 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #0 +Removing instruction lda #0 +Replacing instruction lda #0 with TXA +Replacing instruction ldy #0 with TAY +Removing instruction ldy.z conio_cursor_x +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __b1_from___b2 with __b1 +Replacing label __b2_from___b1 with __b2 +Replacing label __b1_from_cputc with __b1 +Replacing label __b1_from___b2 with __b1 +Replacing label __b2_from___b3 with __b2 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: +Removing instruction __b1_from_test_casting: +Removing instruction cputs_from___b1: +Removing instruction __b2_from_printf_sint: +Removing instruction utoa_from___b2: +Removing instruction __b1_from_cputs: +Removing instruction __b1_from___b2: +Removing instruction cputc_from___b2: +Removing instruction __b4_from___b7: +Removing instruction utoa_append_from___b5: +Removing instruction cputc_from___b3: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: +Removing instruction cputs_from___b2: +Removing instruction __b3_from___b2: +Removing instruction __b1_from_cputc: +Removing instruction __b1_from_cscroll: +Removing instruction memcpy_from___b1: +Removing instruction __b2_from___b1: +Removing instruction memcpy_from___b2: +Removing instruction __b3_from___b2: +Removing instruction memset_from___b3: +Removing instruction __b4_from___b3: +Removing instruction memset_from___b4: +Removing instruction __b1_from_memcpy: +Removing instruction __b1_from___b2: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction clrscr_from_main: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __b1_from_clrscr: +Removing instruction __b2: +Removing instruction __breturn: +Removing instruction __b5: +Removing instruction __b1_from___b5: +Removing instruction __b3_from___b4: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b3: +Removing instruction printf_number_buffer_from___b3: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_utoa: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b7: +Removing instruction __b1_from___b4: +Removing instruction __b6: +Removing instruction __b4_from___b6: +Removing instruction __b1: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b1_from_utoa_append: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction __b5: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to __b2 in jmp __b2_from___b1 +Replacing jump to rts with rts in jmp __breturn +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label __b3_from___b1 to __b2 +Relabelling long label __b2_from___b1 to __b3 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b2 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z digit_value+1 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b3: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(const nomodify byte*) COLORRAM = (byte*) 55296 +(const nomodify byte*) DEFAULT_SCREEN = (byte*) 1024 +(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) MOS6569_VICII::BG_COLOR +(byte) MOS6569_VICII::BG_COLOR1 +(byte) MOS6569_VICII::BG_COLOR2 +(byte) MOS6569_VICII::BG_COLOR3 +(byte) MOS6569_VICII::BORDER_COLOR +(byte) MOS6569_VICII::CONTROL1 +(byte) MOS6569_VICII::CONTROL2 +(byte) MOS6569_VICII::IRQ_ENABLE +(byte) MOS6569_VICII::IRQ_STATUS +(byte) MOS6569_VICII::LIGHTPEN_X +(byte) MOS6569_VICII::LIGHTPEN_Y +(byte) MOS6569_VICII::MEMORY +(byte) MOS6569_VICII::RASTER +(byte) MOS6569_VICII::SPRITE0_COLOR +(byte) MOS6569_VICII::SPRITE0_X +(byte) MOS6569_VICII::SPRITE0_Y +(byte) MOS6569_VICII::SPRITE1_COLOR +(byte) MOS6569_VICII::SPRITE1_X +(byte) MOS6569_VICII::SPRITE1_Y +(byte) MOS6569_VICII::SPRITE2_COLOR +(byte) MOS6569_VICII::SPRITE2_X +(byte) MOS6569_VICII::SPRITE2_Y +(byte) MOS6569_VICII::SPRITE3_COLOR +(byte) MOS6569_VICII::SPRITE3_X +(byte) MOS6569_VICII::SPRITE3_Y +(byte) MOS6569_VICII::SPRITE4_COLOR +(byte) MOS6569_VICII::SPRITE4_X +(byte) MOS6569_VICII::SPRITE4_Y +(byte) MOS6569_VICII::SPRITE5_COLOR +(byte) MOS6569_VICII::SPRITE5_X +(byte) MOS6569_VICII::SPRITE5_Y +(byte) MOS6569_VICII::SPRITE6_COLOR +(byte) MOS6569_VICII::SPRITE6_X +(byte) MOS6569_VICII::SPRITE6_Y +(byte) MOS6569_VICII::SPRITE7_COLOR +(byte) MOS6569_VICII::SPRITE7_X +(byte) MOS6569_VICII::SPRITE7_Y +(byte) MOS6569_VICII::SPRITES_BG_COLLISION +(byte) MOS6569_VICII::SPRITES_COLLISION +(byte) MOS6569_VICII::SPRITES_ENABLE +(byte) MOS6569_VICII::SPRITES_EXPAND_X +(byte) MOS6569_VICII::SPRITES_EXPAND_Y +(byte) MOS6569_VICII::SPRITES_MC +(byte) MOS6569_VICII::SPRITES_MCOLOR1 +(byte) MOS6569_VICII::SPRITES_MCOLOR2 +(byte) MOS6569_VICII::SPRITES_PRIORITY +(byte) MOS6569_VICII::SPRITES_XMSB +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 +(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } +(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c +(void()) __start() +(label) __start::@1 +(label) __start::@return +(label) __start::__init1 +(void()) clrscr() +(label) clrscr::@1 +(label) clrscr::@2 +(label) clrscr::@3 +(label) clrscr::@4 +(label) clrscr::@5 +(label) clrscr::@return +(byte) clrscr::c +(byte) clrscr::c#1 reg byte y 20002.0 +(byte) clrscr::c#2 reg byte y 12501.25 +(byte) clrscr::l +(byte) clrscr::l#1 reg byte x 2002.0 +(byte) clrscr::l#2 reg byte x 333.6666666666667 +(byte*) clrscr::line_cols +(byte*) clrscr::line_cols#1 line_cols zp[2]:5 1001.0 +(byte*) clrscr::line_cols#5 line_cols zp[2]:5 1500.375 +(byte*) clrscr::line_text +(byte*) clrscr::line_text#1 line_text zp[2]:3 667.3333333333334 +(byte*) clrscr::line_text#5 line_text zp[2]:3 1714.7142857142858 +(byte) conio_cursor_x loadstore zp[1]:10 2.777777797962963E8 +(byte) conio_cursor_y loadstore zp[1]:11 4.571428572971429E9 +(byte*) conio_line_color loadstore zp[2]:14 3.2500000015882354E9 +(byte*) conio_line_text loadstore zp[2]:12 3.202898552289855E9 +(void()) cputc((byte) cputc::c) +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 reg byte a 2.00000002E8 +(byte) cputc::c#2 reg byte a 200002.0 +(byte) cputc::c#3 reg byte a 1.050050002E9 +(void()) cputln() +(label) cputln::@return +(void()) cputs((to_nomodify byte*) cputs::s) +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#1 reg byte a 1.00000001E8 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 s zp[2]:5 5.00000005E7 +(to_nomodify byte*) cputs::s#3 s zp[2]:5 1.50500002E8 +(to_nomodify byte*) cputs::s#4 s zp[2]:5 1000001.0 +(void()) cscroll() +(label) cscroll::@1 +(label) cscroll::@2 +(label) cscroll::@3 +(label) cscroll::@4 +(label) cscroll::@5 +(label) cscroll::@return +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@return +(signed byte) main::signed_char_value +(signed byte) main::signed_char_value#1 signed_char_value zp[1]:2 101.0 +(signed byte) main::signed_char_value#2 signed_char_value zp[1]:2 151.5 +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +(label) memcpy::@1 +(label) memcpy::@2 +(label) memcpy::@return +(void*) memcpy::destination +(void*) memcpy::destination#2 destination zp[2]:8 +(byte*) memcpy::dst +(byte*) memcpy::dst#1 dst zp[2]:8 1.000000000000001E15 +(byte*) memcpy::dst#2 dst zp[2]:8 1.0003333333333348E15 +(byte*) memcpy::dst#4 dst zp[2]:8 2.000000000002E12 +(word) memcpy::num +(void*) memcpy::return +(void*) memcpy::source +(void*) memcpy::source#2 source zp[2]:18 +(byte*) memcpy::src +(byte*) memcpy::src#1 src zp[2]:18 2.000000000000002E15 +(byte*) memcpy::src#2 src zp[2]:18 1.0002500000000012E15 +(byte*) memcpy::src#4 src zp[2]:18 1.000000000001E12 +(byte*) memcpy::src_end +(byte*) memcpy::src_end#0 src_end zp[2]:16 1.2512500000000025E14 +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@2 +(label) memset::@3 +(label) memset::@return +(byte) memset::c +(byte) memset::c#4 reg byte x 1.42857142857143E14 +(byte*) memset::dst +(byte*) memset::dst#1 dst zp[2]:8 2.000000000000002E15 +(byte*) memset::dst#2 dst zp[2]:8 1.3336666666666685E15 +(byte*) memset::dst#4 dst zp[2]:8 2.000000000002E12 +(byte*) memset::end +(byte*) memset::end#0 end zp[2]:18 1.668333333333337E14 +(word) memset::num +(void*) memset::return +(void*) memset::str +(void*) memset::str#3 str zp[2]:8 +(struct printf_buffer_number) printf_buffer loadstore mem[12] = {} +(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) } +(byte) printf_buffer_number::sign +(byte) printf_format_number::justify_left +(byte) printf_format_number::min_length +(byte) printf_format_number::radix +(byte) printf_format_number::sign_always +(byte) printf_format_number::upper_case +(byte) printf_format_number::zero_padding +(byte) printf_format_string::justify_left +(byte) printf_format_string::min_length +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +(label) printf_number_buffer::@1 +(label) printf_number_buffer::@2 +(label) printf_number_buffer::@3 +(label) printf_number_buffer::@return +(struct printf_buffer_number) printf_number_buffer::buffer +(byte*) printf_number_buffer::buffer_digits +(const byte*) printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS +(byte) printf_number_buffer::buffer_sign +(byte) printf_number_buffer::buffer_sign#0 reg byte a 70001.0 +(struct printf_format_number) printf_number_buffer::format +(byte) printf_number_buffer::format_justify_left +(byte) printf_number_buffer::format_min_length +(byte) printf_number_buffer::format_radix +(byte) printf_number_buffer::format_sign_always +(byte) printf_number_buffer::format_upper_case +(byte) printf_number_buffer::format_zero_padding +(signed byte) printf_number_buffer::len +(signed byte) printf_number_buffer::padding +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +(label) printf_sint::@1 +(label) printf_sint::@2 +(label) printf_sint::@3 +(label) printf_sint::@return +(struct printf_format_number) printf_sint::format +(byte) printf_sint::format_justify_left +(byte) printf_sint::format_min_length +(byte) printf_sint::format_radix +(byte) printf_sint::format_sign_always +(byte) printf_sint::format_upper_case +(byte) printf_sint::format_zero_padding +(word) printf_sint::uvalue +(signed word) printf_sint::value +(signed word) printf_sint::value#0 value zp[2]:3 10001.0 +(signed word) printf_sint::value#1 value zp[2]:3 10334.666666666666 +(signed word) printf_sint::value#4 value zp[2]:3 20002.0 +(void()) test_casting((signed word) test_casting::signed_short_value) +(label) test_casting::@1 +(label) test_casting::@return +(const byte*) test_casting::s[(byte) 2] = (byte*) " +" +(signed word) test_casting::signed_short_value +(signed word) test_casting::signed_short_value#0 signed_short_value zp[2]:3 1102.0 +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +(byte~) utoa::$10 reg byte a 2.0000002E7 +(byte~) utoa::$11 reg byte a 200002.0 +(label) utoa::@1 +(label) utoa::@2 +(label) utoa::@3 +(label) utoa::@4 +(label) utoa::@5 +(label) utoa::@6 +(label) utoa::@7 +(label) utoa::@return +(byte*) utoa::buffer +(byte*) utoa::buffer#11 buffer zp[2]:18 2871429.0 +(byte*) utoa::buffer#14 buffer zp[2]:18 1.50000015E7 +(byte*) utoa::buffer#3 buffer zp[2]:18 200002.0 +(byte*) utoa::buffer#4 buffer zp[2]:18 2.0000002E7 +(byte) utoa::digit +(byte) utoa::digit#1 digit zp[1]:7 2.0000002E7 +(byte) utoa::digit#2 digit zp[1]:7 2857143.1428571427 +(word) utoa::digit_value +(word) utoa::digit_value#0 digit_value zp[2]:16 6000000.6 +(word*) utoa::digit_values +(byte) utoa::max_digits +(const byte) utoa::max_digits#1 max_digits = (byte) 5 +(byte) utoa::radix +(byte) utoa::started +(byte) utoa::started#2 reg byte x 5000000.5 +(byte) utoa::started#4 reg byte x 1.0000001E7 +(word) utoa::value +(word) utoa::value#0 value zp[2]:3 1.0000001E7 +(word) utoa::value#1 value zp[2]:3 55001.0 +(word) utoa::value#2 value zp[2]:3 5728572.142857142 +(word) utoa::value#6 value zp[2]:3 1.50000015E7 +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +(label) utoa_append::@1 +(label) utoa_append::@2 +(label) utoa_append::@3 +(label) utoa_append::@return +(byte*) utoa_append::buffer +(byte*) utoa_append::buffer#0 buffer zp[2]:18 1.375000025E7 +(byte) utoa_append::digit +(byte) utoa_append::digit#1 reg byte x 1.00000000001E11 +(byte) utoa_append::digit#2 reg byte x 1.000500000015E11 +(word) utoa_append::return +(word) utoa_append::return#0 return zp[2]:3 2.0000002E7 +(word) utoa_append::sub +(word) utoa_append::sub#0 sub zp[2]:16 3.33350000005E10 +(word) utoa_append::value +(word) utoa_append::value#0 value zp[2]:3 3.6666667333333336E7 +(word) utoa_append::value#1 value zp[2]:3 2.00000000002E11 +(word) utoa_append::value#2 value zp[2]:3 5.001833333416667E10 + +zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +reg byte x [ clrscr::l#2 clrscr::l#1 ] +reg byte y [ clrscr::c#2 clrscr::c#1 ] +zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ] +zp[2]:5 [ cputs::s#3 cputs::s#4 cputs::s#0 clrscr::line_cols#5 clrscr::line_cols#1 ] +zp[1]:7 [ utoa::digit#2 utoa::digit#1 ] +reg byte x [ utoa::started#2 utoa::started#4 ] +reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] +reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] +zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +reg byte x [ memset::c#4 ] +zp[1]:10 [ conio_cursor_x ] +zp[1]:11 [ conio_cursor_y ] +zp[2]:12 [ conio_line_text ] +zp[2]:14 [ conio_line_color ] +reg byte a [ printf_number_buffer::buffer_sign#0 ] +reg byte a [ cputs::c#1 ] +reg byte a [ utoa::$11 ] +reg byte a [ utoa::$10 ] +zp[2]:16 [ memcpy::src_end#0 utoa::digit_value#0 utoa_append::sub#0 ] +zp[2]:18 [ memset::end#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] +mem[12] [ printf_buffer ] + + +FINAL ASSEMBLER +Score: 163678 + + // File Comments +// Demonstrates problem with Casting of negative signed values +// https://gitlab.com/camelot/kickc/-/issues/496 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__start) +.pc = $80d "Program" + // Global Constants & labels + .const LIGHT_BLUE = $e + .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c + // Color Ram + .label COLORRAM = $d800 + // Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $a + // The current cursor y-position + .label conio_cursor_y = $b + // The current text cursor line start + .label conio_line_text = $c + // The current color cursor line start + .label conio_line_color = $e + // __start +__start: { + // __start::__init1 + // conio_cursor_x = 0 + // [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y = 0 + // [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + sta.z conio_cursor_y + // conio_line_text = CONIO_SCREEN_TEXT + // [3] (byte*) conio_line_text ← (const nomodify byte*) DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // conio_line_color = CONIO_SCREEN_COLORS + // [4] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // [5] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [6] call main + // [8] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [7] return + rts +} + // main +main: { + .label signed_char_value = 2 + // clrscr() + // [9] call clrscr + // [16] phi from main to clrscr [phi:main->clrscr] + jsr clrscr + // [10] phi from main to main::@1 [phi:main->main::@1] + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 + lda #-5 + sta.z signed_char_value + // main::@1 + __b1: + // while (signed_char_value != 0) + // [11] if((signed byte) main::signed_char_value#2!=(signed byte) 0) goto main::@2 -- vbsz1_neq_0_then_la1 + lda.z signed_char_value + cmp #0 + bne __b2 + // main::@return + // } + // [12] return + rts + // main::@2 + __b2: + // ++signed_char_value; + // [13] (signed byte) main::signed_char_value#1 ← ++ (signed byte) main::signed_char_value#2 -- vbsz1=_inc_vbsz1 + inc.z signed_char_value + // test_casting(signed_char_value) + // [14] (signed word) test_casting::signed_short_value#0 ← (signed byte) main::signed_char_value#1 -- vwsz1=vbsz2 + lda.z signed_char_value + sta.z test_casting.signed_short_value + ora #$7f + bmi !+ + lda #0 + !: + sta.z test_casting.signed_short_value+1 + // [15] call test_casting + jsr test_casting + // [10] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [10] phi (signed byte) main::signed_char_value#2 = (signed byte) main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // clrscr +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 3 + .label line_cols = 5 + // [17] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] + // [17] phi (byte*) clrscr::line_cols#5 = (const nomodify byte*) COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 + lda #COLORRAM + sta.z line_cols+1 + // [17] phi (byte*) clrscr::line_text#5 = (const nomodify byte*) DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + // [17] phi (byte) clrscr::l#2 = (byte) 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 + ldx #0 + // clrscr::@1 + __b1: + // for( char l=0;lDEFAULT_SCREEN + sta.z conio_line_text+1 + // conio_line_color = CONIO_SCREEN_COLORS + // [22] (byte*) conio_line_color ← (const nomodify byte*) COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // clrscr::@return + // } + // [23] return + rts + // [24] phi from clrscr::@1 to clrscr::@3 [phi:clrscr::@1->clrscr::@3] + __b2: + // [24] phi (byte) clrscr::c#2 = (byte) 0 [phi:clrscr::@1->clrscr::@3#0] -- vbuyy=vbuc1 + ldy #0 + // clrscr::@3 + __b3: + // for( char c=0;cclrscr::@1] + // [17] phi (byte*) clrscr::line_cols#5 = (byte*) clrscr::line_cols#1 [phi:clrscr::@5->clrscr::@1#0] -- register_copy + // [17] phi (byte*) clrscr::line_text#5 = (byte*) clrscr::line_text#1 [phi:clrscr::@5->clrscr::@1#1] -- register_copy + // [17] phi (byte) clrscr::l#2 = (byte) clrscr::l#1 [phi:clrscr::@5->clrscr::@1#2] -- register_copy + jmp __b1 + // clrscr::@4 + __b4: + // line_text[c] = ' ' + // [29] *((byte*) clrscr::line_text#5 + (byte) clrscr::c#2) ← (byte) ' ' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #' ' + sta (line_text),y + // line_cols[c] = conio_textcolor + // [30] *((byte*) clrscr::line_cols#5 + (byte) clrscr::c#2) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 + lda #LIGHT_BLUE + sta (line_cols),y + // for( char c=0;cclrscr::@3] + // [24] phi (byte) clrscr::c#2 = (byte) clrscr::c#1 [phi:clrscr::@4->clrscr::@3#0] -- register_copy + jmp __b3 +} + // test_casting +// test_casting(signed word zp(3) signed_short_value) +test_casting: { + .label signed_short_value = 3 + // printf("%d\n", signed_short_value) + // [32] (signed word) printf_sint::value#1 ← (signed word) test_casting::signed_short_value#0 + // [33] call printf_sint + jsr printf_sint + // [34] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] + // test_casting::@1 + // printf("%d\n", signed_short_value) + // [35] call cputs + // [47] phi from test_casting::@1 to cputs [phi:test_casting::@1->cputs] + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) test_casting::s [phi:test_casting::@1->cputs#0] -- pbuz1=pbuc1 + lda #s + sta.z cputs.s+1 + jsr cputs + // test_casting::@return + // } + // [36] return + rts + s: .text @"\n" + .byte 0 +} + // printf_sint +// Print a signed integer using a specific format +// printf_sint(signed word zp(3) value) +printf_sint: { + .label value = 3 + // printf_buffer.sign = 0 + // [37] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Handle any sign + lda #0 + sta printf_buffer + // if(value<0) + // [38] if((signed word) printf_sint::value#1<(signed byte) 0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 + lda.z value+1 + bmi __b1 + // [41] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] + // [41] phi (signed word) printf_sint::value#4 = (signed word) printf_sint::value#1 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy + jmp __b2 + // printf_sint::@1 + __b1: + // value = -value + // [39] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc.z value + sta.z value + lda #0 + sbc.z value+1 + sta.z value+1 + // printf_buffer.sign = '-' + // [40] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-' -- _deref_pbuc1=vbuc2 + lda #'-' + sta printf_buffer + // printf_sint::@2 + __b2: + // utoa(uvalue, printf_buffer.digits, format.radix) + // [42] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#4 + // [43] call utoa + // [55] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + jsr utoa + // printf_sint::@3 + // printf_number_buffer(printf_buffer, format) + // [44] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuaa=_deref_pbuc1 + lda printf_buffer + // [45] call printf_number_buffer + // Print using format + // [76] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + jsr printf_number_buffer + // printf_sint::@return + // } + // [46] return + rts +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(5) s) +cputs: { + .label s = 5 + // [48] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] + // [48] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy + // cputs::@1 + __b1: + // while(c=*s++) + // [49] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (s),y + // [50] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [51] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b2 + // cputs::@return + // } + // [52] return + rts + // cputs::@2 + __b2: + // cputc(c) + // [53] (byte) cputc::c#0 ← (byte) cputs::c#1 + // [54] call cputc + // [83] phi from cputs::@2 to cputc [phi:cputs::@2->cputc] + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy + jsr cputc + jmp __b1 +} + // utoa +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// utoa(word zp(3) value, byte* zp($12) buffer) +utoa: { + .const max_digits = 5 + .label digit_value = $10 + .label buffer = $12 + .label digit = 7 + .label value = 3 + // [56] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [56] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + sta.z buffer+1 + // [56] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + ldx #0 + // [56] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + txa + sta.z digit + // utoa::@1 + __b1: + // for( char digit=0; digit= digit_value) + // [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne __b5 + // utoa::@7 + // [66] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + // [67] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [67] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + // utoa::@4 + __b4: + // for( char digit=0; digitutoa::@1] + // [56] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [56] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [56] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [56] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + jmp __b1 + // utoa::@5 + __b5: + // utoa_append(buffer++, value, digit_value) + // [69] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + // [70] (word) utoa_append::value#0 ← (word) utoa::value#2 + // [71] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + // [72] call utoa_append + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + jsr utoa_append + // utoa_append(buffer++, value, digit_value) + // [73] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + // utoa::@6 + // value = utoa_append(buffer++, value, digit_value) + // [74] (word) utoa::value#0 ← (word) utoa_append::return#0 + // value = utoa_append(buffer++, value, digit_value); + // [75] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [67] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [67] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [67] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + ldx #1 + // [67] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + jmp __b4 +} + // printf_number_buffer +// Print the contents of the number buffer using a specific format. +// This handles minimum length, zero-filling, and left/right justification from the format +// printf_number_buffer(byte register(A) buffer_sign) +printf_number_buffer: { + .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + // printf_number_buffer::@1 + // if(buffer.sign) + // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq __b2 + // printf_number_buffer::@3 + // cputc(buffer.sign) + // [78] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 + // [79] call cputc + // [83] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc] + // [83] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy + jsr cputc + // [80] phi from printf_number_buffer::@1 printf_number_buffer::@3 to printf_number_buffer::@2 [phi:printf_number_buffer::@1/printf_number_buffer::@3->printf_number_buffer::@2] + // printf_number_buffer::@2 + __b2: + // cputs(buffer.digits) + // [81] call cputs + // [47] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs] + // [47] phi (to_nomodify byte*) cputs::s#4 = (const byte*) printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->cputs#0] -- pbuz1=pbuc1 + lda #buffer_digits + sta.z cputs.s+1 + jsr cputs + // printf_number_buffer::@return + // } + // [82] return + rts +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// cputc(byte register(A) c) +cputc: { + // if(c=='\n') + // [84] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b1 + // cputc::@2 + // conio_line_text[conio_cursor_x] = c + // [85] *((byte*) conio_line_text + (byte) conio_cursor_x) ← (byte) cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa + ldy.z conio_cursor_x + sta (conio_line_text),y + // conio_line_color[conio_cursor_x] = conio_textcolor + // [86] *((byte*) conio_line_color + (byte) conio_cursor_x) ← (const nomodify byte) LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + lda #LIGHT_BLUE + sta (conio_line_color),y + // if(++conio_cursor_x==CONIO_WIDTH) + // [87] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [88] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // [89] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + // cputc::@3 + // cputln() + // [90] call cputln + jsr cputln + // cputc::@return + __breturn: + // } + // [91] return + rts + // [92] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + // cputc::@1 + __b1: + // cputln() + // [93] call cputln + jsr cputln + rts +} + // utoa_append +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// utoa_append(byte* zp($12) buffer, word zp(3) value, word zp($10) sub) +utoa_append: { + .label buffer = $12 + .label value = 3 + .label sub = $10 + .label return = 3 + // [95] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [95] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // utoa_append::@1 + __b1: + // while (value >= sub) + // [96] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + // utoa_append::@3 + // *buffer = DIGITS[digit] + // [97] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda DIGITS,x + ldy #0 + sta (buffer),y + // utoa_append::@return + // } + // [98] return + rts + // utoa_append::@2 + __b2: + // digit++; + // [99] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + inx + // value -= sub + // [100] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + // [95] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [95] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [95] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + jmp __b1 +} + // cputln +// Print a newline +cputln: { + // conio_line_text += CONIO_WIDTH + // [101] (byte*) conio_line_text ← (byte*) conio_line_text + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // conio_line_color += CONIO_WIDTH + // [102] (byte*) conio_line_color ← (byte*) conio_line_color + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // conio_cursor_x = 0 + // [103] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y++; + // [104] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // cscroll() + // [105] call cscroll + jsr cscroll + // cputln::@return + // } + // [106] return + rts +} + // cscroll +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // if(conio_cursor_y==CONIO_HEIGHT) + // [107] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // [108] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + // cscroll::@1 + // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + // [109] call memcpy + // [120] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // [110] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + // cscroll::@2 + // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + // [111] call memcpy + // [120] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + // [120] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + lda #COLORRAM + sta.z memcpy.destination+1 + // [120] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) COLORRAM+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // [112] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + // cscroll::@3 + // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) + // [113] call memset + // [130] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + // [130] phi (byte) memset::c#4 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 + ldx #' ' + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) DEFAULT_SCREEN+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // [114] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] + // cscroll::@4 + // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) + // [115] call memset + // [130] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + // [130] phi (byte) memset::c#4 = (const nomodify byte) LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 + ldx #LIGHT_BLUE + // [130] phi (void*) memset::str#3 = (void*)(const nomodify byte*) COLORRAM+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // cscroll::@5 + // conio_line_text -= CONIO_WIDTH + // [116] (byte*) conio_line_text ← (byte*) conio_line_text - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // conio_line_color -= CONIO_WIDTH + // [117] (byte*) conio_line_color ← (byte*) conio_line_color - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // conio_cursor_y--; + // [118] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1 + dec.z conio_cursor_y + // cscroll::@return + __breturn: + // } + // [119] return + rts +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// memcpy(void* zp(8) destination, void* zp($12) source) +memcpy: { + .label src_end = $10 + .label dst = 8 + .label src = $12 + .label source = $12 + .label destination = 8 + // src_end = (char*)source+num + // [121] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 -- pbuz1=pbuz2_plus_vwuc1 + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + // [122] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 + // [123] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 + // [124] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + // [124] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [124] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + // memcpy::@1 + __b1: + // while(src!=src_end) + // [125] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + // memcpy::@return + // } + // [126] return + rts + // memcpy::@2 + __b2: + // *dst++ = *src++ + // [127] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + sta (dst),y + // *dst++ = *src++; + // [128] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + // [129] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1 + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1 +} + // 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(8) str, byte register(X) c) +memset: { + .label end = $12 + .label dst = 8 + .label str = 8 + // memset::@1 + // end = (char*)str + num + // [131] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + // [132] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [133] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [133] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // memset::@2 + __b2: + // for(char* dst = str; dst!=end; dst++) + // [134] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // memset::@return + // } + // [135] return + rts + // memset::@3 + __b3: + // *dst = c + // [136] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + // [137] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} + // File Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // Buffer used for stringified number being printed + printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + diff --git a/src/test/ref/casting-negative.sym b/src/test/ref/casting-negative.sym new file mode 100644 index 000000000..c50980513 --- /dev/null +++ b/src/test/ref/casting-negative.sym @@ -0,0 +1,322 @@ +(const nomodify byte*) COLORRAM = (byte*) 55296 +(const nomodify byte*) DEFAULT_SCREEN = (byte*) 1024 +(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) MOS6569_VICII::BG_COLOR +(byte) MOS6569_VICII::BG_COLOR1 +(byte) MOS6569_VICII::BG_COLOR2 +(byte) MOS6569_VICII::BG_COLOR3 +(byte) MOS6569_VICII::BORDER_COLOR +(byte) MOS6569_VICII::CONTROL1 +(byte) MOS6569_VICII::CONTROL2 +(byte) MOS6569_VICII::IRQ_ENABLE +(byte) MOS6569_VICII::IRQ_STATUS +(byte) MOS6569_VICII::LIGHTPEN_X +(byte) MOS6569_VICII::LIGHTPEN_Y +(byte) MOS6569_VICII::MEMORY +(byte) MOS6569_VICII::RASTER +(byte) MOS6569_VICII::SPRITE0_COLOR +(byte) MOS6569_VICII::SPRITE0_X +(byte) MOS6569_VICII::SPRITE0_Y +(byte) MOS6569_VICII::SPRITE1_COLOR +(byte) MOS6569_VICII::SPRITE1_X +(byte) MOS6569_VICII::SPRITE1_Y +(byte) MOS6569_VICII::SPRITE2_COLOR +(byte) MOS6569_VICII::SPRITE2_X +(byte) MOS6569_VICII::SPRITE2_Y +(byte) MOS6569_VICII::SPRITE3_COLOR +(byte) MOS6569_VICII::SPRITE3_X +(byte) MOS6569_VICII::SPRITE3_Y +(byte) MOS6569_VICII::SPRITE4_COLOR +(byte) MOS6569_VICII::SPRITE4_X +(byte) MOS6569_VICII::SPRITE4_Y +(byte) MOS6569_VICII::SPRITE5_COLOR +(byte) MOS6569_VICII::SPRITE5_X +(byte) MOS6569_VICII::SPRITE5_Y +(byte) MOS6569_VICII::SPRITE6_COLOR +(byte) MOS6569_VICII::SPRITE6_X +(byte) MOS6569_VICII::SPRITE6_Y +(byte) MOS6569_VICII::SPRITE7_COLOR +(byte) MOS6569_VICII::SPRITE7_X +(byte) MOS6569_VICII::SPRITE7_Y +(byte) MOS6569_VICII::SPRITES_BG_COLLISION +(byte) MOS6569_VICII::SPRITES_COLLISION +(byte) MOS6569_VICII::SPRITES_ENABLE +(byte) MOS6569_VICII::SPRITES_EXPAND_X +(byte) MOS6569_VICII::SPRITES_EXPAND_Y +(byte) MOS6569_VICII::SPRITES_MC +(byte) MOS6569_VICII::SPRITES_MCOLOR1 +(byte) MOS6569_VICII::SPRITES_MCOLOR2 +(byte) MOS6569_VICII::SPRITES_PRIORITY +(byte) MOS6569_VICII::SPRITES_XMSB +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 +(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } +(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c +(void()) __start() +(label) __start::@1 +(label) __start::@return +(label) __start::__init1 +(void()) clrscr() +(label) clrscr::@1 +(label) clrscr::@2 +(label) clrscr::@3 +(label) clrscr::@4 +(label) clrscr::@5 +(label) clrscr::@return +(byte) clrscr::c +(byte) clrscr::c#1 reg byte y 20002.0 +(byte) clrscr::c#2 reg byte y 12501.25 +(byte) clrscr::l +(byte) clrscr::l#1 reg byte x 2002.0 +(byte) clrscr::l#2 reg byte x 333.6666666666667 +(byte*) clrscr::line_cols +(byte*) clrscr::line_cols#1 line_cols zp[2]:5 1001.0 +(byte*) clrscr::line_cols#5 line_cols zp[2]:5 1500.375 +(byte*) clrscr::line_text +(byte*) clrscr::line_text#1 line_text zp[2]:3 667.3333333333334 +(byte*) clrscr::line_text#5 line_text zp[2]:3 1714.7142857142858 +(byte) conio_cursor_x loadstore zp[1]:10 2.777777797962963E8 +(byte) conio_cursor_y loadstore zp[1]:11 4.571428572971429E9 +(byte*) conio_line_color loadstore zp[2]:14 3.2500000015882354E9 +(byte*) conio_line_text loadstore zp[2]:12 3.202898552289855E9 +(void()) cputc((byte) cputc::c) +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 reg byte a 2.00000002E8 +(byte) cputc::c#2 reg byte a 200002.0 +(byte) cputc::c#3 reg byte a 1.050050002E9 +(void()) cputln() +(label) cputln::@return +(void()) cputs((to_nomodify byte*) cputs::s) +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#1 reg byte a 1.00000001E8 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 s zp[2]:5 5.00000005E7 +(to_nomodify byte*) cputs::s#3 s zp[2]:5 1.50500002E8 +(to_nomodify byte*) cputs::s#4 s zp[2]:5 1000001.0 +(void()) cscroll() +(label) cscroll::@1 +(label) cscroll::@2 +(label) cscroll::@3 +(label) cscroll::@4 +(label) cscroll::@5 +(label) cscroll::@return +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@return +(signed byte) main::signed_char_value +(signed byte) main::signed_char_value#1 signed_char_value zp[1]:2 101.0 +(signed byte) main::signed_char_value#2 signed_char_value zp[1]:2 151.5 +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +(label) memcpy::@1 +(label) memcpy::@2 +(label) memcpy::@return +(void*) memcpy::destination +(void*) memcpy::destination#2 destination zp[2]:8 +(byte*) memcpy::dst +(byte*) memcpy::dst#1 dst zp[2]:8 1.000000000000001E15 +(byte*) memcpy::dst#2 dst zp[2]:8 1.0003333333333348E15 +(byte*) memcpy::dst#4 dst zp[2]:8 2.000000000002E12 +(word) memcpy::num +(void*) memcpy::return +(void*) memcpy::source +(void*) memcpy::source#2 source zp[2]:18 +(byte*) memcpy::src +(byte*) memcpy::src#1 src zp[2]:18 2.000000000000002E15 +(byte*) memcpy::src#2 src zp[2]:18 1.0002500000000012E15 +(byte*) memcpy::src#4 src zp[2]:18 1.000000000001E12 +(byte*) memcpy::src_end +(byte*) memcpy::src_end#0 src_end zp[2]:16 1.2512500000000025E14 +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@2 +(label) memset::@3 +(label) memset::@return +(byte) memset::c +(byte) memset::c#4 reg byte x 1.42857142857143E14 +(byte*) memset::dst +(byte*) memset::dst#1 dst zp[2]:8 2.000000000000002E15 +(byte*) memset::dst#2 dst zp[2]:8 1.3336666666666685E15 +(byte*) memset::dst#4 dst zp[2]:8 2.000000000002E12 +(byte*) memset::end +(byte*) memset::end#0 end zp[2]:18 1.668333333333337E14 +(word) memset::num +(void*) memset::return +(void*) memset::str +(void*) memset::str#3 str zp[2]:8 +(struct printf_buffer_number) printf_buffer loadstore mem[12] = {} +(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) } +(byte) printf_buffer_number::sign +(byte) printf_format_number::justify_left +(byte) printf_format_number::min_length +(byte) printf_format_number::radix +(byte) printf_format_number::sign_always +(byte) printf_format_number::upper_case +(byte) printf_format_number::zero_padding +(byte) printf_format_string::justify_left +(byte) printf_format_string::min_length +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +(label) printf_number_buffer::@1 +(label) printf_number_buffer::@2 +(label) printf_number_buffer::@3 +(label) printf_number_buffer::@return +(struct printf_buffer_number) printf_number_buffer::buffer +(byte*) printf_number_buffer::buffer_digits +(const byte*) printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS +(byte) printf_number_buffer::buffer_sign +(byte) printf_number_buffer::buffer_sign#0 reg byte a 70001.0 +(struct printf_format_number) printf_number_buffer::format +(byte) printf_number_buffer::format_justify_left +(byte) printf_number_buffer::format_min_length +(byte) printf_number_buffer::format_radix +(byte) printf_number_buffer::format_sign_always +(byte) printf_number_buffer::format_upper_case +(byte) printf_number_buffer::format_zero_padding +(signed byte) printf_number_buffer::len +(signed byte) printf_number_buffer::padding +(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) +(label) printf_sint::@1 +(label) printf_sint::@2 +(label) printf_sint::@3 +(label) printf_sint::@return +(struct printf_format_number) printf_sint::format +(byte) printf_sint::format_justify_left +(byte) printf_sint::format_min_length +(byte) printf_sint::format_radix +(byte) printf_sint::format_sign_always +(byte) printf_sint::format_upper_case +(byte) printf_sint::format_zero_padding +(word) printf_sint::uvalue +(signed word) printf_sint::value +(signed word) printf_sint::value#0 value zp[2]:3 10001.0 +(signed word) printf_sint::value#1 value zp[2]:3 10334.666666666666 +(signed word) printf_sint::value#4 value zp[2]:3 20002.0 +(void()) test_casting((signed word) test_casting::signed_short_value) +(label) test_casting::@1 +(label) test_casting::@return +(const byte*) test_casting::s[(byte) 2] = (byte*) " +" +(signed word) test_casting::signed_short_value +(signed word) test_casting::signed_short_value#0 signed_short_value zp[2]:3 1102.0 +(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) +(byte~) utoa::$10 reg byte a 2.0000002E7 +(byte~) utoa::$11 reg byte a 200002.0 +(label) utoa::@1 +(label) utoa::@2 +(label) utoa::@3 +(label) utoa::@4 +(label) utoa::@5 +(label) utoa::@6 +(label) utoa::@7 +(label) utoa::@return +(byte*) utoa::buffer +(byte*) utoa::buffer#11 buffer zp[2]:18 2871429.0 +(byte*) utoa::buffer#14 buffer zp[2]:18 1.50000015E7 +(byte*) utoa::buffer#3 buffer zp[2]:18 200002.0 +(byte*) utoa::buffer#4 buffer zp[2]:18 2.0000002E7 +(byte) utoa::digit +(byte) utoa::digit#1 digit zp[1]:7 2.0000002E7 +(byte) utoa::digit#2 digit zp[1]:7 2857143.1428571427 +(word) utoa::digit_value +(word) utoa::digit_value#0 digit_value zp[2]:16 6000000.6 +(word*) utoa::digit_values +(byte) utoa::max_digits +(const byte) utoa::max_digits#1 max_digits = (byte) 5 +(byte) utoa::radix +(byte) utoa::started +(byte) utoa::started#2 reg byte x 5000000.5 +(byte) utoa::started#4 reg byte x 1.0000001E7 +(word) utoa::value +(word) utoa::value#0 value zp[2]:3 1.0000001E7 +(word) utoa::value#1 value zp[2]:3 55001.0 +(word) utoa::value#2 value zp[2]:3 5728572.142857142 +(word) utoa::value#6 value zp[2]:3 1.50000015E7 +(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) +(label) utoa_append::@1 +(label) utoa_append::@2 +(label) utoa_append::@3 +(label) utoa_append::@return +(byte*) utoa_append::buffer +(byte*) utoa_append::buffer#0 buffer zp[2]:18 1.375000025E7 +(byte) utoa_append::digit +(byte) utoa_append::digit#1 reg byte x 1.00000000001E11 +(byte) utoa_append::digit#2 reg byte x 1.000500000015E11 +(word) utoa_append::return +(word) utoa_append::return#0 return zp[2]:3 2.0000002E7 +(word) utoa_append::sub +(word) utoa_append::sub#0 sub zp[2]:16 3.33350000005E10 +(word) utoa_append::value +(word) utoa_append::value#0 value zp[2]:3 3.6666667333333336E7 +(word) utoa_append::value#1 value zp[2]:3 2.00000000002E11 +(word) utoa_append::value#2 value zp[2]:3 5.001833333416667E10 + +zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] +reg byte x [ clrscr::l#2 clrscr::l#1 ] +reg byte y [ clrscr::c#2 clrscr::c#1 ] +zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ] +zp[2]:5 [ cputs::s#3 cputs::s#4 cputs::s#0 clrscr::line_cols#5 clrscr::line_cols#1 ] +zp[1]:7 [ utoa::digit#2 utoa::digit#1 ] +reg byte x [ utoa::started#2 utoa::started#4 ] +reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] +reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] +zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +reg byte x [ memset::c#4 ] +zp[1]:10 [ conio_cursor_x ] +zp[1]:11 [ conio_cursor_y ] +zp[2]:12 [ conio_line_text ] +zp[2]:14 [ conio_line_color ] +reg byte a [ printf_number_buffer::buffer_sign#0 ] +reg byte a [ cputs::c#1 ] +reg byte a [ utoa::$11 ] +reg byte a [ utoa::$10 ] +zp[2]:16 [ memcpy::src_end#0 utoa::digit_value#0 utoa_append::sub#0 ] +zp[2]:18 [ memset::end#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] +mem[12] [ printf_buffer ]