From ff812d6f6004e160e9e7b0ba1005ab04eff82563 Mon Sep 17 00:00:00 2001 From: jespergravgaard <jesper@balmangravgaard.dk> Date: Fri, 11 Jun 2021 21:41:01 +0200 Subject: [PATCH] Removed support for LValue unary operator low/high <x >x. Added support for LValue BYTE0(), BYTE1(), ..., WORD0(), .... Closes #667 --- .../cache/fragment-cache-csg65ce02.asm | 2 +- .../cache/fragment-cache-mega45gs02.asm | 2 +- .../fragment/cache/fragment-cache-mos6502.asm | 2 +- .../cache/fragment-cache-mos6502x.asm | 335 +++-- .../cache/fragment-cache-rom6502x.asm | 2 +- .../cache/fragment-cache-wdc65c02.asm | 2 +- .../pvom1=pbuc1_setbyte1_vbuaa.asm | 3 + .../pvom1=pvom1_setbyte0_vbuaa.asm | 1 + ...xx=pwuc1_derefidx_vbuxx_setbyte0_vbuaa.asm | 1 + ...yy=pwuc1_derefidx_vbuyy_setbyte0_vbuaa.asm | 1 + ...um2.asm => vdum1=vdum1_setword0_vwum2.asm} | 0 ...um2.asm => vdum1=vdum1_setword1_vwum2.asm} | 0 ...um3.asm => vdum1=vdum2_setword0_vwum3.asm} | 0 ...um3.asm => vdum1=vdum2_setword1_vwum3.asm} | 0 ...uaa.asm => vwum1=vbuc1_setbyte1_vbuaa.asm} | 0 ...uxx.asm => vwum1=vbuc1_setbyte1_vbuxx.asm} | 0 ...uyy.asm => vwum1=vbuc1_setbyte1_vbuyy.asm} | 0 ...uaa.asm => vwum1=vwuc1_setbyte0_vbuaa.asm} | 0 ...uxx.asm => vwum1=vwuc1_setbyte0_vbuxx.asm} | 0 ...uyy.asm => vwum1=vwuc1_setbyte0_vbuyy.asm} | 0 ...uaa.asm => vwum1=vwuc1_setbyte1_vbuaa.asm} | 0 ...uxx.asm => vwum1=vwuc1_setbyte1_vbuxx.asm} | 0 ...uyy.asm => vwum1=vwuc1_setbyte1_vbuyy.asm} | 0 ...uaa.asm => vwum1=vwum1_setbyte0_vbuaa.asm} | 0 ...uaa.asm => vwum1=vwum1_setword1_vbuaa.asm} | 0 ...uxx.asm => vwum1=vwum1_setword1_vbuxx.asm} | 0 ...uyy.asm => vwum1=vwum1_setword1_vbuyy.asm} | 0 ...uaa.asm => vwum1=vwum2_setbyte0_vbuaa.asm} | 0 ...uxx.asm => vwum1=vwum2_setbyte0_vbuxx.asm} | 0 ...uyy.asm => vwum1=vwum2_setbyte0_vbuyy.asm} | 0 ...uaa.asm => vwum1=vwum2_setbyte1_vbuaa.asm} | 0 ...uxx.asm => vwum1=vwum2_setbyte1_vbuxx.asm} | 0 ...uyy.asm => vwum1=vwum2_setbyte1_vbuyy.asm} | 0 .../model/operators/OperatorSetByte0.java | 24 + .../model/operators/OperatorSetByte1.java | 24 + .../model/operators/OperatorSetByte2.java | 24 + .../model/operators/OperatorSetByte3.java | 24 + .../model/operators/OperatorSetWord0.java | 24 + .../model/operators/OperatorSetWord1.java | 24 + .../kickc/model/operators/Operators.java | 14 +- .../Pass0GenerateStatementSequence.java | 2 +- .../kickc/passes/Pass1FixLValuesLoHi.java | 38 +- .../passes/Pass2ConstantIdentification.java | 17 +- src/main/kc/lib/multiply.c | 10 +- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/bitmap-plotter.c | 8 +- src/test/kc/operator-byte0-lvalue-1.c | 21 + src/test/kc/test-lowhigh.c | 16 +- src/test/ref/bitmap-plotter.asm | 40 +- src/test/ref/bitmap-plotter.cfg | 8 +- src/test/ref/bitmap-plotter.log | 807 +++++++++-- src/test/ref/bitmap-plotter.sym | 42 +- src/test/ref/operator-byte0-lvalue-1.asm | 72 + src/test/ref/operator-byte0-lvalue-1.cfg | 26 + src/test/ref/operator-byte0-lvalue-1.log | 579 ++++++++ src/test/ref/operator-byte0-lvalue-1.sym | 21 + src/test/ref/test-lowhigh.asm | 102 +- src/test/ref/test-lowhigh.cfg | 140 +- src/test/ref/test-lowhigh.log | 1191 ++++++++--------- src/test/ref/test-lowhigh.sym | 61 +- 60 files changed, 2561 insertions(+), 1154 deletions(-) create mode 100644 src/main/fragment/mos6502-common/pvom1=pbuc1_setbyte1_vbuaa.asm create mode 100644 src/main/fragment/mos6502-common/pvom1=pvom1_setbyte0_vbuaa.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuaa.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_setbyte0_vbuaa.asm rename src/main/fragment/mos6502-common/{vdum1=vdum1_setlo_vwum2.asm => vdum1=vdum1_setword0_vwum2.asm} (100%) rename src/main/fragment/mos6502-common/{vdum1=vdum1_sethi_vwum2.asm => vdum1=vdum1_setword1_vwum2.asm} (100%) rename src/main/fragment/mos6502-common/{vdum1=vdum2_setlo_vwum3.asm => vdum1=vdum2_setword0_vwum3.asm} (100%) rename src/main/fragment/mos6502-common/{vdum1=vdum2_sethi_vwum3.asm => vdum1=vdum2_setword1_vwum3.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vbuc1_sethi_vbuaa.asm => vwum1=vbuc1_setbyte1_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vbuc1_sethi_vbuxx.asm => vwum1=vbuc1_setbyte1_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vbuc1_sethi_vbuyy.asm => vwum1=vbuc1_setbyte1_vbuyy.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_setlo_vbuaa.asm => vwum1=vwuc1_setbyte0_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_setlo_vbuxx.asm => vwum1=vwuc1_setbyte0_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_setlo_vbuyy.asm => vwum1=vwuc1_setbyte0_vbuyy.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_sethi_vbuaa.asm => vwum1=vwuc1_setbyte1_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_sethi_vbuxx.asm => vwum1=vwuc1_setbyte1_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwuc1_sethi_vbuyy.asm => vwum1=vwuc1_setbyte1_vbuyy.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum1_setlo_vbuaa.asm => vwum1=vwum1_setbyte0_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum1_sethi_vbuaa.asm => vwum1=vwum1_setword1_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum1_sethi_vbuxx.asm => vwum1=vwum1_setword1_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum1_sethi_vbuyy.asm => vwum1=vwum1_setword1_vbuyy.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_setlo_vbuaa.asm => vwum1=vwum2_setbyte0_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_setlo_vbuxx.asm => vwum1=vwum2_setbyte0_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_setlo_vbuyy.asm => vwum1=vwum2_setbyte0_vbuyy.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_sethi_vbuaa.asm => vwum1=vwum2_setbyte1_vbuaa.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_sethi_vbuxx.asm => vwum1=vwum2_setbyte1_vbuxx.asm} (100%) rename src/main/fragment/mos6502-common/{vwum1=vwum2_sethi_vbuyy.asm => vwum1=vwum2_setbyte1_vbuyy.asm} (100%) create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte0.java create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte1.java create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte2.java create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte3.java create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord0.java create mode 100644 src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord1.java create mode 100644 src/test/kc/operator-byte0-lvalue-1.c create mode 100644 src/test/ref/operator-byte0-lvalue-1.asm create mode 100644 src/test/ref/operator-byte0-lvalue-1.cfg create mode 100644 src/test/ref/operator-byte0-lvalue-1.log create mode 100644 src/test/ref/operator-byte0-lvalue-1.sym diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index f22268322..26120ee48 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //FRAGMENT vbuzz=vbuc1 ldz #{c1} //FRAGMENT vbuzz_lt_vbuc1_then_la1 diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index 97afef845..b0248ff68 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //FRAGMENT _deref_pbuc1=vbuc2 lda #{c2} sta {c1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index cfaee04c9..5a2d50a55 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 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //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 893d877bf..b7b00288e 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -9917,7 +9917,7 @@ sta {z1} lda {z2}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT vduz1=vduz2_sethi_vwuz3 +//FRAGMENT vduz1=vduz2_setword1_vwuz3 lda {z2} sta {z1} lda {z2}+1 @@ -9926,12 +9926,7 @@ lda {z3} sta {z1}+2 lda {z3}+1 sta {z1}+3 -//FRAGMENT vwuz1=_lo_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz2_setlo_vwuz3 +//FRAGMENT vduz1=vduz2_setword0_vwuz3 lda {z3} sta {z1} lda {z3}+1 @@ -9940,6 +9935,11 @@ lda {z2}+2 sta {z1}+2 lda {z2}+3 sta {z1}+3 +//FRAGMENT vwuz1=_lo_vduz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 //FRAGMENT vwuz1=vwuz1_plus_vwuc1 clc lda {z1} @@ -9948,7 +9948,7 @@ sta {z1} lda {z1}+1 adc #>{c1} sta {z1}+1 -//FRAGMENT vduz1=vduz1_setlo_vwuz2 +//FRAGMENT vduz1=vduz1_setword0_vwuz2 lda {z2} sta {z1} lda {z2}+1 @@ -11354,6 +11354,90 @@ inx ldy {c1} iny iny +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc2_derefidx_vbuz2 +ldx {z1} +ldy {z2} +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_setbyte0_vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc2_derefidx_vbuxx +ldy {z1} +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc2_derefidx_vbuyy +ldx {z1} +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuz1 +ldx {z1} +tay +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuxx +tay +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuyy +tax +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc2_derefidx_vbuxx +txa +tay +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc2_derefidx_vbuyy +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc2_derefidx_vbuz1 +ldx {z1} +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc2_derefidx_vbuxx +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc2_derefidx_vbuyy +tya +tax +lda {c2},x +sta {c1},y +lda {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_setbyte0_vbuc2 +lda #{c2} +sta {c1},y //FRAGMENT 0_neq_vwuz1_then_la1 lda {z1} ora {z1}+1 @@ -11957,145 +12041,6 @@ and {c1},y tya ldy {z1} and {c1},y -//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 vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuz3 -ldy #0 -lda ({z2}),y -ldy {z3} -ora {c1},y -sta {z1} -//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 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 pbuz1=pbuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT vwuz1=vwuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuz2_bor__lo_pbuz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT pbuz1=pbuz1_setlo_vbuaa -sta {z1} -//FRAGMENT vwuz1=vwuz1_setlo_vbuaa -sta {z1} //FRAGMENT vdsz1_lt_0_then_la1 lda {z1}+3 bmi {la1} @@ -13843,3 +13788,97 @@ sta {c1},x lda #{c2} ora {c1},y sta {c1},y +//FRAGMENT pbuz1=pbuc1_setbyte1_vbuz2 +lda {z2} +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuz2_setbyte0_vbuz3 +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuc1_setbyte1_vbuz2 +lda {z2} +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT vwuz1=vwuz2_setbyte0_vbuz3 +lda {z3} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuz3 +ldy #0 +lda ({z2}),y +ldy {z3} +ora {c1},y +sta {z1} +//FRAGMENT pbuz1=pbuc1_setbyte1_vbuaa +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuc1_setbyte1_vbuxx +txa +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuc1_setbyte1_vbuyy +tya +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT pbuz1=pbuz2_setbyte0_vbuaa +NO_SYNTHESIS +//FRAGMENT pbuz1=pbuz2_setbyte0_vbuxx +NO_SYNTHESIS +//FRAGMENT pbuz1=pbuz2_setbyte0_vbuyy +NO_SYNTHESIS +//FRAGMENT vwuz1=vwuc1_setbyte1_vbuaa +sta {z1}+1 +lda #<{c1} +sta {z1} +//FRAGMENT vwuz1=vwuc1_setbyte1_vbuxx +stx {z1}+1 +ldx #<{c1} +stx {z1} +//FRAGMENT vwuz1=vwuz2_setbyte0_vbuaa +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_setbyte0_vbuxx +stx {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_setbyte0_vbuyy +sty {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldy #0 +lda ({z1}),y +ldy {z2} +ora {c1},y +//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 +ldx {z2} +lda {c1},x +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 vwuz1=vwuc1_setbyte1_vbuyy +sty {z1}+1 +ldy #<{c1} +sty {z1} +//FRAGMENT vbuyy=_lo_pbuz1 +ldy {z1} +//FRAGMENT vbuz1=vbuz2_bor__lo_pbuz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT pbuz1=pbuz1_setbyte0_vbuaa +sta {z1} +//FRAGMENT vwuz1=vwuz1_setbyte0_vbuaa +sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-rom6502x.asm b/src/main/fragment/cache/fragment-cache-rom6502x.asm index c66436b6b..fc43f3159 100644 --- a/src/main/fragment/cache/fragment-cache-rom6502x.asm +++ b/src/main/fragment/cache/fragment-cache-rom6502x.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 inc {c1} //FRAGMENT isr_hardware_all_entry diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index be86f667f..c2b42393a 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 11c7923005 11c7925062 +//KICKC FRAGMENT CACHE ee20482c1 ee204a320 //FRAGMENT vbuz1=_deref_pbuc1 lda {c1} sta {z1} diff --git a/src/main/fragment/mos6502-common/pvom1=pbuc1_setbyte1_vbuaa.asm b/src/main/fragment/mos6502-common/pvom1=pbuc1_setbyte1_vbuaa.asm new file mode 100644 index 000000000..a6a5a90da --- /dev/null +++ b/src/main/fragment/mos6502-common/pvom1=pbuc1_setbyte1_vbuaa.asm @@ -0,0 +1,3 @@ +sta {m1}+1 +lda #<{c1} +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pvom1=pvom1_setbyte0_vbuaa.asm b/src/main/fragment/mos6502-common/pvom1=pvom1_setbyte0_vbuaa.asm new file mode 100644 index 000000000..d2d258d83 --- /dev/null +++ b/src/main/fragment/mos6502-common/pvom1=pvom1_setbyte0_vbuaa.asm @@ -0,0 +1 @@ +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuaa.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuaa.asm new file mode 100644 index 000000000..d98ed9552 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuaa.asm @@ -0,0 +1 @@ +sta {c1},x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_setbyte0_vbuaa.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_setbyte0_vbuaa.asm new file mode 100644 index 000000000..8b005e5fe --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_setbyte0_vbuaa.asm @@ -0,0 +1 @@ +sta {c1},y \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vdum1=vdum1_setlo_vwum2.asm b/src/main/fragment/mos6502-common/vdum1=vdum1_setword0_vwum2.asm similarity index 100% rename from src/main/fragment/mos6502-common/vdum1=vdum1_setlo_vwum2.asm rename to src/main/fragment/mos6502-common/vdum1=vdum1_setword0_vwum2.asm diff --git a/src/main/fragment/mos6502-common/vdum1=vdum1_sethi_vwum2.asm b/src/main/fragment/mos6502-common/vdum1=vdum1_setword1_vwum2.asm similarity index 100% rename from src/main/fragment/mos6502-common/vdum1=vdum1_sethi_vwum2.asm rename to src/main/fragment/mos6502-common/vdum1=vdum1_setword1_vwum2.asm diff --git a/src/main/fragment/mos6502-common/vdum1=vdum2_setlo_vwum3.asm b/src/main/fragment/mos6502-common/vdum1=vdum2_setword0_vwum3.asm similarity index 100% rename from src/main/fragment/mos6502-common/vdum1=vdum2_setlo_vwum3.asm rename to src/main/fragment/mos6502-common/vdum1=vdum2_setword0_vwum3.asm diff --git a/src/main/fragment/mos6502-common/vdum1=vdum2_sethi_vwum3.asm b/src/main/fragment/mos6502-common/vdum1=vdum2_setword1_vwum3.asm similarity index 100% rename from src/main/fragment/mos6502-common/vdum1=vdum2_sethi_vwum3.asm rename to src/main/fragment/mos6502-common/vdum1=vdum2_setword1_vwum3.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vbuc1_sethi_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vbuc1_setbyte1_vbuyy.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_setlo_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte0_vbuyy.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwuc1_sethi_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vwuc1_setbyte1_vbuyy.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_setlo_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_setbyte0_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum1_setlo_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwum1_setbyte0_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum1_sethi_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vwum1_setword1_vbuyy.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_setlo_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte0_vbuyy.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuaa.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuaa.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuaa.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuxx.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuxx.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuxx.asm diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuyy.asm similarity index 100% rename from src/main/fragment/mos6502-common/vwum1=vwum2_sethi_vbuyy.asm rename to src/main/fragment/mos6502-common/vwum1=vwum2_setbyte1_vbuyy.asm diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte0.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte0.java new file mode 100644 index 000000000..dc6c4f724 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte0.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetByte0 Operator ( w byte0= b ) */ +public class OperatorSetByte0 extends OperatorBinary { + + public OperatorSetByte0(int precedence) { + super("byte0=", "_setbyte0_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte1.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte1.java new file mode 100644 index 000000000..ddc8d959c --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte1.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetByte1 Operator ( w byte1= b ) */ +public class OperatorSetByte1 extends OperatorBinary { + + public OperatorSetByte1(int precedence) { + super("byte1=", "_setbyte1_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte2.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte2.java new file mode 100644 index 000000000..511e4eff4 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte2.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetByte2 Operator ( w byte2= b ) */ +public class OperatorSetByte2 extends OperatorBinary { + + public OperatorSetByte2(int precedence) { + super("byte2=", "_setbyte2_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte3.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte3.java new file mode 100644 index 000000000..0ef4e9dfc --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetByte3.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetByte3 Operator ( w byte3= b ) */ +public class OperatorSetByte3 extends OperatorBinary { + + public OperatorSetByte3(int precedence) { + super("byte3=", "_setbyte3_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord0.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord0.java new file mode 100644 index 000000000..743b71754 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord0.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetWord0 Operator ( w word0= b ) */ +public class OperatorSetWord0 extends OperatorBinary { + + public OperatorSetWord0(int precedence) { + super("word0=", "_setword0_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord1.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord1.java new file mode 100644 index 000000000..abc39e3e1 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorSetWord1.java @@ -0,0 +1,24 @@ +package dk.camelot64.kickc.model.operators; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantLiteral; + +/** Binary SetWord1 Operator ( w word1= b ) */ +public class OperatorSetWord1 extends OperatorBinary { + + public OperatorSetWord1(int precedence) { + super("word1=", "_setword1_", precedence, false); + } + + @Override + public ConstantLiteral calculateLiteral(ConstantLiteral left, ConstantLiteral right) { + throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); + } + + @Override + public SymbolType inferType(SymbolType left, SymbolType right) { + return left; + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/operators/Operators.java b/src/main/java/dk/camelot64/kickc/model/operators/Operators.java index 2691d06b5..2f624ff00 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/Operators.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/Operators.java @@ -18,8 +18,12 @@ public class Operators { public static final OperatorBinary WORD = new OperatorWord(2); public static final OperatorBinary DWORD = new OperatorDWord(2); public static final OperatorBinary DEREF_IDX = new OperatorDerefIdx(2); - public static final OperatorBinary SET_LOWBYTE = new OperatorSetLow(2); - public static final OperatorBinary SET_HIBYTE = new OperatorSetHigh(2); + public static final OperatorBinary SET_BYTE0 = new OperatorSetByte0(2); + public static final OperatorBinary SET_BYTE1 = new OperatorSetByte1(2); + public static final OperatorBinary SET_BYTE2 = new OperatorSetByte2(2); + public static final OperatorBinary SET_BYTE3 = new OperatorSetByte3(2); + public static final OperatorBinary SET_WORD0 = new OperatorSetWord0(2); + public static final OperatorBinary SET_WORD1 = new OperatorSetWord1(2); public static final OperatorUnary CAST_BYTE = new OperatorCastByte(2); public static final OperatorUnary CAST_SBYTE = new OperatorCastSByte(2); public static final OperatorUnary CAST_WORD = new OperatorCastWord(2); @@ -50,7 +54,9 @@ public class Operators { public static final OperatorBinary LOGIC_AND = new OperatorLogicAnd(12); public static final OperatorBinary LOGIC_OR = new OperatorLogicOr(13); public static final OperatorBinary ASSIGNMENT = new OperatorAssignment(14); + @Deprecated public static final OperatorUnary LOWBYTE = new OperatorGetLow(14); + @Deprecated public static final OperatorUnary HIBYTE = new OperatorGetHigh(14); public static final OperatorUnary BYTE0 = new OperatorGetByte0(14); public static final OperatorUnary BYTE1 = new OperatorGetByte1(14); @@ -99,10 +105,6 @@ public class Operators { return SHIFT_LEFT; case ">>": return SHIFT_RIGHT; - case "lo=": - return SET_LOWBYTE; - case "hi=": - return SET_HIBYTE; default: throw new RuntimeException("Unknown operator " + op); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index da60d4eb3..c189cffb9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -2233,7 +2233,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec return lValue; } - private static LValue copyLValue(LValue lValue) { + public static LValue copyLValue(LValue lValue) { if(lValue instanceof VariableRef) { return new VariableRef(((VariableRef) lValue).getFullName()); } else if(lValue instanceof LvalueIntermediate) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java b/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java index 05d059516..2d101e816 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1FixLValuesLoHi.java @@ -45,17 +45,34 @@ public class Pass1FixLValuesLoHi extends Pass1Base { StatementLValue statementLValue = (StatementLValue) statement; LvalueIntermediate intermediate = (LvalueIntermediate) statementLValue.getlValue(); final List<VarAssignments.VarAssignment> varAssignments = VarAssignments.get(intermediate.getVariable(), getGraph(), programScope); + final Scope currentScope = programScope.getScope(block.getScope()); if(varAssignments.size() == 1) { final VarAssignments.VarAssignment varAssignment = varAssignments.get(0); if(varAssignment.type.equals(VarAssignments.VarAssignment.Type.STATEMENT_LVALUE) && varAssignment.statementLValue instanceof StatementAssignment) { StatementAssignment intermediateAssignment = (StatementAssignment) varAssignment.statementLValue; - if(Operators.LOWBYTE.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { - // Found assignment to an intermediate low byte lValue <x = ... - fixLoHiLValue(programScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_LOWBYTE); + if(Operators.BYTE0.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_BYTE0); intermediates.add(intermediate.getVariable()); - } else if(Operators.HIBYTE.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { - // Found assignment to an intermediate low byte lValue >x = ... - fixLoHiLValue(programScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_HIBYTE); + } else if(Operators.BYTE1.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_BYTE1); + intermediates.add(intermediate.getVariable()); + } else if(Operators.BYTE2.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_BYTE2); + intermediates.add(intermediate.getVariable()); + } else if(Operators.BYTE3.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_BYTE3); + intermediates.add(intermediate.getVariable()); + } else if(Operators.WORD0.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_WORD0); + intermediates.add(intermediate.getVariable()); + } else if(Operators.WORD1.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) { + // Found assignment to an intermediate low byte lValue byte0(x) = ... + fixLoHiLValue(programScope, currentScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_WORD1); intermediates.add(intermediate.getVariable()); } } @@ -73,21 +90,22 @@ public class Pass1FixLValuesLoHi extends Pass1Base { private void fixLoHiLValue( ProgramScope programScope, + Scope currentScope, ListIterator<Statement> statementsIt, StatementLValue statementLValue, LvalueIntermediate intermediate, StatementAssignment intermediateAssignment, Operator loHiOperator) { - VariableRef loHiVar = (VariableRef) intermediateAssignment.getrValue2(); - Variable intermediateVar = programScope.getVariable(intermediate.getVariable()); - Scope currentScope = intermediateVar.getScope(); + final RValue intermediateValue = intermediateAssignment.getrValue2(); // Let assignment put value into a tmp Var SymbolType type = SymbolTypeInference.inferType(programScope, new AssignmentRValue(intermediateAssignment)); Variable tmpVar = VariableBuilder.createIntermediate(currentScope, type, getProgram()); SymbolVariableRef tmpVarRef = tmpVar.getRef(); statementLValue.setlValue((LValue) tmpVarRef); // Insert an extra "set low" assignment statement - Statement setLoHiAssignment = new StatementAssignment(loHiVar, loHiVar, loHiOperator, tmpVarRef, true, statementLValue.getSource(), new ArrayList<>()); + // TODO: Copy intermediateValue + final LValue lValue = Pass0GenerateStatementSequence.copyLValue((LValue) intermediateValue); + Statement setLoHiAssignment = new StatementAssignment(lValue, intermediateValue, loHiOperator, tmpVarRef, true, statementLValue.getSource(), new ArrayList<>()); statementsIt.add(setLoHiAssignment); if(getLog().isVerbosePass1CreateSsa()) { getLog().append("Fixing lo/hi-lvalue with new tmpVar " + tmpVarRef + " " + statementLValue.toString()); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java index 584bbb2c6..6fa70537a 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java @@ -1,6 +1,9 @@ package dk.camelot64.kickc.passes; -import dk.camelot64.kickc.model.*; +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.ConstantNotLiteral; +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.iterator.ProgramValueIterator; import dk.camelot64.kickc.model.operators.OperatorBinary; import dk.camelot64.kickc.model.operators.OperatorUnary; @@ -254,6 +257,18 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization { return new ConstantBinary(new ConstantBinary(c1, Operators.MULTIPLY, new ConstantInteger(256L)), Operators.PLUS, c2); case "dw=": return new ConstantBinary(new ConstantBinary(c1, Operators.MULTIPLY, new ConstantInteger(65536L)), Operators.PLUS, c2); + case "byte0=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0xffffff00L)), Operators.BOOL_OR, c2); + case "byte1=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0xffff00ffL)), Operators.BOOL_OR, new ConstantBinary(c2, Operators.MULTIPLY, new ConstantInteger(0x100L))); + case "byte2=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0xff00ffffL)), Operators.BOOL_OR, new ConstantBinary(c2, Operators.MULTIPLY, new ConstantInteger(0x10000L))); + case "byte3=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0x00ffffffL)), Operators.BOOL_OR, new ConstantBinary(c2, Operators.MULTIPLY, new ConstantInteger(0x1000000L))); + case "word0=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0xffff0000L)), Operators.BOOL_OR, c2); + case "word1=": + return new ConstantBinary(new ConstantBinary(c1, Operators.BOOL_AND, new ConstantInteger(0x0000ffffL)), Operators.BOOL_OR, new ConstantBinary(c2, Operators.MULTIPLY, new ConstantInteger(0x10000L))); case "*idx": // Pointer dereference - not constant return null; diff --git a/src/main/kc/lib/multiply.c b/src/main/kc/lib/multiply.c index 2699d9c37..072629f58 100644 --- a/src/main/kc/lib/multiply.c +++ b/src/main/kc/lib/multiply.c @@ -21,10 +21,10 @@ unsigned int mul8u(char a, char b) { signed int mul8s(signed char a, signed char b) { unsigned int m = mul8u((char)a, (char) b); if(a<0) { - >m = (>m)-(char)b; + BYTE1(m) = BYTE1(m)-(char)b; } if(b<0) { - >m = (>m)-(char)a; + BYTE1(m) = BYTE1(m)-(char)a; } return (signed int)m; } @@ -34,7 +34,7 @@ signed int mul8s(signed char a, signed char b) { signed int mul8su(signed char a, char b) { unsigned int m = mul8u((char)a, (char) b); if(a<0) { - >m = (>m)-(char)b; + BYTE1(m) = BYTE1(m)-(char)b; } return (signed int)m; } @@ -58,10 +58,10 @@ unsigned long mul16u(unsigned int a, unsigned int b) { signed long mul16s(signed int a, signed int b) { unsigned long m = mul16u((unsigned int)a, (unsigned int) b); if(a<0) { - >m = (>m)-(unsigned int)b; + WORD1(m) = WORD1(m)-(unsigned int)b; } if(b<0) { - >m = (>m)-(unsigned int)a; + WORD1(m) = WORD1(m)-(unsigned int)a; } return (signed long)m; } diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index d0dea1761..235a4a0a1 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -89,6 +89,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("init-value-npe.c"); } + @Test + public void testOperatorByte0LValue1() throws IOException { + compileAndCompare("operator-byte0-lvalue-1.c"); + } + @Test public void testOperatorByte0Iintializer() throws IOException { compileAndCompare("operator-byte0-initializer.c"); diff --git a/src/test/kc/bitmap-plotter.c b/src/test/kc/bitmap-plotter.c index aec7245e0..f824fa92c 100644 --- a/src/test/kc/bitmap-plotter.c +++ b/src/test/kc/bitmap-plotter.c @@ -52,10 +52,10 @@ const byte plot_bit[256]; void plot(byte x, byte y) { byte* plotter_x = (byte*)0; word plotter_y = 0; - >plotter_x = plot_xhi[x]; // Needs word arrays arranged as two underlying byte arrays to allow byte* plotter_x = plot_x[x]; - and eventually - byte* plotter = plot_x[x] + plot_y[y]; - <plotter_x = plot_xlo[x]; - >plotter_y = plot_yhi[y]; - <plotter_y = plot_ylo[y]; + BYTE1(plotter_x) = plot_xhi[x]; // Needs word arrays arranged as two underlying byte arrays to allow byte* plotter_x = plot_x[x]; - and eventually - byte* plotter = plot_x[x] + plot_y[y]; + BYTE0(plotter_x) = plot_xlo[x]; + BYTE1(plotter_y) = plot_yhi[y]; + BYTE0(plotter_y) = plot_ylo[y]; byte* plotter = plotter_x+plotter_y; *plotter = *plotter | plot_bit[x]; } diff --git a/src/test/kc/operator-byte0-lvalue-1.c b/src/test/kc/operator-byte0-lvalue-1.c new file mode 100644 index 000000000..befd35c32 --- /dev/null +++ b/src/test/kc/operator-byte0-lvalue-1.c @@ -0,0 +1,21 @@ +// Test using operator byte0() in an lvalue + +void main() { + unsigned int * const SCREEN = (unsigned int *)0x0400; + unsigned int w = 12345; + unsigned int ws[] = { 23456, 34567 }; + char i = 0; + + SCREEN[i++] = w; + BYTE0(w) = 1; + SCREEN[i++] = w; + BYTE1(w) = 2; + SCREEN[i++] = w; + + for(char j=0;j<2;j++) { + SCREEN[i++] = ws[j]; + BYTE0(ws[j]) = 2; + SCREEN[i++] = ws[j]; + } + +} \ No newline at end of file diff --git a/src/test/kc/test-lowhigh.c b/src/test/kc/test-lowhigh.c index 37fefad29..24071dfa6 100644 --- a/src/test/kc/test-lowhigh.c +++ b/src/test/kc/test-lowhigh.c @@ -4,21 +4,21 @@ void main() { print_cls(); for( dword dw = $12345678; dw != $12345690; dw++ ) { dword dw2 = dw; - >dw2 = (>dw) + $1111; // Test set/get high word of dword - <dw2 = (<dw) + $1111; // Test set/get low word of dword + WORD1(dw2) = WORD1(dw) + $1111; // Test set/get high word of dword + WORD0(dw2) = WORD0(dw) + $1111; // Test set/get low word of dword print_ulong(dw2); print_char(' '); - print_uint(>dw2); // Test get high word of dword + print_uint(WORD1(dw2)); // Test get high word of dword print_char(' '); - print_uint(<dw2); // Test get low word of dword + print_uint(WORD0(dw2)); // Test get low word of dword print_char(' '); - print_uchar(> >dw2); // Test get high high byte of dword + print_uchar(BYTE3(dw2)); // Test get high high byte of dword print_char(' '); - print_uchar(< >dw2); // Test get low high byte of dword + print_uchar(BYTE2(dw2)); // Test get low high byte of dword print_char(' '); - print_uchar(> <dw2); // Test get high low byte of dword + print_uchar(BYTE1(dw2)); // Test get high low byte of dword print_char(' '); - print_uchar(< <dw2); // Test get low low byte of dword + print_uchar(BYTE0(dw2)); // Test get low low byte of dword print_ln(); } } \ No newline at end of file diff --git a/src/test/ref/bitmap-plotter.asm b/src/test/ref/bitmap-plotter.asm index f99fa9e35..3baf912a6 100644 --- a/src/test/ref/bitmap-plotter.asm +++ b/src/test/ref/bitmap-plotter.asm @@ -48,8 +48,8 @@ main: { jmp __b1 } init_screen: { - .label b = 6 - .label c = 4 + .label b = 7 + .label c = 5 lda #<BITMAP sta.z b lda #>BITMAP @@ -101,7 +101,7 @@ init_screen: { } init_plot_tables: { .label __9 = 2 - .label yoffs = 6 + .label yoffs = 7 ldy #$80 ldx #0 __b1: @@ -168,47 +168,51 @@ init_plot_tables: { rts } plots: { - ldx #0 + .label i = 2 + lda #0 + sta.z i __b1: // for(byte i=0; i<plots_cnt;i++) - cpx #plots_cnt + lda.z i + cmp #plots_cnt bcc __b2 // } rts __b2: // plot(plots_x[i], plots_y[i]) - lda plots_x,x + ldy.z i + lda plots_x,y sta.z plot.x - lda plots_y,x + lda plots_y,y sta.z plot.y jsr plot // for(byte i=0; i<plots_cnt;i++) - inx + inc.z i jmp __b1 } -// plot(byte zp(2) x, byte zp(3) y) +// plot(byte zp(3) x, byte zp(4) y) plot: { - .label x = 2 - .label y = 3 - .label plotter_x = 4 - .label plotter_y = 6 - .label plotter = 4 - // >plotter_x = plot_xhi[x] + .label x = 3 + .label y = 4 + .label plotter_x = 5 + .label plotter_y = 7 + .label plotter = 5 + // BYTE1(plotter_x) = plot_xhi[x] ldy.z x lda plot_xhi,y sta.z plotter_x+1 lda #<0 sta.z plotter_x - // <plotter_x = plot_xlo[x] + // BYTE0(plotter_x) = plot_xlo[x] lda plot_xlo,y sta.z plotter_x - // >plotter_y = plot_yhi[y] + // BYTE1(plotter_y) = plot_yhi[y] ldy.z y lda plot_yhi,y sta.z plotter_y+1 lda #<0 sta.z plotter_y - // <plotter_y = plot_ylo[y] + // BYTE0(plotter_y) = plot_ylo[y] lda plot_ylo,y sta.z plotter_y // byte* plotter = plotter_x+plotter_y diff --git a/src/test/ref/bitmap-plotter.cfg b/src/test/ref/bitmap-plotter.cfg index 59c42a3c9..4f8a67204 100644 --- a/src/test/ref/bitmap-plotter.cfg +++ b/src/test/ref/bitmap-plotter.cfg @@ -114,13 +114,13 @@ plots::@3: scope:[plots] from plots::@2 void plot(byte plot::x , byte plot::y) plot: scope:[plot] from plots::@2 [54] plot::$6 = plot_xhi[plot::x#0] - [55] plot::plotter_x#1 = (byte*) 0 hi= plot::$6 + [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 [56] plot::$7 = plot_xlo[plot::x#0] - [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 + [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 [58] plot::$8 = plot_yhi[plot::y#0] - [59] plot::plotter_y#1 = 0 hi= plot::$8 + [59] plot::plotter_y#1 = 0 byte1= plot::$8 [60] plot::$9 = plot_ylo[plot::y#0] - [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 + [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [64] *plot::plotter#0 = plot::$5 diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index ac35749c8..aba3500a2 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -67,13 +67,13 @@ plot: scope:[plot] from plots::@2 plot::plotter_x#0 = (byte*)0 plot::plotter_y#0 = 0 plot::$6 = plot_xhi[plot::x#1] - plot::plotter_x#1 = plot::plotter_x#0 hi= plot::$6 + plot::plotter_x#1 = plot::plotter_x#0 byte1= plot::$6 plot::$7 = plot_xlo[plot::x#1] - plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 + plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 plot::$8 = plot_yhi[plot::y#1] - plot::plotter_y#1 = plot::plotter_y#0 hi= plot::$8 + plot::plotter_y#1 = plot::plotter_y#0 byte1= plot::$8 plot::$9 = plot_ylo[plot::y#1] - plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 + plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 plot::$4 = plot::plotter_x#2 + plot::plotter_y#2 plot::plotter#0 = plot::$4 plot::$5 = *plot::plotter#0 | plot_bit[plot::x#1] @@ -690,13 +690,13 @@ plots::@3: scope:[plots] from plots::@2 void plot(byte plot::x , byte plot::y) plot: scope:[plot] from plots::@2 [54] plot::$6 = plot_xhi[plot::x#0] - [55] plot::plotter_x#1 = (byte*) 0 hi= plot::$6 + [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 [56] plot::$7 = plot_xlo[plot::x#0] - [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 + [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 [58] plot::$8 = plot_yhi[plot::y#0] - [59] plot::plotter_y#1 = 0 hi= plot::$8 + [59] plot::plotter_y#1 = 0 byte1= plot::$8 [60] plot::$9 = plot_ylo[plot::y#0] - [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 + [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [64] *plot::plotter#0 = plot::$5 @@ -832,6 +832,9 @@ Allocated zp[1]:28 [ plot::$9 ] Allocated zp[2]:29 [ plot::plotter_y#2 ] Allocated zp[2]:31 [ plot::plotter#0 ] Allocated zp[1]:33 [ plot::$5 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: REGISTER UPLIFT POTENTIAL REGISTERS Equivalence Class zp[1]:14 [ init_plot_tables::$6 ] has ALU potential. Statement [0] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a @@ -849,14 +852,31 @@ Removing always clobbered register reg byte a as potential for zp[1]:7 [ init_pl Statement [26] plot_bit[init_plot_tables::x#2] = init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( init_plot_tables:6 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] { } ) always clobbers reg byte a Statement [41] init_plot_tables::yoffs#1 = init_plot_tables::yoffs#2 + (word)$28*8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( init_plot_tables:6 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ] -Statement [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] { } ) always clobbers reg byte a +Statement [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:11 [ plots::i#2 plots::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:17 [ plot::x#0 ] Removing always clobbered register reg byte a as potential for zp[1]:18 [ plot::y#0 ] -Statement [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] { } ) always clobbers reg byte a +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 allocation: zp[1]:22 [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa allocation: reg byte a [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx allocation: reg byte x [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy allocation: reg byte y [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +MISSING FRAGMENTS + Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 + Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa + Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx + Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +Statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:11 [ plots::i#2 plots::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:11 [ plots::i#2 plots::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:17 [ plot::x#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:17 [ plot::x#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:18 [ plot::y#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:18 [ plot::y#0 ] +Statement [58] plot::$8 = plot_yhi[plot::y#0] [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] { } ) always clobbers reg byte y +Statement [60] plot::$9 = plot_ylo[plot::y#0] [ plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] { } ) always clobbers reg byte y +Statement [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] { } ) always clobbers reg byte a Statement [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter#0 ] { } ) always clobbers reg byte a Statement [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [ plot::plotter#0 plot::$5 ] ( plots:9::plot:52 [ plots::i#2 plot::plotter#0 plot::$5 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:11 [ plots::i#2 plots::i#1 ] Statement [64] *plot::plotter#0 = plot::$5 [ ] ( plots:9::plot:52 [ plots::i#2 ] { } ) always clobbers reg byte y Statement [0] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [1] *FGCOL = 0 [ ] ( [ ] { } ) always clobbers reg byte a @@ -872,8 +892,25 @@ Statement [25] plot_xhi[init_plot_tables::x#2] = >BITMAP [ init_plot_tables::x#2 Statement [26] plot_bit[init_plot_tables::x#2] = init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( init_plot_tables:6 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] { } ) always clobbers reg byte a Statement [34] init_plot_tables::$9 = init_plot_tables::y#2 & 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] ( init_plot_tables:6 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] { } ) always clobbers reg byte a Statement [41] init_plot_tables::yoffs#1 = init_plot_tables::yoffs#2 + (word)$28*8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( init_plot_tables:6 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] { } ) always clobbers reg byte a -Statement [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] { } ) always clobbers reg byte a -Statement [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] { } ) always clobbers reg byte a +Statement [48] if(plots::i#2<plots_cnt) goto plots::@2 [ plots::i#2 ] ( plots:9 [ plots::i#2 ] { } ) always clobbers reg byte a +Statement [50] plot::x#0 = plots_x[plots::i#2] [ plots::i#2 plot::x#0 ] ( plots:9 [ plots::i#2 plot::x#0 ] { } ) always clobbers reg byte a reg byte y +Statement [51] plot::y#0 = plots_y[plots::i#2] [ plots::i#2 plot::x#0 plot::y#0 ] ( plots:9 [ plots::i#2 plot::x#0 plot::y#0 ] { } ) always clobbers reg byte a reg byte y +Statement [54] plot::$6 = plot_xhi[plot::x#0] [ plot::x#0 plot::y#0 plot::$6 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::$6 ] { } ) always clobbers reg byte y +Statement [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] { } ) always clobbers reg byte a +Statement [56] plot::$7 = plot_xlo[plot::x#0] [ plot::x#0 plot::y#0 plot::plotter_x#1 plot::$7 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 plot::$7 ] { } ) always clobbers reg byte y +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 allocation: zp[1]:22 [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa allocation: reg byte a [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx allocation: reg byte x [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +Potential register analysis [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 missing fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy allocation: reg byte y [ plot::$7 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:23 [ plot::plotter_x#2 ] +MISSING FRAGMENTS + Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 + Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa + Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx + Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +Statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [58] plot::$8 = plot_yhi[plot::y#0] [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] { } ) always clobbers reg byte y +Statement [60] plot::$9 = plot_ylo[plot::y#0] [ plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] { } ) always clobbers reg byte y +Statement [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] { } ) always clobbers reg byte a Statement [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( plots:9::plot:52 [ plots::i#2 plot::x#0 plot::plotter#0 ] { } ) always clobbers reg byte a Statement [63] plot::$5 = *plot::plotter#0 | plot_bit[plot::x#0] [ plot::plotter#0 plot::$5 ] ( plots:9::plot:52 [ plots::i#2 plot::plotter#0 plot::$5 ] { } ) always clobbers reg byte a reg byte y Statement [64] *plot::plotter#0 = plot::$5 [ ] ( plots:9::plot:52 [ plots::i#2 ] { } ) always clobbers reg byte y @@ -883,14 +920,14 @@ Potential registers zp[1]:6 [ init_plot_tables::x#2 init_plot_tables::x#1 ] : zp Potential registers zp[1]:7 [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] : zp[1]:7 , reg byte x , reg byte y , Potential registers zp[1]:8 [ init_plot_tables::y#2 init_plot_tables::y#1 ] : zp[1]:8 , reg byte x , reg byte y , Potential registers zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] : zp[2]:9 , -Potential registers zp[1]:11 [ plots::i#2 plots::i#1 ] : zp[1]:11 , reg byte x , +Potential registers zp[1]:11 [ plots::i#2 plots::i#1 ] : zp[1]:11 , Potential registers zp[1]:12 [ init_plot_tables::$0 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:13 [ init_plot_tables::$9 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:14 [ init_plot_tables::$6 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , reg byte alu , Potential registers zp[1]:15 [ init_plot_tables::$7 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:16 [ init_plot_tables::$8 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:17 [ plot::x#0 ] : zp[1]:17 , reg byte x , reg byte y , -Potential registers zp[1]:18 [ plot::y#0 ] : zp[1]:18 , reg byte x , reg byte y , +Potential registers zp[1]:17 [ plot::x#0 ] : zp[1]:17 , +Potential registers zp[1]:18 [ plot::y#0 ] : zp[1]:18 , Potential registers zp[1]:19 [ plot::$6 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:20 [ plot::plotter_x#1 ] : zp[2]:20 , Potential registers zp[1]:22 [ plot::$7 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , @@ -910,39 +947,585 @@ Uplift Scope [init_screen] 336.67: zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [plot] best 10319 combination reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp[2]:29 [ plot::plotter_y#2 ] zp[1]:33 [ plot::$5 ] zp[2]:31 [ plot::plotter#0 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:26 [ plot::plotter_y#1 ] zp[2]:23 [ plot::plotter_x#2 ] zp[1]:18 [ plot::y#0 ] zp[1]:17 [ plot::x#0 ] -Limited combination testing to 100 combinations of 9216 possible. -Uplifting [plots] best 8819 combination reg byte x [ plots::i#2 plots::i#1 ] -Uplifting [init_plot_tables] best 8359 combination zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp[1]:14 [ init_plot_tables::$6 ] zp[1]:15 [ init_plot_tables::$7 ] zp[1]:16 [ init_plot_tables::$8 ] zp[1]:13 [ init_plot_tables::$9 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuxx. Attempted variations pbuz1=pbuz2_setbyte0_vbuxx +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuyy. Attempted variations pbuz1=pbuz2_setbyte0_vbuyy +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuz3. Attempted variations pbuz1=pbuz2_setbyte0_vbuz3 +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plot] best 10310 combination reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp[2]:29 [ plot::plotter_y#2 ] zp[1]:33 [ plot::$5 ] zp[2]:31 [ plot::plotter#0 ] zp[2]:20 [ plot::plotter_x#1 ] zp[2]:26 [ plot::plotter_y#1 ] zp[2]:23 [ plot::plotter_x#2 ] zp[1]:18 [ plot::y#0 ] zp[1]:17 [ plot::x#0 ] +Limited combination testing to 100 combinations of 1024 possible. +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plots] best 10310 combination zp[1]:11 [ plots::i#2 plots::i#1 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_plot_tables] best 9850 combination zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] zp[1]:14 [ init_plot_tables::$6 ] zp[1]:15 [ init_plot_tables::$7 ] zp[1]:16 [ init_plot_tables::$8 ] zp[1]:13 [ init_plot_tables::$9 ] Limited combination testing to 100 combinations of 34560 possible. -Uplifting [init_screen] best 8359 combination zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] zp[2]:4 [ init_screen::c#2 init_screen::c#1 ] -Uplifting [main] best 8359 combination -Uplifting [] best 8359 combination +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_screen] best 9850 combination zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] zp[2]:4 [ init_screen::c#2 init_screen::c#1 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [main] best 9850 combination +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [] best 9850 combination Attempting to uplift remaining variables inzp[1]:33 [ plot::$5 ] -Uplifting [plot] best 8353 combination reg byte a [ plot::$5 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plot] best 9844 combination reg byte a [ plot::$5 ] +Attempting to uplift remaining variables inzp[1]:11 [ plots::i#2 plots::i#1 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plots] best 9844 combination zp[1]:11 [ plots::i#2 plots::i#1 ] Attempting to uplift remaining variables inzp[1]:18 [ plot::y#0 ] -Uplifting [plot] best 8353 combination zp[1]:18 [ plot::y#0 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plot] best 9844 combination zp[1]:18 [ plot::y#0 ] Attempting to uplift remaining variables inzp[1]:17 [ plot::x#0 ] -Uplifting [plot] best 8353 combination zp[1]:17 [ plot::x#0 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [plot] best 9844 combination zp[1]:17 [ plot::x#0 ] Attempting to uplift remaining variables inzp[1]:14 [ init_plot_tables::$6 ] -Uplifting [init_plot_tables] best 8293 combination reg byte a [ init_plot_tables::$6 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_plot_tables] best 9784 combination reg byte a [ init_plot_tables::$6 ] Attempting to uplift remaining variables inzp[1]:15 [ init_plot_tables::$7 ] -Uplifting [init_plot_tables] best 8233 combination reg byte a [ init_plot_tables::$7 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_plot_tables] best 9724 combination reg byte a [ init_plot_tables::$7 ] Attempting to uplift remaining variables inzp[1]:16 [ init_plot_tables::$8 ] -Uplifting [init_plot_tables] best 8173 combination reg byte a [ init_plot_tables::$8 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_plot_tables] best 9664 combination reg byte a [ init_plot_tables::$8 ] Attempting to uplift remaining variables inzp[1]:13 [ init_plot_tables::$9 ] -Uplifting [init_plot_tables] best 8173 combination zp[1]:13 [ init_plot_tables::$9 ] +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Warning! Unknown fragment for statement [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 +Missing ASM fragment Fragment not found pbuz1=pbuz2_setbyte0_vbuaa. Attempted variations pbuz1=pbuz2_setbyte0_vbuaa +/Users/jespergravgaard/c64/kickc/src/test/kc/bitmap-plotter.c:56:5: +Uplifting [init_plot_tables] best 9664 combination zp[1]:13 [ init_plot_tables::$9 ] Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 ] ] with [ zp[2]:23 [ plot::plotter_x#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ plot::plotter_y#1 ] ] with [ zp[2]:29 [ plot::plotter_y#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 plot::plotter_x#2 ] ] with [ zp[2]:31 [ plot::plotter#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] with [ zp[2]:2 [ init_screen::b#2 init_screen::b#1 ] ] -Coalescing zero page register [ zp[1]:17 [ plot::x#0 ] ] with [ zp[1]:13 [ init_plot_tables::$9 ] ] +Coalescing zero page register [ zp[1]:13 [ init_plot_tables::$9 ] ] with [ zp[1]:11 [ plots::i#2 plots::i#1 ] ] Coalescing zero page register [ zp[2]:20 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ] ] with [ zp[2]:4 [ init_screen::c#2 init_screen::c#1 ] ] Coalescing zero page register [ zp[2]:26 [ plot::plotter_y#1 plot::plotter_y#2 ] ] with [ zp[2]:9 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] ] -Allocated (was zp[1]:17) zp[1]:2 [ plot::x#0 init_plot_tables::$9 ] -Allocated (was zp[1]:18) zp[1]:3 [ plot::y#0 ] -Allocated (was zp[2]:20) zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] -Allocated (was zp[2]:26) zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] +Allocated (was zp[1]:13) zp[1]:2 [ init_plot_tables::$9 plots::i#2 plots::i#1 ] +Allocated (was zp[1]:17) zp[1]:3 [ plot::x#0 ] +Allocated (was zp[1]:18) zp[1]:4 [ plot::y#0 ] +Allocated (was zp[2]:20) zp[2]:5 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] +Allocated (was zp[2]:26) zp[2]:7 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1020,8 +1603,8 @@ main: { } // init_screen init_screen: { - .label b = 6 - .label c = 4 + .label b = 7 + .label c = 5 // [12] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] __b1_from_init_screen: // [12] phi init_screen::b#2 = BITMAP [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 @@ -1095,7 +1678,7 @@ init_screen: { // init_plot_tables init_plot_tables: { .label __9 = 2 - .label yoffs = 6 + .label yoffs = 7 // [22] phi from init_plot_tables to init_plot_tables::@1 [phi:init_plot_tables->init_plot_tables::@1] __b1_from_init_plot_tables: // [22] phi init_plot_tables::bits#3 = $80 [phi:init_plot_tables->init_plot_tables::@1#0] -- vbuyy=vbuc1 @@ -1214,15 +1797,18 @@ init_plot_tables: { } // plots plots: { + .label i = 2 // [47] phi from plots to plots::@1 [phi:plots->plots::@1] __b1_from_plots: - // [47] phi plots::i#2 = 0 [phi:plots->plots::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [47] phi plots::i#2 = 0 [phi:plots->plots::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i jmp __b1 // plots::@1 __b1: - // [48] if(plots::i#2<plots_cnt) goto plots::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #plots_cnt + // [48] if(plots::i#2<plots_cnt) goto plots::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #plots_cnt bcc __b2 jmp __breturn // plots::@return @@ -1231,55 +1817,57 @@ plots: { rts // plots::@2 __b2: - // [50] plot::x#0 = plots_x[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx - lda plots_x,x + // [50] plot::x#0 = plots_x[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z i + lda plots_x,y sta.z plot.x - // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx - lda plots_y,x + // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z i + lda plots_y,y sta.z plot.y // [52] call plot jsr plot jmp __b3 // plots::@3 __b3: - // [53] plots::i#1 = ++ plots::i#2 -- vbuxx=_inc_vbuxx - inx + // [53] plots::i#1 = ++ plots::i#2 -- vbuz1=_inc_vbuz1 + inc.z i // [47] phi from plots::@3 to plots::@1 [phi:plots::@3->plots::@1] __b1_from___b3: // [47] phi plots::i#2 = plots::i#1 [phi:plots::@3->plots::@1#0] -- register_copy jmp __b1 } // plot -// plot(byte zp(2) x, byte zp(3) y) +// plot(byte zp(3) x, byte zp(4) y) plot: { - .label x = 2 - .label y = 3 - .label plotter_x = 4 - .label plotter_y = 6 - .label plotter = 4 + .label x = 3 + .label y = 4 + .label plotter_x = 5 + .label plotter_y = 7 + .label plotter = 5 // [54] plot::$6 = plot_xhi[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z x lda plot_xhi,y - // [55] plot::plotter_x#1 = (byte*) 0 hi= plot::$6 -- pbuz1=pbuc1_sethi_vbuaa + // [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 -- pbuz1=pbuc1_setbyte1_vbuaa sta.z plotter_x+1 lda #<0 sta.z plotter_x // [56] plot::$7 = plot_xlo[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z x lda plot_xlo,y - // [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 -- pbuz1=pbuz1_setlo_vbuaa + // [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 -- pbuz1=pbuz1_setbyte0_vbuaa sta.z plotter_x // [58] plot::$8 = plot_yhi[plot::y#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z y lda plot_yhi,y - // [59] plot::plotter_y#1 = 0 hi= plot::$8 -- vwuz1=vwuc1_sethi_vbuaa + // [59] plot::plotter_y#1 = 0 byte1= plot::$8 -- vwuz1=vwuc1_setbyte1_vbuaa sta.z plotter_y+1 lda #<0 sta.z plotter_y // [60] plot::$9 = plot_ylo[plot::y#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z y lda plot_ylo,y - // [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 -- vwuz1=vwuz1_setlo_vbuaa + // [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 -- vwuz1=vwuz1_setbyte0_vbuaa sta.z plotter_y // [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 -- pbuz1=pbuz1_plus_vwuz2 lda.z plotter @@ -1337,6 +1925,7 @@ Removing instruction lda #0 Replacing instruction ldy #0 with TAY Removing instruction lda #>0 Replacing instruction ldx #0 with TAX +Removing instruction ldy.z i Removing instruction ldy.z x Removing instruction ldy.z y Succesful ASM optimization Pass5UnnecesaryLoadElimination @@ -1408,16 +1997,16 @@ byte init_plot_tables::y byte init_plot_tables::y#1 reg byte x 151.5 byte init_plot_tables::y#2 reg byte x 50.5 byte* init_plot_tables::yoffs -byte* init_plot_tables::yoffs#1 yoffs zp[2]:6 202.0 -byte* init_plot_tables::yoffs#2 yoffs zp[2]:6 63.125 -byte* init_plot_tables::yoffs#4 yoffs zp[2]:6 101.0 +byte* init_plot_tables::yoffs#1 yoffs zp[2]:7 202.0 +byte* init_plot_tables::yoffs#2 yoffs zp[2]:7 63.125 +byte* init_plot_tables::yoffs#4 yoffs zp[2]:7 101.0 void init_screen() byte* init_screen::b -byte* init_screen::b#1 b zp[2]:6 202.0 -byte* init_screen::b#2 b zp[2]:6 134.66666666666666 +byte* init_screen::b#1 b zp[2]:7 202.0 +byte* init_screen::b#2 b zp[2]:7 134.66666666666666 byte* init_screen::c -byte* init_screen::c#1 c zp[2]:4 202.0 -byte* init_screen::c#2 c zp[2]:4 134.66666666666666 +byte* init_screen::c#1 c zp[2]:5 202.0 +byte* init_screen::c#2 c zp[2]:5 134.66666666666666 void main() void plot(byte plot::x , byte plot::y) byte~ plot::$5 reg byte a 200002.0 @@ -1426,17 +2015,17 @@ byte~ plot::$7 reg byte a 200002.0 byte~ plot::$8 reg byte a 200002.0 byte~ plot::$9 reg byte a 200002.0 byte* plot::plotter -byte* plot::plotter#0 plotter zp[2]:4 150001.5 +byte* plot::plotter#0 plotter zp[2]:5 150001.5 byte* plot::plotter_x -byte* plot::plotter_x#1 plotter_x zp[2]:4 100001.0 -byte* plot::plotter_x#2 plotter_x zp[2]:4 40000.4 +byte* plot::plotter_x#1 plotter_x zp[2]:5 100001.0 +byte* plot::plotter_x#2 plotter_x zp[2]:5 40000.4 word plot::plotter_y -word plot::plotter_y#1 plotter_y zp[2]:6 100001.0 -word plot::plotter_y#2 plotter_y zp[2]:6 200002.0 +word plot::plotter_y#1 plotter_y zp[2]:7 100001.0 +word plot::plotter_y#2 plotter_y zp[2]:7 200002.0 byte plot::x -byte plot::x#0 x zp[1]:2 28182.181818181816 +byte plot::x#0 x zp[1]:3 28182.181818181816 byte plot::y -byte plot::y#0 y zp[1]:3 30000.428571428572 +byte plot::y#0 y zp[1]:4 30000.428571428572 constant const byte* plot_bit[$100] = { fill( $100, 0) } constant const byte* plot_xhi[$100] = { fill( $100, 0) } constant const byte* plot_xlo[$100] = { fill( $100, 0) } @@ -1444,8 +2033,8 @@ constant const byte* plot_yhi[$100] = { fill( $100, 0) } constant const byte* plot_ylo[$100] = { fill( $100, 0) } void plots() byte plots::i -byte plots::i#1 reg byte x 20002.0 -byte plots::i#2 reg byte x 10001.0 +byte plots::i#1 i zp[1]:2 20002.0 +byte plots::i#2 i zp[1]:2 10001.0 constant byte plots_cnt = 8 constant byte* plots_x[] = { $3c, $50, $6e, $50, $3c, $28, $a, $28 } constant byte* plots_y[] = { $a, $28, $3c, $50, $6e, $50, $3c, $28 } @@ -1453,24 +2042,24 @@ constant byte* plots_y[] = { $a, $28, $3c, $50, $6e, $50, $3c, $28 } reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] -reg byte x [ plots::i#2 plots::i#1 ] reg byte a [ init_plot_tables::$0 ] +zp[1]:2 [ init_plot_tables::$9 plots::i#2 plots::i#1 ] reg byte a [ init_plot_tables::$6 ] reg byte a [ init_plot_tables::$7 ] reg byte a [ init_plot_tables::$8 ] -zp[1]:2 [ plot::x#0 init_plot_tables::$9 ] -zp[1]:3 [ plot::y#0 ] +zp[1]:3 [ plot::x#0 ] +zp[1]:4 [ plot::y#0 ] reg byte a [ plot::$6 ] -zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] +zp[2]:5 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] -zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] +zp[2]:7 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] reg byte a [ plot::$9 ] reg byte a [ plot::$5 ] FINAL ASSEMBLER -Score: 6531 +Score: 7731 // File Comments // Upstart @@ -1545,8 +2134,8 @@ main: { } // init_screen init_screen: { - .label b = 6 - .label c = 4 + .label b = 7 + .label c = 5 // [12] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] // [12] phi init_screen::b#2 = BITMAP [phi:init_screen->init_screen::@1#0] -- pbuz1=pbuc1 lda #<BITMAP @@ -1619,7 +2208,7 @@ init_screen: { // init_plot_tables init_plot_tables: { .label __9 = 2 - .label yoffs = 6 + .label yoffs = 7 // [22] phi from init_plot_tables to init_plot_tables::@1 [phi:init_plot_tables->init_plot_tables::@1] // [22] phi init_plot_tables::bits#3 = $80 [phi:init_plot_tables->init_plot_tables::@1#0] -- vbuyy=vbuc1 ldy #$80 @@ -1732,14 +2321,17 @@ init_plot_tables: { } // plots plots: { + .label i = 2 // [47] phi from plots to plots::@1 [phi:plots->plots::@1] - // [47] phi plots::i#2 = 0 [phi:plots->plots::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [47] phi plots::i#2 = 0 [phi:plots->plots::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i // plots::@1 __b1: // for(byte i=0; i<plots_cnt;i++) - // [48] if(plots::i#2<plots_cnt) goto plots::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #plots_cnt + // [48] if(plots::i#2<plots_cnt) goto plots::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #plots_cnt bcc __b2 // plots::@return // } @@ -1748,55 +2340,56 @@ plots: { // plots::@2 __b2: // plot(plots_x[i], plots_y[i]) - // [50] plot::x#0 = plots_x[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx - lda plots_x,x + // [50] plot::x#0 = plots_x[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z i + lda plots_x,y sta.z plot.x - // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx - lda plots_y,x + // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuz2 + lda plots_y,y sta.z plot.y // [52] call plot jsr plot // plots::@3 // for(byte i=0; i<plots_cnt;i++) - // [53] plots::i#1 = ++ plots::i#2 -- vbuxx=_inc_vbuxx - inx + // [53] plots::i#1 = ++ plots::i#2 -- vbuz1=_inc_vbuz1 + inc.z i // [47] phi from plots::@3 to plots::@1 [phi:plots::@3->plots::@1] // [47] phi plots::i#2 = plots::i#1 [phi:plots::@3->plots::@1#0] -- register_copy jmp __b1 } // plot -// plot(byte zp(2) x, byte zp(3) y) +// plot(byte zp(3) x, byte zp(4) y) plot: { - .label x = 2 - .label y = 3 - .label plotter_x = 4 - .label plotter_y = 6 - .label plotter = 4 - // >plotter_x = plot_xhi[x] + .label x = 3 + .label y = 4 + .label plotter_x = 5 + .label plotter_y = 7 + .label plotter = 5 + // BYTE1(plotter_x) = plot_xhi[x] // [54] plot::$6 = plot_xhi[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z x lda plot_xhi,y - // [55] plot::plotter_x#1 = (byte*) 0 hi= plot::$6 -- pbuz1=pbuc1_sethi_vbuaa + // [55] plot::plotter_x#1 = (byte*) 0 byte1= plot::$6 -- pbuz1=pbuc1_setbyte1_vbuaa sta.z plotter_x+1 lda #<0 sta.z plotter_x - // <plotter_x = plot_xlo[x] + // BYTE0(plotter_x) = plot_xlo[x] // [56] plot::$7 = plot_xlo[plot::x#0] -- vbuaa=pbuc1_derefidx_vbuz1 lda plot_xlo,y - // [57] plot::plotter_x#2 = plot::plotter_x#1 lo= plot::$7 -- pbuz1=pbuz1_setlo_vbuaa + // [57] plot::plotter_x#2 = plot::plotter_x#1 byte0= plot::$7 -- pbuz1=pbuz1_setbyte0_vbuaa sta.z plotter_x - // >plotter_y = plot_yhi[y] + // BYTE1(plotter_y) = plot_yhi[y] // [58] plot::$8 = plot_yhi[plot::y#0] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z y lda plot_yhi,y - // [59] plot::plotter_y#1 = 0 hi= plot::$8 -- vwuz1=vwuc1_sethi_vbuaa + // [59] plot::plotter_y#1 = 0 byte1= plot::$8 -- vwuz1=vwuc1_setbyte1_vbuaa sta.z plotter_y+1 lda #<0 sta.z plotter_y - // <plotter_y = plot_ylo[y] + // BYTE0(plotter_y) = plot_ylo[y] // [60] plot::$9 = plot_ylo[plot::y#0] -- vbuaa=pbuc1_derefidx_vbuz1 lda plot_ylo,y - // [61] plot::plotter_y#2 = plot::plotter_y#1 lo= plot::$9 -- vwuz1=vwuz1_setlo_vbuaa + // [61] plot::plotter_y#2 = plot::plotter_y#1 byte0= plot::$9 -- vwuz1=vwuz1_setbyte0_vbuaa sta.z plotter_y // byte* plotter = plotter_x+plotter_y // [62] plot::plotter#0 = plot::plotter_x#2 + plot::plotter_y#2 -- pbuz1=pbuz1_plus_vwuz2 diff --git a/src/test/ref/bitmap-plotter.sym b/src/test/ref/bitmap-plotter.sym index def0c8244..fc9488f01 100644 --- a/src/test/ref/bitmap-plotter.sym +++ b/src/test/ref/bitmap-plotter.sym @@ -25,16 +25,16 @@ byte init_plot_tables::y byte init_plot_tables::y#1 reg byte x 151.5 byte init_plot_tables::y#2 reg byte x 50.5 byte* init_plot_tables::yoffs -byte* init_plot_tables::yoffs#1 yoffs zp[2]:6 202.0 -byte* init_plot_tables::yoffs#2 yoffs zp[2]:6 63.125 -byte* init_plot_tables::yoffs#4 yoffs zp[2]:6 101.0 +byte* init_plot_tables::yoffs#1 yoffs zp[2]:7 202.0 +byte* init_plot_tables::yoffs#2 yoffs zp[2]:7 63.125 +byte* init_plot_tables::yoffs#4 yoffs zp[2]:7 101.0 void init_screen() byte* init_screen::b -byte* init_screen::b#1 b zp[2]:6 202.0 -byte* init_screen::b#2 b zp[2]:6 134.66666666666666 +byte* init_screen::b#1 b zp[2]:7 202.0 +byte* init_screen::b#2 b zp[2]:7 134.66666666666666 byte* init_screen::c -byte* init_screen::c#1 c zp[2]:4 202.0 -byte* init_screen::c#2 c zp[2]:4 134.66666666666666 +byte* init_screen::c#1 c zp[2]:5 202.0 +byte* init_screen::c#2 c zp[2]:5 134.66666666666666 void main() void plot(byte plot::x , byte plot::y) byte~ plot::$5 reg byte a 200002.0 @@ -43,17 +43,17 @@ byte~ plot::$7 reg byte a 200002.0 byte~ plot::$8 reg byte a 200002.0 byte~ plot::$9 reg byte a 200002.0 byte* plot::plotter -byte* plot::plotter#0 plotter zp[2]:4 150001.5 +byte* plot::plotter#0 plotter zp[2]:5 150001.5 byte* plot::plotter_x -byte* plot::plotter_x#1 plotter_x zp[2]:4 100001.0 -byte* plot::plotter_x#2 plotter_x zp[2]:4 40000.4 +byte* plot::plotter_x#1 plotter_x zp[2]:5 100001.0 +byte* plot::plotter_x#2 plotter_x zp[2]:5 40000.4 word plot::plotter_y -word plot::plotter_y#1 plotter_y zp[2]:6 100001.0 -word plot::plotter_y#2 plotter_y zp[2]:6 200002.0 +word plot::plotter_y#1 plotter_y zp[2]:7 100001.0 +word plot::plotter_y#2 plotter_y zp[2]:7 200002.0 byte plot::x -byte plot::x#0 x zp[1]:2 28182.181818181816 +byte plot::x#0 x zp[1]:3 28182.181818181816 byte plot::y -byte plot::y#0 y zp[1]:3 30000.428571428572 +byte plot::y#0 y zp[1]:4 30000.428571428572 constant const byte* plot_bit[$100] = { fill( $100, 0) } constant const byte* plot_xhi[$100] = { fill( $100, 0) } constant const byte* plot_xlo[$100] = { fill( $100, 0) } @@ -61,8 +61,8 @@ constant const byte* plot_yhi[$100] = { fill( $100, 0) } constant const byte* plot_ylo[$100] = { fill( $100, 0) } void plots() byte plots::i -byte plots::i#1 reg byte x 20002.0 -byte plots::i#2 reg byte x 10001.0 +byte plots::i#1 i zp[1]:2 20002.0 +byte plots::i#2 i zp[1]:2 10001.0 constant byte plots_cnt = 8 constant byte* plots_x[] = { $3c, $50, $6e, $50, $3c, $28, $a, $28 } constant byte* plots_y[] = { $a, $28, $3c, $50, $6e, $50, $3c, $28 } @@ -70,17 +70,17 @@ constant byte* plots_y[] = { $a, $28, $3c, $50, $6e, $50, $3c, $28 } reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] -reg byte x [ plots::i#2 plots::i#1 ] reg byte a [ init_plot_tables::$0 ] +zp[1]:2 [ init_plot_tables::$9 plots::i#2 plots::i#1 ] reg byte a [ init_plot_tables::$6 ] reg byte a [ init_plot_tables::$7 ] reg byte a [ init_plot_tables::$8 ] -zp[1]:2 [ plot::x#0 init_plot_tables::$9 ] -zp[1]:3 [ plot::y#0 ] +zp[1]:3 [ plot::x#0 ] +zp[1]:4 [ plot::y#0 ] reg byte a [ plot::$6 ] -zp[2]:4 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] +zp[2]:5 [ plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 init_screen::c#2 init_screen::c#1 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] -zp[2]:6 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] +zp[2]:7 [ plot::plotter_y#1 plot::plotter_y#2 init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] reg byte a [ plot::$9 ] reg byte a [ plot::$5 ] diff --git a/src/test/ref/operator-byte0-lvalue-1.asm b/src/test/ref/operator-byte0-lvalue-1.asm new file mode 100644 index 000000000..01abdb7ec --- /dev/null +++ b/src/test/ref/operator-byte0-lvalue-1.asm @@ -0,0 +1,72 @@ +// Test using operator byte0() in an lvalue + // Commodore 64 PRG executable file +.file [name="operator-byte0-lvalue-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const SIZEOF_WORD = 2 +.segment Code +main: { + .label SCREEN = $400 + .label i = 3 + .label j = 2 + // SCREEN[i++] = w + lda #<$3039 + sta SCREEN + lda #>$3039 + sta SCREEN+1 + lda #<$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD + lda #>$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD+1 + lda #<($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD + lda #>($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD+1 + lda #3 + sta.z i + lda #0 + sta.z j + __b1: + // for(char j=0;j<2;j++) + lda.z j + cmp #2 + bcc __b2 + // } + rts + __b2: + // SCREEN[i++] = ws[j] + lda.z j + asl + tax + lda.z i + asl + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // SCREEN[i++] = ws[j]; + inc.z i + // BYTE0(ws[j]) = 2 + lda #2 + sta ws,x + // SCREEN[i++] = ws[j] + lda.z i + asl + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // SCREEN[i++] = ws[j]; + inc.z i + // for(char j=0;j<2;j++) + inc.z j + jmp __b1 + .segment Data + ws: .word $5ba0, $8707 +} diff --git a/src/test/ref/operator-byte0-lvalue-1.cfg b/src/test/ref/operator-byte0-lvalue-1.cfg new file mode 100644 index 000000000..c5377e26a --- /dev/null +++ b/src/test/ref/operator-byte0-lvalue-1.cfg @@ -0,0 +1,26 @@ + +void main() +main: scope:[main] from + [0] *main::SCREEN = $3039 + [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 + [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 + to:main::@1 +main::@1: scope:[main] from main main::@2 + [3] main::i#6 = phi( main/3, main::@2/main::i#5 ) + [3] main::j#2 = phi( main/0, main::@2/main::j#1 ) + [4] if(main::j#2<2) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [5] return + to:@return +main::@2: scope:[main] from main::@1 + [6] main::$12 = main::j#2 << 1 + [7] main::$11 = main::i#6 << 1 + [8] main::SCREEN[main::$11] = main::ws[main::$12] + [9] main::i#4 = ++ main::i#6 + [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 + [11] main::$14 = main::i#4 << 1 + [12] main::SCREEN[main::$14] = main::ws[main::$12] + [13] main::i#5 = ++ main::i#4 + [14] main::j#1 = ++ main::j#2 + to:main::@1 diff --git a/src/test/ref/operator-byte0-lvalue-1.log b/src/test/ref/operator-byte0-lvalue-1.log new file mode 100644 index 000000000..b2573a104 --- /dev/null +++ b/src/test/ref/operator-byte0-lvalue-1.log @@ -0,0 +1,579 @@ + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + main::w#0 = $3039 + main::i#0 = 0 + main::$7 = main::i#0 * SIZEOF_WORD + main::SCREEN[main::$7] = main::w#0 + main::i#1 = ++ main::i#0 + main::$4 = 1 + main::w#1 = main::w#0 byte0= main::$4 + main::$8 = main::i#1 * SIZEOF_WORD + main::SCREEN[main::$8] = main::w#1 + main::i#2 = ++ main::i#1 + main::$5 = 2 + main::w#2 = main::w#1 byte1= main::$5 + main::$9 = main::i#2 * SIZEOF_WORD + main::SCREEN[main::$9] = main::w#2 + main::i#3 = ++ main::i#2 + main::j#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::i#7 = phi( main/main::i#3, main::@2/main::i#5 ) + main::j#2 = phi( main/main::j#0, main::@2/main::j#1 ) + main::$2 = main::j#2 < 2 + if(main::$2) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#6 = phi( main::@1/main::i#7 ) + main::j#3 = phi( main::@1/main::j#2 ) + main::$10 = main::j#3 * SIZEOF_WORD + main::$11 = main::i#6 * SIZEOF_WORD + main::SCREEN[main::$11] = main::ws[main::$10] + main::i#4 = ++ main::i#6 + main::$6 = 2 + main::$12 = main::j#3 * SIZEOF_WORD + main::ws[main::$12] = main::ws[main::$12] byte0= main::$6 + main::$13 = main::j#3 * SIZEOF_WORD + main::$14 = main::i#4 * SIZEOF_WORD + main::SCREEN[main::$14] = main::ws[main::$13] + main::i#5 = ++ main::i#4 + main::j#1 = ++ main::j#3 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +constant byte SIZEOF_WORD = 2 +void __start() +void main() +byte~ main::$10 +byte~ main::$11 +byte~ main::$12 +byte~ main::$13 +byte~ main::$14 +bool~ main::$2 +byte~ main::$4 +byte~ main::$5 +byte~ main::$6 +byte~ main::$7 +byte~ main::$8 +byte~ main::$9 +constant word* const main::SCREEN = (word*)$400 +byte main::i +byte main::i#0 +byte main::i#1 +byte main::i#2 +byte main::i#3 +byte main::i#4 +byte main::i#5 +byte main::i#6 +byte main::i#7 +byte main::j +byte main::j#0 +byte main::j#1 +byte main::j#2 +byte main::j#3 +word main::w +word main::w#0 +word main::w#1 +word main::w#2 +constant word* main::ws[] = { $5ba0, $8707 } + +Adding number conversion cast (unumber) 1 in main::$4 = 1 +Adding number conversion cast (unumber) 2 in main::$5 = 2 +Adding number conversion cast (unumber) 2 in main::$2 = main::j#2 < 2 +Adding number conversion cast (unumber) 2 in main::$6 = 2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast main::$4 = (unumber)1 +Inlining cast main::$5 = (unumber)2 +Inlining cast main::$6 = (unumber)2 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (word*) 1024 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias main::j#2 = main::j#3 +Alias main::i#6 = main::i#7 +Successful SSA optimization Pass2AliasElimination +Identified duplicate assignment right side [25] main::$12 = main::j#2 * SIZEOF_WORD +Identified duplicate assignment right side [27] main::$13 = main::j#2 * SIZEOF_WORD +Successful SSA optimization Pass2DuplicateRValueIdentification +Simple Condition main::$2 [18] if(main::j#2<2) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::w#0 = $3039 +Constant main::i#0 = 0 +Constant main::$4 = 1 +Constant main::$5 = 2 +Constant main::j#0 = 0 +Constant main::$6 = 2 +Successful SSA optimization Pass2ConstantIdentification +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Alias main::$12 = main::$10 main::$13 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [0] main::$7 = main::i#0 * SIZEOF_WORD +Constant right-side identified [2] main::i#1 = ++ main::i#0 +Constant right-side identified [3] main::w#1 = main::w#0 byte0= main::$4 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant main::$7 = main::i#0*SIZEOF_WORD +Constant main::i#1 = ++main::i#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying constant evaluating to zero main::i#0*SIZEOF_WORD in +Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero main::SCREEN in [1] main::SCREEN[main::$7] = main::w#0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant main::$7 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) main::w#0&$ffffff00|main::$4 in main::w#1 = main::w#0&$ffffff00|main::$4 +Adding number conversion cast (unumber) main::w#0&$ffffff00 in main::w#1 = ((unumber)) main::w#0&$ffffff00|main::$4 +Adding number conversion cast (unumber) $ffffff00 in main::w#1 = ((unumber)) (unumber)main::w#0&$ffffff00|main::$4 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast main::w#1 = (unumber)(unumber)main::w#0&(unumber)$ffffff00|main::$4 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast (unumber)main::w#0&(unumber)$ffffff00|main::$4 +Simplifying constant integer cast main::w#0&(unumber)$ffffff00 +Simplifying constant integer cast $ffffff00 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (dword) $ffffff00 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Constant right-side identified [2] main::$8 = main::i#1 * SIZEOF_WORD +Constant right-side identified [4] main::i#2 = ++ main::i#1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant main::w#1 = main::w#0&$ffffff00|main::$4 +Constant main::$8 = main::i#1*SIZEOF_WORD +Constant main::i#2 = ++main::i#1 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [2] main::w#2 = main::w#1 byte1= main::$5 +Constant right-side identified [3] main::$9 = main::i#2 * SIZEOF_WORD +Constant right-side identified [5] main::i#3 = ++ main::i#2 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant main::$9 = main::i#2*SIZEOF_WORD +Constant main::i#3 = ++main::i#2 +Successful SSA optimization Pass2ConstantIdentification +Adding number conversion cast (unumber) main::w#1&$ffff00ff|main::$5*$100 in main::w#2 = main::w#1&$ffff00ff|main::$5*$100 +Adding number conversion cast (unumber) $ffff00ff in main::w#2 = ((unumber)) main::w#1&$ffff00ff|main::$5*$100 +Adding number conversion cast (unumber) $100 in main::w#2 = ((unumber)) main::w#1&(unumber)$ffff00ff|main::$5*$100 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast main::w#2 = (unumber)main::w#1&(unumber)$ffff00ff|main::$5*(unumber)$100 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast main::w#1&(unumber)$ffff00ff|main::$5*(unumber)$100 +Simplifying constant integer cast $ffff00ff +Simplifying constant integer cast $100 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (dword) $ffff00ff +Finalized unsigned number type (word) $100 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Constant main::w#2 = main::w#1&$ffff00ff|main::$5*$100 +Successful SSA optimization Pass2ConstantIdentification +Rewriting multiplication to use shift [5] main::$12 = main::j#2 * SIZEOF_WORD +Rewriting multiplication to use shift [6] main::$11 = main::i#6 * SIZEOF_WORD +Rewriting multiplication to use shift [10] main::$14 = main::i#4 * SIZEOF_WORD +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with different constant siblings main::w#0 +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings main::j#0 +Inlining constant with var siblings main::i#1 +Inlining constant with different constant siblings main::w#1 +Inlining constant with var siblings main::i#2 +Inlining constant with var siblings main::i#3 +Inlining constant with different constant siblings main::w#2 +Constant inlined main::i#3 = ++++++0 +Constant inlined main::w#1 = $3039&$ffffff00|1 +Constant inlined main::w#2 = $3039&$ffffff00|1&$ffff00ff|2*$100 +Constant inlined main::w#0 = $3039 +Constant inlined main::$5 = 2 +Constant inlined main::i#0 = 0 +Constant inlined main::$6 = 2 +Constant inlined main::i#2 = ++++0 +Constant inlined main::$4 = 1 +Constant inlined main::j#0 = 0 +Constant inlined main::i#1 = ++0 +Constant inlined main::$9 = ++++0*SIZEOF_WORD +Constant inlined main::$8 = ++0*SIZEOF_WORD +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(main::SCREEN+++0*SIZEOF_WORD) +Consolidated array index constant in *(main::SCREEN+++++0*SIZEOF_WORD) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++1 +Successful SSA optimization Pass2ConstantSimplification +Simplifying constant integer increment ++1 +Simplifying constant integer increment ++2 +Successful SSA optimization Pass2ConstantSimplification +CALL GRAPH + +Created 2 initial phi equivalence classes +Coalesced [15] main::j#4 = main::j#1 +Coalesced [16] main::i#8 = main::i#5 +Coalesced down to 2 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] *main::SCREEN = $3039 + [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 + [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 + to:main::@1 +main::@1: scope:[main] from main main::@2 + [3] main::i#6 = phi( main/3, main::@2/main::i#5 ) + [3] main::j#2 = phi( main/0, main::@2/main::j#1 ) + [4] if(main::j#2<2) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [5] return + to:@return +main::@2: scope:[main] from main::@1 + [6] main::$12 = main::j#2 << 1 + [7] main::$11 = main::i#6 << 1 + [8] main::SCREEN[main::$11] = main::ws[main::$12] + [9] main::i#4 = ++ main::i#6 + [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 + [11] main::$14 = main::i#4 << 1 + [12] main::SCREEN[main::$14] = main::ws[main::$12] + [13] main::i#5 = ++ main::i#4 + [14] main::j#1 = ++ main::j#2 + to:main::@1 + + +VARIABLE REGISTER WEIGHTS +void main() +byte~ main::$11 22.0 +byte~ main::$12 9.166666666666666 +byte~ main::$14 22.0 +byte main::i +byte main::i#4 8.25 +byte main::i#5 11.0 +byte main::i#6 6.6000000000000005 +byte main::j +byte main::j#1 22.0 +byte main::j#2 4.4 +word main::w + +Initial phi equivalence classes +[ main::j#2 main::j#1 ] +[ main::i#6 main::i#5 ] +Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable main::$11 to live range equivalence class [ main::$11 ] +Added variable main::i#4 to live range equivalence class [ main::i#4 ] +Added variable main::$14 to live range equivalence class [ main::$14 ] +Complete equivalence classes +[ main::j#2 main::j#1 ] +[ main::i#6 main::i#5 ] +[ main::$12 ] +[ main::$11 ] +[ main::i#4 ] +[ main::$14 ] +Allocated zp[1]:2 [ main::j#2 main::j#1 ] +Allocated zp[1]:3 [ main::i#6 main::i#5 ] +Allocated zp[1]:4 [ main::$12 ] +Allocated zp[1]:5 [ main::$11 ] +Allocated zp[1]:6 [ main::i#4 ] +Allocated zp[1]:7 [ main::$14 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *main::SCREEN = $3039 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] main::$12 = main::j#2 << 1 [ main::j#2 main::i#6 main::$12 ] ( [ main::j#2 main::i#6 main::$12 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::j#2 main::j#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#6 main::i#5 ] +Statement [7] main::$11 = main::i#6 << 1 [ main::j#2 main::i#6 main::$12 main::$11 ] ( [ main::j#2 main::i#6 main::$12 main::$11 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::$12 ] +Statement [8] main::SCREEN[main::$11] = main::ws[main::$12] [ main::j#2 main::i#6 main::$12 ] ( [ main::j#2 main::i#6 main::$12 ] { } ) always clobbers reg byte a +Statement [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 [ main::j#2 main::$12 main::i#4 ] ( [ main::j#2 main::$12 main::i#4 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#4 ] +Statement [11] main::$14 = main::i#4 << 1 [ main::j#2 main::$12 main::i#4 main::$14 ] ( [ main::j#2 main::$12 main::i#4 main::$14 ] { } ) always clobbers reg byte a +Statement [12] main::SCREEN[main::$14] = main::ws[main::$12] [ main::j#2 main::i#4 ] ( [ main::j#2 main::i#4 ] { } ) always clobbers reg byte a +Statement [0] *main::SCREEN = $3039 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] main::$12 = main::j#2 << 1 [ main::j#2 main::i#6 main::$12 ] ( [ main::j#2 main::i#6 main::$12 ] { } ) always clobbers reg byte a +Statement [7] main::$11 = main::i#6 << 1 [ main::j#2 main::i#6 main::$12 main::$11 ] ( [ main::j#2 main::i#6 main::$12 main::$11 ] { } ) always clobbers reg byte a +Statement [8] main::SCREEN[main::$11] = main::ws[main::$12] [ main::j#2 main::i#6 main::$12 ] ( [ main::j#2 main::i#6 main::$12 ] { } ) always clobbers reg byte a +Statement [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 [ main::j#2 main::$12 main::i#4 ] ( [ main::j#2 main::$12 main::i#4 ] { } ) always clobbers reg byte a +Statement [11] main::$14 = main::i#4 << 1 [ main::j#2 main::$12 main::i#4 main::$14 ] ( [ main::j#2 main::$12 main::i#4 main::$14 ] { } ) always clobbers reg byte a +Statement [12] main::SCREEN[main::$14] = main::ws[main::$12] [ main::j#2 main::i#4 ] ( [ main::j#2 main::i#4 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ main::i#6 main::i#5 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::$12 ] : zp[1]:4 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$11 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::i#4 ] : zp[1]:6 , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$14 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 26.4: zp[1]:2 [ main::j#2 main::j#1 ] 22: zp[1]:5 [ main::$11 ] 22: zp[1]:7 [ main::$14 ] 17.6: zp[1]:3 [ main::i#6 main::i#5 ] 9.17: zp[1]:4 [ main::$12 ] 8.25: zp[1]:6 [ main::i#4 ] +Uplift Scope [] + +Uplifting [main] best 1277 combination zp[1]:2 [ main::j#2 main::j#1 ] reg byte a [ main::$11 ] reg byte a [ main::$14 ] zp[1]:3 [ main::i#6 main::i#5 ] zp[1]:4 [ main::$12 ] zp[1]:6 [ main::i#4 ] +Limited combination testing to 100 combinations of 1296 possible. +Uplifting [] best 1277 combination +Attempting to uplift remaining variables inzp[1]:2 [ main::j#2 main::j#1 ] +Uplifting [main] best 1277 combination zp[1]:2 [ main::j#2 main::j#1 ] +Attempting to uplift remaining variables inzp[1]:3 [ main::i#6 main::i#5 ] +Uplifting [main] best 1277 combination zp[1]:3 [ main::i#6 main::i#5 ] +Attempting to uplift remaining variables inzp[1]:4 [ main::$12 ] +Uplifting [main] best 1177 combination reg byte x [ main::$12 ] +Attempting to uplift remaining variables inzp[1]:6 [ main::i#4 ] +Uplifting [main] best 1177 combination zp[1]:6 [ main::i#4 ] +Coalescing zero page register [ zp[1]:3 [ main::i#6 main::i#5 ] ] with [ zp[1]:6 [ main::i#4 ] ] - score: 2 + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test using operator byte0() in an lvalue + // Upstart + // Commodore 64 PRG executable file +.file [name="operator-byte0-lvalue-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const SIZEOF_WORD = 2 +.segment Code + // main +main: { + .label SCREEN = $400 + .label i = 3 + .label j = 2 + // [0] *main::SCREEN = $3039 -- _deref_pwuc1=vwuc2 + lda #<$3039 + sta SCREEN + lda #>$3039 + sta SCREEN+1 + // [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 -- _deref_pwuc1=vwuc2 + lda #<$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD + lda #>$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD+1 + // [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 -- _deref_pwuc1=vwuc2 + lda #<($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD + lda #>($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD+1 + // [3] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [3] phi main::i#6 = 3 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #3 + sta.z i + // [3] phi main::j#2 = 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z j + jmp __b1 + // main::@1 + __b1: + // [4] if(main::j#2<2) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z j + cmp #2 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [5] return + rts + // main::@2 + __b2: + // [6] main::$12 = main::j#2 << 1 -- vbuxx=vbuz1_rol_1 + lda.z j + asl + tax + // [7] main::$11 = main::i#6 << 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [8] main::SCREEN[main::$11] = main::ws[main::$12] -- pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuxx + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // [9] main::i#4 = ++ main::i#6 -- vbuz1=_inc_vbuz1 + inc.z i + // [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 -- pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuc2 + lda #2 + sta ws,x + // [11] main::$14 = main::i#4 << 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [12] main::SCREEN[main::$14] = main::ws[main::$12] -- pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuxx + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // [13] main::i#5 = ++ main::i#4 -- vbuz1=_inc_vbuz1 + inc.z i + // [14] main::j#1 = ++ main::j#2 -- vbuz1=_inc_vbuz1 + inc.z j + // [3] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [3] phi main::i#6 = main::i#5 [phi:main::@2->main::@1#0] -- register_copy + // [3] phi main::j#2 = main::j#1 [phi:main::@2->main::@1#1] -- register_copy + jmp __b1 + .segment Data + ws: .word $5ba0, $8707 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +constant byte SIZEOF_WORD = 2 +void main() +byte~ main::$11 reg byte a 22.0 +byte~ main::$12 reg byte x 9.166666666666666 +byte~ main::$14 reg byte a 22.0 +constant word* const main::SCREEN = (word*) 1024 +byte main::i +byte main::i#4 i zp[1]:3 8.25 +byte main::i#5 i zp[1]:3 11.0 +byte main::i#6 i zp[1]:3 6.6000000000000005 +byte main::j +byte main::j#1 j zp[1]:2 22.0 +byte main::j#2 j zp[1]:2 4.4 +word main::w +constant word* main::ws[] = { $5ba0, $8707 } + +zp[1]:2 [ main::j#2 main::j#1 ] +zp[1]:3 [ main::i#6 main::i#5 main::i#4 ] +reg byte x [ main::$12 ] +reg byte a [ main::$11 ] +reg byte a [ main::$14 ] + + +FINAL ASSEMBLER +Score: 1057 + + // File Comments +// Test using operator byte0() in an lvalue + // Upstart + // Commodore 64 PRG executable file +.file [name="operator-byte0-lvalue-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const SIZEOF_WORD = 2 +.segment Code + // main +main: { + .label SCREEN = $400 + .label i = 3 + .label j = 2 + // SCREEN[i++] = w + // [0] *main::SCREEN = $3039 -- _deref_pwuc1=vwuc2 + lda #<$3039 + sta SCREEN + lda #>$3039 + sta SCREEN+1 + // [1] *(main::SCREEN+1*SIZEOF_WORD) = $3039&$ffffff00|1 -- _deref_pwuc1=vwuc2 + lda #<$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD + lda #>$3039&$ffffff00|1 + sta SCREEN+1*SIZEOF_WORD+1 + // [2] *(main::SCREEN+2*SIZEOF_WORD) = $3039&$ffffff00|1&$ffff00ff|2*$100 -- _deref_pwuc1=vwuc2 + lda #<($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD + lda #>($3039&$ffffff00|1)&$ffff00ff|2*$100 + sta SCREEN+2*SIZEOF_WORD+1 + // [3] phi from main to main::@1 [phi:main->main::@1] + // [3] phi main::i#6 = 3 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #3 + sta.z i + // [3] phi main::j#2 = 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z j + // main::@1 + __b1: + // for(char j=0;j<2;j++) + // [4] if(main::j#2<2) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z j + cmp #2 + bcc __b2 + // main::@return + // } + // [5] return + rts + // main::@2 + __b2: + // SCREEN[i++] = ws[j] + // [6] main::$12 = main::j#2 << 1 -- vbuxx=vbuz1_rol_1 + lda.z j + asl + tax + // [7] main::$11 = main::i#6 << 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [8] main::SCREEN[main::$11] = main::ws[main::$12] -- pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuxx + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // SCREEN[i++] = ws[j]; + // [9] main::i#4 = ++ main::i#6 -- vbuz1=_inc_vbuz1 + inc.z i + // BYTE0(ws[j]) = 2 + // [10] main::ws[main::$12] = main::ws[main::$12] byte0= 2 -- pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_setbyte0_vbuc2 + lda #2 + sta ws,x + // SCREEN[i++] = ws[j] + // [11] main::$14 = main::i#4 << 1 -- vbuaa=vbuz1_rol_1 + lda.z i + asl + // [12] main::SCREEN[main::$14] = main::ws[main::$12] -- pwuc1_derefidx_vbuaa=pwuc2_derefidx_vbuxx + tay + lda ws,x + sta SCREEN,y + lda ws+1,x + sta SCREEN+1,y + // SCREEN[i++] = ws[j]; + // [13] main::i#5 = ++ main::i#4 -- vbuz1=_inc_vbuz1 + inc.z i + // for(char j=0;j<2;j++) + // [14] main::j#1 = ++ main::j#2 -- vbuz1=_inc_vbuz1 + inc.z j + // [3] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [3] phi main::i#6 = main::i#5 [phi:main::@2->main::@1#0] -- register_copy + // [3] phi main::j#2 = main::j#1 [phi:main::@2->main::@1#1] -- register_copy + jmp __b1 + .segment Data + ws: .word $5ba0, $8707 +} + // File Data + diff --git a/src/test/ref/operator-byte0-lvalue-1.sym b/src/test/ref/operator-byte0-lvalue-1.sym new file mode 100644 index 000000000..5a82cae62 --- /dev/null +++ b/src/test/ref/operator-byte0-lvalue-1.sym @@ -0,0 +1,21 @@ +constant byte SIZEOF_WORD = 2 +void main() +byte~ main::$11 reg byte a 22.0 +byte~ main::$12 reg byte x 9.166666666666666 +byte~ main::$14 reg byte a 22.0 +constant word* const main::SCREEN = (word*) 1024 +byte main::i +byte main::i#4 i zp[1]:3 8.25 +byte main::i#5 i zp[1]:3 11.0 +byte main::i#6 i zp[1]:3 6.6000000000000005 +byte main::j +byte main::j#1 j zp[1]:2 22.0 +byte main::j#2 j zp[1]:2 4.4 +word main::w +constant word* main::ws[] = { $5ba0, $8707 } + +zp[1]:2 [ main::j#2 main::j#1 ] +zp[1]:3 [ main::i#6 main::i#5 main::i#4 ] +reg byte x [ main::$12 ] +reg byte a [ main::$11 ] +reg byte a [ main::$14 ] diff --git a/src/test/ref/test-lowhigh.asm b/src/test/ref/test-lowhigh.asm index 2dbdc10d6..082eaad5d 100644 --- a/src/test/ref/test-lowhigh.asm +++ b/src/test/ref/test-lowhigh.asm @@ -9,21 +9,17 @@ .segment Basic :BasicUpstart(main) .label print_screen = $400 - .label print_line_cursor = $10 - .label print_char_cursor = $e - .label print_char_cursor_1 = $10 + .label print_line_cursor = 8 + .label print_char_cursor = $10 + .label print_char_cursor_1 = 8 .label print_line_cursor_1 = 6 .segment Code main: { - .label __3 = 8 - .label __6 = $e - .label __16 = $10 - .label __20 = $12 - .label __24 = $14 - .label __28 = $16 - .label __32 = 8 - .label __33 = $e - .label dw2 = $a + .label __3 = $a + .label __6 = $10 + .label __28 = $a + .label __29 = $10 + .label dw2 = $c .label dw = 2 // print_cls() jsr print_cls @@ -60,43 +56,43 @@ main: { // } rts __b2: - // >dw + // WORD1(dw) lda.z dw+2 sta.z __3 lda.z dw+3 sta.z __3+1 - // >dw2 = (>dw) + $1111 + // WORD1(dw2) = WORD1(dw) + $1111 clc - lda.z __32 + lda.z __28 adc #<$1111 - sta.z __32 - lda.z __32+1 + sta.z __28 + lda.z __28+1 adc #>$1111 - sta.z __32+1 + sta.z __28+1 lda.z dw sta.z dw2 lda.z dw+1 sta.z dw2+1 - lda.z __32 + lda.z __28 sta.z dw2+2 - lda.z __32+1 + lda.z __28+1 sta.z dw2+3 - // <dw + // WORD0(dw) lda.z dw sta.z __6 lda.z dw+1 sta.z __6+1 - // <dw2 = (<dw) + $1111 + // WORD0(dw2) = WORD0(dw) + $1111 clc - lda.z __33 + lda.z __29 adc #<$1111 - sta.z __33 - lda.z __33+1 + sta.z __29 + lda.z __29+1 adc #>$1111 - sta.z __33+1 - lda.z __33 + sta.z __29+1 + lda.z __29 sta.z dw2 - lda.z __33+1 + lda.z __29+1 sta.z dw2+1 // print_ulong(dw2) // Test set/get low word of dword @@ -104,7 +100,7 @@ main: { // print_char(' ') lda #' ' jsr print_char - // print_uint(>dw2) + // print_uint(WORD1(dw2)) lda.z dw2+2 sta.z print_uint.w lda.z dw2+3 @@ -114,7 +110,7 @@ main: { // Test get high word of dword lda #' ' jsr print_char - // print_uint(<dw2) + // print_uint(WORD0(dw2)) lda.z dw2 sta.z print_uint.w lda.z dw2+1 @@ -124,49 +120,29 @@ main: { // Test get low word of dword lda #' ' jsr print_char - // >dw2 - lda.z dw2+2 - sta.z __16 - lda.z dw2+3 - sta.z __16+1 - // print_uchar(> >dw2) - tax + // print_uchar(BYTE3(dw2)) + ldx.z dw2+3 jsr print_uchar // print_char(' ') // Test get high high byte of dword lda #' ' jsr print_char - // >dw2 - lda.z dw2+2 - sta.z __20 - lda.z dw2+3 - sta.z __20+1 - // print_uchar(< >dw2) - ldx.z __20 + // print_uchar(BYTE2(dw2)) + ldx.z dw2+2 jsr print_uchar // print_char(' ') // Test get low high byte of dword lda #' ' jsr print_char - // <dw2 - lda.z dw2 - sta.z __24 - lda.z dw2+1 - sta.z __24+1 - // print_uchar(> <dw2) - tax + // print_uchar(BYTE1(dw2)) + ldx.z dw2+1 jsr print_uchar // print_char(' ') // Test get high low byte of dword lda #' ' jsr print_char - // <dw2 - lda.z dw2 - sta.z __28 - lda.z dw2+1 - sta.z __28+1 - // print_uchar(< <dw2) - ldx.z __28 + // print_uchar(BYTE0(dw2)) + ldx.z dw2 jsr print_uchar // print_ln() // Test get low low byte of dword @@ -194,9 +170,9 @@ print_cls: { rts } // Print a unsigned long as HEX -// print_ulong(dword zp($a) dw) +// print_ulong(dword zp($c) dw) print_ulong: { - .label dw = $a + .label dw = $c // print_uint(>dw) lda.z dw+2 sta.z print_uint.w @@ -232,9 +208,9 @@ print_char: { rts } // Print a unsigned int as HEX -// print_uint(word zp(8) w) +// print_uint(word zp($a) w) print_uint: { - .label w = 8 + .label w = $a // print_uchar(>w) ldx.z w+1 jsr print_uchar @@ -301,7 +277,7 @@ memset: { .const num = $3e8 .label str = print_screen .label end = str+num - .label dst = $10 + .label dst = 8 lda #<str sta.z dst lda #>str diff --git a/src/test/ref/test-lowhigh.cfg b/src/test/ref/test-lowhigh.cfg index 4d5679a56..bf78ff6ee 100644 --- a/src/test/ref/test-lowhigh.cfg +++ b/src/test/ref/test-lowhigh.cfg @@ -14,12 +14,12 @@ main::@return: scope:[main] from main::@1 [4] return to:@return main::@2: scope:[main] from main::@1 - [5] main::$3 = > main::dw#10 - [6] main::$32 = main::$3 + $1111 - [7] main::dw2#1 = main::dw#10 hi= main::$32 - [8] main::$6 = < main::dw#10 - [9] main::$33 = main::$6 + $1111 - [10] main::dw2#10 = main::dw2#1 lo= main::$33 + [5] main::$3 = _word1_ main::dw#10 + [6] main::$28 = main::$3 + $1111 + [7] main::dw2#1 = main::dw#10 word1= main::$28 + [8] main::$6 = _word0_ main::dw#10 + [9] main::$29 = main::$6 + $1111 + [10] main::dw2#10 = main::dw2#1 word0= main::$29 [11] print_ulong::dw#0 = main::dw2#10 [12] call print_ulong to:main::@3 @@ -28,7 +28,7 @@ main::@3: scope:[main] from main::@2 [14] call print_char to:main::@4 main::@4: scope:[main] from main::@3 - [15] print_uint::w#2 = > main::dw2#10 + [15] print_uint::w#2 = _word1_ main::dw2#10 [16] call print_uint to:main::@5 main::@5: scope:[main] from main::@4 @@ -36,7 +36,7 @@ main::@5: scope:[main] from main::@4 [18] call print_char to:main::@6 main::@6: scope:[main] from main::@5 - [19] print_uint::w#3 = < main::dw2#10 + [19] print_uint::w#3 = _word0_ main::dw2#10 [20] call print_uint to:main::@7 main::@7: scope:[main] from main::@6 @@ -44,140 +44,136 @@ main::@7: scope:[main] from main::@6 [22] call print_char to:main::@8 main::@8: scope:[main] from main::@7 - [23] main::$16 = > main::dw2#10 - [24] print_uchar::b#2 = > main::$16 - [25] call print_uchar + [23] print_uchar::b#2 = _byte3_ main::dw2#10 + [24] call print_uchar to:main::@9 main::@9: scope:[main] from main::@8 - [26] phi() - [27] call print_char + [25] phi() + [26] call print_char to:main::@10 main::@10: scope:[main] from main::@9 - [28] main::$20 = > main::dw2#10 - [29] print_uchar::b#3 = < main::$20 - [30] call print_uchar + [27] print_uchar::b#3 = _byte2_ main::dw2#10 + [28] call print_uchar to:main::@11 main::@11: scope:[main] from main::@10 - [31] phi() - [32] call print_char + [29] phi() + [30] call print_char to:main::@12 main::@12: scope:[main] from main::@11 - [33] main::$24 = < main::dw2#10 - [34] print_uchar::b#4 = > main::$24 - [35] call print_uchar + [31] print_uchar::b#4 = > main::dw2#10 + [32] call print_uchar to:main::@13 main::@13: scope:[main] from main::@12 - [36] phi() - [37] call print_char + [33] phi() + [34] call print_char to:main::@14 main::@14: scope:[main] from main::@13 - [38] main::$28 = < main::dw2#10 - [39] print_uchar::b#5 = < main::$28 - [40] call print_uchar + [35] print_uchar::b#5 = < main::dw2#10 + [36] call print_uchar to:main::@15 main::@15: scope:[main] from main::@14 - [41] phi() - [42] call print_ln + [37] phi() + [38] call print_ln to:main::@16 main::@16: scope:[main] from main::@15 - [43] main::dw#1 = ++ main::dw#10 - [44] print_line_cursor#39 = print_line_cursor#0 + [39] main::dw#1 = ++ main::dw#10 + [40] print_line_cursor#39 = print_line_cursor#0 to:main::@1 void print_cls() print_cls: scope:[print_cls] from main - [45] phi() - [46] call memset + [41] phi() + [42] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [47] return + [43] return to:@return void print_ulong(dword print_ulong::dw) print_ulong: scope:[print_ulong] from main::@2 - [48] print_uint::w#0 = > print_ulong::dw#0 - [49] print_char_cursor#76 = print_char_cursor#30 - [50] call print_uint + [44] print_uint::w#0 = > print_ulong::dw#0 + [45] print_char_cursor#76 = print_char_cursor#30 + [46] call print_uint to:print_ulong::@1 print_ulong::@1: scope:[print_ulong] from print_ulong - [51] print_uint::w#1 = < print_ulong::dw#0 - [52] call print_uint + [47] print_uint::w#1 = < print_ulong::dw#0 + [48] call print_uint to:print_ulong::@return print_ulong::@return: scope:[print_ulong] from print_ulong::@1 - [53] return + [49] return to:@return void print_char(byte print_char::ch) print_char: scope:[print_char] from main::@11 main::@13 main::@3 main::@5 main::@7 main::@9 print_uchar print_uchar::@1 - [54] print_char_cursor#45 = phi( main::@9/print_char_cursor#11, main::@11/print_char_cursor#11, main::@13/print_char_cursor#11, main::@3/print_char_cursor#11, main::@5/print_char_cursor#11, main::@7/print_char_cursor#11, print_uchar/print_char_cursor#69, print_uchar::@1/print_char_cursor#11 ) - [54] print_char::ch#8 = phi( main::@9/' ', main::@11/' ', main::@13/' ', main::@3/' ', main::@5/' ', main::@7/' ', print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) - [55] *print_char_cursor#45 = print_char::ch#8 - [56] print_char_cursor#11 = ++ print_char_cursor#45 + [50] print_char_cursor#45 = phi( main::@9/print_char_cursor#11, main::@11/print_char_cursor#11, main::@13/print_char_cursor#11, main::@3/print_char_cursor#11, main::@5/print_char_cursor#11, main::@7/print_char_cursor#11, print_uchar/print_char_cursor#69, print_uchar::@1/print_char_cursor#11 ) + [50] print_char::ch#8 = phi( main::@9/' ', main::@11/' ', main::@13/' ', main::@3/' ', main::@5/' ', main::@7/' ', print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) + [51] *print_char_cursor#45 = print_char::ch#8 + [52] print_char_cursor#11 = ++ print_char_cursor#45 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [57] return + [53] return to:@return void print_uint(word print_uint::w) print_uint: scope:[print_uint] from main::@4 main::@6 print_ulong print_ulong::@1 - [58] print_char_cursor#67 = phi( main::@4/print_char_cursor#11, main::@6/print_char_cursor#11, print_ulong/print_char_cursor#76, print_ulong::@1/print_char_cursor#11 ) - [58] print_uint::w#4 = phi( main::@4/print_uint::w#2, main::@6/print_uint::w#3, print_ulong/print_uint::w#0, print_ulong::@1/print_uint::w#1 ) - [59] print_uchar::b#0 = > print_uint::w#4 - [60] call print_uchar + [54] print_char_cursor#67 = phi( main::@4/print_char_cursor#11, main::@6/print_char_cursor#11, print_ulong/print_char_cursor#76, print_ulong::@1/print_char_cursor#11 ) + [54] print_uint::w#4 = phi( main::@4/print_uint::w#2, main::@6/print_uint::w#3, print_ulong/print_uint::w#0, print_ulong::@1/print_uint::w#1 ) + [55] print_uchar::b#0 = > print_uint::w#4 + [56] call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint - [61] print_uchar::b#1 = < print_uint::w#4 - [62] call print_uchar + [57] print_uchar::b#1 = < print_uint::w#4 + [58] call print_uchar to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@1 - [63] return + [59] return to:@return void print_uchar(byte print_uchar::b) print_uchar: scope:[print_uchar] from main::@10 main::@12 main::@14 main::@8 print_uint print_uint::@1 - [64] print_char_cursor#69 = phi( main::@10/print_char_cursor#11, main::@12/print_char_cursor#11, main::@14/print_char_cursor#11, main::@8/print_char_cursor#11, print_uint/print_char_cursor#67, print_uint::@1/print_char_cursor#11 ) - [64] print_uchar::b#6 = phi( main::@10/print_uchar::b#3, main::@12/print_uchar::b#4, main::@14/print_uchar::b#5, main::@8/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) - [65] print_uchar::$0 = print_uchar::b#6 >> 4 - [66] print_char::ch#0 = print_hextab[print_uchar::$0] - [67] call print_char + [60] print_char_cursor#69 = phi( main::@10/print_char_cursor#11, main::@12/print_char_cursor#11, main::@14/print_char_cursor#11, main::@8/print_char_cursor#11, print_uint/print_char_cursor#67, print_uint::@1/print_char_cursor#11 ) + [60] print_uchar::b#6 = phi( main::@10/print_uchar::b#3, main::@12/print_uchar::b#4, main::@14/print_uchar::b#5, main::@8/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) + [61] print_uchar::$0 = print_uchar::b#6 >> 4 + [62] print_char::ch#0 = print_hextab[print_uchar::$0] + [63] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar - [68] print_uchar::$2 = print_uchar::b#6 & $f - [69] print_char::ch#1 = print_hextab[print_uchar::$2] - [70] call print_char + [64] print_uchar::$2 = print_uchar::b#6 & $f + [65] print_char::ch#1 = print_hextab[print_uchar::$2] + [66] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 - [71] return + [67] return to:@return void print_ln() print_ln: scope:[print_ln] from main::@15 - [72] phi() + [68] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@2 - [73] print_line_cursor#10 = phi( print_ln/print_line_cursor#16, print_ln::@2/print_line_cursor#38 ) - [74] print_line_cursor#0 = print_line_cursor#10 + $28 - [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 + [69] print_line_cursor#10 = phi( print_ln/print_line_cursor#16, print_ln::@2/print_line_cursor#38 ) + [70] print_line_cursor#0 = print_line_cursor#10 + $28 + [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@1 - [76] return + [72] return to:@return print_ln::@2: scope:[print_ln] from print_ln::@1 - [77] print_line_cursor#38 = print_line_cursor#0 + [73] print_line_cursor#38 = print_line_cursor#0 to:print_ln::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from print_cls - [78] phi() + [74] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [79] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [80] if(memset::dst#2!=memset::end#0) goto memset::@2 + [75] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [76] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [81] return + [77] return to:@return memset::@2: scope:[memset] from memset::@1 - [82] *memset::dst#2 = memset::c#0 - [83] memset::dst#1 = ++ memset::dst#2 + [78] *memset::dst#2 = memset::c#0 + [79] memset::dst#1 = ++ memset::dst#2 to:memset::@1 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index d6af544ca..87601b5ac 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -210,14 +210,14 @@ main::@2: scope:[main] from main::@1 print_char_cursor#71 = phi( main::@1/print_char_cursor#72 ) main::dw#3 = phi( main::@1/main::dw#2 ) main::dw2#0 = main::dw#3 - main::$3 = > main::dw#3 + main::$3 = _word1_ main::dw#3 main::$4 = main::$3 + $1111 - main::$32 = main::$4 - main::dw2#1 = main::dw2#0 hi= main::$32 - main::$6 = < main::dw#3 + main::$28 = main::$4 + main::dw2#1 = main::dw2#0 word1= main::$28 + main::$6 = _word0_ main::dw#3 main::$7 = main::$6 + $1111 - main::$33 = main::$7 - main::dw2#2 = main::dw2#1 lo= main::$33 + main::$29 = main::$7 + main::dw2#2 = main::dw2#1 word0= main::$29 print_ulong::dw#0 = main::dw2#2 call print_ulong to:main::@4 @@ -236,7 +236,7 @@ main::@5: scope:[main] from main::@4 main::dw2#3 = phi( main::@4/main::dw2#9 ) print_char_cursor#50 = phi( main::@4/print_char_cursor#12 ) print_char_cursor#17 = print_char_cursor#50 - main::$10 = > main::dw2#3 + main::$10 = _word1_ main::dw2#3 print_uint::w#2 = main::$10 call print_uint to:main::@6 @@ -255,7 +255,7 @@ main::@7: scope:[main] from main::@6 main::dw2#4 = phi( main::@6/main::dw2#10 ) print_char_cursor#52 = phi( main::@6/print_char_cursor#12 ) print_char_cursor#19 = print_char_cursor#52 - main::$13 = < main::dw2#4 + main::$13 = _word0_ main::dw2#4 print_uint::w#3 = main::$13 call print_uint to:main::@8 @@ -274,9 +274,8 @@ main::@9: scope:[main] from main::@8 main::dw2#5 = phi( main::@8/main::dw2#11 ) print_char_cursor#54 = phi( main::@8/print_char_cursor#12 ) print_char_cursor#21 = print_char_cursor#54 - main::$16 = > main::dw2#5 - main::$17 = > main::$16 - print_uchar::b#2 = main::$17 + main::$16 = _byte3_ main::dw2#5 + print_uchar::b#2 = main::$16 call print_uchar to:main::@10 main::@10: scope:[main] from main::@9 @@ -294,9 +293,8 @@ main::@11: scope:[main] from main::@10 main::dw2#6 = phi( main::@10/main::dw2#12 ) print_char_cursor#56 = phi( main::@10/print_char_cursor#12 ) print_char_cursor#23 = print_char_cursor#56 - main::$20 = > main::dw2#6 - main::$21 = < main::$20 - print_uchar::b#3 = main::$21 + main::$19 = _byte2_ main::dw2#6 + print_uchar::b#3 = main::$19 call print_uchar to:main::@12 main::@12: scope:[main] from main::@11 @@ -314,9 +312,8 @@ main::@13: scope:[main] from main::@12 main::dw2#7 = phi( main::@12/main::dw2#13 ) print_char_cursor#58 = phi( main::@12/print_char_cursor#12 ) print_char_cursor#25 = print_char_cursor#58 - main::$24 = < main::dw2#7 - main::$25 = > main::$24 - print_uchar::b#4 = main::$25 + main::$22 = > main::dw2#7 + print_uchar::b#4 = main::$22 call print_uchar to:main::@14 main::@14: scope:[main] from main::@13 @@ -334,9 +331,8 @@ main::@15: scope:[main] from main::@14 main::dw2#8 = phi( main::@14/main::dw2#14 ) print_char_cursor#60 = phi( main::@14/print_char_cursor#12 ) print_char_cursor#27 = print_char_cursor#60 - main::$28 = < main::dw2#8 - main::$29 = < main::$28 - print_uchar::b#5 = main::$29 + main::$25 = < main::dw2#8 + print_uchar::b#5 = main::$25 call print_uchar to:main::@16 main::@16: scope:[main] from main::@15 @@ -403,17 +399,13 @@ void main() bool~ main::$1 word~ main::$10 word~ main::$13 -word~ main::$16 -byte~ main::$17 -word~ main::$20 -byte~ main::$21 -word~ main::$24 +byte~ main::$16 +byte~ main::$19 +byte~ main::$22 byte~ main::$25 word~ main::$28 -byte~ main::$29 +word~ main::$29 word~ main::$3 -word~ main::$32 -word~ main::$33 number~ main::$4 word~ main::$6 number~ main::$7 @@ -726,8 +718,8 @@ Alias print_char_cursor#15 = print_char_cursor#48 Alias main::dw#10 = main::dw#3 main::dw#2 main::dw2#0 main::dw#17 main::dw#16 main::dw#15 main::dw#14 main::dw#13 main::dw#12 main::dw#11 main::dw#9 main::dw#8 main::dw#7 main::dw#6 main::dw#5 main::dw#4 Alias print_char_cursor#30 = print_char_cursor#71 print_char_cursor#72 print_char_cursor#63 Alias print_line_cursor#16 = print_line_cursor#36 print_line_cursor#22 print_line_cursor#35 print_line_cursor#34 print_line_cursor#33 print_line_cursor#32 print_line_cursor#31 print_line_cursor#30 print_line_cursor#29 print_line_cursor#28 print_line_cursor#27 print_line_cursor#26 print_line_cursor#25 print_line_cursor#24 print_line_cursor#21 print_line_cursor#6 -Alias main::$32 = main::$4 -Alias main::$33 = main::$7 +Alias main::$28 = main::$4 +Alias main::$29 = main::$7 Alias main::dw2#10 = main::dw2#9 main::dw2#2 main::dw2#3 main::dw2#4 main::dw2#11 main::dw2#5 main::dw2#12 main::dw2#6 main::dw2#13 main::dw2#7 main::dw2#14 main::dw2#8 Alias print_char_cursor#16 = print_char_cursor#49 Alias print_char_cursor#17 = print_char_cursor#50 @@ -737,16 +729,16 @@ Alias print_char_cursor#19 = print_char_cursor#52 Alias print_uint::w#3 = main::$13 Alias print_char_cursor#20 = print_char_cursor#53 Alias print_char_cursor#21 = print_char_cursor#54 -Alias print_uchar::b#2 = main::$17 +Alias print_uchar::b#2 = main::$16 Alias print_char_cursor#22 = print_char_cursor#55 Alias print_char_cursor#23 = print_char_cursor#56 -Alias print_uchar::b#3 = main::$21 +Alias print_uchar::b#3 = main::$19 Alias print_char_cursor#24 = print_char_cursor#57 Alias print_char_cursor#25 = print_char_cursor#58 -Alias print_uchar::b#4 = main::$25 +Alias print_uchar::b#4 = main::$22 Alias print_char_cursor#26 = print_char_cursor#59 Alias print_char_cursor#27 = print_char_cursor#60 -Alias print_uchar::b#5 = main::$29 +Alias print_uchar::b#5 = main::$25 Alias print_char_cursor#28 = print_char_cursor#61 Alias print_line_cursor#15 = print_line_cursor#5 Alias print_char_cursor#29 = print_char_cursor#62 @@ -871,11 +863,11 @@ Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 Adding NOP phi() at start of memset::@1 CALL GRAPH -Calls in [main] to print_cls:1 print_ulong:13 print_char:15 print_uint:19 print_char:21 print_uint:25 print_char:27 print_uchar:32 print_char:34 print_uchar:39 print_char:41 print_uchar:46 print_char:48 print_uchar:53 print_ln:55 -Calls in [print_cls] to memset:61 -Calls in [print_ulong] to print_uint:67 print_uint:71 -Calls in [print_uint] to print_uchar:82 print_uchar:86 -Calls in [print_uchar] to print_char:94 print_char:99 +Calls in [main] to print_cls:1 print_ulong:13 print_char:15 print_uint:19 print_char:21 print_uint:25 print_char:27 print_uchar:31 print_char:33 print_uchar:37 print_char:39 print_uchar:43 print_char:45 print_uchar:49 print_ln:51 +Calls in [print_cls] to memset:57 +Calls in [print_ulong] to print_uint:63 print_uint:67 +Calls in [print_uint] to print_uchar:78 print_uchar:82 +Calls in [print_uchar] to print_char:90 print_char:95 Created 11 initial phi equivalence classes Coalesced [14] print_char_cursor#87 = print_char_cursor#11 @@ -885,35 +877,35 @@ Coalesced (already) [20] print_char_cursor#88 = print_char_cursor#11 Coalesced [23] print_uint::w#7 = print_uint::w#3 Coalesced (already) [24] print_char_cursor#75 = print_char_cursor#11 Coalesced (already) [26] print_char_cursor#89 = print_char_cursor#11 -Coalesced [30] print_uchar::b#11 = print_uchar::b#2 -Coalesced [31] print_char_cursor#81 = print_char_cursor#11 -Coalesced (already) [33] print_char_cursor#84 = print_char_cursor#11 -Coalesced [37] print_uchar::b#8 = print_uchar::b#3 -Coalesced (already) [38] print_char_cursor#78 = print_char_cursor#11 -Coalesced (already) [40] print_char_cursor#85 = print_char_cursor#11 -Coalesced [44] print_uchar::b#9 = print_uchar::b#4 -Coalesced (already) [45] print_char_cursor#79 = print_char_cursor#11 -Coalesced (already) [47] print_char_cursor#86 = print_char_cursor#11 -Coalesced [51] print_uchar::b#10 = print_uchar::b#5 -Coalesced (already) [52] print_char_cursor#80 = print_char_cursor#11 -Coalesced [57] main::dw#18 = main::dw#1 -Not coalescing [58] print_line_cursor#39 = print_line_cursor#0 -Coalesced [59] print_char_cursor#92 = print_line_cursor#0 -Coalesced [65] print_uint::w#8 = print_uint::w#0 -Not coalescing [66] print_char_cursor#76 = print_char_cursor#30 -Coalesced [69] print_uint::w#9 = print_uint::w#1 -Coalesced (already) [70] print_char_cursor#77 = print_char_cursor#11 -Coalesced [80] print_uchar::b#12 = print_uchar::b#0 -Coalesced (already) [81] print_char_cursor#82 = print_char_cursor#67 -Coalesced [84] print_uchar::b#13 = print_uchar::b#1 -Coalesced (already) [85] print_char_cursor#83 = print_char_cursor#11 -Coalesced [92] print_char::ch#9 = print_char::ch#0 -Coalesced (already) [93] print_char_cursor#90 = print_char_cursor#69 -Coalesced [97] print_char::ch#10 = print_char::ch#1 -Coalesced (already) [98] print_char_cursor#91 = print_char_cursor#11 -Coalesced [102] print_line_cursor#37 = print_line_cursor#16 -Not coalescing [108] print_line_cursor#38 = print_line_cursor#0 -Coalesced [117] memset::dst#4 = memset::dst#1 +Coalesced [29] print_uchar::b#11 = print_uchar::b#2 +Coalesced [30] print_char_cursor#81 = print_char_cursor#11 +Coalesced (already) [32] print_char_cursor#84 = print_char_cursor#11 +Coalesced [35] print_uchar::b#8 = print_uchar::b#3 +Coalesced (already) [36] print_char_cursor#78 = print_char_cursor#11 +Coalesced (already) [38] print_char_cursor#85 = print_char_cursor#11 +Coalesced [41] print_uchar::b#9 = print_uchar::b#4 +Coalesced (already) [42] print_char_cursor#79 = print_char_cursor#11 +Coalesced (already) [44] print_char_cursor#86 = print_char_cursor#11 +Coalesced [47] print_uchar::b#10 = print_uchar::b#5 +Coalesced (already) [48] print_char_cursor#80 = print_char_cursor#11 +Coalesced [53] main::dw#18 = main::dw#1 +Not coalescing [54] print_line_cursor#39 = print_line_cursor#0 +Coalesced [55] print_char_cursor#92 = print_line_cursor#0 +Coalesced [61] print_uint::w#8 = print_uint::w#0 +Not coalescing [62] print_char_cursor#76 = print_char_cursor#30 +Coalesced [65] print_uint::w#9 = print_uint::w#1 +Coalesced (already) [66] print_char_cursor#77 = print_char_cursor#11 +Coalesced [76] print_uchar::b#12 = print_uchar::b#0 +Coalesced (already) [77] print_char_cursor#82 = print_char_cursor#67 +Coalesced [80] print_uchar::b#13 = print_uchar::b#1 +Coalesced (already) [81] print_char_cursor#83 = print_char_cursor#11 +Coalesced [88] print_char::ch#9 = print_char::ch#0 +Coalesced (already) [89] print_char_cursor#90 = print_char_cursor#69 +Coalesced [93] print_char::ch#10 = print_char::ch#1 +Coalesced (already) [94] print_char_cursor#91 = print_char_cursor#11 +Coalesced [98] print_line_cursor#37 = print_line_cursor#16 +Not coalescing [104] print_line_cursor#38 = print_line_cursor#0 +Coalesced [113] memset::dst#4 = memset::dst#1 Coalesced down to 8 phi equivalence classes Culled Empty Block label main::@3 Culled Empty Block label print_cls::@1 @@ -969,12 +961,12 @@ main::@return: scope:[main] from main::@1 [4] return to:@return main::@2: scope:[main] from main::@1 - [5] main::$3 = > main::dw#10 - [6] main::$32 = main::$3 + $1111 - [7] main::dw2#1 = main::dw#10 hi= main::$32 - [8] main::$6 = < main::dw#10 - [9] main::$33 = main::$6 + $1111 - [10] main::dw2#10 = main::dw2#1 lo= main::$33 + [5] main::$3 = _word1_ main::dw#10 + [6] main::$28 = main::$3 + $1111 + [7] main::dw2#1 = main::dw#10 word1= main::$28 + [8] main::$6 = _word0_ main::dw#10 + [9] main::$29 = main::$6 + $1111 + [10] main::dw2#10 = main::dw2#1 word0= main::$29 [11] print_ulong::dw#0 = main::dw2#10 [12] call print_ulong to:main::@3 @@ -983,7 +975,7 @@ main::@3: scope:[main] from main::@2 [14] call print_char to:main::@4 main::@4: scope:[main] from main::@3 - [15] print_uint::w#2 = > main::dw2#10 + [15] print_uint::w#2 = _word1_ main::dw2#10 [16] call print_uint to:main::@5 main::@5: scope:[main] from main::@4 @@ -991,7 +983,7 @@ main::@5: scope:[main] from main::@4 [18] call print_char to:main::@6 main::@6: scope:[main] from main::@5 - [19] print_uint::w#3 = < main::dw2#10 + [19] print_uint::w#3 = _word0_ main::dw2#10 [20] call print_uint to:main::@7 main::@7: scope:[main] from main::@6 @@ -999,161 +991,153 @@ main::@7: scope:[main] from main::@6 [22] call print_char to:main::@8 main::@8: scope:[main] from main::@7 - [23] main::$16 = > main::dw2#10 - [24] print_uchar::b#2 = > main::$16 - [25] call print_uchar + [23] print_uchar::b#2 = _byte3_ main::dw2#10 + [24] call print_uchar to:main::@9 main::@9: scope:[main] from main::@8 - [26] phi() - [27] call print_char + [25] phi() + [26] call print_char to:main::@10 main::@10: scope:[main] from main::@9 - [28] main::$20 = > main::dw2#10 - [29] print_uchar::b#3 = < main::$20 - [30] call print_uchar + [27] print_uchar::b#3 = _byte2_ main::dw2#10 + [28] call print_uchar to:main::@11 main::@11: scope:[main] from main::@10 - [31] phi() - [32] call print_char + [29] phi() + [30] call print_char to:main::@12 main::@12: scope:[main] from main::@11 - [33] main::$24 = < main::dw2#10 - [34] print_uchar::b#4 = > main::$24 - [35] call print_uchar + [31] print_uchar::b#4 = > main::dw2#10 + [32] call print_uchar to:main::@13 main::@13: scope:[main] from main::@12 - [36] phi() - [37] call print_char + [33] phi() + [34] call print_char to:main::@14 main::@14: scope:[main] from main::@13 - [38] main::$28 = < main::dw2#10 - [39] print_uchar::b#5 = < main::$28 - [40] call print_uchar + [35] print_uchar::b#5 = < main::dw2#10 + [36] call print_uchar to:main::@15 main::@15: scope:[main] from main::@14 - [41] phi() - [42] call print_ln + [37] phi() + [38] call print_ln to:main::@16 main::@16: scope:[main] from main::@15 - [43] main::dw#1 = ++ main::dw#10 - [44] print_line_cursor#39 = print_line_cursor#0 + [39] main::dw#1 = ++ main::dw#10 + [40] print_line_cursor#39 = print_line_cursor#0 to:main::@1 void print_cls() print_cls: scope:[print_cls] from main - [45] phi() - [46] call memset + [41] phi() + [42] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [47] return + [43] return to:@return void print_ulong(dword print_ulong::dw) print_ulong: scope:[print_ulong] from main::@2 - [48] print_uint::w#0 = > print_ulong::dw#0 - [49] print_char_cursor#76 = print_char_cursor#30 - [50] call print_uint + [44] print_uint::w#0 = > print_ulong::dw#0 + [45] print_char_cursor#76 = print_char_cursor#30 + [46] call print_uint to:print_ulong::@1 print_ulong::@1: scope:[print_ulong] from print_ulong - [51] print_uint::w#1 = < print_ulong::dw#0 - [52] call print_uint + [47] print_uint::w#1 = < print_ulong::dw#0 + [48] call print_uint to:print_ulong::@return print_ulong::@return: scope:[print_ulong] from print_ulong::@1 - [53] return + [49] return to:@return void print_char(byte print_char::ch) print_char: scope:[print_char] from main::@11 main::@13 main::@3 main::@5 main::@7 main::@9 print_uchar print_uchar::@1 - [54] print_char_cursor#45 = phi( main::@9/print_char_cursor#11, main::@11/print_char_cursor#11, main::@13/print_char_cursor#11, main::@3/print_char_cursor#11, main::@5/print_char_cursor#11, main::@7/print_char_cursor#11, print_uchar/print_char_cursor#69, print_uchar::@1/print_char_cursor#11 ) - [54] print_char::ch#8 = phi( main::@9/' ', main::@11/' ', main::@13/' ', main::@3/' ', main::@5/' ', main::@7/' ', print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) - [55] *print_char_cursor#45 = print_char::ch#8 - [56] print_char_cursor#11 = ++ print_char_cursor#45 + [50] print_char_cursor#45 = phi( main::@9/print_char_cursor#11, main::@11/print_char_cursor#11, main::@13/print_char_cursor#11, main::@3/print_char_cursor#11, main::@5/print_char_cursor#11, main::@7/print_char_cursor#11, print_uchar/print_char_cursor#69, print_uchar::@1/print_char_cursor#11 ) + [50] print_char::ch#8 = phi( main::@9/' ', main::@11/' ', main::@13/' ', main::@3/' ', main::@5/' ', main::@7/' ', print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) + [51] *print_char_cursor#45 = print_char::ch#8 + [52] print_char_cursor#11 = ++ print_char_cursor#45 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [57] return + [53] return to:@return void print_uint(word print_uint::w) print_uint: scope:[print_uint] from main::@4 main::@6 print_ulong print_ulong::@1 - [58] print_char_cursor#67 = phi( main::@4/print_char_cursor#11, main::@6/print_char_cursor#11, print_ulong/print_char_cursor#76, print_ulong::@1/print_char_cursor#11 ) - [58] print_uint::w#4 = phi( main::@4/print_uint::w#2, main::@6/print_uint::w#3, print_ulong/print_uint::w#0, print_ulong::@1/print_uint::w#1 ) - [59] print_uchar::b#0 = > print_uint::w#4 - [60] call print_uchar + [54] print_char_cursor#67 = phi( main::@4/print_char_cursor#11, main::@6/print_char_cursor#11, print_ulong/print_char_cursor#76, print_ulong::@1/print_char_cursor#11 ) + [54] print_uint::w#4 = phi( main::@4/print_uint::w#2, main::@6/print_uint::w#3, print_ulong/print_uint::w#0, print_ulong::@1/print_uint::w#1 ) + [55] print_uchar::b#0 = > print_uint::w#4 + [56] call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint - [61] print_uchar::b#1 = < print_uint::w#4 - [62] call print_uchar + [57] print_uchar::b#1 = < print_uint::w#4 + [58] call print_uchar to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@1 - [63] return + [59] return to:@return void print_uchar(byte print_uchar::b) print_uchar: scope:[print_uchar] from main::@10 main::@12 main::@14 main::@8 print_uint print_uint::@1 - [64] print_char_cursor#69 = phi( main::@10/print_char_cursor#11, main::@12/print_char_cursor#11, main::@14/print_char_cursor#11, main::@8/print_char_cursor#11, print_uint/print_char_cursor#67, print_uint::@1/print_char_cursor#11 ) - [64] print_uchar::b#6 = phi( main::@10/print_uchar::b#3, main::@12/print_uchar::b#4, main::@14/print_uchar::b#5, main::@8/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) - [65] print_uchar::$0 = print_uchar::b#6 >> 4 - [66] print_char::ch#0 = print_hextab[print_uchar::$0] - [67] call print_char + [60] print_char_cursor#69 = phi( main::@10/print_char_cursor#11, main::@12/print_char_cursor#11, main::@14/print_char_cursor#11, main::@8/print_char_cursor#11, print_uint/print_char_cursor#67, print_uint::@1/print_char_cursor#11 ) + [60] print_uchar::b#6 = phi( main::@10/print_uchar::b#3, main::@12/print_uchar::b#4, main::@14/print_uchar::b#5, main::@8/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) + [61] print_uchar::$0 = print_uchar::b#6 >> 4 + [62] print_char::ch#0 = print_hextab[print_uchar::$0] + [63] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar - [68] print_uchar::$2 = print_uchar::b#6 & $f - [69] print_char::ch#1 = print_hextab[print_uchar::$2] - [70] call print_char + [64] print_uchar::$2 = print_uchar::b#6 & $f + [65] print_char::ch#1 = print_hextab[print_uchar::$2] + [66] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 - [71] return + [67] return to:@return void print_ln() print_ln: scope:[print_ln] from main::@15 - [72] phi() + [68] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@2 - [73] print_line_cursor#10 = phi( print_ln/print_line_cursor#16, print_ln::@2/print_line_cursor#38 ) - [74] print_line_cursor#0 = print_line_cursor#10 + $28 - [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 + [69] print_line_cursor#10 = phi( print_ln/print_line_cursor#16, print_ln::@2/print_line_cursor#38 ) + [70] print_line_cursor#0 = print_line_cursor#10 + $28 + [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@1 - [76] return + [72] return to:@return print_ln::@2: scope:[print_ln] from print_ln::@1 - [77] print_line_cursor#38 = print_line_cursor#0 + [73] print_line_cursor#38 = print_line_cursor#0 to:print_ln::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from print_cls - [78] phi() + [74] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [79] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [80] if(memset::dst#2!=memset::end#0) goto memset::@2 + [75] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [76] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [81] return + [77] return to:@return memset::@2: scope:[memset] from memset::@1 - [82] *memset::dst#2 = memset::c#0 - [83] memset::dst#1 = ++ memset::dst#2 + [78] *memset::dst#2 = memset::c#0 + [79] memset::dst#1 = ++ memset::dst#2 to:memset::@1 VARIABLE REGISTER WEIGHTS void main() -word~ main::$16 22.0 -word~ main::$20 22.0 -word~ main::$24 22.0 word~ main::$28 22.0 +word~ main::$29 22.0 word~ main::$3 22.0 -word~ main::$32 22.0 -word~ main::$33 22.0 word~ main::$6 22.0 dword main::dw dword main::dw#1 11.0 -dword main::dw#10 1.65 +dword main::dw#10 1.8333333333333335 dword main::dw2 dword main::dw2#1 7.333333333333333 -dword main::dw2#10 3.142857142857143 +dword main::dw2#10 3.52 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c byte* memset::dst @@ -1169,7 +1153,7 @@ byte print_char::ch#0 20002.0 byte print_char::ch#1 20002.0 byte print_char::ch#8 120003.0 byte* print_char_cursor -byte* print_char_cursor#11 2424.739999999999 +byte* print_char_cursor#11 2635.5869565217386 byte* print_char_cursor#30 11.2 byte* print_char_cursor#45 110035.0 byte* print_char_cursor#67 612.5 @@ -1179,7 +1163,7 @@ void print_cls() byte* print_line_cursor byte* print_line_cursor#0 5004.166666666666 byte* print_line_cursor#10 20103.0 -byte* print_line_cursor#16 2.8 +byte* print_line_cursor#16 3.1111111111111107 byte* print_line_cursor#38 20002.0 byte* print_line_cursor#39 22.0 void print_ln() @@ -1216,16 +1200,12 @@ Initial phi equivalence classes [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] [ memset::dst#2 memset::dst#1 ] Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable main::$32 to live range equivalence class [ main::$32 ] +Added variable main::$28 to live range equivalence class [ main::$28 ] Added variable main::dw2#1 to live range equivalence class [ main::dw2#1 ] Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable main::$33 to live range equivalence class [ main::$33 ] +Added variable main::$29 to live range equivalence class [ main::$29 ] Added variable main::dw2#10 to live range equivalence class [ main::dw2#10 ] Added variable print_ulong::dw#0 to live range equivalence class [ print_ulong::dw#0 ] -Added variable main::$16 to live range equivalence class [ main::$16 ] -Added variable main::$20 to live range equivalence class [ main::$20 ] -Added variable main::$24 to live range equivalence class [ main::$24 ] -Added variable main::$28 to live range equivalence class [ main::$28 ] Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ] Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$2 ] Complete equivalence classes @@ -1238,16 +1218,12 @@ Complete equivalence classes [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] [ memset::dst#2 memset::dst#1 ] [ main::$3 ] -[ main::$32 ] +[ main::$28 ] [ main::dw2#1 ] [ main::$6 ] -[ main::$33 ] +[ main::$29 ] [ main::dw2#10 ] [ print_ulong::dw#0 ] -[ main::$16 ] -[ main::$20 ] -[ main::$24 ] -[ main::$28 ] [ print_uchar::$0 ] [ print_uchar::$2 ] Allocated zp[4]:2 [ main::dw#10 main::dw#1 ] @@ -1259,71 +1235,61 @@ Allocated zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uc Allocated zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] Allocated zp[2]:16 [ memset::dst#2 memset::dst#1 ] Allocated zp[2]:18 [ main::$3 ] -Allocated zp[2]:20 [ main::$32 ] +Allocated zp[2]:20 [ main::$28 ] Allocated zp[4]:22 [ main::dw2#1 ] Allocated zp[2]:26 [ main::$6 ] -Allocated zp[2]:28 [ main::$33 ] +Allocated zp[2]:28 [ main::$29 ] Allocated zp[4]:30 [ main::dw2#10 ] Allocated zp[4]:34 [ print_ulong::dw#0 ] -Allocated zp[2]:38 [ main::$16 ] -Allocated zp[2]:40 [ main::$20 ] -Allocated zp[2]:42 [ main::$24 ] -Allocated zp[2]:44 [ main::$28 ] -Allocated zp[1]:46 [ print_uchar::$0 ] -Allocated zp[1]:47 [ print_uchar::$2 ] +Allocated zp[1]:38 [ print_uchar::$0 ] +Allocated zp[1]:39 [ print_uchar::$2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp[2]:18 [ main::$3 ] has ALU potential. -Equivalence Class zp[2]:26 [ main::$6 ] has ALU potential. Statement [3] if(main::dw#10!=$12345690) goto main::@2 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 ] { } ) always clobbers reg byte a -Statement [6] main::$32 = main::$3 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$32 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$32 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [7] main::dw2#1 = main::dw#10 hi= main::$32 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [9] main::$33 = main::$6 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$33 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$33 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [10] main::dw2#10 = main::dw2#1 lo= main::$33 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [5] main::$3 = _word1_ main::dw#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$3 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$3 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [6] main::$28 = main::$3 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$28 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$28 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [7] main::dw2#1 = main::dw#10 word1= main::$28 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [8] main::$6 = _word0_ main::dw#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$6 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$6 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [9] main::$29 = main::$6 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$29 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$29 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [10] main::dw2#10 = main::dw2#1 word0= main::$29 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a Statement [11] print_ulong::dw#0 = main::dw2#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 print_ulong::dw#0 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 print_ulong::dw#0 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [15] print_uint::w#2 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [19] print_uint::w#3 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [23] main::$16 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$16 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$16 print_char_cursor#11 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [28] main::$20 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$20 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$20 print_char_cursor#11 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [33] main::$24 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$24 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$24 print_char_cursor#11 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [38] main::$28 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::$28 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::$28 print_char_cursor#11 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [44] print_line_cursor#39 = print_line_cursor#0 [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] ( [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] { } ) always clobbers reg byte a -Statement [48] print_uint::w#0 = > print_ulong::dw#0 [ print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a -Statement [49] print_char_cursor#76 = print_char_cursor#30 [ print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a -Statement [51] print_uint::w#1 = < print_ulong::dw#0 [ print_uint::w#1 print_char_cursor#11 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#1 print_char_cursor#11 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [55] *print_char_cursor#45 = print_char::ch#8 [ print_char_cursor#45 ] ( print_char:14 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:18 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:22 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:27 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:37 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_uchar:25::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:30::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:35::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:40::print_char:67 [ main::dw#10 print_line_cursor#16 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:25::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:30::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:35::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:40::print_char:70 [ main::dw#10 print_line_cursor#16 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:52::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte y +Statement [15] print_uint::w#2 = _word1_ main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [19] print_uint::w#3 = _word0_ main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [40] print_line_cursor#39 = print_line_cursor#0 [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] ( [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] { } ) always clobbers reg byte a +Statement [44] print_uint::w#0 = > print_ulong::dw#0 [ print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a +Statement [45] print_char_cursor#76 = print_char_cursor#30 [ print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a +Statement [47] print_uint::w#1 = < print_ulong::dw#0 [ print_uint::w#1 print_char_cursor#11 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#1 print_char_cursor#11 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [51] *print_char_cursor#45 = print_char::ch#8 [ print_char_cursor#45 ] ( print_char:14 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:18 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:22 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:26 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:34 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_uchar:24::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36::print_char:63 [ main::dw#10 print_line_cursor#16 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:24::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36::print_char:66 [ main::dw#10 print_line_cursor#16 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Statement [65] print_uchar::$0 = print_uchar::b#6 >> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:25 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:35 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:40 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a +Statement [61] print_uchar::$0 = print_uchar::b#6 >> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Statement [68] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:25 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:35 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:40 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:52::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a -Statement [74] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:42 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a -Statement [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:42 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a -Statement [77] print_line_cursor#38 = print_line_cursor#0 [ print_char_cursor#11 print_line_cursor#38 ] ( print_ln:42 [ main::dw#10 print_char_cursor#11 print_line_cursor#38 ] { } ) always clobbers reg byte a -Statement [80] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:1::memset:46 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [82] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:1::memset:46 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [64] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a +Statement [70] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a +Statement [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a +Statement [73] print_line_cursor#38 = print_line_cursor#0 [ print_char_cursor#11 print_line_cursor#38 ] ( print_ln:38 [ main::dw#10 print_char_cursor#11 print_line_cursor#38 ] { } ) always clobbers reg byte a +Statement [76] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:1::memset:42 [ memset::dst#2 ] { } ) always clobbers reg byte a +Statement [78] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:1::memset:42 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Statement [3] if(main::dw#10!=$12345690) goto main::@2 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 ] { } ) always clobbers reg byte a -Statement [6] main::$32 = main::$3 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$32 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$32 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [7] main::dw2#1 = main::dw#10 hi= main::$32 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [9] main::$33 = main::$6 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$33 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$33 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [10] main::dw2#10 = main::dw2#1 lo= main::$33 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [5] main::$3 = _word1_ main::dw#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$3 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$3 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [6] main::$28 = main::$3 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$28 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::$28 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [7] main::dw2#1 = main::dw#10 word1= main::$28 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [8] main::$6 = _word0_ main::dw#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$6 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$6 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [9] main::$29 = main::$6 + $1111 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$29 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#1 main::$29 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a +Statement [10] main::dw2#10 = main::dw2#1 word0= main::$29 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a Statement [11] print_ulong::dw#0 = main::dw2#10 [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 print_ulong::dw#0 ] ( [ main::dw#10 print_line_cursor#16 print_char_cursor#30 main::dw2#10 print_ulong::dw#0 ] { { print_ulong::dw#0 = main::dw2#10 } } ) always clobbers reg byte a -Statement [15] print_uint::w#2 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [19] print_uint::w#3 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [23] main::$16 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$16 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$16 print_char_cursor#11 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [28] main::$20 = > main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$20 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$20 print_char_cursor#11 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [33] main::$24 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$24 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 main::$24 print_char_cursor#11 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [38] main::$28 = < main::dw2#10 [ main::dw#10 print_line_cursor#16 main::$28 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::$28 print_char_cursor#11 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 } } ) always clobbers reg byte a -Statement [44] print_line_cursor#39 = print_line_cursor#0 [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] ( [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] { } ) always clobbers reg byte a -Statement [48] print_uint::w#0 = > print_ulong::dw#0 [ print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a -Statement [49] print_char_cursor#76 = print_char_cursor#30 [ print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a -Statement [51] print_uint::w#1 = < print_ulong::dw#0 [ print_uint::w#1 print_char_cursor#11 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#1 print_char_cursor#11 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a -Statement [55] *print_char_cursor#45 = print_char::ch#8 [ print_char_cursor#45 ] ( print_char:14 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:18 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:22 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:27 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:37 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_uchar:25::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:30::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:35::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:40::print_char:67 [ main::dw#10 print_line_cursor#16 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:60::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62::print_char:67 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:25::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:30::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:35::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:40::print_char:70 [ main::dw#10 print_line_cursor#16 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:52::print_uchar:60::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62::print_char:70 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte y -Statement [65] print_uchar::$0 = print_uchar::b#6 >> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:25 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:35 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:40 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a -Statement [68] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:25 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:35 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:40 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:52::print_uchar:60 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:50::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:52::print_uchar:62 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a -Statement [74] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:42 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a -Statement [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:42 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a -Statement [77] print_line_cursor#38 = print_line_cursor#0 [ print_char_cursor#11 print_line_cursor#38 ] ( print_ln:42 [ main::dw#10 print_char_cursor#11 print_line_cursor#38 ] { } ) always clobbers reg byte a -Statement [80] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:1::memset:46 [ memset::dst#2 ] { } ) always clobbers reg byte a -Statement [82] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:1::memset:46 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [15] print_uint::w#2 = _word1_ main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#2 print_char_cursor#11 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [19] print_uint::w#3 = _word0_ main::dw2#10 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] ( [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#3 print_char_cursor#11 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [40] print_line_cursor#39 = print_line_cursor#0 [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] ( [ main::dw#1 print_line_cursor#39 print_line_cursor#0 ] { } ) always clobbers reg byte a +Statement [44] print_uint::w#0 = > print_ulong::dw#0 [ print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#30 print_ulong::dw#0 print_uint::w#0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a +Statement [45] print_char_cursor#76 = print_char_cursor#30 [ print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#0 print_char_cursor#76 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } } ) always clobbers reg byte a +Statement [47] print_uint::w#1 = < print_ulong::dw#0 [ print_uint::w#1 print_char_cursor#11 ] ( print_ulong:12 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#1 print_char_cursor#11 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 } } ) always clobbers reg byte a +Statement [51] *print_char_cursor#45 = print_char::ch#8 [ print_char_cursor#45 ] ( print_char:14 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:18 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:22 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:26 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:30 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_char:34 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_char_cursor#11 = print_char_cursor#45 } } print_uchar:24::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36::print_char:63 [ main::dw#10 print_line_cursor#16 print_uchar::b#6 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58::print_char:63 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uchar::b#6 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:24::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36::print_char:66 [ main::dw#10 print_line_cursor#16 print_char_cursor#45 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58::print_char:66 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#45 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte y +Statement [61] print_uchar::$0 = print_uchar::b#6 >> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a +Statement [64] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a +Statement [70] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a +Statement [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a +Statement [73] print_line_cursor#38 = print_line_cursor#0 [ print_char_cursor#11 print_line_cursor#38 ] ( print_ln:38 [ main::dw#10 print_char_cursor#11 print_line_cursor#38 ] { } ) always clobbers reg byte a +Statement [76] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:1::memset:42 [ memset::dst#2 ] { } ) always clobbers reg byte a +Statement [78] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:1::memset:42 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Potential registers zp[4]:2 [ main::dw#10 main::dw#1 ] : zp[4]:2 , Potential registers zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] : zp[2]:6 , Potential registers zp[1]:8 [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , @@ -1332,58 +1298,50 @@ Potential registers zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_c Potential registers zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:13 , reg byte x , Potential registers zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] : zp[2]:14 , Potential registers zp[2]:16 [ memset::dst#2 memset::dst#1 ] : zp[2]:16 , -Potential registers zp[2]:18 [ main::$3 ] : zp[2]:18 , reg byte alu , -Potential registers zp[2]:20 [ main::$32 ] : zp[2]:20 , +Potential registers zp[2]:18 [ main::$3 ] : zp[2]:18 , +Potential registers zp[2]:20 [ main::$28 ] : zp[2]:20 , Potential registers zp[4]:22 [ main::dw2#1 ] : zp[4]:22 , -Potential registers zp[2]:26 [ main::$6 ] : zp[2]:26 , reg byte alu , -Potential registers zp[2]:28 [ main::$33 ] : zp[2]:28 , +Potential registers zp[2]:26 [ main::$6 ] : zp[2]:26 , +Potential registers zp[2]:28 [ main::$29 ] : zp[2]:28 , Potential registers zp[4]:30 [ main::dw2#10 ] : zp[4]:30 , Potential registers zp[4]:34 [ print_ulong::dw#0 ] : zp[4]:34 , -Potential registers zp[2]:38 [ main::$16 ] : zp[2]:38 , -Potential registers zp[2]:40 [ main::$20 ] : zp[2]:40 , -Potential registers zp[2]:42 [ main::$24 ] : zp[2]:42 , -Potential registers zp[2]:44 [ main::$28 ] : zp[2]:44 , -Potential registers zp[1]:46 [ print_uchar::$0 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ print_uchar::$2 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ print_uchar::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ print_uchar::$2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 117,289.91: zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] 40,129.8: zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] 5,015.37: zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] +Uplift Scope [] 117,500.75: zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] 40,130.11: zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] 5,015.37: zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] Uplift Scope [print_char] 160,007: zp[1]:8 [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -Uplift Scope [print_uchar] 20,002: zp[1]:46 [ print_uchar::$0 ] 20,002: zp[1]:47 [ print_uchar::$2 ] 9,604: zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Uplift Scope [print_uchar] 20,002: zp[1]:38 [ print_uchar::$0 ] 20,002: zp[1]:39 [ print_uchar::$2 ] 9,604: zp[1]:13 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplift Scope [memset] 3,336.67: zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_uint] 1,089: zp[2]:9 [ print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] -Uplift Scope [main] 22: zp[2]:18 [ main::$3 ] 22: zp[2]:20 [ main::$32 ] 22: zp[2]:26 [ main::$6 ] 22: zp[2]:28 [ main::$33 ] 22: zp[2]:38 [ main::$16 ] 22: zp[2]:40 [ main::$20 ] 22: zp[2]:42 [ main::$24 ] 22: zp[2]:44 [ main::$28 ] 12.65: zp[4]:2 [ main::dw#10 main::dw#1 ] 7.33: zp[4]:22 [ main::dw2#1 ] 3.14: zp[4]:30 [ main::dw2#10 ] +Uplift Scope [main] 22: zp[2]:18 [ main::$3 ] 22: zp[2]:20 [ main::$28 ] 22: zp[2]:26 [ main::$6 ] 22: zp[2]:28 [ main::$29 ] 12.83: zp[4]:2 [ main::dw#10 main::dw#1 ] 7.33: zp[4]:22 [ main::dw2#1 ] 3.52: zp[4]:30 [ main::dw2#10 ] Uplift Scope [print_ulong] 53.25: zp[4]:34 [ print_ulong::dw#0 ] Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [RADIX] -Uplifting [] best 10512 combination zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] -Uplifting [print_char] best 10485 combination reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_uchar] best 10347 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Uplifting [memset] best 10347 combination zp[2]:16 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_uint] best 10347 combination zp[2]:9 [ print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] -Uplifting [main] best 10347 combination zp[2]:18 [ main::$3 ] zp[2]:20 [ main::$32 ] zp[2]:26 [ main::$6 ] zp[2]:28 [ main::$33 ] zp[2]:38 [ main::$16 ] zp[2]:40 [ main::$20 ] zp[2]:42 [ main::$24 ] zp[2]:44 [ main::$28 ] zp[4]:2 [ main::dw#10 main::dw#1 ] zp[4]:22 [ main::dw2#1 ] zp[4]:30 [ main::dw2#10 ] -Uplifting [print_ulong] best 10347 combination zp[4]:34 [ print_ulong::dw#0 ] -Uplifting [print_ln] best 10347 combination -Uplifting [print_cls] best 10347 combination -Uplifting [RADIX] best 10347 combination -Coalescing zero page register [ zp[2]:18 [ main::$3 ] ] with [ zp[2]:20 [ main::$32 ] ] - score: 1 +Uplifting [] best 10032 combination zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] zp[2]:14 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] +Uplifting [print_char] best 10005 combination reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_uchar] best 9867 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Uplifting [memset] best 9867 combination zp[2]:16 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_uint] best 9867 combination zp[2]:9 [ print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] +Uplifting [main] best 9867 combination zp[2]:18 [ main::$3 ] zp[2]:20 [ main::$28 ] zp[2]:26 [ main::$6 ] zp[2]:28 [ main::$29 ] zp[4]:2 [ main::dw#10 main::dw#1 ] zp[4]:22 [ main::dw2#1 ] zp[4]:30 [ main::dw2#10 ] +Uplifting [print_ulong] best 9867 combination zp[4]:34 [ print_ulong::dw#0 ] +Uplifting [print_ln] best 9867 combination +Uplifting [print_cls] best 9867 combination +Uplifting [RADIX] best 9867 combination +Coalescing zero page register [ zp[2]:18 [ main::$3 ] ] with [ zp[2]:20 [ main::$28 ] ] - score: 1 Coalescing zero page register [ zp[4]:22 [ main::dw2#1 ] ] with [ zp[4]:30 [ main::dw2#10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ main::$6 ] ] with [ zp[2]:28 [ main::$33 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ main::$6 ] ] with [ zp[2]:28 [ main::$29 ] ] - score: 1 Coalescing zero page register [ zp[4]:22 [ main::dw2#1 main::dw2#10 ] ] with [ zp[4]:34 [ print_ulong::dw#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:16 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:6 [ print_char_cursor#30 print_line_cursor#0 ] ] -Coalescing zero page register [ zp[2]:18 [ main::$3 main::$32 ] ] with [ zp[2]:9 [ print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] ] -Coalescing zero page register [ zp[2]:26 [ main::$6 main::$33 ] ] with [ zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] ] -Coalescing zero page register [ zp[2]:38 [ main::$16 ] ] with [ zp[2]:16 [ memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] ] +Coalescing zero page register [ zp[2]:18 [ main::$3 main::$28 ] ] with [ zp[2]:9 [ print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] ] +Coalescing zero page register [ zp[2]:26 [ main::$6 main::$29 ] ] with [ zp[2]:11 [ print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] ] Allocated (was zp[2]:14) zp[2]:6 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] -Allocated (was zp[2]:18) zp[2]:8 [ main::$3 main::$32 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] -Allocated (was zp[4]:22) zp[4]:10 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] -Allocated (was zp[2]:26) zp[2]:14 [ main::$6 main::$33 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] -Allocated (was zp[2]:38) zp[2]:16 [ main::$16 memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] -Allocated (was zp[2]:40) zp[2]:18 [ main::$20 ] -Allocated (was zp[2]:42) zp[2]:20 [ main::$24 ] -Allocated (was zp[2]:44) zp[2]:22 [ main::$28 ] +Allocated (was zp[2]:16) zp[2]:8 [ memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] +Allocated (was zp[2]:18) zp[2]:10 [ main::$3 main::$28 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] +Allocated (was zp[4]:22) zp[4]:12 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] +Allocated (was zp[2]:26) zp[2]:16 [ main::$6 main::$29 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1400,25 +1358,21 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) // Global Constants & labels .label print_screen = $400 - .label print_line_cursor = $10 - .label print_char_cursor = $e - .label print_char_cursor_1 = $10 + .label print_line_cursor = 8 + .label print_char_cursor = $10 + .label print_char_cursor_1 = 8 .label print_line_cursor_1 = 6 .segment Code // main main: { - .label __3 = 8 - .label __6 = $e - .label __16 = $10 - .label __20 = $12 - .label __24 = $14 - .label __28 = $16 - .label __32 = 8 - .label __33 = $e - .label dw2 = $a + .label __3 = $a + .label __6 = $10 + .label __28 = $a + .label __29 = $10 + .label dw2 = $c .label dw = 2 // [1] call print_cls - // [45] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1465,45 +1419,45 @@ main: { rts // main::@2 __b2: - // [5] main::$3 = > main::dw#10 -- vwuz1=_hi_vduz2 + // [5] main::$3 = _word1_ main::dw#10 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z __3 lda.z dw+3 sta.z __3+1 - // [6] main::$32 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 + // [6] main::$28 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 clc - lda.z __32 + lda.z __28 adc #<$1111 - sta.z __32 - lda.z __32+1 + sta.z __28 + lda.z __28+1 adc #>$1111 - sta.z __32+1 - // [7] main::dw2#1 = main::dw#10 hi= main::$32 -- vduz1=vduz2_sethi_vwuz3 + sta.z __28+1 + // [7] main::dw2#1 = main::dw#10 word1= main::$28 -- vduz1=vduz2_setword1_vwuz3 lda.z dw sta.z dw2 lda.z dw+1 sta.z dw2+1 - lda.z __32 + lda.z __28 sta.z dw2+2 - lda.z __32+1 + lda.z __28+1 sta.z dw2+3 - // [8] main::$6 = < main::dw#10 -- vwuz1=_lo_vduz2 + // [8] main::$6 = _word0_ main::dw#10 -- vwuz1=_word0_vduz2 lda.z dw sta.z __6 lda.z dw+1 sta.z __6+1 - // [9] main::$33 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 + // [9] main::$29 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 clc - lda.z __33 + lda.z __29 adc #<$1111 - sta.z __33 - lda.z __33+1 + sta.z __29 + lda.z __29+1 adc #>$1111 - sta.z __33+1 - // [10] main::dw2#10 = main::dw2#1 lo= main::$33 -- vduz1=vduz1_setlo_vwuz2 - lda.z __33 + sta.z __29+1 + // [10] main::dw2#10 = main::dw2#1 word0= main::$29 -- vduz1=vduz1_setword0_vwuz2 + lda.z __29 sta.z dw2 - lda.z __33+1 + lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 // [12] call print_ulong @@ -1515,25 +1469,25 @@ main: { // main::@3 __b3: // [14] call print_char - // [54] phi from main::@3 to print_char [phi:main::@3->print_char] + // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 // main::@4 __b4: - // [15] print_uint::w#2 = > main::dw2#10 -- vwuz1=_hi_vduz2 + // [15] print_uint::w#2 = _word1_ main::dw2#10 -- vwuz1=_word1_vduz2 lda.z dw2+2 sta.z print_uint.w lda.z dw2+3 sta.z print_uint.w+1 // [16] call print_uint - // [58] phi from main::@4 to print_uint [phi:main::@4->print_uint] + // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -1542,25 +1496,25 @@ main: { __b5: // [18] call print_char // Test get high word of dword - // [54] phi from main::@5 to print_char [phi:main::@5->print_char] + // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b6 // main::@6 __b6: - // [19] print_uint::w#3 = < main::dw2#10 -- vwuz1=_lo_vduz2 + // [19] print_uint::w#3 = _word0_ main::dw2#10 -- vwuz1=_word0_vduz2 lda.z dw2 sta.z print_uint.w lda.z dw2+1 sta.z print_uint.w+1 // [20] call print_uint - // [58] phi from main::@6 to print_uint [phi:main::@6->print_uint] + // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -1569,129 +1523,109 @@ main: { __b7: // [22] call print_char // Test get low word of dword - // [54] phi from main::@7 to print_char [phi:main::@7->print_char] + // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b8 // main::@8 __b8: - // [23] main::$16 = > main::dw2#10 -- vwuz1=_hi_vduz2 - lda.z dw2+2 - sta.z __16 - lda.z dw2+3 - sta.z __16+1 - // [24] print_uchar::b#2 = > main::$16 -- vbuxx=_hi_vwuz1 - ldx.z __16+1 - // [25] call print_uchar - // [64] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] + // [23] print_uchar::b#2 = _byte3_ main::dw2#10 -- vbuxx=_byte3_vduz1 + ldx.z dw2+3 + // [24] call print_uchar + // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar - // [26] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: jmp __b9 // main::@9 __b9: - // [27] call print_char + // [26] call print_char // Test get high high byte of dword - // [54] phi from main::@9 to print_char [phi:main::@9->print_char] + // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b10 // main::@10 __b10: - // [28] main::$20 = > main::dw2#10 -- vwuz1=_hi_vduz2 - lda.z dw2+2 - sta.z __20 - lda.z dw2+3 - sta.z __20+1 - // [29] print_uchar::b#3 = < main::$20 -- vbuxx=_lo_vwuz1 - ldx.z __20 - // [30] call print_uchar - // [64] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] + // [27] print_uchar::b#3 = _byte2_ main::dw2#10 -- vbuxx=_byte2_vduz1 + ldx.z dw2+2 + // [28] call print_uchar + // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar - // [31] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: jmp __b11 // main::@11 __b11: - // [32] call print_char + // [30] call print_char // Test get low high byte of dword - // [54] phi from main::@11 to print_char [phi:main::@11->print_char] + // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b12 // main::@12 __b12: - // [33] main::$24 = < main::dw2#10 -- vwuz1=_lo_vduz2 - lda.z dw2 - sta.z __24 - lda.z dw2+1 - sta.z __24+1 - // [34] print_uchar::b#4 = > main::$24 -- vbuxx=_hi_vwuz1 - ldx.z __24+1 - // [35] call print_uchar - // [64] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] + // [31] print_uchar::b#4 = > main::dw2#10 -- vbuxx=_byte1_vduz1 + ldx.z dw2+1 + // [32] call print_uchar + // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar - // [36] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: jmp __b13 // main::@13 __b13: - // [37] call print_char + // [34] call print_char // Test get high low byte of dword - // [54] phi from main::@13 to print_char [phi:main::@13->print_char] + // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b14 // main::@14 __b14: - // [38] main::$28 = < main::dw2#10 -- vwuz1=_lo_vduz2 - lda.z dw2 - sta.z __28 - lda.z dw2+1 - sta.z __28+1 - // [39] print_uchar::b#5 = < main::$28 -- vbuxx=_lo_vwuz1 - ldx.z __28 - // [40] call print_uchar - // [64] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] + // [35] print_uchar::b#5 = < main::dw2#10 -- vbuxx=_byte0_vduz1 + ldx.z dw2 + // [36] call print_uchar + // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar - // [41] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [42] call print_ln + // [38] call print_ln // Test get low low byte of dword - // [72] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from___b15: jsr print_ln jmp __b16 // main::@16 __b16: - // [43] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 + // [39] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 inc.z dw bne !+ inc.z dw+1 @@ -1700,7 +1634,7 @@ main: { bne !+ inc.z dw+3 !: - // [44] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 + // [40] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 @@ -1715,65 +1649,65 @@ main: { // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [46] call memset - // [78] phi from print_cls to memset [phi:print_cls->memset] + // [42] call memset + // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [47] return + // [43] return rts } // print_ulong // Print a unsigned long as HEX -// print_ulong(dword zp($a) dw) +// print_ulong(dword zp($c) dw) print_ulong: { - .label dw = $a - // [48] print_uint::w#0 = > print_ulong::dw#0 -- vwuz1=_hi_vduz2 + .label dw = $c + // [44] print_uint::w#0 = > print_ulong::dw#0 -- vwuz1=_hi_vduz2 lda.z dw+2 sta.z print_uint.w lda.z dw+3 sta.z print_uint.w+1 - // [49] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 + // [45] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 lda.z print_char_cursor_1 sta.z print_char_cursor lda.z print_char_cursor_1+1 sta.z print_char_cursor+1 - // [50] call print_uint - // [58] phi from print_ulong to print_uint [phi:print_ulong->print_uint] + // [46] call print_uint + // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: - // [58] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 __b1: - // [51] print_uint::w#1 = < print_ulong::dw#0 -- vwuz1=_lo_vduz2 + // [47] print_uint::w#1 = < print_ulong::dw#0 -- vwuz1=_lo_vduz2 lda.z dw sta.z print_uint.w lda.z dw+1 sta.z print_uint.w+1 - // [52] call print_uint - // [58] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] + // [48] call print_uint + // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return __breturn: - // [53] return + // [49] return rts } // print_char // Print a single char // print_char(byte register(A) ch) print_char: { - // [55] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa + // [51] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y - // [56] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 + // [52] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 @@ -1781,90 +1715,90 @@ print_char: { jmp __breturn // print_char::@return __breturn: - // [57] return + // [53] return rts } // print_uint // Print a unsigned int as HEX -// print_uint(word zp(8) w) +// print_uint(word zp($a) w) print_uint: { - .label w = 8 - // [59] print_uchar::b#0 = > print_uint::w#4 -- vbuxx=_hi_vwuz1 + .label w = $a + // [55] print_uchar::b#0 = > print_uint::w#4 -- vbuxx=_hi_vwuz1 ldx.z w+1 - // [60] call print_uchar - // [64] phi from print_uint to print_uchar [phi:print_uint->print_uchar] + // [56] call print_uchar + // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [64] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 __b1: - // [61] print_uchar::b#1 = < print_uint::w#4 -- vbuxx=_lo_vwuz1 + // [57] print_uchar::b#1 = < print_uint::w#4 -- vbuxx=_lo_vwuz1 ldx.z w - // [62] call print_uchar - // [64] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] + // [58] call print_uchar + // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return __breturn: - // [63] return + // [59] return rts } // print_uchar // Print a char as HEX // print_uchar(byte register(X) b) print_uchar: { - // [65] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 + // [61] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr - // [66] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa + // [62] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y - // [67] call print_char + // [63] call print_char // Table of hexadecimal digits - // [54] phi from print_uchar to print_char [phi:print_uchar->print_char] + // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: - // [54] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 __b1: - // [68] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 + // [64] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 - // [69] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx + // [65] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x - // [70] call print_char - // [54] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] + // [66] call print_char + // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return __breturn: - // [71] return + // [67] return rts } // print_ln // Print a newline print_ln: { - // [73] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] + // [69] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] __b1_from_print_ln: __b1_from___b2: - // [73] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy + // [69] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy jmp __b1 // print_ln::@1 __b1: - // [74] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 + // [70] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z print_line_cursor_1 @@ -1872,7 +1806,7 @@ print_ln: { lda #0 adc.z print_line_cursor_1+1 sta.z print_line_cursor+1 - // [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 -- pbuz1_lt_pbuz2_then_la1 + // [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 -- pbuz1_lt_pbuz2_then_la1 lda.z print_line_cursor+1 cmp.z print_char_cursor+1 bcc __b2 @@ -1884,11 +1818,11 @@ print_ln: { jmp __breturn // print_ln::@return __breturn: - // [76] return + // [72] return rts // print_ln::@2 __b2: - // [77] print_line_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 + // [73] print_line_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 @@ -1902,10 +1836,10 @@ memset: { .const num = $3e8 .label str = print_screen .label end = str+num - .label dst = $10 - // [79] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = 8 + // [75] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [79] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [75] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #<str sta.z dst lda #>str @@ -1913,7 +1847,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [80] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [76] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -1923,22 +1857,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [81] return + // [77] return rts // memset::@2 __b2: - // [82] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [78] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [83] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [79] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [79] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [75] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [79] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [75] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -1975,8 +1909,6 @@ Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing instruction ldx.z __16+1 with TAX -Replacing instruction ldx.z __24+1 with TAX Removing instruction lda.z print_line_cursor+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b1_from___b2 with __b1 @@ -2048,26 +1980,22 @@ constant byte RADIX::DECIMAL = $a constant byte RADIX::HEXADECIMAL = $10 constant byte RADIX::OCTAL = 8 void main() -word~ main::$16 zp[2]:16 22.0 -word~ main::$20 zp[2]:18 22.0 -word~ main::$24 zp[2]:20 22.0 -word~ main::$28 zp[2]:22 22.0 -word~ main::$3 zp[2]:8 22.0 -word~ main::$32 zp[2]:8 22.0 -word~ main::$33 zp[2]:14 22.0 -word~ main::$6 zp[2]:14 22.0 +word~ main::$28 zp[2]:10 22.0 +word~ main::$29 zp[2]:16 22.0 +word~ main::$3 zp[2]:10 22.0 +word~ main::$6 zp[2]:16 22.0 dword main::dw dword main::dw#1 dw zp[4]:2 11.0 -dword main::dw#10 dw zp[4]:2 1.65 +dword main::dw#10 dw zp[4]:2 1.8333333333333335 dword main::dw2 -dword main::dw2#1 dw2 zp[4]:10 7.333333333333333 -dword main::dw2#10 dw2 zp[4]:10 3.142857142857143 +dword main::dw2#1 dw2 zp[4]:12 7.333333333333333 +dword main::dw2#10 dw2 zp[4]:12 3.52 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c constant byte memset::c#0 c = ' ' byte* memset::dst -byte* memset::dst#1 dst zp[2]:16 2002.0 -byte* memset::dst#2 dst zp[2]:16 1334.6666666666667 +byte* memset::dst#1 dst zp[2]:8 2002.0 +byte* memset::dst#2 dst zp[2]:8 1334.6666666666667 byte* memset::end constant byte* memset::end#0 end = (byte*)memset::str#0+memset::num#0 word memset::num @@ -2081,18 +2009,18 @@ byte print_char::ch#0 reg byte a 20002.0 byte print_char::ch#1 reg byte a 20002.0 byte print_char::ch#8 reg byte a 120003.0 byte* print_char_cursor -byte* print_char_cursor#11 print_char_cursor zp[2]:14 2424.739999999999 -byte* print_char_cursor#30 print_char_cursor_1 zp[2]:16 11.2 -byte* print_char_cursor#45 print_char_cursor zp[2]:14 110035.0 -byte* print_char_cursor#67 print_char_cursor zp[2]:14 612.5 -byte* print_char_cursor#69 print_char_cursor zp[2]:14 4015.6666666666656 -byte* print_char_cursor#76 print_char_cursor zp[2]:14 202.0 +byte* print_char_cursor#11 print_char_cursor zp[2]:16 2635.5869565217386 +byte* print_char_cursor#30 print_char_cursor_1 zp[2]:8 11.2 +byte* print_char_cursor#45 print_char_cursor zp[2]:16 110035.0 +byte* print_char_cursor#67 print_char_cursor zp[2]:16 612.5 +byte* print_char_cursor#69 print_char_cursor zp[2]:16 4015.6666666666656 +byte* print_char_cursor#76 print_char_cursor zp[2]:16 202.0 void print_cls() constant const byte* print_hextab[] = "0123456789abcdef"z byte* print_line_cursor -byte* print_line_cursor#0 print_line_cursor zp[2]:16 5004.166666666666 +byte* print_line_cursor#0 print_line_cursor zp[2]:8 5004.166666666666 byte* print_line_cursor#10 print_line_cursor_1 zp[2]:6 20103.0 -byte* print_line_cursor#16 print_line_cursor_1 zp[2]:6 2.8 +byte* print_line_cursor#16 print_line_cursor_1 zp[2]:6 3.1111111111111107 byte* print_line_cursor#38 print_line_cursor_1 zp[2]:6 20002.0 byte* print_line_cursor#39 print_line_cursor_1 zp[2]:6 22.0 void print_ln() @@ -2111,32 +2039,29 @@ byte print_uchar::b#5 reg byte x 22.0 byte print_uchar::b#6 reg byte x 5512.0 void print_uint(word print_uint::w) word print_uint::w -word print_uint::w#0 w zp[2]:8 101.0 -word print_uint::w#1 w zp[2]:8 202.0 -word print_uint::w#2 w zp[2]:8 22.0 -word print_uint::w#3 w zp[2]:8 22.0 -word print_uint::w#4 w zp[2]:8 742.0 +word print_uint::w#0 w zp[2]:10 101.0 +word print_uint::w#1 w zp[2]:10 202.0 +word print_uint::w#2 w zp[2]:10 22.0 +word print_uint::w#3 w zp[2]:10 22.0 +word print_uint::w#4 w zp[2]:10 742.0 void print_ulong(dword print_ulong::dw) dword print_ulong::dw -dword print_ulong::dw#0 dw zp[4]:10 53.25 +dword print_ulong::dw#0 dw zp[4]:12 53.25 zp[4]:2 [ main::dw#10 main::dw#1 ] reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] reg byte x [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] zp[2]:6 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] -zp[2]:8 [ main::$3 main::$32 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] -zp[4]:10 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] -zp[2]:14 [ main::$6 main::$33 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] -zp[2]:16 [ main::$16 memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] -zp[2]:18 [ main::$20 ] -zp[2]:20 [ main::$24 ] -zp[2]:22 [ main::$28 ] +zp[2]:8 [ memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] +zp[2]:10 [ main::$3 main::$28 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] +zp[4]:12 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] +zp[2]:16 [ main::$6 main::$29 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] FINAL ASSEMBLER -Score: 8692 +Score: 8232 // File Comments // A lightweight library for printing on the C64. @@ -2152,26 +2077,22 @@ Score: 8692 :BasicUpstart(main) // Global Constants & labels .label print_screen = $400 - .label print_line_cursor = $10 - .label print_char_cursor = $e - .label print_char_cursor_1 = $10 + .label print_line_cursor = 8 + .label print_char_cursor = $10 + .label print_char_cursor_1 = 8 .label print_line_cursor_1 = 6 .segment Code // main main: { - .label __3 = 8 - .label __6 = $e - .label __16 = $10 - .label __20 = $12 - .label __24 = $14 - .label __28 = $16 - .label __32 = 8 - .label __33 = $e - .label dw2 = $a + .label __3 = $a + .label __6 = $10 + .label __28 = $a + .label __29 = $10 + .label dw2 = $c .label dw = 2 // print_cls() // [1] call print_cls - // [45] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2215,49 +2136,49 @@ main: { rts // main::@2 __b2: - // >dw - // [5] main::$3 = > main::dw#10 -- vwuz1=_hi_vduz2 + // WORD1(dw) + // [5] main::$3 = _word1_ main::dw#10 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z __3 lda.z dw+3 sta.z __3+1 - // >dw2 = (>dw) + $1111 - // [6] main::$32 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 + // WORD1(dw2) = WORD1(dw) + $1111 + // [6] main::$28 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 clc - lda.z __32 + lda.z __28 adc #<$1111 - sta.z __32 - lda.z __32+1 + sta.z __28 + lda.z __28+1 adc #>$1111 - sta.z __32+1 - // [7] main::dw2#1 = main::dw#10 hi= main::$32 -- vduz1=vduz2_sethi_vwuz3 + sta.z __28+1 + // [7] main::dw2#1 = main::dw#10 word1= main::$28 -- vduz1=vduz2_setword1_vwuz3 lda.z dw sta.z dw2 lda.z dw+1 sta.z dw2+1 - lda.z __32 + lda.z __28 sta.z dw2+2 - lda.z __32+1 + lda.z __28+1 sta.z dw2+3 - // <dw - // [8] main::$6 = < main::dw#10 -- vwuz1=_lo_vduz2 + // WORD0(dw) + // [8] main::$6 = _word0_ main::dw#10 -- vwuz1=_word0_vduz2 lda.z dw sta.z __6 lda.z dw+1 sta.z __6+1 - // <dw2 = (<dw) + $1111 - // [9] main::$33 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 + // WORD0(dw2) = WORD0(dw) + $1111 + // [9] main::$29 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 clc - lda.z __33 + lda.z __29 adc #<$1111 - sta.z __33 - lda.z __33+1 + sta.z __29 + lda.z __29+1 adc #>$1111 - sta.z __33+1 - // [10] main::dw2#10 = main::dw2#1 lo= main::$33 -- vduz1=vduz1_setlo_vwuz2 - lda.z __33 + sta.z __29+1 + // [10] main::dw2#10 = main::dw2#1 word0= main::$29 -- vduz1=vduz1_setword0_vwuz2 + lda.z __29 sta.z dw2 - lda.z __33+1 + lda.z __29+1 sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 @@ -2268,155 +2189,131 @@ main: { // main::@3 // print_char(' ') // [14] call print_char - // [54] phi from main::@3 to print_char [phi:main::@3->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@3 to print_char [phi:main::@3->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@4 - // print_uint(>dw2) - // [15] print_uint::w#2 = > main::dw2#10 -- vwuz1=_hi_vduz2 + // print_uint(WORD1(dw2)) + // [15] print_uint::w#2 = _word1_ main::dw2#10 -- vwuz1=_word1_vduz2 lda.z dw2+2 sta.z print_uint.w lda.z dw2+3 sta.z print_uint.w+1 // [16] call print_uint - // [58] phi from main::@4 to print_uint [phi:main::@4->print_uint] - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_char(' ') // [18] call print_char // Test get high word of dword - // [54] phi from main::@5 to print_char [phi:main::@5->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@5 to print_char [phi:main::@5->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@6 - // print_uint(<dw2) - // [19] print_uint::w#3 = < main::dw2#10 -- vwuz1=_lo_vduz2 + // print_uint(WORD0(dw2)) + // [19] print_uint::w#3 = _word0_ main::dw2#10 -- vwuz1=_word0_vduz2 lda.z dw2 sta.z print_uint.w lda.z dw2+1 sta.z print_uint.w+1 // [20] call print_uint - // [58] phi from main::@6 to print_uint [phi:main::@6->print_uint] - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // print_char(' ') // [22] call print_char // Test get low word of dword - // [54] phi from main::@7 to print_char [phi:main::@7->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@7 to print_char [phi:main::@7->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@8 - // >dw2 - // [23] main::$16 = > main::dw2#10 -- vwuz1=_hi_vduz2 - lda.z dw2+2 - sta.z __16 - lda.z dw2+3 - sta.z __16+1 - // print_uchar(> >dw2) - // [24] print_uchar::b#2 = > main::$16 -- vbuxx=_hi_vwuz1 - tax - // [25] call print_uchar - // [64] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // print_uchar(BYTE3(dw2)) + // [23] print_uchar::b#2 = _byte3_ main::dw2#10 -- vbuxx=_byte3_vduz1 + ldx.z dw2+3 + // [24] call print_uchar + // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar - // [26] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // print_char(' ') - // [27] call print_char + // [26] call print_char // Test get high high byte of dword - // [54] phi from main::@9 to print_char [phi:main::@9->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@9 to print_char [phi:main::@9->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@10 - // >dw2 - // [28] main::$20 = > main::dw2#10 -- vwuz1=_hi_vduz2 - lda.z dw2+2 - sta.z __20 - lda.z dw2+3 - sta.z __20+1 - // print_uchar(< >dw2) - // [29] print_uchar::b#3 = < main::$20 -- vbuxx=_lo_vwuz1 - ldx.z __20 - // [30] call print_uchar - // [64] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // print_uchar(BYTE2(dw2)) + // [27] print_uchar::b#3 = _byte2_ main::dw2#10 -- vbuxx=_byte2_vduz1 + ldx.z dw2+2 + // [28] call print_uchar + // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar - // [31] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // print_char(' ') - // [32] call print_char + // [30] call print_char // Test get low high byte of dword - // [54] phi from main::@11 to print_char [phi:main::@11->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@11 to print_char [phi:main::@11->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@12 - // <dw2 - // [33] main::$24 = < main::dw2#10 -- vwuz1=_lo_vduz2 - lda.z dw2 - sta.z __24 - lda.z dw2+1 - sta.z __24+1 - // print_uchar(> <dw2) - // [34] print_uchar::b#4 = > main::$24 -- vbuxx=_hi_vwuz1 - tax - // [35] call print_uchar - // [64] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // print_uchar(BYTE1(dw2)) + // [31] print_uchar::b#4 = > main::dw2#10 -- vbuxx=_byte1_vduz1 + ldx.z dw2+1 + // [32] call print_uchar + // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar - // [36] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_char(' ') - // [37] call print_char + // [34] call print_char // Test get high low byte of dword - // [54] phi from main::@13 to print_char [phi:main::@13->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi from main::@13 to print_char [phi:main::@13->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@14 - // <dw2 - // [38] main::$28 = < main::dw2#10 -- vwuz1=_lo_vduz2 - lda.z dw2 - sta.z __28 - lda.z dw2+1 - sta.z __28+1 - // print_uchar(< <dw2) - // [39] print_uchar::b#5 = < main::$28 -- vbuxx=_lo_vwuz1 - ldx.z __28 - // [40] call print_uchar - // [64] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // print_uchar(BYTE0(dw2)) + // [35] print_uchar::b#5 = < main::dw2#10 -- vbuxx=_byte0_vduz1 + ldx.z dw2 + // [36] call print_uchar + // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar - // [41] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() - // [42] call print_ln + // [38] call print_ln // Test get low low byte of dword - // [72] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) - // [43] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 + // [39] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 inc.z dw bne !+ inc.z dw+1 @@ -2425,7 +2322,7 @@ main: { bne !+ inc.z dw+3 !: - // [44] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 + // [40] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 @@ -2440,51 +2337,51 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [46] call memset - // [78] phi from print_cls to memset [phi:print_cls->memset] + // [42] call memset + // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [47] return + // [43] return rts } // print_ulong // Print a unsigned long as HEX -// print_ulong(dword zp($a) dw) +// print_ulong(dword zp($c) dw) print_ulong: { - .label dw = $a + .label dw = $c // print_uint(>dw) - // [48] print_uint::w#0 = > print_ulong::dw#0 -- vwuz1=_hi_vduz2 + // [44] print_uint::w#0 = > print_ulong::dw#0 -- vwuz1=_hi_vduz2 lda.z dw+2 sta.z print_uint.w lda.z dw+3 sta.z print_uint.w+1 - // [49] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 + // [45] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 lda.z print_char_cursor_1 sta.z print_char_cursor lda.z print_char_cursor_1+1 sta.z print_char_cursor+1 // print_uint(>dw) - // [50] call print_uint - // [58] phi from print_ulong to print_uint [phi:print_ulong->print_uint] - // [58] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [46] call print_uint + // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] + // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(<dw) - // [51] print_uint::w#1 = < print_ulong::dw#0 -- vwuz1=_lo_vduz2 + // [47] print_uint::w#1 = < print_ulong::dw#0 -- vwuz1=_lo_vduz2 lda.z dw sta.z print_uint.w lda.z dw+1 sta.z print_uint.w+1 - // [52] call print_uint - // [58] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] - // [58] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [58] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [48] call print_uint + // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] + // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } - // [53] return + // [49] return rts } // print_char @@ -2492,45 +2389,45 @@ print_ulong: { // print_char(byte register(A) ch) print_char: { // *(print_char_cursor++) = ch - // [55] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa + // [51] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [56] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 + // [52] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: // print_char::@return // } - // [57] return + // [53] return rts } // print_uint // Print a unsigned int as HEX -// print_uint(word zp(8) w) +// print_uint(word zp($a) w) print_uint: { - .label w = 8 + .label w = $a // print_uchar(>w) - // [59] print_uchar::b#0 = > print_uint::w#4 -- vbuxx=_hi_vwuz1 + // [55] print_uchar::b#0 = > print_uint::w#4 -- vbuxx=_hi_vwuz1 ldx.z w+1 - // [60] call print_uchar - // [64] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [56] call print_uchar + // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(<w) - // [61] print_uchar::b#1 = < print_uint::w#4 -- vbuxx=_lo_vwuz1 + // [57] print_uchar::b#1 = < print_uint::w#4 -- vbuxx=_lo_vwuz1 ldx.z w - // [62] call print_uchar - // [64] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [64] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [64] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [58] call print_uchar + // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] + // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } - // [63] return + // [59] return rts } // print_uchar @@ -2538,49 +2435,49 @@ print_uint: { // print_uchar(byte register(X) b) print_uchar: { // b>>4 - // [65] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 + // [61] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) - // [66] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa + // [62] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y - // [67] call print_char + // [63] call print_char // Table of hexadecimal digits - // [54] phi from print_uchar to print_char [phi:print_uchar->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f - // [68] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 + // [64] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&$f]) - // [69] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx + // [65] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x - // [70] call print_char - // [54] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] - // [54] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [54] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [66] call print_char + // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] + // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } - // [71] return + // [67] return rts } // print_ln // Print a newline print_ln: { - // [73] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] - // [73] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy + // [69] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] + // [69] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy // print_ln::@1 __b1: // print_line_cursor + $28 - // [74] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 + // [70] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z print_line_cursor_1 @@ -2589,7 +2486,7 @@ print_ln: { adc.z print_line_cursor_1+1 sta.z print_line_cursor+1 // while (print_line_cursor<print_char_cursor) - // [75] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 -- pbuz1_lt_pbuz2_then_la1 + // [71] if(print_line_cursor#0<print_char_cursor#11) goto print_ln::@2 -- pbuz1_lt_pbuz2_then_la1 cmp.z print_char_cursor+1 bcc __b2 bne !+ @@ -2599,11 +2496,11 @@ print_ln: { !: // print_ln::@return // } - // [76] return + // [72] return rts // print_ln::@2 __b2: - // [77] print_line_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 + // [73] print_line_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 @@ -2617,9 +2514,9 @@ memset: { .const num = $3e8 .label str = print_screen .label end = str+num - .label dst = $10 - // [79] phi from memset to memset::@1 [phi:memset->memset::@1] - // [79] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = 8 + // [75] phi from memset to memset::@1 [phi:memset->memset::@1] + // [75] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #<str sta.z dst lda #>str @@ -2627,7 +2524,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [80] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [76] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -2636,23 +2533,23 @@ memset: { bne __b2 // memset::@return // } - // [81] return + // [77] return rts // memset::@2 __b2: // *dst = c - // [82] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [78] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [83] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [79] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [79] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [79] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [75] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [75] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data diff --git a/src/test/ref/test-lowhigh.sym b/src/test/ref/test-lowhigh.sym index c76f11f7f..06af7c820 100644 --- a/src/test/ref/test-lowhigh.sym +++ b/src/test/ref/test-lowhigh.sym @@ -3,26 +3,22 @@ constant byte RADIX::DECIMAL = $a constant byte RADIX::HEXADECIMAL = $10 constant byte RADIX::OCTAL = 8 void main() -word~ main::$16 zp[2]:16 22.0 -word~ main::$20 zp[2]:18 22.0 -word~ main::$24 zp[2]:20 22.0 -word~ main::$28 zp[2]:22 22.0 -word~ main::$3 zp[2]:8 22.0 -word~ main::$32 zp[2]:8 22.0 -word~ main::$33 zp[2]:14 22.0 -word~ main::$6 zp[2]:14 22.0 +word~ main::$28 zp[2]:10 22.0 +word~ main::$29 zp[2]:16 22.0 +word~ main::$3 zp[2]:10 22.0 +word~ main::$6 zp[2]:16 22.0 dword main::dw dword main::dw#1 dw zp[4]:2 11.0 -dword main::dw#10 dw zp[4]:2 1.65 +dword main::dw#10 dw zp[4]:2 1.8333333333333335 dword main::dw2 -dword main::dw2#1 dw2 zp[4]:10 7.333333333333333 -dword main::dw2#10 dw2 zp[4]:10 3.142857142857143 +dword main::dw2#1 dw2 zp[4]:12 7.333333333333333 +dword main::dw2#10 dw2 zp[4]:12 3.52 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c constant byte memset::c#0 c = ' ' byte* memset::dst -byte* memset::dst#1 dst zp[2]:16 2002.0 -byte* memset::dst#2 dst zp[2]:16 1334.6666666666667 +byte* memset::dst#1 dst zp[2]:8 2002.0 +byte* memset::dst#2 dst zp[2]:8 1334.6666666666667 byte* memset::end constant byte* memset::end#0 end = (byte*)memset::str#0+memset::num#0 word memset::num @@ -36,18 +32,18 @@ byte print_char::ch#0 reg byte a 20002.0 byte print_char::ch#1 reg byte a 20002.0 byte print_char::ch#8 reg byte a 120003.0 byte* print_char_cursor -byte* print_char_cursor#11 print_char_cursor zp[2]:14 2424.739999999999 -byte* print_char_cursor#30 print_char_cursor_1 zp[2]:16 11.2 -byte* print_char_cursor#45 print_char_cursor zp[2]:14 110035.0 -byte* print_char_cursor#67 print_char_cursor zp[2]:14 612.5 -byte* print_char_cursor#69 print_char_cursor zp[2]:14 4015.6666666666656 -byte* print_char_cursor#76 print_char_cursor zp[2]:14 202.0 +byte* print_char_cursor#11 print_char_cursor zp[2]:16 2635.5869565217386 +byte* print_char_cursor#30 print_char_cursor_1 zp[2]:8 11.2 +byte* print_char_cursor#45 print_char_cursor zp[2]:16 110035.0 +byte* print_char_cursor#67 print_char_cursor zp[2]:16 612.5 +byte* print_char_cursor#69 print_char_cursor zp[2]:16 4015.6666666666656 +byte* print_char_cursor#76 print_char_cursor zp[2]:16 202.0 void print_cls() constant const byte* print_hextab[] = "0123456789abcdef"z byte* print_line_cursor -byte* print_line_cursor#0 print_line_cursor zp[2]:16 5004.166666666666 +byte* print_line_cursor#0 print_line_cursor zp[2]:8 5004.166666666666 byte* print_line_cursor#10 print_line_cursor_1 zp[2]:6 20103.0 -byte* print_line_cursor#16 print_line_cursor_1 zp[2]:6 2.8 +byte* print_line_cursor#16 print_line_cursor_1 zp[2]:6 3.1111111111111107 byte* print_line_cursor#38 print_line_cursor_1 zp[2]:6 20002.0 byte* print_line_cursor#39 print_line_cursor_1 zp[2]:6 22.0 void print_ln() @@ -66,25 +62,22 @@ byte print_uchar::b#5 reg byte x 22.0 byte print_uchar::b#6 reg byte x 5512.0 void print_uint(word print_uint::w) word print_uint::w -word print_uint::w#0 w zp[2]:8 101.0 -word print_uint::w#1 w zp[2]:8 202.0 -word print_uint::w#2 w zp[2]:8 22.0 -word print_uint::w#3 w zp[2]:8 22.0 -word print_uint::w#4 w zp[2]:8 742.0 +word print_uint::w#0 w zp[2]:10 101.0 +word print_uint::w#1 w zp[2]:10 202.0 +word print_uint::w#2 w zp[2]:10 22.0 +word print_uint::w#3 w zp[2]:10 22.0 +word print_uint::w#4 w zp[2]:10 742.0 void print_ulong(dword print_ulong::dw) dword print_ulong::dw -dword print_ulong::dw#0 dw zp[4]:10 53.25 +dword print_ulong::dw#0 dw zp[4]:12 53.25 zp[4]:2 [ main::dw#10 main::dw#1 ] reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] reg byte x [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] zp[2]:6 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] -zp[2]:8 [ main::$3 main::$32 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] -zp[4]:10 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] -zp[2]:14 [ main::$6 main::$33 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] -zp[2]:16 [ main::$16 memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] -zp[2]:18 [ main::$20 ] -zp[2]:20 [ main::$24 ] -zp[2]:22 [ main::$28 ] +zp[2]:8 [ memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] +zp[2]:10 [ main::$3 main::$28 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] +zp[4]:12 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] +zp[2]:16 [ main::$6 main::$29 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ]