From 20b9ab6881ae0dc474e3e36b07298720bf33a5e1 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 1 Jan 2018 15:59:15 +0100 Subject: [PATCH] Tried adding more memory for the Junit JVM --- pom.xml | 10 + .../kickc/test/ref/test-comparisons.asm | 165 + .../kickc/test/ref/test-comparisons.cfg | 146 + .../kickc/test/ref/test-comparisons.log | 3384 +++++++++++++++++ .../kickc/test/ref/test-comparisons.sym | 104 + 5 files changed, 3809 insertions(+) create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.asm create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.cfg create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.sym diff --git a/pom.xml b/pom.xml index d8dc955cd..959cb691c 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,16 @@ + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19 + + -Xmx1024m + + + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.asm b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.asm new file mode 100644 index 000000000..e4c8d201e --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.asm @@ -0,0 +1,165 @@ +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label line_cursor = 3 + .label char_cursor = 7 + jsr main +main: { + .label a = 2 + jsr print_cls + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + lda #0 + sta a + b1: + lda #$a + sec + sbc a + tay + cpy a + bcc b5 + ldx #'+' + jmp b2 + b5: + ldx #'-' + b2: + sty printu.b + lda #'<' + sta printu.op + jsr printu + lda a + cmp #3 + bcs b6 + ldx #'+' + jmp b3 + b6: + ldx #'-' + b3: + lda #3 + sta printu.b + lda #'<' + sta printu.op + jsr printu + lda a + tay + cmp cs,y + bcs b7 + ldx #'+' + jmp b4 + b7: + ldx #'-' + b4: + ldy a + lda cs,y + sta printu.b + lda #'<' + sta printu.op + jsr printu + jsr print_ln + inc a + lda a + cmp #$b + bne b14 + rts + b14: + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + jmp b1 + cs: .byte 0, $14, 4, 9, $b, 4, $d, 8, 4, 6 +} +print_ln: { + b1: + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + lda line_cursor+1 + cmp char_cursor+1 + bcc b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1 + !: + rts +} +printu: { + .label a = 2 + .label b = 6 + .label op = 5 + lda #' ' + jsr print_char + lda a + sta print_byte.b + jsr print_byte + lda op + jsr print_char + lda b + sta print_byte.b + jsr print_byte + lda #' ' + jsr print_char + txa + jsr print_char + rts +} +print_char: { + ldy #0 + sta (char_cursor),y + inc char_cursor + bne !+ + inc char_cursor+1 + !: + rts +} +print_byte: { + .label b = 9 + lda b + lsr + lsr + lsr + lsr + tay + lda hextab,y + jsr print_char + lda b + and #$f + tay + lda hextab,y + jsr print_char + rts + hextab: .text "0123456789abcdef" +} +print_cls: { + .label sc = 3 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + b1: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + rts +} diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.cfg new file mode 100644 index 000000000..14839eba8 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.cfg @@ -0,0 +1,146 @@ +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@10 +@10: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @10 + [3] phi() [ ] ( ) +main: scope:[main] from @10 + [4] phi() [ ] ( main:2 [ ] ) + [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + to:main::@1 +main::@1: scope:[main] from main main::@14 + [6] (byte*) line_cursor#13 ← phi( main::@14/(byte*) line_cursor#1 main/((byte*))(word/signed word) 1024 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [6] (byte*) char_cursor#44 ← phi( main::@14/(byte*~) char_cursor#54 main/((byte*))(word/signed word) 1024 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [6] (byte) main::a#10 ← phi( main::@14/(byte) main::a#1 main/(byte/signed byte/word/signed word) 0 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + [8] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + to:main::@5 +main::@5: scope:[main] from main::@1 + [9] phi() [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + to:main::@2 +main::@2: scope:[main] from main::@1 main::@5 + [10] (byte) main::r#6 ← phi( main::@1/(byte) '-' main::@5/(byte) '+' ) [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 ] ) + [11] (byte) printu::a#0 ← (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ) + [12] (byte) printu::b#0 ← (byte) main::b#0 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ) + [13] (byte) printu::res#0 ← (byte) main::r#6 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ) + [14] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@10 +main::@10: scope:[main] from main::@2 + [15] if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@6 +main::@6: scope:[main] from main::@10 + [16] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@3 +main::@3: scope:[main] from main::@10 main::@6 + [17] (byte) main::r#7 ← phi( main::@10/(byte) '-' main::@6/(byte) '+' ) [ main::a#10 line_cursor#13 main::r#7 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 char_cursor#27 ] ) + [18] (byte) printu::a#1 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ) + [19] (byte) printu::res#1 ← (byte) main::r#7 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ) + [20] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@11 +main::@11: scope:[main] from main::@3 + [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@7 +main::@7: scope:[main] from main::@11 + [22] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@4 +main::@4: scope:[main] from main::@11 main::@7 + [23] (byte) main::r#8 ← phi( main::@11/(byte) '-' main::@7/(byte) '+' ) [ main::a#10 line_cursor#13 main::r#8 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 char_cursor#27 ] ) + [24] (byte) printu::a#2 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ) + [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) + [26] (byte) printu::res#2 ← (byte) main::r#8 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ) + [27] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@12 +main::@12: scope:[main] from main::@4 + [28] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + [29] call print_ln param-assignment [ main::a#10 line_cursor#1 ] ( main:2 [ main::a#10 line_cursor#1 ] ) + to:main::@13 +main::@13: scope:[main] from main::@12 + [30] (byte) main::a#1 ← ++ (byte) main::a#10 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) + [31] if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@14 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) + to:main::@return +main::@return: scope:[main] from main::@13 + [32] return [ ] ( main:2 [ ] ) + to:@return +main::@14: scope:[main] from main::@13 + [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) + to:main::@1 +print_ln: scope:[print_ln] from main::@12 + [34] phi() [ line_cursor#13 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [35] (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#13 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#6 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#6 char_cursor#27 ] ) + [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) + [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 ] ) + to:@return +printu: scope:[printu] from main::@2 main::@3 main::@4 + [39] (byte) printu::res#3 ← phi( main::@2/(byte) printu::res#0 main::@3/(byte) printu::res#1 main::@4/(byte) printu::res#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::b#3 ← phi( main::@2/(byte) printu::b#0 main::@3/(byte/signed byte/word/signed word) 3 main::@4/(byte) printu::b#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::op#3 ← phi( main::@2/(byte) '<' main::@3/(byte) '<' main::@4/(byte) '<' ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::a#3 ← phi( main::@2/(byte) printu::a#0 main::@3/(byte) printu::a#1 main::@4/(byte) printu::a#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte*) char_cursor#43 ← phi( main::@2/(byte*) char_cursor#44 main::@3/(byte*) char_cursor#27 main::@4/(byte*) char_cursor#27 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [40] call print_char param-assignment [ char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + to:printu::@1 +printu::@1: scope:[printu] from printu + [41] (byte) print_byte::b#0 ← (byte) printu::a#3 [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ) + [42] call print_byte param-assignment [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ) + to:printu::@2 +printu::@2: scope:[printu] from printu::@1 + [43] (byte) print_char::ch#3 ← (byte) printu::op#3 [ char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ) + [44] call print_char param-assignment [ char_cursor#27 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] ) + to:printu::@3 +printu::@3: scope:[printu] from printu::@2 + [45] (byte) print_byte::b#1 ← (byte) printu::b#3 [ char_cursor#27 printu::res#3 print_byte::b#1 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] ) + [46] call print_byte param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + to:printu::@4 +printu::@4: scope:[printu] from printu::@3 + [47] phi() [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + [48] call print_char param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + to:printu::@5 +printu::@5: scope:[printu] from printu::@4 + [49] (byte) print_char::ch#5 ← (byte) printu::res#3 [ char_cursor#27 print_char::ch#5 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] ) + [50] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:printu::@return +printu::@return: scope:[printu] from printu::@5 + [51] return [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 printu printu::@2 printu::@4 printu::@5 + [52] (byte*) char_cursor#26 ← phi( print_byte/(byte*) char_cursor#27 print_byte::@1/(byte*) char_cursor#27 printu/(byte*) char_cursor#43 printu::@2/(byte*) char_cursor#27 printu::@4/(byte*) char_cursor#27 printu::@5/(byte*) char_cursor#27 ) [ print_char::ch#6 char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] ) + [52] (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 printu/(byte) ' ' printu::@2/(byte) print_char::ch#3 printu::@4/(byte) ' ' printu::@5/(byte) print_char::ch#5 ) [ print_char::ch#6 char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] ) + [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) + [54] (byte*) char_cursor#27 ← ++ (byte*) char_cursor#26 [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [55] return [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:@return +print_byte: scope:[print_byte] from printu::@1 printu::@3 + [56] (byte) print_byte::b#2 ← phi( printu::@1/(byte) print_byte::b#0 printu::@3/(byte) print_byte::b#1 ) [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ char_cursor#27 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] ) + [58] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ char_cursor#27 print_char::ch#0 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] ) + [59] call print_char param-assignment [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) + [61] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#27 print_char::ch#1 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] ) + [62] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [63] return [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:@return +print_cls: scope:[print_cls] from main + [64] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [65] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [67] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [69] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log new file mode 100644 index 000000000..37df3268a --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log @@ -0,0 +1,3384 @@ +PARSING src/test/java/dk/camelot64/kickc/test/test-comparisons.kc +import "print.kc" + +void main() { + print_cls(); + byte r; + byte[10] cs = { 0, 20, 4, 9, 11, 4 , 13, 8, 4, 6 }; + for( byte a: 0..10 ) { + byte b = 10-a; + r = '-'; if(aw); + print_byte(>4]); + print_char(hextab[b&$f]); +} + +// Print a single char +void print_char(byte ch) { + *(char_cursor++) = ch; +} + +// Clear the screen +void print_cls() { + for(byte* sc=$0400; sc!=$0400+1000; sc++) { + *sc = ' '; + } +} + + + +Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor +Adding pre/post-modifier (byte*) print_str::str ← ++ (byte*) print_str::str +Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor +Adding pre/post-modifier (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + +STATEMENTS + (byte*) line_cursor ← (word/signed word) 1024 + (byte*) char_cursor ← (byte*) line_cursor +proc (void()) print_str((byte*) print_str::str) +print_str::@1: + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + goto print_str::@3 +print_str::@2: + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + goto print_str::@1 +print_str::@3: +print_str::@return: + return +endproc // print_str() +proc (void()) print_ln() +print_ln::@1: + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor +print_ln::@return: + return +endproc // print_ln() +proc (void()) print_sword((signed word) print_sword::w) + (boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word) 0 + (boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0 + if((boolean~) print_sword::$1) goto print_sword::@1 + (void~) print_sword::$2 ← call print_char (byte) '-' + (signed word~) print_sword::$3 ← - (signed word) print_sword::w + (signed word) print_sword::w ← (signed word~) print_sword::$3 +print_sword::@1: + (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w + (void~) print_sword::$5 ← call print_word (word~) print_sword::$4 +print_sword::@return: + return +endproc // print_sword() +proc (void()) print_sbyte((signed byte) print_sbyte::b) + (boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word) 0 + (boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0 + if((boolean~) print_sbyte::$1) goto print_sbyte::@1 + (void~) print_sbyte::$2 ← call print_char (byte) '-' + (signed byte~) print_sbyte::$3 ← - (signed byte) print_sbyte::b + (signed byte) print_sbyte::b ← (signed byte~) print_sbyte::$3 +print_sbyte::@1: + (byte~) print_sbyte::$4 ← ((byte)) (signed byte) print_sbyte::b + (void~) print_sbyte::$5 ← call print_byte (byte~) print_sbyte::$4 +print_sbyte::@return: + return +endproc // print_sbyte() +proc (void()) print_word((word) print_word::w) + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 +print_word::@return: + return +endproc // print_word() +proc (void()) print_byte((byte) print_byte::b) + (byte[]) print_byte::hextab ← (string) "0123456789abcdef" + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) +print_byte::@return: + return +endproc // print_byte() +proc (void()) print_char((byte) print_char::ch) + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor +print_char::@return: + return +endproc // print_char() +proc (void()) print_cls() + (byte*) print_cls::sc ← (word/signed word) 1024 +print_cls::@1: + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 +print_cls::@return: + return +endproc // print_cls() +proc (void()) main() + (void~) main::$0 ← call print_cls + (byte[10]) main::cs ← { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 9, (byte/signed byte/word/signed word) 11, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 6 } + (byte) main::a ← (byte/signed byte/word/signed word) 0 +main::@1: + (byte/signed byte/word/signed word~) main::$1 ← (byte/signed byte/word/signed word) 10 - (byte) main::a + (byte) main::b ← (byte/signed byte/word/signed word~) main::$1 + (byte) main::r ← (byte) '-' + (boolean~) main::$2 ← (byte) main::a < (byte) main::b + (boolean~) main::$3 ← ! (boolean~) main::$2 + if((boolean~) main::$3) goto main::@2 + (byte) main::r ← (byte) '+' +main::@2: + (void~) main::$4 ← call printu (byte) main::a (byte) '<' (byte) main::b (byte) main::r + (byte) main::r ← (byte) '-' + (boolean~) main::$5 ← (byte) main::a < (byte/signed byte/word/signed word) 3 + (boolean~) main::$6 ← ! (boolean~) main::$5 + if((boolean~) main::$6) goto main::@3 + (byte) main::r ← (byte) '+' +main::@3: + (void~) main::$7 ← call printu (byte) main::a (byte) '<' (byte/signed byte/word/signed word) 3 (byte) main::r + (byte) main::r ← (byte) '-' + (boolean~) main::$8 ← (byte) main::a < *((byte[10]) main::cs + (byte) main::a) + (boolean~) main::$9 ← ! (boolean~) main::$8 + if((boolean~) main::$9) goto main::@4 + (byte) main::r ← (byte) '+' +main::@4: + (void~) main::$10 ← call printu (byte) main::a (byte) '<' *((byte[10]) main::cs + (byte) main::a) (byte) main::r + (void~) main::$11 ← call print_ln + (byte) main::a ← ++ (byte) main::a + (boolean~) main::$12 ← (byte) main::a != (byte/signed byte/word/signed word) 11 + if((boolean~) main::$12) goto main::@1 +main::@return: + return +endproc // main() +proc (void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) + (void~) printu::$0 ← call print_char (byte) ' ' + (void~) printu::$1 ← call print_byte (byte) printu::a + (void~) printu::$2 ← call print_char (byte) printu::op + (void~) printu::$3 ← call print_byte (byte) printu::b + (void~) printu::$4 ← call print_char (byte) ' ' + (void~) printu::$5 ← call print_char (byte) printu::res +printu::@return: + return +endproc // printu() + call main + +SYMBOLS +(byte*) char_cursor +(byte*) line_cursor +(void()) main() +(void~) main::$0 +(byte/signed byte/word/signed word~) main::$1 +(void~) main::$10 +(void~) main::$11 +(boolean~) main::$12 +(boolean~) main::$2 +(boolean~) main::$3 +(void~) main::$4 +(boolean~) main::$5 +(boolean~) main::$6 +(void~) main::$7 +(boolean~) main::$8 +(boolean~) main::$9 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(byte) main::a +(byte) main::b +(byte[10]) main::cs +(byte) main::r +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(void~) print_byte::$1 +(byte~) print_byte::$2 +(void~) print_byte::$3 +(label) print_byte::@return +(byte) print_byte::b +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(void()) print_cls() +(word/signed word~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_sbyte((signed byte) print_sbyte::b) +(boolean~) print_sbyte::$0 +(boolean~) print_sbyte::$1 +(void~) print_sbyte::$2 +(signed byte~) print_sbyte::$3 +(byte~) print_sbyte::$4 +(void~) print_sbyte::$5 +(label) print_sbyte::@1 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(void()) print_str((byte*) print_str::str) +(boolean~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@3 +(label) print_str::@return +(byte*) print_str::str +(void()) print_sword((signed word) print_sword::w) +(boolean~) print_sword::$0 +(boolean~) print_sword::$1 +(void~) print_sword::$2 +(signed word~) print_sword::$3 +(word~) print_sword::$4 +(void~) print_sword::$5 +(label) print_sword::@1 +(label) print_sword::@return +(signed word) print_sword::w +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(void~) print_word::$1 +(byte~) print_word::$2 +(void~) print_word::$3 +(label) print_word::@return +(word) print_word::w +(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) +(void~) printu::$0 +(void~) printu::$1 +(void~) printu::$2 +(void~) printu::$3 +(void~) printu::$4 +(void~) printu::$5 +(label) printu::@return +(byte) printu::a +(byte) printu::b +(byte) printu::op +(byte) printu::res + +Promoting word/signed word to byte* in line_cursor ← ((byte*)) 1024 +Promoting word/signed word to byte* in print_cls::sc ← ((byte*)) 1024 +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) line_cursor ← ((byte*)) (word/signed word) 1024 + (byte*) char_cursor ← (byte*) line_cursor + to:@1 +print_str: scope:[print_str] from + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + to:print_str::@4 +print_str::@2: scope:[print_str] from print_str::@1 print_str::@5 + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + to:print_str::@1 +print_str::@4: scope:[print_str] from print_str::@1 + to:print_str::@3 +print_str::@3: scope:[print_str] from print_str::@4 print_str::@6 + to:print_str::@return +print_str::@5: scope:[print_str] from + to:print_str::@2 +print_str::@6: scope:[print_str] from + to:print_str::@3 +print_str::@return: scope:[print_str] from print_str::@3 + return + to:@return +@1: scope:[] from @begin + to:@2 +print_ln: scope:[print_ln] from + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + return + to:@return +@2: scope:[] from @1 + to:@3 +print_sword: scope:[print_sword] from + (boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word) 0 + (boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0 + if((boolean~) print_sword::$1) goto print_sword::@1 + to:print_sword::@2 +print_sword::@1: scope:[print_sword] from print_sword print_sword::@2 + (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w + (void~) print_sword::$5 ← call print_word (word~) print_sword::$4 + to:print_sword::@return +print_sword::@2: scope:[print_sword] from print_sword + (void~) print_sword::$2 ← call print_char (byte) '-' + (signed word~) print_sword::$3 ← - (signed word) print_sword::w + (signed word) print_sword::w ← (signed word~) print_sword::$3 + to:print_sword::@1 +print_sword::@return: scope:[print_sword] from print_sword::@1 + return + to:@return +@3: scope:[] from @2 + to:@4 +print_sbyte: scope:[print_sbyte] from + (boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word) 0 + (boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0 + if((boolean~) print_sbyte::$1) goto print_sbyte::@1 + to:print_sbyte::@2 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte print_sbyte::@2 + (byte~) print_sbyte::$4 ← ((byte)) (signed byte) print_sbyte::b + (void~) print_sbyte::$5 ← call print_byte (byte~) print_sbyte::$4 + to:print_sbyte::@return +print_sbyte::@2: scope:[print_sbyte] from print_sbyte + (void~) print_sbyte::$2 ← call print_char (byte) '-' + (signed byte~) print_sbyte::$3 ← - (signed byte) print_sbyte::b + (signed byte) print_sbyte::b ← (signed byte~) print_sbyte::$3 + to:print_sbyte::@1 +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1 + return + to:@return +@4: scope:[] from @3 + to:@5 +print_word: scope:[print_word] from + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word + return + to:@return +@5: scope:[] from @4 + to:@6 +print_byte: scope:[print_byte] from + (byte[]) print_byte::hextab ← (string) "0123456789abcdef" + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte + return + to:@return +@6: scope:[] from @5 + to:@7 +print_char: scope:[print_char] from + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + return + to:@return +@7: scope:[] from @6 + to:@8 +print_cls: scope:[print_cls] from + (byte*) print_cls::sc ← ((byte*)) (word/signed word) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@2 +print_cls::@2: scope:[print_cls] from print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@2 + return + to:@return +@8: scope:[] from @7 + to:@9 +main: scope:[main] from + (void~) main::$0 ← call print_cls + (byte[10]) main::cs ← { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 9, (byte/signed byte/word/signed word) 11, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 6 } + (byte) main::a ← (byte/signed byte/word/signed word) 0 + to:main::@1 +main::@1: scope:[main] from main main::@4 + (byte/signed byte/word/signed word~) main::$1 ← (byte/signed byte/word/signed word) 10 - (byte) main::a + (byte) main::b ← (byte/signed byte/word/signed word~) main::$1 + (byte) main::r ← (byte) '-' + (boolean~) main::$2 ← (byte) main::a < (byte) main::b + (boolean~) main::$3 ← ! (boolean~) main::$2 + if((boolean~) main::$3) goto main::@2 + to:main::@5 +main::@2: scope:[main] from main::@1 main::@5 + (void~) main::$4 ← call printu (byte) main::a (byte) '<' (byte) main::b (byte) main::r + (byte) main::r ← (byte) '-' + (boolean~) main::$5 ← (byte) main::a < (byte/signed byte/word/signed word) 3 + (boolean~) main::$6 ← ! (boolean~) main::$5 + if((boolean~) main::$6) goto main::@3 + to:main::@6 +main::@5: scope:[main] from main::@1 + (byte) main::r ← (byte) '+' + to:main::@2 +main::@3: scope:[main] from main::@2 main::@6 + (void~) main::$7 ← call printu (byte) main::a (byte) '<' (byte/signed byte/word/signed word) 3 (byte) main::r + (byte) main::r ← (byte) '-' + (boolean~) main::$8 ← (byte) main::a < *((byte[10]) main::cs + (byte) main::a) + (boolean~) main::$9 ← ! (boolean~) main::$8 + if((boolean~) main::$9) goto main::@4 + to:main::@7 +main::@6: scope:[main] from main::@2 + (byte) main::r ← (byte) '+' + to:main::@3 +main::@4: scope:[main] from main::@3 main::@7 + (void~) main::$10 ← call printu (byte) main::a (byte) '<' *((byte[10]) main::cs + (byte) main::a) (byte) main::r + (void~) main::$11 ← call print_ln + (byte) main::a ← ++ (byte) main::a + (boolean~) main::$12 ← (byte) main::a != (byte/signed byte/word/signed word) 11 + if((boolean~) main::$12) goto main::@1 + to:main::@8 +main::@7: scope:[main] from main::@3 + (byte) main::r ← (byte) '+' + to:main::@4 +main::@8: scope:[main] from main::@4 + to:main::@return +main::@return: scope:[main] from main::@8 + return + to:@return +@9: scope:[] from @8 + to:@10 +printu: scope:[printu] from + (void~) printu::$0 ← call print_char (byte) ' ' + (void~) printu::$1 ← call print_byte (byte) printu::a + (void~) printu::$2 ← call print_char (byte) printu::op + (void~) printu::$3 ← call print_byte (byte) printu::b + (void~) printu::$4 ← call print_char (byte) ' ' + (void~) printu::$5 ← call print_char (byte) printu::res + to:printu::@return +printu::@return: scope:[printu] from printu + return + to:@return +@10: scope:[] from @9 + call main + to:@end +@end: scope:[] from @10 + +Removing unused procedure print_str +Removing unused procedure print_sword +Removing unused procedure print_sbyte +Removing unused procedure print_word +Eliminating unused variable - keeping the call (void~) print_byte::$1 +Eliminating unused variable - keeping the call (void~) print_byte::$3 +Eliminating unused variable - keeping the call (void~) main::$0 +Eliminating unused variable - keeping the call (void~) main::$4 +Eliminating unused variable - keeping the call (void~) main::$7 +Eliminating unused variable - keeping the call (void~) main::$10 +Eliminating unused variable - keeping the call (void~) main::$11 +Eliminating unused variable - keeping the call (void~) printu::$0 +Eliminating unused variable - keeping the call (void~) printu::$1 +Eliminating unused variable - keeping the call (void~) printu::$2 +Eliminating unused variable - keeping the call (void~) printu::$3 +Eliminating unused variable - keeping the call (void~) printu::$4 +Eliminating unused variable - keeping the call (void~) printu::$5 +Creating constant string variable for inline (const string) print_byte::$4 "0123456789abcdef" +Removing empty block @1 +Removing empty block @2 +Removing empty block @3 +Removing empty block @4 +Removing empty block @5 +Removing empty block @6 +Removing empty block @7 +Removing empty block print_cls::@2 +Removing empty block @8 +Removing empty block main::@8 +Removing empty block @9 +PROCEDURE MODIFY VARIABLE ANALYSIS +print_ln modifies line_cursor +print_ln modifies char_cursor +print_byte modifies char_cursor +print_char modifies char_cursor +main modifies char_cursor +main modifies line_cursor +printu modifies char_cursor + +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... + +CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (byte*) line_cursor#0 ← ((byte*)) (word/signed word) 1024 + (byte*) char_cursor#0 ← (byte*) line_cursor#0 + to:@10 +print_ln: scope:[print_ln] from main::@12 + (byte*) char_cursor#41 ← phi( main::@12/(byte*) char_cursor#10 ) + (byte*) line_cursor#12 ← phi( main::@12/(byte*) line_cursor#13 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*) char_cursor#21 ← phi( print_ln/(byte*) char_cursor#41 print_ln::@1/(byte*) char_cursor#21 ) + (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#12 print_ln::@1/(byte*) line_cursor#1 ) + (byte*~) print_ln::$0 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor#1 ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor#1 < (byte*) char_cursor#21 + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) line_cursor#7 ← phi( print_ln::@1/(byte*) line_cursor#1 ) + (byte*) char_cursor#1 ← (byte*) line_cursor#7 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + (byte*) char_cursor#22 ← phi( print_ln::@2/(byte*) char_cursor#1 ) + (byte*) line_cursor#8 ← phi( print_ln::@2/(byte*) line_cursor#7 ) + (byte*) line_cursor#2 ← (byte*) line_cursor#8 + (byte*) char_cursor#2 ← (byte*) char_cursor#22 + return + to:@return +print_byte: scope:[print_byte] from printu::@1 printu::@3 + (byte*) char_cursor#42 ← phi( printu::@1/(byte*) char_cursor#13 printu::@3/(byte*) char_cursor#15 ) + (byte) print_byte::b#2 ← phi( printu::@1/(byte) print_byte::b#0 printu::@3/(byte) print_byte::b#1 ) + (byte[]) print_byte::hextab#0 ← (const string) print_byte::$4 + (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 + (byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) + call print_char param-assignment + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 ) + (byte*) char_cursor#23 ← phi( print_byte/(byte*) char_cursor#7 ) + (byte*) char_cursor#3 ← (byte*) char_cursor#23 + (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15 + (byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) + call print_char param-assignment + to:print_byte::@2 +print_byte::@2: scope:[print_byte] from print_byte::@1 + (byte*) char_cursor#24 ← phi( print_byte::@1/(byte*) char_cursor#7 ) + (byte*) char_cursor#4 ← (byte*) char_cursor#24 + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@2 + (byte*) char_cursor#25 ← phi( print_byte::@2/(byte*) char_cursor#4 ) + (byte*) char_cursor#5 ← (byte*) char_cursor#25 + return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 printu printu::@2 printu::@4 printu::@5 + (byte*) char_cursor#26 ← phi( print_byte/(byte*) char_cursor#42 print_byte::@1/(byte*) char_cursor#3 printu/(byte*) char_cursor#43 printu::@2/(byte*) char_cursor#14 printu::@4/(byte*) char_cursor#16 printu::@5/(byte*) char_cursor#17 ) + (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 printu/(byte) print_char::ch#2 printu::@2/(byte) print_char::ch#3 printu::@4/(byte) print_char::ch#4 printu::@5/(byte) print_char::ch#5 ) + *((byte*) char_cursor#26) ← (byte) print_char::ch#6 + (byte*) char_cursor#6 ← ++ (byte*) char_cursor#26 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + (byte*) char_cursor#27 ← phi( print_char/(byte*) char_cursor#6 ) + (byte*) char_cursor#7 ← (byte*) char_cursor#27 + return + to:@return +print_cls: scope:[print_cls] from main + (byte*) print_cls::sc#0 ← ((byte*)) (word/signed word) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 ) + *((byte*) print_cls::sc#2) ← (byte) ' ' + (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc#1 != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + return + to:@return +main: scope:[main] from @10 + (byte*) line_cursor#25 ← phi( @10/(byte*) line_cursor#14 ) + (byte*) char_cursor#53 ← phi( @10/(byte*) char_cursor#47 ) + call print_cls param-assignment + to:main::@9 +main::@9: scope:[main] from main + (byte*) line_cursor#24 ← phi( main/(byte*) line_cursor#25 ) + (byte*) char_cursor#52 ← phi( main/(byte*) char_cursor#53 ) + (byte[10]) main::cs#0 ← { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 9, (byte/signed byte/word/signed word) 11, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 6 } + (byte) main::a#0 ← (byte/signed byte/word/signed word) 0 + to:main::@1 +main::@1: scope:[main] from main::@13 main::@9 + (byte*) line_cursor#22 ← phi( main::@13/(byte*) line_cursor#3 main::@9/(byte*) line_cursor#24 ) + (byte*) char_cursor#48 ← phi( main::@13/(byte*) char_cursor#11 main::@9/(byte*) char_cursor#52 ) + (byte) main::a#2 ← phi( main::@13/(byte) main::a#1 main::@9/(byte) main::a#0 ) + (byte/signed byte/word/signed word~) main::$1 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#2 + (byte) main::b#0 ← (byte/signed byte/word/signed word~) main::$1 + (byte) main::r#0 ← (byte) '-' + (boolean~) main::$2 ← (byte) main::a#2 < (byte) main::b#0 + (boolean~) main::$3 ← ! (boolean~) main::$2 + if((boolean~) main::$3) goto main::@2 + to:main::@5 +main::@2: scope:[main] from main::@1 main::@5 + (byte*) line_cursor#21 ← phi( main::@1/(byte*) line_cursor#22 main::@5/(byte*) line_cursor#23 ) + (byte*) char_cursor#44 ← phi( main::@1/(byte*) char_cursor#48 main::@5/(byte*) char_cursor#49 ) + (byte) main::r#6 ← phi( main::@1/(byte) main::r#0 main::@5/(byte) main::r#2 ) + (byte) main::b#1 ← phi( main::@1/(byte) main::b#0 main::@5/(byte) main::b#2 ) + (byte) main::a#3 ← phi( main::@1/(byte) main::a#2 main::@5/(byte) main::a#9 ) + (byte) printu::a#0 ← (byte) main::a#3 + (byte) printu::op#0 ← (byte) '<' + (byte) printu::b#0 ← (byte) main::b#1 + (byte) printu::res#0 ← (byte) main::r#6 + call printu param-assignment + to:main::@10 +main::@10: scope:[main] from main::@2 + (byte*) line_cursor#19 ← phi( main::@2/(byte*) line_cursor#21 ) + (byte) main::a#4 ← phi( main::@2/(byte) main::a#3 ) + (byte*) char_cursor#28 ← phi( main::@2/(byte*) char_cursor#19 ) + (byte*) char_cursor#8 ← (byte*) char_cursor#28 + (byte) main::r#1 ← (byte) '-' + (boolean~) main::$5 ← (byte) main::a#4 < (byte/signed byte/word/signed word) 3 + (boolean~) main::$6 ← ! (boolean~) main::$5 + if((boolean~) main::$6) goto main::@3 + to:main::@6 +main::@5: scope:[main] from main::@1 + (byte*) line_cursor#23 ← phi( main::@1/(byte*) line_cursor#22 ) + (byte*) char_cursor#49 ← phi( main::@1/(byte*) char_cursor#48 ) + (byte) main::b#2 ← phi( main::@1/(byte) main::b#0 ) + (byte) main::a#9 ← phi( main::@1/(byte) main::a#2 ) + (byte) main::r#2 ← (byte) '+' + to:main::@2 +main::@3: scope:[main] from main::@10 main::@6 + (byte*) line_cursor#18 ← phi( main::@10/(byte*) line_cursor#19 main::@6/(byte*) line_cursor#20 ) + (byte*) char_cursor#45 ← phi( main::@10/(byte*) char_cursor#8 main::@6/(byte*) char_cursor#50 ) + (byte) main::r#7 ← phi( main::@10/(byte) main::r#1 main::@6/(byte) main::r#4 ) + (byte) main::a#5 ← phi( main::@10/(byte) main::a#4 main::@6/(byte) main::a#10 ) + (byte) printu::a#1 ← (byte) main::a#5 + (byte) printu::op#1 ← (byte) '<' + (byte) printu::b#1 ← (byte/signed byte/word/signed word) 3 + (byte) printu::res#1 ← (byte) main::r#7 + call printu param-assignment + to:main::@11 +main::@11: scope:[main] from main::@3 + (byte*) line_cursor#16 ← phi( main::@3/(byte*) line_cursor#18 ) + (byte) main::a#6 ← phi( main::@3/(byte) main::a#5 ) + (byte*) char_cursor#29 ← phi( main::@3/(byte*) char_cursor#19 ) + (byte*) char_cursor#9 ← (byte*) char_cursor#29 + (byte) main::r#3 ← (byte) '-' + (boolean~) main::$8 ← (byte) main::a#6 < *((byte[10]) main::cs#0 + (byte) main::a#6) + (boolean~) main::$9 ← ! (boolean~) main::$8 + if((boolean~) main::$9) goto main::@4 + to:main::@7 +main::@6: scope:[main] from main::@10 + (byte*) line_cursor#20 ← phi( main::@10/(byte*) line_cursor#19 ) + (byte*) char_cursor#50 ← phi( main::@10/(byte*) char_cursor#8 ) + (byte) main::a#10 ← phi( main::@10/(byte) main::a#4 ) + (byte) main::r#4 ← (byte) '+' + to:main::@3 +main::@4: scope:[main] from main::@11 main::@7 + (byte*) line_cursor#15 ← phi( main::@11/(byte*) line_cursor#16 main::@7/(byte*) line_cursor#17 ) + (byte*) char_cursor#46 ← phi( main::@11/(byte*) char_cursor#9 main::@7/(byte*) char_cursor#51 ) + (byte) main::r#8 ← phi( main::@11/(byte) main::r#3 main::@7/(byte) main::r#5 ) + (byte) main::a#7 ← phi( main::@11/(byte) main::a#6 main::@7/(byte) main::a#11 ) + (byte) printu::a#2 ← (byte) main::a#7 + (byte) printu::op#2 ← (byte) '<' + (byte) printu::b#2 ← *((byte[10]) main::cs#0 + (byte) main::a#7) + (byte) printu::res#2 ← (byte) main::r#8 + call printu param-assignment + to:main::@12 +main::@12: scope:[main] from main::@4 + (byte) main::a#12 ← phi( main::@4/(byte) main::a#7 ) + (byte*) line_cursor#13 ← phi( main::@4/(byte*) line_cursor#15 ) + (byte*) char_cursor#30 ← phi( main::@4/(byte*) char_cursor#19 ) + (byte*) char_cursor#10 ← (byte*) char_cursor#30 + call print_ln param-assignment + to:main::@13 +main::@13: scope:[main] from main::@12 + (byte) main::a#8 ← phi( main::@12/(byte) main::a#12 ) + (byte*) char_cursor#31 ← phi( main::@12/(byte*) char_cursor#2 ) + (byte*) line_cursor#9 ← phi( main::@12/(byte*) line_cursor#2 ) + (byte*) line_cursor#3 ← (byte*) line_cursor#9 + (byte*) char_cursor#11 ← (byte*) char_cursor#31 + (byte) main::a#1 ← ++ (byte) main::a#8 + (boolean~) main::$12 ← (byte) main::a#1 != (byte/signed byte/word/signed word) 11 + if((boolean~) main::$12) goto main::@1 + to:main::@return +main::@7: scope:[main] from main::@11 + (byte*) line_cursor#17 ← phi( main::@11/(byte*) line_cursor#16 ) + (byte*) char_cursor#51 ← phi( main::@11/(byte*) char_cursor#9 ) + (byte) main::a#11 ← phi( main::@11/(byte) main::a#6 ) + (byte) main::r#5 ← (byte) '+' + to:main::@4 +main::@return: scope:[main] from main::@13 + (byte*) line_cursor#10 ← phi( main::@13/(byte*) line_cursor#3 ) + (byte*) char_cursor#32 ← phi( main::@13/(byte*) char_cursor#11 ) + (byte*) char_cursor#12 ← (byte*) char_cursor#32 + (byte*) line_cursor#4 ← (byte*) line_cursor#10 + return + to:@return +printu: scope:[printu] from main::@2 main::@3 main::@4 + (byte) printu::res#8 ← phi( main::@2/(byte) printu::res#0 main::@3/(byte) printu::res#1 main::@4/(byte) printu::res#2 ) + (byte) printu::b#6 ← phi( main::@2/(byte) printu::b#0 main::@3/(byte) printu::b#1 main::@4/(byte) printu::b#2 ) + (byte) printu::op#5 ← phi( main::@2/(byte) printu::op#0 main::@3/(byte) printu::op#1 main::@4/(byte) printu::op#2 ) + (byte) printu::a#4 ← phi( main::@2/(byte) printu::a#0 main::@3/(byte) printu::a#1 main::@4/(byte) printu::a#2 ) + (byte*) char_cursor#43 ← phi( main::@2/(byte*) char_cursor#44 main::@3/(byte*) char_cursor#45 main::@4/(byte*) char_cursor#46 ) + (byte) print_char::ch#2 ← (byte) ' ' + call print_char param-assignment + to:printu::@1 +printu::@1: scope:[printu] from printu + (byte) printu::res#7 ← phi( printu/(byte) printu::res#8 ) + (byte) printu::b#5 ← phi( printu/(byte) printu::b#6 ) + (byte) printu::op#4 ← phi( printu/(byte) printu::op#5 ) + (byte) printu::a#3 ← phi( printu/(byte) printu::a#4 ) + (byte*) char_cursor#33 ← phi( printu/(byte*) char_cursor#7 ) + (byte*) char_cursor#13 ← (byte*) char_cursor#33 + (byte) print_byte::b#0 ← (byte) printu::a#3 + call print_byte param-assignment + to:printu::@2 +printu::@2: scope:[printu] from printu::@1 + (byte) printu::res#6 ← phi( printu::@1/(byte) printu::res#7 ) + (byte) printu::b#4 ← phi( printu::@1/(byte) printu::b#5 ) + (byte) printu::op#3 ← phi( printu::@1/(byte) printu::op#4 ) + (byte*) char_cursor#34 ← phi( printu::@1/(byte*) char_cursor#5 ) + (byte*) char_cursor#14 ← (byte*) char_cursor#34 + (byte) print_char::ch#3 ← (byte) printu::op#3 + call print_char param-assignment + to:printu::@3 +printu::@3: scope:[printu] from printu::@2 + (byte) printu::res#5 ← phi( printu::@2/(byte) printu::res#6 ) + (byte) printu::b#3 ← phi( printu::@2/(byte) printu::b#4 ) + (byte*) char_cursor#35 ← phi( printu::@2/(byte*) char_cursor#7 ) + (byte*) char_cursor#15 ← (byte*) char_cursor#35 + (byte) print_byte::b#1 ← (byte) printu::b#3 + call print_byte param-assignment + to:printu::@4 +printu::@4: scope:[printu] from printu::@3 + (byte) printu::res#4 ← phi( printu::@3/(byte) printu::res#5 ) + (byte*) char_cursor#36 ← phi( printu::@3/(byte*) char_cursor#5 ) + (byte*) char_cursor#16 ← (byte*) char_cursor#36 + (byte) print_char::ch#4 ← (byte) ' ' + call print_char param-assignment + to:printu::@5 +printu::@5: scope:[printu] from printu::@4 + (byte) printu::res#3 ← phi( printu::@4/(byte) printu::res#4 ) + (byte*) char_cursor#37 ← phi( printu::@4/(byte*) char_cursor#7 ) + (byte*) char_cursor#17 ← (byte*) char_cursor#37 + (byte) print_char::ch#5 ← (byte) printu::res#3 + call print_char param-assignment + to:printu::@6 +printu::@6: scope:[printu] from printu::@5 + (byte*) char_cursor#38 ← phi( printu::@5/(byte*) char_cursor#7 ) + (byte*) char_cursor#18 ← (byte*) char_cursor#38 + to:printu::@return +printu::@return: scope:[printu] from printu::@6 + (byte*) char_cursor#39 ← phi( printu::@6/(byte*) char_cursor#18 ) + (byte*) char_cursor#19 ← (byte*) char_cursor#39 + return + to:@return +@10: scope:[] from @begin + (byte*) line_cursor#14 ← phi( @begin/(byte*) line_cursor#0 ) + (byte*) char_cursor#47 ← phi( @begin/(byte*) char_cursor#0 ) + call main param-assignment + to:@11 +@11: scope:[] from @10 + (byte*) line_cursor#11 ← phi( @10/(byte*) line_cursor#4 ) + (byte*) char_cursor#40 ← phi( @10/(byte*) char_cursor#12 ) + (byte*) char_cursor#20 ← (byte*) char_cursor#40 + (byte*) line_cursor#5 ← (byte*) line_cursor#11 + to:@end +@end: scope:[] from @11 + +SYMBOL TABLE SSA +(label) @10 +(label) @11 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#0 +(byte*) char_cursor#1 +(byte*) char_cursor#10 +(byte*) char_cursor#11 +(byte*) char_cursor#12 +(byte*) char_cursor#13 +(byte*) char_cursor#14 +(byte*) char_cursor#15 +(byte*) char_cursor#16 +(byte*) char_cursor#17 +(byte*) char_cursor#18 +(byte*) char_cursor#19 +(byte*) char_cursor#2 +(byte*) char_cursor#20 +(byte*) char_cursor#21 +(byte*) char_cursor#22 +(byte*) char_cursor#23 +(byte*) char_cursor#24 +(byte*) char_cursor#25 +(byte*) char_cursor#26 +(byte*) char_cursor#27 +(byte*) char_cursor#28 +(byte*) char_cursor#29 +(byte*) char_cursor#3 +(byte*) char_cursor#30 +(byte*) char_cursor#31 +(byte*) char_cursor#32 +(byte*) char_cursor#33 +(byte*) char_cursor#34 +(byte*) char_cursor#35 +(byte*) char_cursor#36 +(byte*) char_cursor#37 +(byte*) char_cursor#38 +(byte*) char_cursor#39 +(byte*) char_cursor#4 +(byte*) char_cursor#40 +(byte*) char_cursor#41 +(byte*) char_cursor#42 +(byte*) char_cursor#43 +(byte*) char_cursor#44 +(byte*) char_cursor#45 +(byte*) char_cursor#46 +(byte*) char_cursor#47 +(byte*) char_cursor#48 +(byte*) char_cursor#49 +(byte*) char_cursor#5 +(byte*) char_cursor#50 +(byte*) char_cursor#51 +(byte*) char_cursor#52 +(byte*) char_cursor#53 +(byte*) char_cursor#6 +(byte*) char_cursor#7 +(byte*) char_cursor#8 +(byte*) char_cursor#9 +(byte*) line_cursor +(byte*) line_cursor#0 +(byte*) line_cursor#1 +(byte*) line_cursor#10 +(byte*) line_cursor#11 +(byte*) line_cursor#12 +(byte*) line_cursor#13 +(byte*) line_cursor#14 +(byte*) line_cursor#15 +(byte*) line_cursor#16 +(byte*) line_cursor#17 +(byte*) line_cursor#18 +(byte*) line_cursor#19 +(byte*) line_cursor#2 +(byte*) line_cursor#20 +(byte*) line_cursor#21 +(byte*) line_cursor#22 +(byte*) line_cursor#23 +(byte*) line_cursor#24 +(byte*) line_cursor#25 +(byte*) line_cursor#3 +(byte*) line_cursor#4 +(byte*) line_cursor#5 +(byte*) line_cursor#6 +(byte*) line_cursor#7 +(byte*) line_cursor#8 +(byte*) line_cursor#9 +(void()) main() +(byte/signed byte/word/signed word~) main::$1 +(boolean~) main::$12 +(boolean~) main::$2 +(boolean~) main::$3 +(boolean~) main::$5 +(boolean~) main::$6 +(boolean~) main::$8 +(boolean~) main::$9 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@9 +(label) main::@return +(byte) main::a +(byte) main::a#0 +(byte) main::a#1 +(byte) main::a#10 +(byte) main::a#11 +(byte) main::a#12 +(byte) main::a#2 +(byte) main::a#3 +(byte) main::a#4 +(byte) main::a#5 +(byte) main::a#6 +(byte) main::a#7 +(byte) main::a#8 +(byte) main::a#9 +(byte) main::b +(byte) main::b#0 +(byte) main::b#1 +(byte) main::b#2 +(byte[10]) main::cs +(byte[10]) main::cs#0 +(byte) main::r +(byte) main::r#0 +(byte) main::r#1 +(byte) main::r#2 +(byte) main::r#3 +(byte) main::r#4 +(byte) main::r#5 +(byte) main::r#6 +(byte) main::r#7 +(byte) main::r#8 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(byte~) print_byte::$2 +(const string) print_byte::$4 = (string) "0123456789abcdef" +(label) print_byte::@1 +(label) print_byte::@2 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 +(byte) print_byte::b#1 +(byte) print_byte::b#2 +(byte) print_byte::b#3 +(byte[]) print_byte::hextab +(byte[]) print_byte::hextab#0 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 +(byte) print_char::ch#1 +(byte) print_char::ch#2 +(byte) print_char::ch#3 +(byte) print_char::ch#4 +(byte) print_char::ch#5 +(byte) print_char::ch#6 +(void()) print_cls() +(word/signed word~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#0 +(byte*) print_cls::sc#1 +(byte*) print_cls::sc#2 +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@2 +(label) print_ln::@return +(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) +(label) printu::@1 +(label) printu::@2 +(label) printu::@3 +(label) printu::@4 +(label) printu::@5 +(label) printu::@6 +(label) printu::@return +(byte) printu::a +(byte) printu::a#0 +(byte) printu::a#1 +(byte) printu::a#2 +(byte) printu::a#3 +(byte) printu::a#4 +(byte) printu::b +(byte) printu::b#0 +(byte) printu::b#1 +(byte) printu::b#2 +(byte) printu::b#3 +(byte) printu::b#4 +(byte) printu::b#5 +(byte) printu::b#6 +(byte) printu::op +(byte) printu::op#0 +(byte) printu::op#1 +(byte) printu::op#2 +(byte) printu::op#3 +(byte) printu::op#4 +(byte) printu::op#5 +(byte) printu::res +(byte) printu::res#0 +(byte) printu::res#1 +(byte) printu::res#2 +(byte) printu::res#3 +(byte) printu::res#4 +(byte) printu::res#5 +(byte) printu::res#6 +(byte) printu::res#7 +(byte) printu::res#8 + +OPTIMIZING CONTROL FLOW GRAPH +Inversing boolean not (boolean~) main::$3 ← (byte) main::a#2 >= (byte) main::b#0 from (boolean~) main::$2 ← (byte) main::a#2 < (byte) main::b#0 +Inversing boolean not (boolean~) main::$6 ← (byte) main::a#4 >= (byte/signed byte/word/signed word) 3 from (boolean~) main::$5 ← (byte) main::a#4 < (byte/signed byte/word/signed word) 3 +Inversing boolean not (boolean~) main::$9 ← (byte) main::a#6 >= *((byte[10]) main::cs#0 + (byte) main::a#6) from (boolean~) main::$8 ← (byte) main::a#6 < *((byte[10]) main::cs#0 + (byte) main::a#6) +Succesful SSA optimization Pass2UnaryNotSimplification +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#41 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#42 char_cursor#13 +Not aliassing across scopes: char_cursor#23 char_cursor#7 +Not aliassing across scopes: char_cursor#24 char_cursor#7 +Not aliassing across scopes: print_char::ch#6 print_char::ch#0 +Not aliassing across scopes: char_cursor#26 char_cursor#42 +Not aliassing across scopes: char_cursor#53 char_cursor#47 +Not aliassing across scopes: line_cursor#25 line_cursor#14 +Not aliassing across scopes: printu::a#0 main::a#3 +Not aliassing across scopes: printu::b#0 main::b#1 +Not aliassing across scopes: printu::res#0 main::r#6 +Not aliassing across scopes: char_cursor#28 char_cursor#19 +Not aliassing across scopes: printu::a#1 main::a#5 +Not aliassing across scopes: printu::res#1 main::r#7 +Not aliassing across scopes: char_cursor#29 char_cursor#19 +Not aliassing across scopes: printu::a#2 main::a#7 +Not aliassing across scopes: printu::res#2 main::r#8 +Not aliassing across scopes: char_cursor#30 char_cursor#19 +Not aliassing across scopes: line_cursor#9 line_cursor#2 +Not aliassing across scopes: char_cursor#31 char_cursor#2 +Not aliassing across scopes: char_cursor#43 char_cursor#44 +Not aliassing across scopes: printu::a#4 printu::a#0 +Not aliassing across scopes: printu::op#5 printu::op#0 +Not aliassing across scopes: printu::b#6 printu::b#0 +Not aliassing across scopes: printu::res#8 printu::res#0 +Not aliassing across scopes: char_cursor#33 char_cursor#7 +Not aliassing across scopes: print_byte::b#0 printu::a#3 +Not aliassing across scopes: char_cursor#34 char_cursor#5 +Not aliassing across scopes: print_char::ch#3 printu::op#3 +Not aliassing across scopes: char_cursor#35 char_cursor#7 +Not aliassing across scopes: print_byte::b#1 printu::b#3 +Not aliassing across scopes: char_cursor#36 char_cursor#5 +Not aliassing across scopes: char_cursor#37 char_cursor#7 +Not aliassing across scopes: print_char::ch#5 printu::res#3 +Not aliassing across scopes: char_cursor#38 char_cursor#7 +Not aliassing across scopes: char_cursor#40 char_cursor#12 +Not aliassing across scopes: line_cursor#11 line_cursor#4 +Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#47 (byte*) line_cursor#14 +Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#7 (byte*) char_cursor#1 (byte*) line_cursor#8 (byte*) char_cursor#22 (byte*) line_cursor#2 (byte*) char_cursor#2 +Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 +Alias (byte*) char_cursor#23 = (byte*) char_cursor#3 +Alias (byte*) char_cursor#24 = (byte*) char_cursor#4 (byte*) char_cursor#25 (byte*) char_cursor#5 +Alias (byte*) char_cursor#27 = (byte*) char_cursor#6 (byte*) char_cursor#7 +Alias (byte*) char_cursor#52 = (byte*) char_cursor#53 +Alias (byte*) line_cursor#24 = (byte*) line_cursor#25 +Alias (byte) main::b#0 = (byte/signed byte/word/signed word~) main::$1 (byte) main::b#2 +Alias (byte) main::a#10 = (byte) main::a#4 (byte) main::a#3 +Alias (byte*) line_cursor#19 = (byte*) line_cursor#21 (byte*) line_cursor#20 +Alias (byte*) char_cursor#28 = (byte*) char_cursor#8 (byte*) char_cursor#50 +Alias (byte) main::a#2 = (byte) main::a#9 +Alias (byte*) char_cursor#48 = (byte*) char_cursor#49 +Alias (byte*) line_cursor#22 = (byte*) line_cursor#23 +Alias (byte) main::a#11 = (byte) main::a#6 (byte) main::a#5 +Alias (byte*) line_cursor#16 = (byte*) line_cursor#18 (byte*) line_cursor#17 +Alias (byte*) char_cursor#29 = (byte*) char_cursor#9 (byte*) char_cursor#51 +Alias (byte*) line_cursor#13 = (byte*) line_cursor#15 +Alias (byte) main::a#12 = (byte) main::a#7 (byte) main::a#8 +Alias (byte*) char_cursor#10 = (byte*) char_cursor#30 +Alias (byte*) line_cursor#10 = (byte*) line_cursor#3 (byte*) line_cursor#9 (byte*) line_cursor#4 +Alias (byte*) char_cursor#11 = (byte*) char_cursor#31 (byte*) char_cursor#32 (byte*) char_cursor#12 +Alias (byte) printu::a#3 = (byte) printu::a#4 +Alias (byte) printu::op#3 = (byte) printu::op#4 (byte) printu::op#5 +Alias (byte) printu::b#3 = (byte) printu::b#5 (byte) printu::b#6 (byte) printu::b#4 +Alias (byte) printu::res#3 = (byte) printu::res#7 (byte) printu::res#8 (byte) printu::res#6 (byte) printu::res#5 (byte) printu::res#4 +Alias (byte*) char_cursor#13 = (byte*) char_cursor#33 +Alias (byte*) char_cursor#14 = (byte*) char_cursor#34 +Alias (byte*) char_cursor#15 = (byte*) char_cursor#35 +Alias (byte*) char_cursor#16 = (byte*) char_cursor#36 +Alias (byte*) char_cursor#17 = (byte*) char_cursor#37 +Alias (byte*) char_cursor#18 = (byte*) char_cursor#38 (byte*) char_cursor#39 (byte*) char_cursor#19 +Alias (byte*) char_cursor#20 = (byte*) char_cursor#40 +Alias (byte*) line_cursor#11 = (byte*) line_cursor#5 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#41 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#42 char_cursor#13 +Not aliassing across scopes: char_cursor#23 char_cursor#27 +Not aliassing across scopes: char_cursor#24 char_cursor#27 +Not aliassing across scopes: print_char::ch#6 print_char::ch#0 +Not aliassing across scopes: char_cursor#26 char_cursor#42 +Not aliassing across scopes: char_cursor#52 char_cursor#0 +Not aliassing across scopes: line_cursor#24 char_cursor#0 +Not aliassing across scopes: printu::a#0 main::a#10 +Not aliassing across scopes: printu::b#0 main::b#1 +Not aliassing across scopes: printu::res#0 main::r#6 +Not aliassing across scopes: char_cursor#28 char_cursor#18 +Not aliassing across scopes: printu::a#1 main::a#11 +Not aliassing across scopes: printu::res#1 main::r#7 +Not aliassing across scopes: char_cursor#29 char_cursor#18 +Not aliassing across scopes: printu::a#2 main::a#12 +Not aliassing across scopes: printu::res#2 main::r#8 +Not aliassing across scopes: char_cursor#10 char_cursor#18 +Not aliassing across scopes: line_cursor#10 line_cursor#1 +Not aliassing across scopes: char_cursor#11 line_cursor#1 +Not aliassing across scopes: char_cursor#43 char_cursor#44 +Not aliassing across scopes: printu::a#3 printu::a#0 +Not aliassing across scopes: printu::op#3 printu::op#0 +Not aliassing across scopes: printu::b#3 printu::b#0 +Not aliassing across scopes: printu::res#3 printu::res#0 +Not aliassing across scopes: char_cursor#13 char_cursor#27 +Not aliassing across scopes: print_byte::b#0 printu::a#3 +Not aliassing across scopes: char_cursor#14 char_cursor#24 +Not aliassing across scopes: print_char::ch#3 printu::op#3 +Not aliassing across scopes: char_cursor#15 char_cursor#27 +Not aliassing across scopes: print_byte::b#1 printu::b#3 +Not aliassing across scopes: char_cursor#16 char_cursor#24 +Not aliassing across scopes: char_cursor#17 char_cursor#27 +Not aliassing across scopes: print_char::ch#5 printu::res#3 +Not aliassing across scopes: char_cursor#18 char_cursor#27 +Not aliassing across scopes: char_cursor#20 char_cursor#11 +Not aliassing across scopes: line_cursor#11 line_cursor#10 +Alias (byte) main::a#10 = (byte) main::a#2 (byte) main::a#11 (byte) main::a#12 +Alias (byte) main::b#0 = (byte) main::b#1 +Alias (byte*) char_cursor#44 = (byte*) char_cursor#48 +Alias (byte*) line_cursor#13 = (byte*) line_cursor#19 (byte*) line_cursor#22 (byte*) line_cursor#16 +Alias (byte*) char_cursor#28 = (byte*) char_cursor#45 +Alias (byte*) char_cursor#29 = (byte*) char_cursor#46 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#41 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#42 char_cursor#13 +Not aliassing across scopes: char_cursor#23 char_cursor#27 +Not aliassing across scopes: char_cursor#24 char_cursor#27 +Not aliassing across scopes: print_char::ch#6 print_char::ch#0 +Not aliassing across scopes: char_cursor#26 char_cursor#42 +Not aliassing across scopes: char_cursor#52 char_cursor#0 +Not aliassing across scopes: line_cursor#24 char_cursor#0 +Not aliassing across scopes: printu::a#0 main::a#10 +Not aliassing across scopes: printu::b#0 main::b#0 +Not aliassing across scopes: printu::res#0 main::r#6 +Not aliassing across scopes: char_cursor#28 char_cursor#18 +Not aliassing across scopes: printu::a#1 main::a#10 +Not aliassing across scopes: printu::res#1 main::r#7 +Not aliassing across scopes: char_cursor#29 char_cursor#18 +Not aliassing across scopes: printu::a#2 main::a#10 +Not aliassing across scopes: printu::res#2 main::r#8 +Not aliassing across scopes: char_cursor#10 char_cursor#18 +Not aliassing across scopes: line_cursor#10 line_cursor#1 +Not aliassing across scopes: char_cursor#11 line_cursor#1 +Not aliassing across scopes: char_cursor#43 char_cursor#44 +Not aliassing across scopes: printu::a#3 printu::a#0 +Not aliassing across scopes: printu::op#3 printu::op#0 +Not aliassing across scopes: printu::b#3 printu::b#0 +Not aliassing across scopes: printu::res#3 printu::res#0 +Not aliassing across scopes: char_cursor#13 char_cursor#27 +Not aliassing across scopes: print_byte::b#0 printu::a#3 +Not aliassing across scopes: char_cursor#14 char_cursor#24 +Not aliassing across scopes: print_char::ch#3 printu::op#3 +Not aliassing across scopes: char_cursor#15 char_cursor#27 +Not aliassing across scopes: print_byte::b#1 printu::b#3 +Not aliassing across scopes: char_cursor#16 char_cursor#24 +Not aliassing across scopes: char_cursor#17 char_cursor#27 +Not aliassing across scopes: print_char::ch#5 printu::res#3 +Not aliassing across scopes: char_cursor#18 char_cursor#27 +Not aliassing across scopes: char_cursor#20 char_cursor#11 +Not aliassing across scopes: line_cursor#11 line_cursor#10 +Self Phi Eliminated (byte*) char_cursor#21 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) line_cursor#12 (byte*) line_cursor#13 +Redundant Phi (byte*) char_cursor#41 (byte*) char_cursor#10 +Redundant Phi (byte*) char_cursor#21 (byte*) char_cursor#41 +Redundant Phi (byte*) char_cursor#23 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#24 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#52 (byte*) char_cursor#0 +Redundant Phi (byte*) line_cursor#24 (byte*) char_cursor#0 +Redundant Phi (byte*) char_cursor#28 (byte*) char_cursor#18 +Redundant Phi (byte*) char_cursor#29 (byte*) char_cursor#18 +Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#18 +Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#11 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#14 (byte*) char_cursor#24 +Redundant Phi (byte*) char_cursor#15 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#24 +Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#27 +Redundant Phi (byte*) char_cursor#20 (byte*) char_cursor#11 +Redundant Phi (byte*) line_cursor#11 (byte*) line_cursor#10 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) char_cursor#42 (byte*) char_cursor#27 +Succesful SSA optimization Pass2RedundantPhiElimination +Simple Condition (boolean~) print_ln::$1 if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 +Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(word/signed word~) print_cls::$0) goto print_cls::@1 +Simple Condition (boolean~) main::$3 if((byte) main::a#10>=(byte) main::b#0) goto main::@2 +Simple Condition (boolean~) main::$6 if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 +Simple Condition (boolean~) main::$9 if((byte) main::a#10>=*((byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 +Simple Condition (boolean~) main::$12 if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@1 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) char_cursor#0 = ((byte*))1024 +Constant (const string) print_byte::hextab#0 = print_byte::$4 +Constant (const byte*) print_cls::sc#0 = ((byte*))1024 +Constant (const word/signed word) print_cls::$0 = 1024+1000 +Constant (const byte[10]) main::cs#0 = { 0, 20, 4, 9, 11, 4, 13, 8, 4, 6 } +Constant (const byte) main::a#0 = 0 +Constant (const byte) main::r#0 = '-' +Constant (const byte) printu::op#0 = '<' +Constant (const byte) main::r#1 = '-' +Constant (const byte) main::r#2 = '+' +Constant (const byte) printu::op#1 = '<' +Constant (const byte) printu::b#1 = 3 +Constant (const byte) main::r#3 = '-' +Constant (const byte) main::r#4 = '+' +Constant (const byte) printu::op#2 = '<' +Constant (const byte) main::r#5 = '+' +Constant (const byte) print_char::ch#2 = ' ' +Constant (const byte) print_char::ch#4 = ' ' +Succesful SSA optimization Pass2ConstantIdentification +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +Culled Empty Block (label) print_ln::@2 +Culled Empty Block (label) print_byte::@2 +Culled Empty Block (label) main::@9 +Not culling empty block because it shares successor with its predecessor. (label) main::@5 +Not culling empty block because it shares successor with its predecessor. (label) main::@6 +Not culling empty block because it shares successor with its predecessor. (label) main::@7 +Culled Empty Block (label) printu::@6 +Culled Empty Block (label) @11 +Succesful SSA optimization Pass2CullEmptyBlocks +Not culling empty block because it shares successor with its predecessor. (label) main::@5 +Not culling empty block because it shares successor with its predecessor. (label) main::@6 +Not culling empty block because it shares successor with its predecessor. (label) main::@7 +Not aliassing across scopes: line_cursor#6 line_cursor#13 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: print_char::ch#6 print_char::ch#0 +Not aliassing across scopes: char_cursor#44 line_cursor#1 +Not aliassing across scopes: line_cursor#13 line_cursor#1 +Not aliassing across scopes: printu::a#0 main::a#10 +Not aliassing across scopes: printu::b#0 main::b#0 +Not aliassing across scopes: printu::res#0 main::r#6 +Not aliassing across scopes: printu::a#1 main::a#10 +Not aliassing across scopes: printu::res#1 main::r#7 +Not aliassing across scopes: printu::a#2 main::a#10 +Not aliassing across scopes: printu::res#2 main::r#8 +Not aliassing across scopes: char_cursor#43 char_cursor#44 +Not aliassing across scopes: printu::a#3 printu::a#0 +Not aliassing across scopes: printu::b#3 printu::b#0 +Not aliassing across scopes: printu::res#3 printu::res#0 +Not aliassing across scopes: print_byte::b#0 printu::a#3 +Not aliassing across scopes: print_char::ch#3 printu::op#3 +Not aliassing across scopes: print_byte::b#1 printu::b#3 +Not aliassing across scopes: print_char::ch#5 printu::res#3 +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +Not culling empty block because it shares successor with its predecessor. (label) main::@5 +Not culling empty block because it shares successor with its predecessor. (label) main::@6 +Not culling empty block because it shares successor with its predecessor. (label) main::@7 +Not aliassing across scopes: line_cursor#6 line_cursor#13 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: print_char::ch#6 print_char::ch#0 +Not aliassing across scopes: char_cursor#44 line_cursor#1 +Not aliassing across scopes: line_cursor#13 line_cursor#1 +Not aliassing across scopes: printu::a#0 main::a#10 +Not aliassing across scopes: printu::b#0 main::b#0 +Not aliassing across scopes: printu::res#0 main::r#6 +Not aliassing across scopes: printu::a#1 main::a#10 +Not aliassing across scopes: printu::res#1 main::r#7 +Not aliassing across scopes: printu::a#2 main::a#10 +Not aliassing across scopes: printu::res#2 main::r#8 +Not aliassing across scopes: char_cursor#43 char_cursor#44 +Not aliassing across scopes: printu::a#3 printu::a#0 +Not aliassing across scopes: printu::b#3 printu::b#0 +Not aliassing across scopes: printu::res#3 printu::res#0 +Not aliassing across scopes: print_byte::b#0 printu::a#3 +Not aliassing across scopes: print_char::ch#3 printu::op#3 +Not aliassing across scopes: print_byte::b#1 printu::b#3 +Not aliassing across scopes: print_char::ch#5 printu::res#3 +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +Multiple usages for variable. Not optimizing sub-constant (byte) main::a#10 +OPTIMIZING CONTROL FLOW GRAPH +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with different constant siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#4 +Inlining constant with var siblings (const byte) print_char::ch#4 +Inlining constant with var siblings (const byte) print_char::ch#4 +Inlining constant with var siblings (const byte) print_char::ch#4 +Inlining constant with var siblings (const byte) print_char::ch#4 +Inlining constant with different constant siblings (const byte) print_char::ch#4 +Inlining constant with var siblings (const byte*) print_cls::sc#0 +Inlining constant with var siblings (const byte*) print_cls::sc#0 +Inlining constant with var siblings (const byte) main::a#0 +Inlining constant with var siblings (const byte) main::a#0 +Inlining constant with var siblings (const byte) main::r#0 +Inlining constant with var siblings (const byte) main::r#0 +Inlining constant with var siblings (const byte) main::r#0 +Inlining constant with different constant siblings (const byte) main::r#0 +Inlining constant with different constant siblings (const byte) main::r#0 +Inlining constant with different constant siblings (const byte) main::r#0 +Inlining constant with different constant siblings (const byte) main::r#0 +Inlining constant with different constant siblings (const byte) main::r#0 +Inlining constant with var siblings (const byte) main::r#1 +Inlining constant with var siblings (const byte) main::r#1 +Inlining constant with var siblings (const byte) main::r#1 +Inlining constant with different constant siblings (const byte) main::r#1 +Inlining constant with different constant siblings (const byte) main::r#1 +Inlining constant with different constant siblings (const byte) main::r#1 +Inlining constant with different constant siblings (const byte) main::r#1 +Inlining constant with different constant siblings (const byte) main::r#1 +Inlining constant with var siblings (const byte) main::r#2 +Inlining constant with var siblings (const byte) main::r#2 +Inlining constant with var siblings (const byte) main::r#2 +Inlining constant with different constant siblings (const byte) main::r#2 +Inlining constant with different constant siblings (const byte) main::r#2 +Inlining constant with different constant siblings (const byte) main::r#2 +Inlining constant with different constant siblings (const byte) main::r#2 +Inlining constant with different constant siblings (const byte) main::r#2 +Inlining constant with var siblings (const byte) main::r#3 +Inlining constant with var siblings (const byte) main::r#3 +Inlining constant with var siblings (const byte) main::r#3 +Inlining constant with different constant siblings (const byte) main::r#3 +Inlining constant with different constant siblings (const byte) main::r#3 +Inlining constant with different constant siblings (const byte) main::r#3 +Inlining constant with different constant siblings (const byte) main::r#3 +Inlining constant with different constant siblings (const byte) main::r#3 +Inlining constant with var siblings (const byte) main::r#4 +Inlining constant with var siblings (const byte) main::r#4 +Inlining constant with var siblings (const byte) main::r#4 +Inlining constant with different constant siblings (const byte) main::r#4 +Inlining constant with different constant siblings (const byte) main::r#4 +Inlining constant with different constant siblings (const byte) main::r#4 +Inlining constant with different constant siblings (const byte) main::r#4 +Inlining constant with different constant siblings (const byte) main::r#4 +Inlining constant with var siblings (const byte) main::r#5 +Inlining constant with var siblings (const byte) main::r#5 +Inlining constant with var siblings (const byte) main::r#5 +Inlining constant with different constant siblings (const byte) main::r#5 +Inlining constant with different constant siblings (const byte) main::r#5 +Inlining constant with different constant siblings (const byte) main::r#5 +Inlining constant with different constant siblings (const byte) main::r#5 +Inlining constant with different constant siblings (const byte) main::r#5 +Inlining constant with var siblings (const byte) printu::op#0 +Inlining constant with different constant siblings (const byte) printu::op#0 +Inlining constant with different constant siblings (const byte) printu::op#0 +Inlining constant with var siblings (const byte) printu::op#1 +Inlining constant with different constant siblings (const byte) printu::op#1 +Inlining constant with different constant siblings (const byte) printu::op#1 +Inlining constant with var siblings (const byte) printu::b#1 +Inlining constant with var siblings (const byte) printu::b#1 +Inlining constant with var siblings (const byte) printu::b#1 +Inlining constant with var siblings (const byte) printu::op#2 +Inlining constant with different constant siblings (const byte) printu::op#2 +Inlining constant with different constant siblings (const byte) printu::op#2 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Constant inlined main::r#0 = (byte) '-' +Constant inlined printu::op#0 = (byte) '<' +Constant inlined main::r#1 = (byte) '-' +Constant inlined printu::op#1 = (byte) '<' +Constant inlined print_cls::$0 = (word/signed word) 1024+(word/signed word) 1000 +Constant inlined print_cls::sc#0 = ((byte*))(word/signed word) 1024 +Constant inlined main::r#4 = (byte) '+' +Constant inlined main::r#5 = (byte) '+' +Constant inlined main::r#2 = (byte) '+' +Constant inlined printu::op#2 = (byte) '<' +Constant inlined main::r#3 = (byte) '-' +Constant inlined main::a#0 = (byte/signed byte/word/signed word) 0 +Constant inlined print_char::ch#2 = (byte) ' ' +Constant inlined print_char::ch#4 = (byte) ' ' +Constant inlined printu::b#1 = (byte/signed byte/word/signed word) 3 +Constant inlined char_cursor#0 = ((byte*))(word/signed word) 1024 +Constant inlined print_byte::$4 = (const string) print_byte::hextab#0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @10 @end main main::@1 main::@5 main::@2 main::@10 main::@6 main::@3 main::@11 main::@7 main::@4 main::@12 main::@13 main::@return print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_cls print_cls::@1 print_cls::@return +Added new block during phi lifting main::@14(between main::@13 and main::@1) +Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) +Block Sequence Planned @begin @10 @end main main::@1 main::@5 main::@2 main::@10 main::@6 main::@3 main::@11 main::@7 main::@4 main::@12 main::@13 main::@return main::@14 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_cls print_cls::@1 print_cls::@return print_cls::@3 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @10 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of print_cls +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to print_cls:5 printu:18 printu:27 printu:38 print_ln:40 +Calls in [printu] to print_char:55 print_byte:58 print_char:62 print_byte:65 print_char:67 print_char:71 +Calls in [print_byte] to print_char:82 print_char:87 + +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Created 16 initial phi equivalence classes +Coalesced [14] char_cursor#55 ← char_cursor#44 +Coalesced [15] printu::a#5 ← printu::a#0 +Coalesced [16] printu::b#7 ← printu::b#0 +Coalesced [17] printu::res#9 ← printu::res#0 +Coalesced [24] char_cursor#56 ← char_cursor#27 +Coalesced [25] printu::a#6 ← printu::a#1 +Coalesced [26] printu::res#10 ← printu::res#1 +Coalesced (already) [34] char_cursor#57 ← char_cursor#27 +Coalesced [35] printu::a#7 ← printu::a#2 +Coalesced [36] printu::b#8 ← printu::b#2 +Coalesced [37] printu::res#11 ← printu::res#2 +Coalesced [44] main::a#13 ← main::a#1 +Not coalescing [45] char_cursor#54 ← line_cursor#1 +Coalesced [46] line_cursor#26 ← line_cursor#1 +Coalesced [47] line_cursor#27 ← line_cursor#13 +Coalesced (already) [52] line_cursor#28 ← line_cursor#1 +Coalesced [54] char_cursor#60 ← char_cursor#43 +Coalesced [57] print_byte::b#4 ← print_byte::b#0 +Coalesced [60] print_char::ch#9 ← print_char::ch#3 +Coalesced (already) [61] char_cursor#61 ← char_cursor#27 +Coalesced [64] print_byte::b#5 ← print_byte::b#1 +Coalesced (already) [66] char_cursor#62 ← char_cursor#27 +Coalesced [69] print_char::ch#10 ← print_char::ch#5 +Coalesced (already) [70] char_cursor#63 ← char_cursor#27 +Coalesced [80] print_char::ch#7 ← print_char::ch#0 +Coalesced (already) [81] char_cursor#58 ← char_cursor#27 +Coalesced [85] print_char::ch#8 ← print_char::ch#1 +Coalesced (already) [86] char_cursor#59 ← char_cursor#27 +Coalesced [95] print_cls::sc#3 ← print_cls::sc#1 +Coalesced down to 13 phi equivalence classes +Not culling empty block because it shares successor with its predecessor. (label) main::@5 +Not culling empty block because it shares successor with its predecessor. (label) main::@6 +Not culling empty block because it shares successor with its predecessor. (label) main::@7 +Culled Empty Block (label) print_ln::@3 +Culled Empty Block (label) print_cls::@3 +Block Sequence Planned @begin @10 @end main main::@1 main::@5 main::@2 main::@10 main::@6 main::@3 main::@11 main::@7 main::@4 main::@12 main::@13 main::@return main::@14 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_cls print_cls::@1 print_cls::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @10 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of print_ln +Adding NOP phi() at start of printu::@4 +Adding NOP phi() at start of print_cls +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@10 +@10: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @10 + [3] phi() [ ] ( ) +main: scope:[main] from @10 + [4] phi() [ ] ( main:2 [ ] ) + [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + to:main::@1 +main::@1: scope:[main] from main main::@14 + [6] (byte*) line_cursor#13 ← phi( main::@14/(byte*) line_cursor#1 main/((byte*))(word/signed word) 1024 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [6] (byte*) char_cursor#44 ← phi( main::@14/(byte*~) char_cursor#54 main/((byte*))(word/signed word) 1024 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [6] (byte) main::a#10 ← phi( main::@14/(byte) main::a#1 main/(byte/signed byte/word/signed word) 0 ) [ main::a#10 char_cursor#44 line_cursor#13 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 ] ) + [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + [8] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + to:main::@5 +main::@5: scope:[main] from main::@1 + [9] phi() [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) + to:main::@2 +main::@2: scope:[main] from main::@1 main::@5 + [10] (byte) main::r#6 ← phi( main::@1/(byte) '-' main::@5/(byte) '+' ) [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 ] ) + [11] (byte) printu::a#0 ← (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ) + [12] (byte) printu::b#0 ← (byte) main::b#0 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ) + [13] (byte) printu::res#0 ← (byte) main::r#6 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ) + [14] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@10 +main::@10: scope:[main] from main::@2 + [15] if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@6 +main::@6: scope:[main] from main::@10 + [16] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@3 +main::@3: scope:[main] from main::@10 main::@6 + [17] (byte) main::r#7 ← phi( main::@10/(byte) '-' main::@6/(byte) '+' ) [ main::a#10 line_cursor#13 main::r#7 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 char_cursor#27 ] ) + [18] (byte) printu::a#1 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ) + [19] (byte) printu::res#1 ← (byte) main::r#7 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ) + [20] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@11 +main::@11: scope:[main] from main::@3 + [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@7 +main::@7: scope:[main] from main::@11 + [22] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@4 +main::@4: scope:[main] from main::@11 main::@7 + [23] (byte) main::r#8 ← phi( main::@11/(byte) '-' main::@7/(byte) '+' ) [ main::a#10 line_cursor#13 main::r#8 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 char_cursor#27 ] ) + [24] (byte) printu::a#2 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ) + [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) + [26] (byte) printu::res#2 ← (byte) main::r#8 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ) + [27] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:main::@12 +main::@12: scope:[main] from main::@4 + [28] phi() [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + [29] call print_ln param-assignment [ main::a#10 line_cursor#1 ] ( main:2 [ main::a#10 line_cursor#1 ] ) + to:main::@13 +main::@13: scope:[main] from main::@12 + [30] (byte) main::a#1 ← ++ (byte) main::a#10 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) + [31] if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@14 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) + to:main::@return +main::@return: scope:[main] from main::@13 + [32] return [ ] ( main:2 [ ] ) + to:@return +main::@14: scope:[main] from main::@13 + [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) + to:main::@1 +print_ln: scope:[print_ln] from main::@12 + [34] phi() [ line_cursor#13 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [35] (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#13 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#6 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#6 char_cursor#27 ] ) + [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) + [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 ] ) + to:@return +printu: scope:[printu] from main::@2 main::@3 main::@4 + [39] (byte) printu::res#3 ← phi( main::@2/(byte) printu::res#0 main::@3/(byte) printu::res#1 main::@4/(byte) printu::res#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::b#3 ← phi( main::@2/(byte) printu::b#0 main::@3/(byte/signed byte/word/signed word) 3 main::@4/(byte) printu::b#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::op#3 ← phi( main::@2/(byte) '<' main::@3/(byte) '<' main::@4/(byte) '<' ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte) printu::a#3 ← phi( main::@2/(byte) printu::a#0 main::@3/(byte) printu::a#1 main::@4/(byte) printu::a#2 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [39] (byte*) char_cursor#43 ← phi( main::@2/(byte*) char_cursor#44 main::@3/(byte*) char_cursor#27 main::@4/(byte*) char_cursor#27 ) [ char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#43 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + [40] call print_char param-assignment [ char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + to:printu::@1 +printu::@1: scope:[printu] from printu + [41] (byte) print_byte::b#0 ← (byte) printu::a#3 [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ) + [42] call print_byte param-assignment [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ) + to:printu::@2 +printu::@2: scope:[printu] from printu::@1 + [43] (byte) print_char::ch#3 ← (byte) printu::op#3 [ char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ) + [44] call print_char param-assignment [ char_cursor#27 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] ) + to:printu::@3 +printu::@3: scope:[printu] from printu::@2 + [45] (byte) print_byte::b#1 ← (byte) printu::b#3 [ char_cursor#27 printu::res#3 print_byte::b#1 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] ) + [46] call print_byte param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + to:printu::@4 +printu::@4: scope:[printu] from printu::@3 + [47] phi() [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + [48] call print_char param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + to:printu::@5 +printu::@5: scope:[printu] from printu::@4 + [49] (byte) print_char::ch#5 ← (byte) printu::res#3 [ char_cursor#27 print_char::ch#5 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] ) + [50] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:printu::@return +printu::@return: scope:[printu] from printu::@5 + [51] return [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 printu printu::@2 printu::@4 printu::@5 + [52] (byte*) char_cursor#26 ← phi( print_byte/(byte*) char_cursor#27 print_byte::@1/(byte*) char_cursor#27 printu/(byte*) char_cursor#43 printu::@2/(byte*) char_cursor#27 printu::@4/(byte*) char_cursor#27 printu::@5/(byte*) char_cursor#27 ) [ print_char::ch#6 char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] ) + [52] (byte) print_char::ch#6 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 printu/(byte) ' ' printu::@2/(byte) print_char::ch#3 printu::@4/(byte) ' ' printu::@5/(byte) print_char::ch#5 ) [ print_char::ch#6 char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 print_char::ch#6 char_cursor#26 ] ) + [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) + [54] (byte*) char_cursor#27 ← ++ (byte*) char_cursor#26 [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [55] return [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:@return +print_byte: scope:[print_byte] from printu::@1 printu::@3 + [56] (byte) print_byte::b#2 ← phi( printu::@1/(byte) print_byte::b#0 printu::@3/(byte) print_byte::b#1 ) [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ char_cursor#27 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] ) + [58] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ char_cursor#27 print_char::ch#0 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] ) + [59] call print_char param-assignment [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) + [61] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#27 print_char::ch#1 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] ) + [62] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [63] return [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + to:@return +print_cls: scope:[print_cls] from main + [64] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [65] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [67] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [69] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return + +DOMINATORS +@begin dominated by @begin +@10 dominated by @10 @begin +@end dominated by @end @10 @begin +main dominated by main @10 @begin +main::@1 dominated by main main::@1 @10 @begin +main::@5 dominated by main main::@1 main::@5 @10 @begin +main::@2 dominated by main main::@1 main::@2 @10 @begin +main::@10 dominated by main main::@1 main::@2 @10 @begin main::@10 +main::@6 dominated by main main::@1 main::@2 main::@6 @10 @begin main::@10 +main::@3 dominated by main main::@1 main::@2 main::@3 @10 @begin main::@10 +main::@11 dominated by main main::@1 main::@2 main::@3 @10 main::@11 @begin main::@10 +main::@7 dominated by main::@7 main main::@1 main::@2 main::@3 @10 main::@11 @begin main::@10 +main::@4 dominated by main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 +main::@12 dominated by main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@12 +main::@13 dominated by main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 +main::@return dominated by main::@return main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 +main::@14 dominated by main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 main::@14 +print_ln dominated by main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@12 print_ln +print_ln::@1 dominated by print_ln::@1 main main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@12 print_ln +print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 main::@2 main::@3 @10 main::@4 main::@11 @begin main::@10 main::@12 print_ln +printu dominated by main main::@1 main::@2 @10 @begin printu +printu::@1 dominated by main main::@1 main::@2 @10 @begin printu::@1 printu +printu::@2 dominated by main main::@1 main::@2 @10 @begin printu::@1 printu::@2 printu +printu::@3 dominated by main main::@1 main::@2 @10 @begin printu::@1 printu::@3 printu::@2 printu +printu::@4 dominated by main main::@1 main::@2 @10 @begin printu::@1 printu::@3 printu::@2 printu::@4 printu +printu::@5 dominated by main main::@1 main::@2 @10 @begin printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu +printu::@return dominated by main main::@1 main::@2 @10 printu::@return @begin printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu +print_char dominated by main print_char main::@1 main::@2 @10 @begin printu +print_char::@return dominated by main print_char main::@1 main::@2 @10 print_char::@return @begin printu +print_byte dominated by main main::@1 main::@2 @10 @begin print_byte printu::@1 printu +print_byte::@1 dominated by main main::@1 main::@2 print_byte::@1 @10 @begin print_byte printu::@1 printu +print_byte::@return dominated by main main::@1 main::@2 print_byte::@1 @10 @begin print_byte print_byte::@return printu::@1 printu +print_cls dominated by main @10 @begin print_cls +print_cls::@1 dominated by main @10 @begin print_cls::@1 print_cls +print_cls::@return dominated by main print_cls::@return @10 @begin print_cls::@1 print_cls + +NATURAL LOOPS +Found back edge: Loop head: main::@1 tails: main::@14 blocks: null +Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null +Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null +Populated: Loop head: main::@1 tails: main::@14 blocks: main::@14 main::@13 main::@12 main::@4 main::@11 main::@7 main::@3 main::@10 main::@6 main::@2 main::@1 main::@5 +Populated: Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Loop head: main::@1 tails: main::@14 blocks: main::@14 main::@13 main::@12 main::@4 main::@11 main::@7 main::@3 main::@10 main::@6 main::@2 main::@1 main::@5 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 1 loops in scope [main] + Loop head: main::@1 tails: main::@14 blocks: main::@14 main::@13 main::@12 main::@4 main::@11 main::@7 main::@3 main::@10 main::@6 main::@2 main::@1 main::@5 +Found 1 loops in scope [print_cls] + Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Found 0 loops in scope [printu] +Found 1 loops in scope [print_ln] + Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Found 0 loops in scope [print_char] +Found 0 loops in scope [print_byte] +Loop head: main::@1 tails: main::@14 blocks: main::@14 main::@13 main::@12 main::@4 main::@11 main::@7 main::@3 main::@10 main::@6 main::@2 main::@1 main::@5 depth: 1 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 depth: 2 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte*) char_cursor +(byte*) char_cursor#26 8.0 +(byte*) char_cursor#27 3.2926829268292686 +(byte*) char_cursor#43 35.0 +(byte*) char_cursor#44 2.75 +(byte*~) char_cursor#54 22.0 +(byte*) line_cursor +(byte*) line_cursor#1 46.42857142857143 +(byte*) line_cursor#13 0.5416666666666666 +(byte*) line_cursor#6 204.0 +(void()) main() +(byte) main::a +(byte) main::a#1 11.0 +(byte) main::a#10 5.041666666666666 +(byte) main::b +(byte) main::b#0 6.6000000000000005 +(byte[10]) main::cs +(byte) main::r +(byte) main::r#6 3.6666666666666665 +(byte) main::r#7 5.5 +(byte) main::r#8 3.6666666666666665 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 4.0 +(byte~) print_byte::$2 4.0 +(byte) print_byte::b +(byte) print_byte::b#0 4.0 +(byte) print_byte::b#1 4.0 +(byte) print_byte::b#2 2.0 +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(byte) print_char::ch +(byte) print_char::ch#0 4.0 +(byte) print_char::ch#1 4.0 +(byte) print_char::ch#3 4.0 +(byte) print_char::ch#5 4.0 +(byte) print_char::ch#6 10.0 +(void()) print_cls() +(byte*) print_cls::sc +(byte*) print_cls::sc#1 16.5 +(byte*) print_cls::sc#2 16.5 +(void()) print_ln() +(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) +(byte) printu::a +(byte) printu::a#0 7.333333333333333 +(byte) printu::a#1 11.0 +(byte) printu::a#2 7.333333333333333 +(byte) printu::a#3 17.5 +(byte) printu::b +(byte) printu::b#0 11.0 +(byte) printu::b#2 11.0 +(byte) printu::b#3 4.0 +(byte) printu::op +(byte) printu::op#3 0.5 +(byte) printu::res +(byte) printu::res#0 22.0 +(byte) printu::res#1 22.0 +(byte) printu::res#2 22.0 +(byte) printu::res#3 3.5000000000000004 + +Initial phi equivalence classes +[ main::a#10 main::a#1 ] +[ main::r#6 ] +[ main::r#7 ] +[ main::r#8 ] +[ line_cursor#6 line_cursor#13 line_cursor#1 ] +[ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +[ printu::op#3 ] +[ printu::b#3 printu::b#0 printu::b#2 ] +[ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +[ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +[ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +[ print_cls::sc#2 print_cls::sc#1 ] +Added variable main::b#0 to zero page equivalence class [ main::b#0 ] +Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] +Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] +Complete equivalence classes +[ main::a#10 main::a#1 ] +[ main::r#6 ] +[ main::r#7 ] +[ main::r#8 ] +[ line_cursor#6 line_cursor#13 line_cursor#1 ] +[ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +[ printu::op#3 ] +[ printu::b#3 printu::b#0 printu::b#2 ] +[ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +[ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +[ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +[ print_cls::sc#2 print_cls::sc#1 ] +[ main::b#0 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +Allocated zp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Allocated zp ZP_BYTE:3 [ main::r#6 ] +Allocated zp ZP_BYTE:4 [ main::r#7 ] +Allocated zp ZP_BYTE:5 [ main::r#8 ] +Allocated zp ZP_WORD:6 [ line_cursor#6 line_cursor#13 line_cursor#1 ] +Allocated zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +Allocated zp ZP_BYTE:9 [ printu::op#3 ] +Allocated zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] +Allocated zp ZP_BYTE:11 [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +Allocated zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +Allocated zp ZP_WORD:13 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +Allocated zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Allocated zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated zp ZP_BYTE:18 [ main::b#0 ] +Allocated zp ZP_BYTE:19 [ print_byte::$0 ] +Allocated zp ZP_BYTE:20 [ print_byte::$2 ] + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label line_cursor = 6 + .label char_cursor = $d +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +b10_from_bbegin: + jmp b10 +//SEG4 @10 +b10: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] +main_from_b10: + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +bend_from_b10: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label b = $12 + .label a = 2 + .label r = 3 + .label r_7 = 4 + .label r_8 = 5 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [64] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#44 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::a#10 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta a + jmp b1 + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuz1=vbuc1_minus_vbuz2 + lda #$a + sec + sbc a + sta b + //SEG18 [8] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuz1_ge_vbuz2_then_la1 + lda a + cmp b + bcs b2_from_b1 + //SEG19 [9] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + b5_from_b1: + jmp b5 + //SEG20 main::@5 + b5: + //SEG21 [10] phi from main::@5 to main::@2 [phi:main::@5->main::@2] + b2_from_b5: + //SEG22 [10] phi (byte) main::r#6 = (byte) '+' [phi:main::@5->main::@2#0] -- vbuz1=vbuc1 + lda #'+' + sta r + jmp b2 + //SEG23 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG24 [10] phi (byte) main::r#6 = (byte) '-' [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #'-' + sta r + jmp b2 + //SEG25 main::@2 + b2: + //SEG26 [11] (byte) printu::a#0 ← (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ) -- vbuz1=vbuz2 + lda a + sta printu.a + //SEG27 [12] (byte) printu::b#0 ← (byte) main::b#0 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ) -- vbuz1=vbuz2 + lda b + sta printu.b + //SEG28 [13] (byte) printu::res#0 ← (byte) main::r#6 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ) -- vbuz1=vbuz2 + lda r + sta printu.res + //SEG29 [14] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG30 [39] phi from main::@2 to printu [phi:main::@2->printu] + printu_from_b2: + //SEG31 [39] phi (byte) printu::res#3 = (byte) printu::res#0 [phi:main::@2->printu#0] -- register_copy + //SEG32 [39] phi (byte) printu::b#3 = (byte) printu::b#0 [phi:main::@2->printu#1] -- register_copy + //SEG33 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@2->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG34 [39] phi (byte) printu::a#3 = (byte) printu::a#0 [phi:main::@2->printu#3] -- register_copy + //SEG35 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#44 [phi:main::@2->printu#4] -- register_copy + jsr printu + jmp b10 + //SEG36 main::@10 + b10: + //SEG37 [15] if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_vbuc1_then_la1 + lda a + cmp #3 + bcs b3_from_b10 + //SEG38 [16] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + b6_from_b10: + jmp b6 + //SEG39 main::@6 + b6: + //SEG40 [17] phi from main::@6 to main::@3 [phi:main::@6->main::@3] + b3_from_b6: + //SEG41 [17] phi (byte) main::r#7 = (byte) '+' [phi:main::@6->main::@3#0] -- vbuz1=vbuc1 + lda #'+' + sta r_7 + jmp b3 + //SEG42 [17] phi from main::@10 to main::@3 [phi:main::@10->main::@3] + b3_from_b10: + //SEG43 [17] phi (byte) main::r#7 = (byte) '-' [phi:main::@10->main::@3#0] -- vbuz1=vbuc1 + lda #'-' + sta r_7 + jmp b3 + //SEG44 main::@3 + b3: + //SEG45 [18] (byte) printu::a#1 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ) -- vbuz1=vbuz2 + lda a + sta printu.a + //SEG46 [19] (byte) printu::res#1 ← (byte) main::r#7 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ) -- vbuz1=vbuz2 + lda r_7 + sta printu.res + //SEG47 [20] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG48 [39] phi from main::@3 to printu [phi:main::@3->printu] + printu_from_b3: + //SEG49 [39] phi (byte) printu::res#3 = (byte) printu::res#1 [phi:main::@3->printu#0] -- register_copy + //SEG50 [39] phi (byte) printu::b#3 = (byte/signed byte/word/signed word) 3 [phi:main::@3->printu#1] -- vbuz1=vbuc1 + lda #3 + sta printu.b + //SEG51 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@3->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG52 [39] phi (byte) printu::a#3 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy + //SEG53 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@3->printu#4] -- register_copy + jsr printu + jmp b11 + //SEG54 main::@11 + b11: + //SEG55 [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuz1_then_la1 + lda a + tay + cmp cs,y + bcs b4_from_b11 + //SEG56 [22] phi from main::@11 to main::@7 [phi:main::@11->main::@7] + b7_from_b11: + jmp b7 + //SEG57 main::@7 + b7: + //SEG58 [23] phi from main::@7 to main::@4 [phi:main::@7->main::@4] + b4_from_b7: + //SEG59 [23] phi (byte) main::r#8 = (byte) '+' [phi:main::@7->main::@4#0] -- vbuz1=vbuc1 + lda #'+' + sta r_8 + jmp b4 + //SEG60 [23] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + b4_from_b11: + //SEG61 [23] phi (byte) main::r#8 = (byte) '-' [phi:main::@11->main::@4#0] -- vbuz1=vbuc1 + lda #'-' + sta r_8 + jmp b4 + //SEG62 main::@4 + b4: + //SEG63 [24] (byte) printu::a#2 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ) -- vbuz1=vbuz2 + lda a + sta printu.a + //SEG64 [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy a + lda cs,y + sta printu.b + //SEG65 [26] (byte) printu::res#2 ← (byte) main::r#8 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ) -- vbuz1=vbuz2 + lda r_8 + sta printu.res + //SEG66 [27] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG67 [39] phi from main::@4 to printu [phi:main::@4->printu] + printu_from_b4: + //SEG68 [39] phi (byte) printu::res#3 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy + //SEG69 [39] phi (byte) printu::b#3 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy + //SEG70 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@4->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG71 [39] phi (byte) printu::a#3 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy + //SEG72 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@4->printu#4] -- register_copy + jsr printu + //SEG73 [28] phi from main::@4 to main::@12 [phi:main::@4->main::@12] + b12_from_b4: + jmp b12 + //SEG74 main::@12 + b12: + //SEG75 [29] call print_ln param-assignment [ main::a#10 line_cursor#1 ] ( main:2 [ main::a#10 line_cursor#1 ] ) + //SEG76 [34] phi from main::@12 to print_ln [phi:main::@12->print_ln] + print_ln_from_b12: + jsr print_ln + jmp b13 + //SEG77 main::@13 + b13: + //SEG78 [30] (byte) main::a#1 ← ++ (byte) main::a#10 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG79 [31] if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@14 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda a + cmp #$b + bne b14 + jmp breturn + //SEG80 main::@return + breturn: + //SEG81 [32] return [ ] ( main:2 [ ] ) + rts + //SEG82 main::@14 + b14: + //SEG83 [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG84 [6] phi from main::@14 to main::@1 [phi:main::@14->main::@1] + b1_from_b14: + //SEG85 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@14->main::@1#0] -- register_copy + //SEG86 [6] phi (byte*) char_cursor#44 = (byte*~) char_cursor#54 [phi:main::@14->main::@1#1] -- register_copy + //SEG87 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@14->main::@1#2] -- register_copy + jmp b1 + cs: .byte 0, $14, 4, 9, $b, 4, $d, 8, 4, 6 +} +//SEG88 print_ln +print_ln: { + //SEG89 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG90 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG91 print_ln::@1 + b1: + //SEG92 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG93 [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG94 print_ln::@return + breturn: + //SEG95 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 ] ) + rts +} +//SEG96 printu +printu: { + .label a = 8 + .label b = $a + .label res = $b + .label op = 9 + //SEG97 [40] call print_char param-assignment [ char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG98 [52] phi from printu to print_char [phi:printu->print_char] + print_char_from_printu: + //SEG99 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#43 [phi:printu->print_char#0] -- register_copy + //SEG100 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + jmp b1 + //SEG101 printu::@1 + b1: + //SEG102 [41] (byte) print_byte::b#0 ← (byte) printu::a#3 [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ) -- vbuz1=vbuz2 + lda a + sta print_byte.b + //SEG103 [42] call print_byte param-assignment [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG104 [56] phi from printu::@1 to print_byte [phi:printu::@1->print_byte] + print_byte_from_b1: + //SEG105 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:printu::@1->print_byte#0] -- register_copy + jsr print_byte + jmp b2 + //SEG106 printu::@2 + b2: + //SEG107 [43] (byte) print_char::ch#3 ← (byte) printu::op#3 [ char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ) -- vbuz1=vbuz2 + lda op + sta print_char.ch + //SEG108 [44] call print_char param-assignment [ char_cursor#27 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] ) + //SEG109 [52] phi from printu::@2 to print_char [phi:printu::@2->print_char] + print_char_from_b2: + //SEG110 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@2->print_char#0] -- register_copy + //SEG111 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#3 [phi:printu::@2->print_char#1] -- register_copy + jsr print_char + jmp b3 + //SEG112 printu::@3 + b3: + //SEG113 [45] (byte) print_byte::b#1 ← (byte) printu::b#3 [ char_cursor#27 printu::res#3 print_byte::b#1 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] ) -- vbuz1=vbuz2 + lda b + sta print_byte.b + //SEG114 [46] call print_byte param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG115 [56] phi from printu::@3 to print_byte [phi:printu::@3->print_byte] + print_byte_from_b3: + //SEG116 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:printu::@3->print_byte#0] -- register_copy + jsr print_byte + //SEG117 [47] phi from printu::@3 to printu::@4 [phi:printu::@3->printu::@4] + b4_from_b3: + jmp b4 + //SEG118 printu::@4 + b4: + //SEG119 [48] call print_char param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG120 [52] phi from printu::@4 to print_char [phi:printu::@4->print_char] + print_char_from_b4: + //SEG121 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@4->print_char#0] -- register_copy + //SEG122 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu::@4->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + jmp b5 + //SEG123 printu::@5 + b5: + //SEG124 [49] (byte) print_char::ch#5 ← (byte) printu::res#3 [ char_cursor#27 print_char::ch#5 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] ) -- vbuz1=vbuz2 + lda res + sta print_char.ch + //SEG125 [50] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG126 [52] phi from printu::@5 to print_char [phi:printu::@5->print_char] + print_char_from_b5: + //SEG127 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@5->print_char#0] -- register_copy + //SEG128 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:printu::@5->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG129 printu::@return + breturn: + //SEG130 [51] return [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + rts +} +//SEG131 print_char +print_char: { + .label ch = $c + //SEG132 [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) -- _deref_pbuz1=vbuz2 + lda ch + ldy #0 + sta (char_cursor),y + //SEG133 [54] (byte*) char_cursor#27 ← ++ (byte*) char_cursor#26 [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG134 print_char::@return + breturn: + //SEG135 [55] return [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts +} +//SEG136 print_byte +print_byte: { + .label _0 = $13 + .label _2 = $14 + .label b = $f + //SEG137 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ char_cursor#27 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + //SEG138 [58] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ char_cursor#27 print_char::ch#0 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _0 + lda hextab,y + sta print_char.ch + //SEG139 [59] call print_char param-assignment [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + //SEG140 [52] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG141 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte->print_char#0] -- register_copy + //SEG142 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG143 print_byte::@1 + b1: + //SEG144 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda b + and #$f + sta _2 + //SEG145 [61] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#27 print_char::ch#1 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _2 + lda hextab,y + sta print_char.ch + //SEG146 [62] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + //SEG147 [52] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG148 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG149 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG150 print_byte::@return + breturn: + //SEG151 [63] return [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG152 print_cls +print_cls: { + .label sc = $10 + //SEG153 [65] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG154 [65] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG155 [65] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG156 [65] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG157 print_cls::@1 + b1: + //SEG158 [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG159 [67] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG160 [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG161 print_cls::@return + breturn: + //SEG162 [69] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Potential register analysis [21] if(main::a#10>=*(main::cs#0 + main::a#10)) goto main::@4 missing fragment vbuyy_ge_pbuc1_derefidx_vbuyy_then_la1(main:: vbuyy=(byte) main::a#10 pbuc1=(const byte[10]) main::cs#0 la1=(label) main::b4_from_b11 ) allocation: reg byte y [ main::a#10 main::a#1 ] +MISSING FRAGMENTS + vbuyy_ge_pbuc1_derefidx_vbuyy_then_la1(main:: vbuyy=(byte) main::a#10 pbuc1=(const byte[10]) main::cs#0 la1=(label) main::b4_from_b11 ) +Statement [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Statement [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) always clobbers reg byte a +Statement [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ printu::op#3 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ printu::op#3 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +Statement [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) always clobbers reg byte a +Statement [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) always clobbers reg byte a reg byte y +Statement [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::r#8 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +Statement [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) always clobbers reg byte a +Statement [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) always clobbers reg byte y +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) always clobbers reg byte a +Statement [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) always clobbers reg byte a +Statement [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) always clobbers reg byte a reg byte y +Statement [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) always clobbers reg byte a +Statement [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) always clobbers reg byte a +Statement [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) always clobbers reg byte a +Statement [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) always clobbers reg byte y +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) always clobbers reg byte a +Statement [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::a#10 main::a#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_BYTE:3 [ main::r#6 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::r#7 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ main::r#8 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:6 [ line_cursor#6 line_cursor#13 line_cursor#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] : zp ZP_BYTE:8 , reg byte x , +Potential registers zp ZP_BYTE:9 [ printu::op#3 ] : zp ZP_BYTE:9 , reg byte x , +Potential registers zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] : zp ZP_BYTE:10 , reg byte x , +Potential registers zp ZP_BYTE:11 [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] : zp ZP_BYTE:11 , reg byte x , +Potential registers zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:13 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] : zp ZP_WORD:13 , +Potential registers zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_BYTE:18 [ main::b#0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:19 [ print_byte::$0 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ print_byte::$2 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [] 250.97: zp ZP_WORD:6 [ line_cursor#6 line_cursor#13 line_cursor#1 ] 71.04: zp ZP_WORD:13 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +Uplift Scope [printu] 69.5: zp ZP_BYTE:11 [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] 43.17: zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] 26: zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] 0.5: zp ZP_BYTE:9 [ printu::op#3 ] +Uplift Scope [main] 16.04: zp ZP_BYTE:2 [ main::a#10 main::a#1 ] 6.6: zp ZP_BYTE:18 [ main::b#0 ] 5.5: zp ZP_BYTE:4 [ main::r#7 ] 3.67: zp ZP_BYTE:3 [ main::r#6 ] 3.67: zp ZP_BYTE:5 [ main::r#8 ] +Uplift Scope [print_cls] 33: zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] +Uplift Scope [print_char] 26: zp ZP_BYTE:12 [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +Uplift Scope [print_byte] 10: zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:19 [ print_byte::$0 ] 4: zp ZP_BYTE:20 [ print_byte::$2 ] +Uplift Scope [print_ln] + +Uplifting [] best 7236 combination zp ZP_WORD:6 [ line_cursor#6 line_cursor#13 line_cursor#1 ] zp ZP_WORD:13 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +Uplifting [printu] best 7143 combination reg byte x [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] zp ZP_BYTE:9 [ printu::op#3 ] +Uplifting [main] best 6803 combination zp ZP_BYTE:2 [ main::a#10 main::a#1 ] reg byte y [ main::b#0 ] reg byte x [ main::r#7 ] reg byte x [ main::r#6 ] reg byte x [ main::r#8 ] +Uplifting [print_cls] best 6803 combination zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [print_char] best 6784 combination reg byte a [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +Uplifting [print_byte] best 6776 combination zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte y [ print_byte::$2 ] +Uplifting [print_ln] best 6776 combination +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +Uplifting [printu] best 6776 combination zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] +Uplifting [printu] best 6776 combination zp ZP_BYTE:10 [ printu::b#3 printu::b#0 printu::b#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Uplifting [main] best 6776 combination zp ZP_BYTE:2 [ main::a#10 main::a#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Uplifting [print_byte] best 6776 combination zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ printu::op#3 ] +Uplifting [printu] best 6776 combination zp ZP_BYTE:9 [ printu::op#3 ] +Coalescing zero page register [ zp ZP_BYTE:2 [ main::a#10 main::a#1 ] ] with [ zp ZP_BYTE:8 [ printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ line_cursor#6 line_cursor#13 line_cursor#1 ] ] with [ zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:5 [ printu::op#3 ] +Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:6 [ printu::b#3 printu::b#0 printu::b#2 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:7 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:9 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label line_cursor = 3 + .label char_cursor = 7 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +b10_from_bbegin: + jmp b10 +//SEG4 @10 +b10: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] +main_from_b10: + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +bend_from_b10: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label a = 2 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [64] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#44 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::a#10 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta a + jmp b1 + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuyy=vbuc1_minus_vbuz1 + lda #$a + sec + sbc a + tay + //SEG18 [8] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuz1_ge_vbuyy_then_la1 + cpy a + bcc b2_from_b1 + //SEG19 [9] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + b5_from_b1: + jmp b5 + //SEG20 main::@5 + b5: + //SEG21 [10] phi from main::@5 to main::@2 [phi:main::@5->main::@2] + b2_from_b5: + //SEG22 [10] phi (byte) main::r#6 = (byte) '+' [phi:main::@5->main::@2#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b2 + //SEG23 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG24 [10] phi (byte) main::r#6 = (byte) '-' [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 + ldx #'-' + jmp b2 + //SEG25 main::@2 + b2: + //SEG26 [11] (byte) printu::a#0 ← (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ) + // (byte) printu::a#0 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG27 [12] (byte) printu::b#0 ← (byte) main::b#0 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ) -- vbuz1=vbuyy + sty printu.b + //SEG28 [13] (byte) printu::res#0 ← (byte) main::r#6 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ) + // (byte) printu::res#0 = (byte) main::r#6 // register copy reg byte x + //SEG29 [14] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG30 [39] phi from main::@2 to printu [phi:main::@2->printu] + printu_from_b2: + //SEG31 [39] phi (byte) printu::res#3 = (byte) printu::res#0 [phi:main::@2->printu#0] -- register_copy + //SEG32 [39] phi (byte) printu::b#3 = (byte) printu::b#0 [phi:main::@2->printu#1] -- register_copy + //SEG33 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@2->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG34 [39] phi (byte) printu::a#3 = (byte) printu::a#0 [phi:main::@2->printu#3] -- register_copy + //SEG35 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#44 [phi:main::@2->printu#4] -- register_copy + jsr printu + jmp b10 + //SEG36 main::@10 + b10: + //SEG37 [15] if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_vbuc1_then_la1 + lda a + cmp #3 + bcs b3_from_b10 + //SEG38 [16] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + b6_from_b10: + jmp b6 + //SEG39 main::@6 + b6: + //SEG40 [17] phi from main::@6 to main::@3 [phi:main::@6->main::@3] + b3_from_b6: + //SEG41 [17] phi (byte) main::r#7 = (byte) '+' [phi:main::@6->main::@3#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b3 + //SEG42 [17] phi from main::@10 to main::@3 [phi:main::@10->main::@3] + b3_from_b10: + //SEG43 [17] phi (byte) main::r#7 = (byte) '-' [phi:main::@10->main::@3#0] -- vbuxx=vbuc1 + ldx #'-' + jmp b3 + //SEG44 main::@3 + b3: + //SEG45 [18] (byte) printu::a#1 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ) + // (byte) printu::a#1 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG46 [19] (byte) printu::res#1 ← (byte) main::r#7 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ) + // (byte) printu::res#1 = (byte) main::r#7 // register copy reg byte x + //SEG47 [20] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG48 [39] phi from main::@3 to printu [phi:main::@3->printu] + printu_from_b3: + //SEG49 [39] phi (byte) printu::res#3 = (byte) printu::res#1 [phi:main::@3->printu#0] -- register_copy + //SEG50 [39] phi (byte) printu::b#3 = (byte/signed byte/word/signed word) 3 [phi:main::@3->printu#1] -- vbuz1=vbuc1 + lda #3 + sta printu.b + //SEG51 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@3->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG52 [39] phi (byte) printu::a#3 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy + //SEG53 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@3->printu#4] -- register_copy + jsr printu + jmp b11 + //SEG54 main::@11 + b11: + //SEG55 [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuz1_then_la1 + lda a + tay + cmp cs,y + bcs b4_from_b11 + //SEG56 [22] phi from main::@11 to main::@7 [phi:main::@11->main::@7] + b7_from_b11: + jmp b7 + //SEG57 main::@7 + b7: + //SEG58 [23] phi from main::@7 to main::@4 [phi:main::@7->main::@4] + b4_from_b7: + //SEG59 [23] phi (byte) main::r#8 = (byte) '+' [phi:main::@7->main::@4#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b4 + //SEG60 [23] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + b4_from_b11: + //SEG61 [23] phi (byte) main::r#8 = (byte) '-' [phi:main::@11->main::@4#0] -- vbuxx=vbuc1 + ldx #'-' + jmp b4 + //SEG62 main::@4 + b4: + //SEG63 [24] (byte) printu::a#2 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ) + // (byte) printu::a#2 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG64 [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy a + lda cs,y + sta printu.b + //SEG65 [26] (byte) printu::res#2 ← (byte) main::r#8 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ) + // (byte) printu::res#2 = (byte) main::r#8 // register copy reg byte x + //SEG66 [27] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG67 [39] phi from main::@4 to printu [phi:main::@4->printu] + printu_from_b4: + //SEG68 [39] phi (byte) printu::res#3 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy + //SEG69 [39] phi (byte) printu::b#3 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy + //SEG70 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@4->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG71 [39] phi (byte) printu::a#3 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy + //SEG72 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@4->printu#4] -- register_copy + jsr printu + //SEG73 [28] phi from main::@4 to main::@12 [phi:main::@4->main::@12] + b12_from_b4: + jmp b12 + //SEG74 main::@12 + b12: + //SEG75 [29] call print_ln param-assignment [ main::a#10 line_cursor#1 ] ( main:2 [ main::a#10 line_cursor#1 ] ) + //SEG76 [34] phi from main::@12 to print_ln [phi:main::@12->print_ln] + print_ln_from_b12: + jsr print_ln + jmp b13 + //SEG77 main::@13 + b13: + //SEG78 [30] (byte) main::a#1 ← ++ (byte) main::a#10 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG79 [31] if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@14 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda a + cmp #$b + bne b14 + jmp breturn + //SEG80 main::@return + breturn: + //SEG81 [32] return [ ] ( main:2 [ ] ) + rts + //SEG82 main::@14 + b14: + //SEG83 [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG84 [6] phi from main::@14 to main::@1 [phi:main::@14->main::@1] + b1_from_b14: + //SEG85 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@14->main::@1#0] -- register_copy + //SEG86 [6] phi (byte*) char_cursor#44 = (byte*~) char_cursor#54 [phi:main::@14->main::@1#1] -- register_copy + //SEG87 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@14->main::@1#2] -- register_copy + jmp b1 + cs: .byte 0, $14, 4, 9, $b, 4, $d, 8, 4, 6 +} +//SEG88 print_ln +print_ln: { + //SEG89 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG90 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG91 print_ln::@1 + b1: + //SEG92 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG93 [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG94 print_ln::@return + breturn: + //SEG95 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 ] ) + rts +} +//SEG96 printu +printu: { + .label a = 2 + .label b = 6 + .label op = 5 + //SEG97 [40] call print_char param-assignment [ char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG98 [52] phi from printu to print_char [phi:printu->print_char] + print_char_from_printu: + //SEG99 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#43 [phi:printu->print_char#0] -- register_copy + //SEG100 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + jmp b1 + //SEG101 printu::@1 + b1: + //SEG102 [41] (byte) print_byte::b#0 ← (byte) printu::a#3 [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ) -- vbuz1=vbuz2 + lda a + sta print_byte.b + //SEG103 [42] call print_byte param-assignment [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG104 [56] phi from printu::@1 to print_byte [phi:printu::@1->print_byte] + print_byte_from_b1: + //SEG105 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:printu::@1->print_byte#0] -- register_copy + jsr print_byte + jmp b2 + //SEG106 printu::@2 + b2: + //SEG107 [43] (byte) print_char::ch#3 ← (byte) printu::op#3 [ char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ) -- vbuaa=vbuz1 + lda op + //SEG108 [44] call print_char param-assignment [ char_cursor#27 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] ) + //SEG109 [52] phi from printu::@2 to print_char [phi:printu::@2->print_char] + print_char_from_b2: + //SEG110 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@2->print_char#0] -- register_copy + //SEG111 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#3 [phi:printu::@2->print_char#1] -- register_copy + jsr print_char + jmp b3 + //SEG112 printu::@3 + b3: + //SEG113 [45] (byte) print_byte::b#1 ← (byte) printu::b#3 [ char_cursor#27 printu::res#3 print_byte::b#1 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] ) -- vbuz1=vbuz2 + lda b + sta print_byte.b + //SEG114 [46] call print_byte param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG115 [56] phi from printu::@3 to print_byte [phi:printu::@3->print_byte] + print_byte_from_b3: + //SEG116 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:printu::@3->print_byte#0] -- register_copy + jsr print_byte + //SEG117 [47] phi from printu::@3 to printu::@4 [phi:printu::@3->printu::@4] + b4_from_b3: + jmp b4 + //SEG118 printu::@4 + b4: + //SEG119 [48] call print_char param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG120 [52] phi from printu::@4 to print_char [phi:printu::@4->print_char] + print_char_from_b4: + //SEG121 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@4->print_char#0] -- register_copy + //SEG122 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + jmp b5 + //SEG123 printu::@5 + b5: + //SEG124 [49] (byte) print_char::ch#5 ← (byte) printu::res#3 [ char_cursor#27 print_char::ch#5 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] ) -- vbuaa=vbuxx + txa + //SEG125 [50] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG126 [52] phi from printu::@5 to print_char [phi:printu::@5->print_char] + print_char_from_b5: + //SEG127 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@5->print_char#0] -- register_copy + //SEG128 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:printu::@5->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG129 printu::@return + breturn: + //SEG130 [51] return [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + rts +} +//SEG131 print_char +print_char: { + //SEG132 [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG133 [54] (byte*) char_cursor#27 ← ++ (byte*) char_cursor#26 [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG134 print_char::@return + breturn: + //SEG135 [55] return [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts +} +//SEG136 print_byte +print_byte: { + .label b = 9 + //SEG137 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ char_cursor#27 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] ) -- vbuyy=vbuz1_ror_4 + lda b + lsr + lsr + lsr + lsr + tay + //SEG138 [58] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ char_cursor#27 print_char::ch#0 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG139 [59] call print_char param-assignment [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + //SEG140 [52] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG141 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte->print_char#0] -- register_copy + //SEG142 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG143 print_byte::@1 + b1: + //SEG144 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) -- vbuyy=vbuz1_band_vbuc1 + lda b + and #$f + tay + //SEG145 [61] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#27 print_char::ch#1 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG146 [62] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + //SEG147 [52] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG148 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG149 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG150 print_byte::@return + breturn: + //SEG151 [63] return [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG152 print_cls +print_cls: { + .label sc = 3 + //SEG153 [65] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG154 [65] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG155 [65] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG156 [65] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG157 print_cls::@1 + b1: + //SEG158 [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG159 [67] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG160 [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG161 print_cls::@return + breturn: + //SEG162 [69] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b10 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b5 +Removing instruction jmp b2 +Removing instruction jmp b10 +Removing instruction jmp b6 +Removing instruction jmp b3 +Removing instruction jmp b11 +Removing instruction jmp b7 +Removing instruction jmp b4 +Removing instruction jmp b12 +Removing instruction jmp b13 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Removing instruction bbegin: +Removing instruction b10_from_bbegin: +Removing instruction main_from_b10: +Removing instruction bend_from_b10: +Removing instruction b5_from_b1: +Removing instruction b2_from_b5: +Removing instruction b6_from_b10: +Removing instruction b3_from_b6: +Removing instruction b7_from_b11: +Removing instruction b4_from_b7: +Removing instruction b12_from_b4: +Removing instruction print_ln_from_b12: +Removing instruction b1_from_print_ln: +Removing instruction b1_from_b1: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b10: +Removing instruction bend: +Removing instruction print_cls_from_main: +Removing instruction b1_from_main: +Removing instruction b5: +Removing instruction printu_from_b2: +Removing instruction b10: +Removing instruction b6: +Removing instruction printu_from_b3: +Removing instruction b11: +Removing instruction b7: +Removing instruction printu_from_b4: +Removing instruction b12: +Removing instruction b13: +Removing instruction breturn: +Removing instruction b1_from_b14: +Removing instruction breturn: +Removing instruction print_char_from_printu: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction b2: +Removing instruction print_char_from_b2: +Removing instruction b3: +Removing instruction print_byte_from_b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction print_char_from_b5: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction b1_from_print_cls: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label b2_from_b1 to b5 +Relabelling long label b3_from_b10 to b6 +Relabelling long label b4_from_b11 to b7 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +(label) @10 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#26 char_cursor zp ZP_WORD:7 8.0 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:7 3.2926829268292686 +(byte*) char_cursor#43 char_cursor zp ZP_WORD:7 35.0 +(byte*) char_cursor#44 char_cursor zp ZP_WORD:7 2.75 +(byte*~) char_cursor#54 char_cursor zp ZP_WORD:7 22.0 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:3 46.42857142857143 +(byte*) line_cursor#13 line_cursor zp ZP_WORD:3 0.5416666666666666 +(byte*) line_cursor#6 line_cursor zp ZP_WORD:3 204.0 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@return +(byte) main::a +(byte) main::a#1 a zp ZP_BYTE:2 11.0 +(byte) main::a#10 a zp ZP_BYTE:2 5.041666666666666 +(byte) main::b +(byte) main::b#0 reg byte y 6.6000000000000005 +(byte[10]) main::cs +(const byte[10]) main::cs#0 cs = { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 9, (byte/signed byte/word/signed word) 11, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 6 } +(byte) main::r +(byte) main::r#6 reg byte x 3.6666666666666665 +(byte) main::r#7 reg byte x 5.5 +(byte) main::r#8 reg byte x 3.6666666666666665 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte y 4.0 +(byte~) print_byte::$2 reg byte y 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 b zp ZP_BYTE:9 4.0 +(byte) print_byte::b#1 b zp ZP_BYTE:9 4.0 +(byte) print_byte::b#2 b zp ZP_BYTE:9 2.0 +(byte[]) print_byte::hextab +(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef" +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#3 reg byte a 4.0 +(byte) print_char::ch#5 reg byte a 4.0 +(byte) print_char::ch#6 reg byte a 10.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) +(label) printu::@1 +(label) printu::@2 +(label) printu::@3 +(label) printu::@4 +(label) printu::@5 +(label) printu::@return +(byte) printu::a +(byte) printu::a#0 a zp ZP_BYTE:2 7.333333333333333 +(byte) printu::a#1 a zp ZP_BYTE:2 11.0 +(byte) printu::a#2 a zp ZP_BYTE:2 7.333333333333333 +(byte) printu::a#3 a zp ZP_BYTE:2 17.5 +(byte) printu::b +(byte) printu::b#0 b zp ZP_BYTE:6 11.0 +(byte) printu::b#2 b zp ZP_BYTE:6 11.0 +(byte) printu::b#3 b zp ZP_BYTE:6 4.0 +(byte) printu::op +(byte) printu::op#3 op zp ZP_BYTE:5 0.5 +(byte) printu::res +(byte) printu::res#0 reg byte x 22.0 +(byte) printu::res#1 reg byte x 22.0 +(byte) printu::res#2 reg byte x 22.0 +(byte) printu::res#3 reg byte x 3.5000000000000004 + +zp ZP_BYTE:2 [ main::a#10 main::a#1 printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +reg byte x [ main::r#6 ] +reg byte x [ main::r#7 ] +reg byte x [ main::r#8 ] +zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_BYTE:5 [ printu::op#3 ] +zp ZP_BYTE:6 [ printu::b#3 printu::b#0 printu::b#2 ] +reg byte x [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +reg byte a [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +zp ZP_WORD:7 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +zp ZP_BYTE:9 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +reg byte y [ main::b#0 ] +reg byte y [ print_byte::$0 ] +reg byte y [ print_byte::$2 ] + + +FINAL ASSEMBLER +Score: 5594 + +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label line_cursor = 3 + .label char_cursor = 7 +//SEG2 @begin +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +//SEG4 @10 +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +//SEG8 @end +//SEG9 main +main: { + .label a = 2 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [64] phi from main to print_cls [phi:main->print_cls] + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#44 = ((byte*))(word/signed word) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::a#10 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta a + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::b#0 ← (byte/signed byte/word/signed word) 10 - (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuyy=vbuc1_minus_vbuz1 + lda #$a + sec + sbc a + tay + //SEG18 [8] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 ] ) -- vbuz1_ge_vbuyy_then_la1 + cpy a + bcc b5 + //SEG19 [9] phi from main::@1 to main::@5 [phi:main::@1->main::@5] + //SEG20 main::@5 + //SEG21 [10] phi from main::@5 to main::@2 [phi:main::@5->main::@2] + //SEG22 [10] phi (byte) main::r#6 = (byte) '+' [phi:main::@5->main::@2#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b2 + //SEG23 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b5: + //SEG24 [10] phi (byte) main::r#6 = (byte) '-' [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 + ldx #'-' + //SEG25 main::@2 + b2: + //SEG26 [11] (byte) printu::a#0 ← (byte) main::a#10 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::b#0 main::r#6 printu::a#0 ] ) + // (byte) printu::a#0 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG27 [12] (byte) printu::b#0 ← (byte) main::b#0 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 main::r#6 printu::a#0 printu::b#0 ] ) -- vbuz1=vbuyy + sty printu.b + //SEG28 [13] (byte) printu::res#0 ← (byte) main::r#6 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ( main:2 [ main::a#10 char_cursor#44 line_cursor#13 printu::a#0 printu::b#0 printu::res#0 ] ) + // (byte) printu::res#0 = (byte) main::r#6 // register copy reg byte x + //SEG29 [14] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG30 [39] phi from main::@2 to printu [phi:main::@2->printu] + //SEG31 [39] phi (byte) printu::res#3 = (byte) printu::res#0 [phi:main::@2->printu#0] -- register_copy + //SEG32 [39] phi (byte) printu::b#3 = (byte) printu::b#0 [phi:main::@2->printu#1] -- register_copy + //SEG33 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@2->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG34 [39] phi (byte) printu::a#3 = (byte) printu::a#0 [phi:main::@2->printu#3] -- register_copy + //SEG35 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#44 [phi:main::@2->printu#4] -- register_copy + jsr printu + //SEG36 main::@10 + //SEG37 [15] if((byte) main::a#10>=(byte/signed byte/word/signed word) 3) goto main::@3 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_vbuc1_then_la1 + lda a + cmp #3 + bcs b6 + //SEG38 [16] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + //SEG39 main::@6 + //SEG40 [17] phi from main::@6 to main::@3 [phi:main::@6->main::@3] + //SEG41 [17] phi (byte) main::r#7 = (byte) '+' [phi:main::@6->main::@3#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b3 + //SEG42 [17] phi from main::@10 to main::@3 [phi:main::@10->main::@3] + b6: + //SEG43 [17] phi (byte) main::r#7 = (byte) '-' [phi:main::@10->main::@3#0] -- vbuxx=vbuc1 + ldx #'-' + //SEG44 main::@3 + b3: + //SEG45 [18] (byte) printu::a#1 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#7 printu::a#1 char_cursor#27 ] ) + // (byte) printu::a#1 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG46 [19] (byte) printu::res#1 ← (byte) main::r#7 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#1 printu::res#1 char_cursor#27 ] ) + // (byte) printu::res#1 = (byte) main::r#7 // register copy reg byte x + //SEG47 [20] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG48 [39] phi from main::@3 to printu [phi:main::@3->printu] + //SEG49 [39] phi (byte) printu::res#3 = (byte) printu::res#1 [phi:main::@3->printu#0] -- register_copy + //SEG50 [39] phi (byte) printu::b#3 = (byte/signed byte/word/signed word) 3 [phi:main::@3->printu#1] -- vbuz1=vbuc1 + lda #3 + sta printu.b + //SEG51 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@3->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG52 [39] phi (byte) printu::a#3 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy + //SEG53 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@3->printu#4] -- register_copy + jsr printu + //SEG54 main::@11 + //SEG55 [21] if((byte) main::a#10>=*((const byte[10]) main::cs#0 + (byte) main::a#10)) goto main::@4 [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuz1_then_la1 + lda a + tay + cmp cs,y + bcs b7 + //SEG56 [22] phi from main::@11 to main::@7 [phi:main::@11->main::@7] + //SEG57 main::@7 + //SEG58 [23] phi from main::@7 to main::@4 [phi:main::@7->main::@4] + //SEG59 [23] phi (byte) main::r#8 = (byte) '+' [phi:main::@7->main::@4#0] -- vbuxx=vbuc1 + ldx #'+' + jmp b4 + //SEG60 [23] phi from main::@11 to main::@4 [phi:main::@11->main::@4] + b7: + //SEG61 [23] phi (byte) main::r#8 = (byte) '-' [phi:main::@11->main::@4#0] -- vbuxx=vbuc1 + ldx #'-' + //SEG62 main::@4 + b4: + //SEG63 [24] (byte) printu::a#2 ← (byte) main::a#10 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 char_cursor#27 ] ) + // (byte) printu::a#2 = (byte) main::a#10 // register copy zp ZP_BYTE:2 + //SEG64 [25] (byte) printu::b#2 ← *((const byte[10]) main::cs#0 + (byte) main::a#10) [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 main::r#8 printu::a#2 printu::b#2 char_cursor#27 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy a + lda cs,y + sta printu.b + //SEG65 [26] (byte) printu::res#2 ← (byte) main::r#8 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 printu::a#2 printu::b#2 printu::res#2 char_cursor#27 ] ) + // (byte) printu::res#2 = (byte) main::r#8 // register copy reg byte x + //SEG66 [27] call printu param-assignment [ main::a#10 line_cursor#13 char_cursor#27 ] ( main:2 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG67 [39] phi from main::@4 to printu [phi:main::@4->printu] + //SEG68 [39] phi (byte) printu::res#3 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy + //SEG69 [39] phi (byte) printu::b#3 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy + //SEG70 [39] phi (byte) printu::op#3 = (byte) '<' [phi:main::@4->printu#2] -- vbuz1=vbuc1 + lda #'<' + sta printu.op + //SEG71 [39] phi (byte) printu::a#3 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy + //SEG72 [39] phi (byte*) char_cursor#43 = (byte*) char_cursor#27 [phi:main::@4->printu#4] -- register_copy + jsr printu + //SEG73 [28] phi from main::@4 to main::@12 [phi:main::@4->main::@12] + //SEG74 main::@12 + //SEG75 [29] call print_ln param-assignment [ main::a#10 line_cursor#1 ] ( main:2 [ main::a#10 line_cursor#1 ] ) + //SEG76 [34] phi from main::@12 to print_ln [phi:main::@12->print_ln] + jsr print_ln + //SEG77 main::@13 + //SEG78 [30] (byte) main::a#1 ← ++ (byte) main::a#10 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG79 [31] if((byte) main::a#1!=(byte/signed byte/word/signed word) 11) goto main::@14 [ main::a#1 line_cursor#1 ] ( main:2 [ main::a#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda a + cmp #$b + bne b14 + //SEG80 main::@return + //SEG81 [32] return [ ] ( main:2 [ ] ) + rts + //SEG82 main::@14 + b14: + //SEG83 [33] (byte*~) char_cursor#54 ← (byte*) line_cursor#1 [ main::a#1 char_cursor#54 line_cursor#1 ] ( main:2 [ main::a#1 char_cursor#54 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG84 [6] phi from main::@14 to main::@1 [phi:main::@14->main::@1] + //SEG85 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@14->main::@1#0] -- register_copy + //SEG86 [6] phi (byte*) char_cursor#44 = (byte*~) char_cursor#54 [phi:main::@14->main::@1#1] -- register_copy + //SEG87 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@14->main::@1#2] -- register_copy + jmp b1 + cs: .byte 0, $14, 4, 9, $b, 4, $d, 8, 4, 6 +} +//SEG88 print_ln +print_ln: { + //SEG89 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + //SEG90 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + //SEG91 print_ln::@1 + b1: + //SEG92 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG93 [37] if((byte*) line_cursor#1<(byte*) char_cursor#27) goto print_ln::@1 [ line_cursor#1 char_cursor#27 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 char_cursor#27 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1 + !: + //SEG94 print_ln::@return + //SEG95 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::a#10 line_cursor#1 ] ) + rts +} +//SEG96 printu +printu: { + .label a = 2 + .label b = 6 + .label op = 5 + //SEG97 [40] call print_char param-assignment [ char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::a#3 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG98 [52] phi from printu to print_char [phi:printu->print_char] + //SEG99 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#43 [phi:printu->print_char#0] -- register_copy + //SEG100 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG101 printu::@1 + //SEG102 [41] (byte) print_byte::b#0 ← (byte) printu::a#3 [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 print_byte::b#0 ] ) -- vbuz1=vbuz2 + lda a + sta print_byte.b + //SEG103 [42] call print_byte param-assignment [ char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::op#3 printu::b#3 printu::res#3 ] ) + //SEG104 [56] phi from printu::@1 to print_byte [phi:printu::@1->print_byte] + //SEG105 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:printu::@1->print_byte#0] -- register_copy + jsr print_byte + //SEG106 printu::@2 + //SEG107 [43] (byte) print_char::ch#3 ← (byte) printu::op#3 [ char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 print_char::ch#3 ] ) -- vbuaa=vbuz1 + lda op + //SEG108 [44] call print_char param-assignment [ char_cursor#27 printu::b#3 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::b#3 printu::res#3 ] ) + //SEG109 [52] phi from printu::@2 to print_char [phi:printu::@2->print_char] + //SEG110 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@2->print_char#0] -- register_copy + //SEG111 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#3 [phi:printu::@2->print_char#1] -- register_copy + jsr print_char + //SEG112 printu::@3 + //SEG113 [45] (byte) print_byte::b#1 ← (byte) printu::b#3 [ char_cursor#27 printu::res#3 print_byte::b#1 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 print_byte::b#1 ] ) -- vbuz1=vbuz2 + lda b + sta print_byte.b + //SEG114 [46] call print_byte param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG115 [56] phi from printu::@3 to print_byte [phi:printu::@3->print_byte] + //SEG116 [56] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:printu::@3->print_byte#0] -- register_copy + jsr print_byte + //SEG117 [47] phi from printu::@3 to printu::@4 [phi:printu::@3->printu::@4] + //SEG118 printu::@4 + //SEG119 [48] call print_char param-assignment [ char_cursor#27 printu::res#3 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 printu::res#3 ] ) + //SEG120 [52] phi from printu::@4 to print_char [phi:printu::@4->print_char] + //SEG121 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@4->print_char#0] -- register_copy + //SEG122 [52] phi (byte) print_char::ch#6 = (byte) ' ' [phi:printu::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG123 printu::@5 + //SEG124 [49] (byte) print_char::ch#5 ← (byte) printu::res#3 [ char_cursor#27 print_char::ch#5 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 print_char::ch#5 ] ) -- vbuaa=vbuxx + txa + //SEG125 [50] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + //SEG126 [52] phi from printu::@5 to print_char [phi:printu::@5->print_char] + //SEG127 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:printu::@5->print_char#0] -- register_copy + //SEG128 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#5 [phi:printu::@5->print_char#1] -- register_copy + jsr print_char + //SEG129 printu::@return + //SEG130 [51] return [ char_cursor#27 ] ( main:2::printu:14 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27 [ main::a#10 line_cursor#13 char_cursor#27 ] ) + rts +} +//SEG131 print_char +print_char: { + //SEG132 [53] *((byte*) char_cursor#26) ← (byte) print_char::ch#6 [ char_cursor#26 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#26 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#26 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#26 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG133 [54] (byte*) char_cursor#27 ← ++ (byte*) char_cursor#26 [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG134 print_char::@return + //SEG135 [55] return [ char_cursor#27 ] ( main:2::printu:14::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:40 [ main::a#10 line_cursor#13 printu::a#3 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:44 [ main::a#10 line_cursor#13 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_char:48 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:14::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:20::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:27::print_char:50 [ main::a#10 line_cursor#13 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:59 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:59 [ main::a#10 line_cursor#13 printu::res#3 print_byte::b#2 char_cursor#27 ] main:2::printu:14::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42::print_char:62 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46::print_char:62 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts +} +//SEG136 print_byte +print_byte: { + .label b = 9 + //SEG137 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ char_cursor#27 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 print_byte::$0 ] ) -- vbuyy=vbuz1_ror_4 + lda b + lsr + lsr + lsr + lsr + tay + //SEG138 [58] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ char_cursor#27 print_char::ch#0 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#0 print_byte::b#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG139 [59] call print_char param-assignment [ char_cursor#27 print_byte::b#2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::b#2 ] ) + //SEG140 [52] phi from print_byte to print_char [phi:print_byte->print_char] + //SEG141 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte->print_char#0] -- register_copy + //SEG142 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + //SEG143 print_byte::@1 + //SEG144 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#27 print_byte::$2 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_byte::$2 ] ) -- vbuyy=vbuz1_band_vbuc1 + lda b + and #$f + tay + //SEG145 [61] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#27 print_char::ch#1 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG146 [62] call print_char param-assignment [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + //SEG147 [52] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + //SEG148 [52] phi (byte*) char_cursor#26 = (byte*) char_cursor#27 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG149 [52] phi (byte) print_char::ch#6 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + //SEG150 print_byte::@return + //SEG151 [63] return [ char_cursor#27 ] ( main:2::printu:14::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:42 [ main::a#10 line_cursor#13 printu::op#3 printu::b#3 printu::res#3 char_cursor#27 ] main:2::printu:14::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:20::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] main:2::printu:27::print_byte:46 [ main::a#10 line_cursor#13 printu::res#3 char_cursor#27 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG152 print_cls +print_cls: { + .label sc = 3 + //SEG153 [65] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG154 [65] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + //SEG155 [65] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG156 [65] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG157 print_cls::@1 + b1: + //SEG158 [66] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG159 [67] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG160 [68] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + //SEG161 print_cls::@return + //SEG162 [69] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.sym new file mode 100644 index 000000000..ad743cfcf --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.sym @@ -0,0 +1,104 @@ +(label) @10 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#26 char_cursor zp ZP_WORD:7 8.0 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:7 3.2926829268292686 +(byte*) char_cursor#43 char_cursor zp ZP_WORD:7 35.0 +(byte*) char_cursor#44 char_cursor zp ZP_WORD:7 2.75 +(byte*~) char_cursor#54 char_cursor zp ZP_WORD:7 22.0 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:3 46.42857142857143 +(byte*) line_cursor#13 line_cursor zp ZP_WORD:3 0.5416666666666666 +(byte*) line_cursor#6 line_cursor zp ZP_WORD:3 204.0 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@return +(byte) main::a +(byte) main::a#1 a zp ZP_BYTE:2 11.0 +(byte) main::a#10 a zp ZP_BYTE:2 5.041666666666666 +(byte) main::b +(byte) main::b#0 reg byte y 6.6000000000000005 +(byte[10]) main::cs +(const byte[10]) main::cs#0 cs = { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 9, (byte/signed byte/word/signed word) 11, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 8, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 6 } +(byte) main::r +(byte) main::r#6 reg byte x 3.6666666666666665 +(byte) main::r#7 reg byte x 5.5 +(byte) main::r#8 reg byte x 3.6666666666666665 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte y 4.0 +(byte~) print_byte::$2 reg byte y 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 b zp ZP_BYTE:9 4.0 +(byte) print_byte::b#1 b zp ZP_BYTE:9 4.0 +(byte) print_byte::b#2 b zp ZP_BYTE:9 2.0 +(byte[]) print_byte::hextab +(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef" +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#3 reg byte a 4.0 +(byte) print_char::ch#5 reg byte a 4.0 +(byte) print_char::ch#6 reg byte a 10.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) +(label) printu::@1 +(label) printu::@2 +(label) printu::@3 +(label) printu::@4 +(label) printu::@5 +(label) printu::@return +(byte) printu::a +(byte) printu::a#0 a zp ZP_BYTE:2 7.333333333333333 +(byte) printu::a#1 a zp ZP_BYTE:2 11.0 +(byte) printu::a#2 a zp ZP_BYTE:2 7.333333333333333 +(byte) printu::a#3 a zp ZP_BYTE:2 17.5 +(byte) printu::b +(byte) printu::b#0 b zp ZP_BYTE:6 11.0 +(byte) printu::b#2 b zp ZP_BYTE:6 11.0 +(byte) printu::b#3 b zp ZP_BYTE:6 4.0 +(byte) printu::op +(byte) printu::op#3 op zp ZP_BYTE:5 0.5 +(byte) printu::res +(byte) printu::res#0 reg byte x 22.0 +(byte) printu::res#1 reg byte x 22.0 +(byte) printu::res#2 reg byte x 22.0 +(byte) printu::res#3 reg byte x 3.5000000000000004 + +zp ZP_BYTE:2 [ main::a#10 main::a#1 printu::a#3 printu::a#0 printu::a#1 printu::a#2 ] +reg byte x [ main::r#6 ] +reg byte x [ main::r#7 ] +reg byte x [ main::r#8 ] +zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_BYTE:5 [ printu::op#3 ] +zp ZP_BYTE:6 [ printu::b#3 printu::b#0 printu::b#2 ] +reg byte x [ printu::res#3 printu::res#0 printu::res#1 printu::res#2 ] +reg byte a [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] +zp ZP_WORD:7 [ char_cursor#26 char_cursor#43 char_cursor#44 char_cursor#54 char_cursor#27 ] +zp ZP_BYTE:9 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +reg byte y [ main::b#0 ] +reg byte y [ print_byte::$0 ] +reg byte y [ print_byte::$2 ]