diff --git a/src/main/kc/stdlib/print.kc b/src/main/kc/stdlib/print.kc index 2dce19f9e..95cde4f8b 100644 --- a/src/main/kc/stdlib/print.kc +++ b/src/main/kc/stdlib/print.kc @@ -8,13 +8,13 @@ byte* print_char_cursor = print_line_cursor; // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. void print_str_lines(byte* str) { - while(*str!='@') { + while(*str) { do { byte ch = *(str++); - if(ch!='@') { + if(ch) { *(print_char_cursor++) = ch; } - } while (ch!='@'); + } while (ch); print_ln(); } } @@ -27,14 +27,14 @@ void print_str_ln(byte* str) { // Print a zero-terminated string void print_str(byte* str) { - while(*str!='@') { + while(*str) { *(print_char_cursor++) = *(str++); } } // Print a string at a specific screen position void print_str_at(byte* str, byte* at) { - while(*str!='@') { + while(*str) { *(at++) = *(str++); } } diff --git a/src/test/kc/examples/chargen/chargen-analysis.kc b/src/test/kc/examples/chargen/chargen-analysis.kc index 6899b91e0..f615cc54e 100644 --- a/src/test/kc/examples/chargen/chargen-analysis.kc +++ b/src/test/kc/examples/chargen/chargen-analysis.kc @@ -61,7 +61,7 @@ void main() { // Print a string at a specific screen position void print_str_at(byte* str, byte* at) { - while(*str!='@') { + while(*str) { *(at++) = *(str++); } } diff --git a/src/test/kc/examples/scroll/scroll.kc b/src/test/kc/examples/scroll/scroll.kc index 2c930e78c..96e4d8543 100644 --- a/src/test/kc/examples/scroll/scroll.kc +++ b/src/test/kc/examples/scroll/scroll.kc @@ -23,7 +23,7 @@ void main() { } // Render next char byte c = *nxt; - if(c=='@') { + if(c==0) { nxt = TEXT; c = *nxt; } diff --git a/src/test/kc/examples/scrollbig/scrollbig.kc b/src/test/kc/examples/scrollbig/scrollbig.kc index 4035b8f67..4a9d326c0 100644 --- a/src/test/kc/examples/scrollbig/scrollbig.kc +++ b/src/test/kc/examples/scrollbig/scrollbig.kc @@ -61,7 +61,7 @@ byte* nxt = TEXT; // Find the next char of the scroll text byte next_char() { byte c = *nxt; - if(c=='@') { + if(c==0) { nxt = TEXT; c = *nxt; } diff --git a/src/test/kc/function-pointer-noarg-call-10.kc b/src/test/kc/function-pointer-noarg-call-10.kc index 4455cf123..9cb4d8509 100644 --- a/src/test/kc/function-pointer-noarg-call-10.kc +++ b/src/test/kc/function-pointer-noarg-call-10.kc @@ -25,6 +25,6 @@ void print(byte* msg) { byte i=0; do { SCREEN[idx++] = msg[i++]; - } while(msg[i]!='@'); + } while(msg[i]); } diff --git a/src/test/kc/function-pointer-noarg-call-7.kc b/src/test/kc/function-pointer-noarg-call-7.kc index a06d990f4..808df9ce0 100644 --- a/src/test/kc/function-pointer-noarg-call-7.kc +++ b/src/test/kc/function-pointer-noarg-call-7.kc @@ -20,7 +20,7 @@ void hello() { byte i=0; do { SCREEN[idx++] = msg[i++]; - } while(msg[i]!='@'); + } while(msg[i]); } diff --git a/src/test/kc/function-pointer-noarg-call-8.kc b/src/test/kc/function-pointer-noarg-call-8.kc index 96eb54384..1ae33dc55 100644 --- a/src/test/kc/function-pointer-noarg-call-8.kc +++ b/src/test/kc/function-pointer-noarg-call-8.kc @@ -25,7 +25,7 @@ void hello() { byte i=0; do { SCREEN[idx++] = msg[i++]; - } while(msg[i]!='@'); + } while(msg[i]); } diff --git a/src/test/kc/helloworld2-inline.kc b/src/test/kc/helloworld2-inline.kc index b2c3fca97..a71aee9f0 100644 --- a/src/test/kc/helloworld2-inline.kc +++ b/src/test/kc/helloworld2-inline.kc @@ -7,7 +7,7 @@ void main() { inline void print2(byte* at, byte* msg) { byte j=0; - for(byte i=0; msg[i]!='@'; i++) { + for(byte i=0; msg[i]; i++) { at[j] = msg[i]; j += 2; } diff --git a/src/test/kc/helloworld2.kc b/src/test/kc/helloworld2.kc index 9cd1aca38..1405a10ca 100644 --- a/src/test/kc/helloworld2.kc +++ b/src/test/kc/helloworld2.kc @@ -7,7 +7,7 @@ void main() { void print2(byte* at, byte* msg) { byte j=0; - for(byte i=0; msg[i]!='@'; i++) { + for(byte i=0; msg[i]; i++) { at[j] = msg[i]; j += 2; } diff --git a/src/test/kc/inline-function-print.kc b/src/test/kc/inline-function-print.kc index 8053fbe2c..aa1d8d385 100644 --- a/src/test/kc/inline-function-print.kc +++ b/src/test/kc/inline-function-print.kc @@ -10,7 +10,7 @@ void main() { inline void print(byte* at, byte* msg) { byte j=0; - for(byte i=0; msg[i]!='@'; i++) { + for(byte i=0; msg[i]; i++) { at[j] = msg[i]; j += 2; } diff --git a/src/test/kc/inline-string-2.kc b/src/test/kc/inline-string-2.kc index 7fd61d3e4..cb77ae488 100644 --- a/src/test/kc/inline-string-2.kc +++ b/src/test/kc/inline-string-2.kc @@ -17,7 +17,7 @@ void print_msg(byte idx) { byte* screen = $0400; void print(byte* msg) { - while(*msg!='@') { + while(*msg) { *(screen++) = *(msg++); } } diff --git a/src/test/kc/inline-string.kc b/src/test/kc/inline-string.kc index cfa525aa5..881aeb044 100644 --- a/src/test/kc/inline-string.kc +++ b/src/test/kc/inline-string.kc @@ -10,7 +10,7 @@ void main() { byte* screen = $0400; void print(byte* msg) { - while(*msg!='@') { + while(*msg) { *(screen++) = *(msg++); } } diff --git a/src/test/kc/local-string.kc b/src/test/kc/local-string.kc index f37fe79ee..488fc2e29 100644 --- a/src/test/kc/local-string.kc +++ b/src/test/kc/local-string.kc @@ -3,7 +3,7 @@ void main() { byte* screen = $0400; byte[] msg = "message 2 "; byte i=0; - while(msg[i]!='@') { + while(msg[i]) { screen[i++] = msg[i]; } } diff --git a/src/test/kc/loop-break-continue.kc b/src/test/kc/loop-break-continue.kc index 36e6e35dd..207e17d64 100644 --- a/src/test/kc/loop-break-continue.kc +++ b/src/test/kc/loop-break-continue.kc @@ -1,10 +1,10 @@ // Illustrates both break & continue statements in a loop -// Prints a message ending at '@' skipping all spaces +// Prints a message ending at NUL skipping all spaces void main() { byte* screen = $400; byte[] str = "hello brave new world"; for( byte i: 0..255) { - if(str[i]=='@') break; + if(str[i]==0) break; if(str[i]==' ') continue; *screen++ = str[i]; } diff --git a/src/test/kc/pointer-pointer-2.kc b/src/test/kc/pointer-pointer-2.kc index 07571de30..6b5e7053c 100644 --- a/src/test/kc/pointer-pointer-2.kc +++ b/src/test/kc/pointer-pointer-2.kc @@ -7,7 +7,7 @@ void main() { byte* text; for(byte i: 0..20) { nexttext(&text); - while(*text!='@') { + while(*text) { *screen++ = *text++; } } diff --git a/src/test/kc/scroll-clobber.kc b/src/test/kc/scroll-clobber.kc index d3a62d031..0f720efad 100644 --- a/src/test/kc/scroll-clobber.kc +++ b/src/test/kc/scroll-clobber.kc @@ -7,7 +7,7 @@ void main() { byte i=0; do { byte c = *nxt; - if(c=='@') { + if(c==0) { nxt = TEXT; c = *nxt; } diff --git a/src/test/kc/scrollbig-clobber.kc b/src/test/kc/scrollbig-clobber.kc index 279ce108b..47ff3452f 100644 --- a/src/test/kc/scrollbig-clobber.kc +++ b/src/test/kc/scrollbig-clobber.kc @@ -14,7 +14,7 @@ byte* nxt = TEXT; // Find the next char of the text byte next_char() { byte c = *nxt; - if(c=='@') { + if(c==0) { nxt = TEXT; c = *nxt; } diff --git a/src/test/kc/string-const-consolidation-noroot.kc b/src/test/kc/string-const-consolidation-noroot.kc index 1a2b1d90c..c42c7def8 100644 --- a/src/test/kc/string-const-consolidation-noroot.kc +++ b/src/test/kc/string-const-consolidation-noroot.kc @@ -11,7 +11,7 @@ void main() { } void print(byte* string) { - while(*string!='@') { + while(*string) { *screen++ = *string++; } } \ No newline at end of file diff --git a/src/test/kc/string-const-consolidation.kc b/src/test/kc/string-const-consolidation.kc index e301d7a5a..38e4d4d50 100644 --- a/src/test/kc/string-const-consolidation.kc +++ b/src/test/kc/string-const-consolidation.kc @@ -11,7 +11,7 @@ void main() { } void print(byte* string) { - while(*string!='@') { + while(*string) { *screen++ = *string++; } } \ No newline at end of file diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index a0b07db40..150f58c32 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -6,6 +6,11 @@ Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::dig Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1 Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1 +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) BITMAP Identified constant variable (byte*) SCREEN diff --git a/src/test/ref/c-types.asm b/src/test/ref/c-types.asm index 54ab4c902..21803a29d 100644 --- a/src/test/ref/c-types.asm +++ b/src/test/ref/c-types.asm @@ -177,7 +177,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/c-types.cfg b/src/test/ref/c-types.cfg index fa325cfa9..938ef7574 100644 --- a/src/test/ref/c-types.cfg +++ b/src/test/ref/c-types.cfg @@ -152,7 +152,7 @@ print_str: scope:[print_str] from testChar testInt testLong testShort print_str::@1: scope:[print_str] from print_str print_str::@2 [71] (byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 ) [71] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) - [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 + [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [73] return diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index 43e24ee24..564894753 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte) testChar::u Identified constant variable (byte) testChar::n @@ -125,7 +130,7 @@ print_str: scope:[print_str] from testChar testInt testLong testShort print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#5) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#5) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1239,6 +1244,7 @@ SYMBOL TABLE SSA (word) testShort::u#0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#5) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#20 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 @@ -1282,6 +1288,7 @@ Inlining cast (signed dword) testLong::s#0 ← (snumber)(number) -$222e0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1303,6 +1310,7 @@ Simplifying constant integer cast -$222e0 Simplifying constant integer cast -$222e0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -1515,7 +1523,7 @@ Identical Phi Values (byte*) print_char_cursor#148 (byte*) print_char_cursor#26 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#26) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 @@ -2015,7 +2023,7 @@ print_str: scope:[print_str] from testChar testInt testLong testShort print_str::@1: scope:[print_str] from print_str print_str::@2 [71] (byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 ) [71] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) - [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 + [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [73] return @@ -2757,10 +2765,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3287,7 +3295,7 @@ Statement [59] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_ Statement [63] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] Statement [66] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#26 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#26 print_byte::$2 ] ) always clobbers reg byte a -Statement [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [74] *((byte*) print_char_cursor#136) ← *((byte*) print_str::str#5) [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [77] (byte*~) print_char_cursor#161 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#161 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#161 ] ) always clobbers reg byte a Statement [93] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#26 print_sword::w#10 ] ( main:2::testInt:11::print_sword:84 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testInt:11::print_sword:88 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:114 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] ) always clobbers reg byte a @@ -3309,7 +3317,7 @@ Statement [57] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word: Statement [59] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#26 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_word:80 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_sword:84::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_sword:88::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_sword:110::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_sword:114::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_word:106 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] ) always clobbers reg byte a Statement [63] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a Statement [66] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#26 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#26 print_byte::$2 ] ) always clobbers reg byte a -Statement [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [74] *((byte*) print_char_cursor#136) ← *((byte*) print_str::str#5) [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [77] (byte*~) print_char_cursor#161 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#161 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#161 ] ) always clobbers reg byte a Statement [93] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#26 print_sword::w#10 ] ( main:2::testInt:11::print_sword:84 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testInt:11::print_sword:88 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:114 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] ) always clobbers reg byte a @@ -3808,10 +3816,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5102,11 +5110,11 @@ print_str: { // [71] phi (byte*) print_str::str#5 = (byte*) print_str::str#7 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index 88b5dc6ef..347b4a1d5 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -1123,7 +1123,7 @@ print_str_at: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: @@ -1417,7 +1417,7 @@ print_str_lines: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: @@ -1427,7 +1427,7 @@ print_str_lines: { bne !+ inc str+1 !: - cmp #'@' + cmp #0 beq b3 ldy #0 sta (print_char_cursor),y @@ -1436,7 +1436,7 @@ print_str_lines: { inc print_char_cursor+1 !: b3: - cmp #'@' + cmp #0 bne b2 jsr print_ln lda print_line_cursor diff --git a/src/test/ref/c64dtv-gfxexplorer.cfg b/src/test/ref/c64dtv-gfxexplorer.cfg index ea9a78c47..733a219f8 100644 --- a/src/test/ref/c64dtv-gfxexplorer.cfg +++ b/src/test/ref/c64dtv-gfxexplorer.cfg @@ -613,7 +613,7 @@ print_str_at: scope:[print_str_at] from render_preset_name::@2 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [322] (byte*) print_str_at::at#2 ← phi( print_str_at/(const byte*) FORM_SCREEN#0+(byte)(number) $28*(number) 2+(byte) $a print_str_at::@2/(byte*) print_str_at::at#0 ) [322] (byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#1 print_str_at::@2/(byte*) print_str_at::str#0 ) - [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 + [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [324] return @@ -820,7 +820,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin [414] (byte*) print_line_cursor#2 ← phi( print_str_lines/(byte*) print_set_screen::screen#2 print_str_lines::@6/(byte*) print_line_cursor#22 ) [414] (byte*) print_char_cursor#22 ← phi( print_str_lines/(byte*~) print_char_cursor#73 print_str_lines::@6/(byte*~) print_char_cursor#74 ) [414] (byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@6/(byte*) print_str_lines::str#0 ) - [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 + [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 to:print_str_lines::@return print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 [416] return @@ -830,7 +830,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str [417] (byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@3/(byte*) print_str_lines::str#0 ) [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [419] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4 - [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 + [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 to:print_str_lines::@4 print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 @@ -838,7 +838,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 to:print_str_lines::@3 print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 [423] (byte*) print_char_cursor#38 ← phi( print_str_lines::@2/(byte*) print_char_cursor#20 print_str_lines::@4/(byte*) print_char_cursor#1 ) - [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 + [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 to:print_str_lines::@5 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 [425] phi() diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index 22e0361a1..30b5180f2 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank Identified constant variable (byte*) DTV_BLITTER_ALU Identified constant variable (byte*) HEAP_TOP @@ -422,8 +427,8 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin (byte*) print_line_cursor#37 ← phi( print_str_lines/(byte*) print_line_cursor#45 print_str_lines::@11/(byte*) print_line_cursor#1 ) (byte*) print_char_cursor#39 ← phi( print_str_lines/(byte*) print_char_cursor#47 print_str_lines::@11/(byte*) print_char_cursor#2 ) (byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@11/(byte*) print_str_lines::str#6 ) - (bool~) print_str_lines::$0 ← *((byte*) print_str_lines::str#3) != (byte) '@' - if((bool~) print_str_lines::$0) goto print_str_lines::@4 + (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#3) + if((bool~) print_str_lines::$2) goto print_str_lines::@4 to:print_str_lines::@return print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5 (byte*) print_line_cursor#54 ← phi( print_str_lines::@1/(byte*) print_line_cursor#37 print_str_lines::@5/(byte*) print_line_cursor#46 ) @@ -431,16 +436,16 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str (byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@5/(byte*) print_str_lines::str#7 ) (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4 - (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' - (bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1 - if((bool~) print_str_lines::$2) goto print_str_lines::@5 + (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0 + (bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4 + if((bool~) print_str_lines::$0) goto print_str_lines::@5 to:print_str_lines::@6 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str_lines::@6 (byte*) print_line_cursor#46 ← phi( print_str_lines::@4/(byte*) print_line_cursor#54 print_str_lines::@6/(byte*) print_line_cursor#55 ) (byte*) print_char_cursor#48 ← phi( print_str_lines::@4/(byte*) print_char_cursor#37 print_str_lines::@6/(byte*) print_char_cursor#1 ) (byte*) print_str_lines::str#7 ← phi( print_str_lines::@4/(byte*) print_str_lines::str#0 print_str_lines::@6/(byte*) print_str_lines::str#8 ) (byte) print_str_lines::ch#1 ← phi( print_str_lines::@4/(byte) print_str_lines::ch#0 print_str_lines::@6/(byte) print_str_lines::ch#2 ) - (bool~) print_str_lines::$3 ← (byte) print_str_lines::ch#1 != (byte) '@' + (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1 if((bool~) print_str_lines::$3) goto print_str_lines::@4 to:print_str_lines::@7 print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4 @@ -478,7 +483,7 @@ print_str_at: scope:[print_str_at] from render_preset_name::@22 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 (byte*) print_str_at::at#3 ← phi( print_str_at/(byte*) print_str_at::at#4 print_str_at::@2/(byte*) print_str_at::at#0 ) (byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#4 print_str_at::@2/(byte*) print_str_at::str#0 ) - (bool~) print_str_at::$0 ← *((byte*) print_str_at::str#2) != (byte) '@' + (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#2) if((bool~) print_str_at::$0) goto print_str_at::@2 to:print_str_at::@return print_str_at::@2: scope:[print_str_at] from print_str_at::@1 @@ -6711,9 +6716,9 @@ SYMBOL TABLE SSA (byte*) print_str_at::str#4 (void()) print_str_lines((byte*) print_str_lines::str) (bool~) print_str_lines::$0 -(bool~) print_str_lines::$1 (bool~) print_str_lines::$2 (bool~) print_str_lines::$3 +(bool~) print_str_lines::$4 (label) print_str_lines::@1 (label) print_str_lines::@11 (label) print_str_lines::@4 @@ -6840,6 +6845,10 @@ Adding number conversion cast (unumber) $10 in (byte) DTV_COLORRAM_OFF#0 ← (nu Adding number conversion cast (unumber) $40 in (byte) DTV_CHUNKY#0 ← (number) $40 Adding number conversion cast (unumber) $1d800 in (dword) DTV_COLOR_BANK_DEFAULT#0 ← (number) $1d800 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#3) +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1 +Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#21 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) 2 in (byte) KEY_CRSR_RIGHT#0 ← (number) 2 @@ -7480,6 +7489,10 @@ Simplifying constant pointer cast (byte*) 53309 Simplifying constant pointer cast (byte*) 255 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant integer cast 2 @@ -8369,6 +8382,10 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $40 Finalized unsigned number type (dword) $1d800 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 2 @@ -8732,7 +8749,7 @@ Adding pointer type conversion cast (byte*) bitmap_clear::$0 in (byte*~) bitmap_ Adding pointer type conversion cast (byte*) form_field_ptr::$0 in (byte*~) form_field_ptr::$0 ← (word~) form_field_ptr::$2 Successful SSA optimization PassNAddTypeConversionAssignment Inversing boolean not [63] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [62] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 -Inversing boolean not [92] (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from [91] (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' +Inversing boolean not [92] (bool~) print_str_lines::$0 ← (byte) 0 == (byte) print_str_lines::ch#0 from [91] (bool~) print_str_lines::$4 ← (byte) 0 != (byte) print_str_lines::ch#0 Inversing boolean not [211] (bool~) keyboard_event_scan::$18 ← (byte~) keyboard_event_scan::$16 == (byte) 0 from [210] (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte) 0 Inversing boolean not [220] (bool~) keyboard_event_scan::$20 ← (byte) keyboard_events_size#18 == (byte) 8 from [219] (bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#18 != (byte) 8 Inversing boolean not [244] (bool~) keyboard_event_scan::$2 ← (byte~) keyboard_event_scan::$0 == (byte) 0 from [243] (bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte) 0 @@ -9414,10 +9431,10 @@ Identified duplicate assignment right side [1577] (dword~) form_mode::$15 ← (d Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) memset::$1 [64] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [74] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str_lines::$0 [87] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@4 -Simple Condition (bool~) print_str_lines::$2 [93] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5 -Simple Condition (bool~) print_str_lines::$3 [96] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 -Simple Condition (bool~) print_str_at::$0 [112] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 +Simple Condition (bool~) print_str_lines::$2 [87] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@4 +Simple Condition (bool~) print_str_lines::$0 [93] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@5 +Simple Condition (bool~) print_str_lines::$3 [96] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@4 +Simple Condition (bool~) print_str_at::$0 [112] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 Simple Condition (bool~) print_ln::$1 [123] if((byte*) print_line_cursor#22<(byte*) print_char_cursor#38) goto print_ln::@1 Simple Condition (bool~) keyboard_event_scan::$13 [197] if((byte) keyboard_event_scan::row_scan#0!=*((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 Simple Condition (bool~) keyboard_event_scan::$25 [206] if((byte) keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@8 @@ -12444,7 +12461,7 @@ print_str_at: scope:[print_str_at] from render_preset_name::@2 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [322] (byte*) print_str_at::at#2 ← phi( print_str_at/(const byte*) FORM_SCREEN#0+(byte)(number) $28*(number) 2+(byte) $a print_str_at::@2/(byte*) print_str_at::at#0 ) [322] (byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#1 print_str_at::@2/(byte*) print_str_at::str#0 ) - [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 + [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [324] return @@ -12651,7 +12668,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin [414] (byte*) print_line_cursor#2 ← phi( print_str_lines/(byte*) print_set_screen::screen#2 print_str_lines::@6/(byte*) print_line_cursor#22 ) [414] (byte*) print_char_cursor#22 ← phi( print_str_lines/(byte*~) print_char_cursor#73 print_str_lines::@6/(byte*~) print_char_cursor#74 ) [414] (byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@6/(byte*) print_str_lines::str#0 ) - [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 + [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 to:print_str_lines::@return print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 [416] return @@ -12661,7 +12678,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str [417] (byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@3/(byte*) print_str_lines::str#0 ) [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [419] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4 - [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 + [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 to:print_str_lines::@4 print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 @@ -12669,7 +12686,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 to:print_str_lines::@3 print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 [423] (byte*) print_char_cursor#38 ← phi( print_str_lines::@2/(byte*) print_char_cursor#20 print_str_lines::@4/(byte*) print_char_cursor#1 ) - [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 + [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 to:print_str_lines::@5 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 [425] phi() @@ -17592,10 +17609,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -18278,10 +18295,10 @@ print_str_lines: { jmp b1 // print_str_lines::@1 b1: - // [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2_from_b1 jmp breturn // print_str_lines::@return @@ -18305,8 +18322,8 @@ print_str_lines: { bne !+ inc str+1 !: - // [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1 - lda #'@' + // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1 + lda #0 cmp ch beq b3_from_b2 jmp b4 @@ -18328,8 +18345,8 @@ print_str_lines: { jmp b3 // print_str_lines::@3 b3: - // [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #'@' + // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 cmp ch bne b2_from_b3 // [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] @@ -21192,7 +21209,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a -Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y +Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a @@ -21217,7 +21234,7 @@ Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr:: Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ form_set_screen::y#2 form_set_screen::y#1 ] Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a -Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:275 [ print_str_lines::ch#0 ] @@ -21529,7 +21546,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a -Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y +Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ] @@ -21552,7 +21569,7 @@ Statement [400] (byte~) form_control::$14 ← *((byte*)(word) form_field_ptr::li Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$14 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a -Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y Statement [427] (byte*~) print_char_cursor#74 ← (byte*) print_line_cursor#22 [ print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ) always clobbers reg byte a @@ -21745,7 +21762,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a -Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y +Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:331 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:331 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a @@ -21766,7 +21783,7 @@ Statement [400] (byte~) form_control::$14 ← *((byte*)(word) form_field_ptr::li Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$14 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a -Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y +Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y Statement [427] (byte*~) print_char_cursor#74 ← (byte*) print_line_cursor#22 [ print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ) always clobbers reg byte a @@ -24718,10 +24735,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -25336,10 +25353,10 @@ print_str_lines: { jmp b1 // print_str_lines::@1 b1: - // [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2_from_b1 jmp breturn // print_str_lines::@return @@ -25362,8 +25379,8 @@ print_str_lines: { bne !+ inc str+1 !: - // [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 - cmp #'@' + // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 beq b3_from_b2 jmp b4 // print_str_lines::@4 @@ -25383,8 +25400,8 @@ print_str_lines: { jmp b3 // print_str_lines::@3 b3: - // [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #'@' + // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 bne b2_from_b3 // [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] b5_from_b3: @@ -32469,11 +32486,11 @@ print_str_at: { // [322] phi (byte*) print_str_at::str#2 = (byte*) print_str_at::str#1 [phi:print_str_at->print_str_at::@1#1] -- register_copy // print_str_at::@1 b1: - // while(*str!='@') - // [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str_at::@return // } @@ -33029,11 +33046,11 @@ print_str_lines: { // [414] phi (byte*) print_str_lines::str#3 = (byte*) print_str_lines::str#5 [phi:print_str_lines/print_str_lines::@6->print_str_lines::@1#2] -- register_copy // print_str_lines::@1 b1: - // while(*str!='@') - // [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str_lines::@return // } @@ -33053,9 +33070,9 @@ print_str_lines: { bne !+ inc str+1 !: - // if(ch!='@') - // [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 - cmp #'@' + // if(ch) + // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 beq b3 // print_str_lines::@4 // *(print_char_cursor++) = ch @@ -33072,9 +33089,9 @@ print_str_lines: { // [423] phi (byte*) print_char_cursor#38 = (byte*) print_char_cursor#20 [phi:print_str_lines::@2/print_str_lines::@4->print_str_lines::@3#0] -- register_copy // print_str_lines::@3 b3: - // while (ch!='@') - // [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #'@' + // while (ch) + // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 bne b2 // [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] // print_str_lines::@5 diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index 272247b84..0eba61763 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -2242,7 +2242,7 @@ print_str_lines: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: @@ -2252,7 +2252,7 @@ print_str_lines: { bne !+ inc str+1 !: - cmp #'@' + cmp #0 beq b3 ldy #0 sta (print_char_cursor),y @@ -2261,7 +2261,7 @@ print_str_lines: { inc print_char_cursor+1 !: b3: - cmp #'@' + cmp #0 bne b2 jsr print_ln lda print_line_cursor diff --git a/src/test/ref/c64dtv-gfxmodes.cfg b/src/test/ref/c64dtv-gfxmodes.cfg index 1a1cdf70e..d98864011 100644 --- a/src/test/ref/c64dtv-gfxmodes.cfg +++ b/src/test/ref/c64dtv-gfxmodes.cfg @@ -1507,7 +1507,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin [865] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*) print_line_cursor#19 ) [865] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*~) print_char_cursor#100 ) [865] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@6/(byte*) print_str_lines::str#0 ) - [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 + [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 to:print_str_lines::@return print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 [867] return @@ -1517,7 +1517,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str [868] (byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@3/(byte*) print_str_lines::str#0 ) [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [870] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3 - [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 + [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 to:print_str_lines::@4 print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 @@ -1525,7 +1525,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 to:print_str_lines::@3 print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 [874] (byte*) print_char_cursor#32 ← phi( print_str_lines::@2/(byte*) print_char_cursor#17 print_str_lines::@4/(byte*) print_char_cursor#1 ) - [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 + [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 to:print_str_lines::@5 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 [876] phi() diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index ca1762d36..66fb35985 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank Identified constant variable (byte*) DTV_BLITTER_ALU Identified constant variable (byte*) HEAP_TOP @@ -274,8 +279,8 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin (byte*) print_line_cursor#31 ← phi( print_str_lines/(byte*) print_line_cursor#50 print_str_lines::@11/(byte*) print_line_cursor#1 ) (byte*) print_char_cursor#33 ← phi( print_str_lines/(byte*) print_char_cursor#52 print_str_lines::@11/(byte*) print_char_cursor#2 ) (byte*) print_str_lines::str#2 ← phi( print_str_lines/(byte*) print_str_lines::str#4 print_str_lines::@11/(byte*) print_str_lines::str#5 ) - (bool~) print_str_lines::$0 ← *((byte*) print_str_lines::str#2) != (byte) '@' - if((bool~) print_str_lines::$0) goto print_str_lines::@4 + (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#2) + if((bool~) print_str_lines::$2) goto print_str_lines::@4 to:print_str_lines::@return print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5 (byte*) print_line_cursor#68 ← phi( print_str_lines::@1/(byte*) print_line_cursor#31 print_str_lines::@5/(byte*) print_line_cursor#51 ) @@ -283,16 +288,16 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str (byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@5/(byte*) print_str_lines::str#6 ) (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3 - (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' - (bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1 - if((bool~) print_str_lines::$2) goto print_str_lines::@5 + (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0 + (bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4 + if((bool~) print_str_lines::$0) goto print_str_lines::@5 to:print_str_lines::@6 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str_lines::@6 (byte*) print_line_cursor#51 ← phi( print_str_lines::@4/(byte*) print_line_cursor#68 print_str_lines::@6/(byte*) print_line_cursor#69 ) (byte*) print_char_cursor#53 ← phi( print_str_lines::@4/(byte*) print_char_cursor#31 print_str_lines::@6/(byte*) print_char_cursor#1 ) (byte*) print_str_lines::str#6 ← phi( print_str_lines::@4/(byte*) print_str_lines::str#0 print_str_lines::@6/(byte*) print_str_lines::str#7 ) (byte) print_str_lines::ch#1 ← phi( print_str_lines::@4/(byte) print_str_lines::ch#0 print_str_lines::@6/(byte) print_str_lines::ch#2 ) - (bool~) print_str_lines::$3 ← (byte) print_str_lines::ch#1 != (byte) '@' + (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1 if((bool~) print_str_lines::$3) goto print_str_lines::@4 to:print_str_lines::@7 print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4 @@ -6074,9 +6079,9 @@ SYMBOL TABLE SSA (byte*) print_set_screen::screen#1 (void()) print_str_lines((byte*) print_str_lines::str) (bool~) print_str_lines::$0 -(bool~) print_str_lines::$1 (bool~) print_str_lines::$2 (bool~) print_str_lines::$3 +(bool~) print_str_lines::$4 (label) print_str_lines::@1 (label) print_str_lines::@11 (label) print_str_lines::@4 @@ -6125,6 +6130,9 @@ Adding number conversion cast (unumber) $10 in (byte) DTV_COLORRAM_OFF#0 ← (nu Adding number conversion cast (unumber) $40 in (byte) DTV_CHUNKY#0 ← (number) $40 Adding number conversion cast (unumber) $1d800 in (dword) DTV_COLOR_BANK_DEFAULT#0 ← (number) $1d800 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#2) +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1 Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#18 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) 8 in (byte) KEY_3#0 ← (number) 8 @@ -6935,6 +6943,9 @@ Simplifying constant pointer cast (byte*) 53309 Simplifying constant pointer cast (byte*) 255 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant integer cast 8 @@ -7336,6 +7347,9 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $40 Finalized unsigned number type (dword) $1d800 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 8 @@ -7779,7 +7793,7 @@ Inferred type updated to dword in (unumber~) mode_8bppchunkybmm::$16 ← (dword) Adding pointer type conversion cast (byte*) bitmap_clear::$0 in (byte*~) bitmap_clear::$0 ← (word~) bitmap_clear::$3 Successful SSA optimization PassNAddTypeConversionAssignment Inversing boolean not [64] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [63] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 -Inversing boolean not [93] (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from [92] (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' +Inversing boolean not [93] (bool~) print_str_lines::$0 ← (byte) 0 == (byte) print_str_lines::ch#0 from [92] (bool~) print_str_lines::$4 ← (byte) 0 != (byte) print_str_lines::ch#0 Inversing boolean not [206] (bool~) bitmap_init::$4 ← (byte) bitmap_init::bits#1 != (byte) 0 from [205] (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (byte) 0 Inversing boolean not [225] (bool~) bitmap_init::$12 ← (byte~) bitmap_init::$10 != (byte) 7 from [224] (bool~) bitmap_init::$11 ← (byte~) bitmap_init::$10 == (byte) 7 Inversing boolean not [366] (bool~) bitmap_line_xdyi::$4 ← (byte) bitmap_line_xdyi::xd#2 >= (byte) bitmap_line_xdyi::e#1 from [365] (bool~) bitmap_line_xdyi::$3 ← (byte) bitmap_line_xdyi::xd#2 < (byte) bitmap_line_xdyi::e#1 @@ -8377,9 +8391,9 @@ Identified duplicate assignment right side [1792] (word~) mode_8bppchunkybmm::$1 Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) memset::$1 [65] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [75] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str_lines::$0 [88] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4 -Simple Condition (bool~) print_str_lines::$2 [94] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5 -Simple Condition (bool~) print_str_lines::$3 [97] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 +Simple Condition (bool~) print_str_lines::$2 [88] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@4 +Simple Condition (bool~) print_str_lines::$0 [94] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@5 +Simple Condition (bool~) print_str_lines::$3 [97] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@4 Simple Condition (bool~) print_ln::$1 [115] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1 Simple Condition (bool~) bitmap_init::$4 [207] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@2 Simple Condition (bool~) bitmap_init::$5 [211] if((byte) bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1 @@ -12472,7 +12486,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin [865] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*) print_line_cursor#19 ) [865] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*~) print_char_cursor#100 ) [865] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@6/(byte*) print_str_lines::str#0 ) - [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 + [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 to:print_str_lines::@return print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 [867] return @@ -12482,7 +12496,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str [868] (byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@3/(byte*) print_str_lines::str#0 ) [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [870] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3 - [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 + [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 to:print_str_lines::@4 print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 @@ -12490,7 +12504,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 to:print_str_lines::@3 print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 [874] (byte*) print_char_cursor#32 ← phi( print_str_lines::@2/(byte*) print_char_cursor#17 print_str_lines::@4/(byte*) print_char_cursor#1 ) - [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 + [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 to:print_str_lines::@5 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 [876] phi() @@ -19298,10 +19312,10 @@ print_str_lines: { jmp b1 // print_str_lines::@1 b1: - // [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2_from_b1 jmp breturn // print_str_lines::@return @@ -19325,8 +19339,8 @@ print_str_lines: { bne !+ inc str+1 !: - // [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1 - lda #'@' + // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1 + lda #0 cmp ch beq b3_from_b2 jmp b4 @@ -19348,8 +19362,8 @@ print_str_lines: { jmp b3 // print_str_lines::@3 b3: - // [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1 - lda #'@' + // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 cmp ch bne b2_from_b3 // [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] @@ -19954,7 +19968,7 @@ Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:291 [ mode_stdchar::$28 ] Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y -Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:294 [ print_str_lines::ch#0 ] @@ -20263,7 +20277,7 @@ Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte) Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y -Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y +Statement [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a @@ -25654,10 +25668,10 @@ print_str_lines: { jmp b1 // print_str_lines::@1 b1: - // [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2_from_b1 jmp breturn // print_str_lines::@return @@ -25680,8 +25694,8 @@ print_str_lines: { bne !+ inc str+1 !: - // [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 - cmp #'@' + // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 beq b3_from_b2 jmp b4 // print_str_lines::@4 @@ -25701,8 +25715,8 @@ print_str_lines: { jmp b3 // print_str_lines::@3 b3: - // [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #'@' + // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 bne b2_from_b3 // [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] b5_from_b3: @@ -32576,11 +32590,11 @@ print_str_lines: { sta str+1 // print_str_lines::@1 b1: - // while(*str!='@') - // [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str_lines::@return // } @@ -32600,9 +32614,9 @@ print_str_lines: { bne !+ inc str+1 !: - // if(ch!='@') - // [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 - cmp #'@' + // if(ch) + // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 beq b3 // print_str_lines::@4 // *(print_char_cursor++) = ch @@ -32619,9 +32633,9 @@ print_str_lines: { // [874] phi (byte*) print_char_cursor#32 = (byte*) print_char_cursor#17 [phi:print_str_lines::@2/print_str_lines::@4->print_str_lines::@3#0] -- register_copy // print_str_lines::@3 b3: - // while (ch!='@') - // [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 - cmp #'@' + // while (ch) + // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 bne b2 // [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] // print_str_lines::@5 diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index fe26ebb5c..22d94d102 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index 8add9bd5a..af8d8ee3c 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index e1711ed2c..1f37d417f 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -364,6 +364,11 @@ Rewriting struct pointer member access *((struct SplineVector16*) show_letter::$ Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1 Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1 +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a diff --git a/src/test/ref/constants.asm b/src/test/ref/constants.asm index 9455fd67f..862f5967c 100644 --- a/src/test/ref/constants.asm +++ b/src/test/ref/constants.asm @@ -110,7 +110,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/constants.cfg b/src/test/ref/constants.cfg index 88bd3e6da..0c9d73f0a 100644 --- a/src/test/ref/constants.cfg +++ b/src/test/ref/constants.cfg @@ -82,7 +82,7 @@ print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 a print_str::@1: scope:[print_str] from print_str print_str::@2 [37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 ) [37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 ) - [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [39] return diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index 39b917f50..0abfd3ff4 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte) test_bytes::bb Identified constant variable (signed byte) test_sbytes::bb @@ -114,7 +119,7 @@ print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 a print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#66 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#9 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#9) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#9) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -857,6 +862,7 @@ SYMBOL TABLE SSA (const string) test_sbytes::msg4 = (string) "-127-127=2" Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#9) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#24 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5 @@ -903,6 +909,7 @@ Inlining cast (signed byte) assert_sbyte::c#4 ← (snumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant pointer cast (byte*) 53281 @@ -924,6 +931,7 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 5 @@ -1077,7 +1085,7 @@ Identical Phi Values (byte*) print_char_cursor#67 (byte*) print_char_cursor#2 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 Simple Condition (bool~) assert_byte::$2 [124] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 Simple Condition (bool~) assert_sbyte::$2 [204] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 @@ -1448,7 +1456,7 @@ print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 a print_str::@1: scope:[print_str] from print_str print_str::@2 [37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 ) [37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 ) - [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [39] return @@ -1913,10 +1921,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -2230,7 +2238,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ as Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ] Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ] @@ -2250,7 +2258,7 @@ Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a @@ -2576,10 +2584,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3363,11 +3371,11 @@ print_str: { // [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index af745502b..6906802cf 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -8,7 +8,12 @@ Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 0a006d7f7..bbb925340 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/examples/3d/3d.asm b/src/test/ref/examples/3d/3d.asm index 483f02dff..43e5bf61e 100644 --- a/src/test/ref/examples/3d/3d.asm +++ b/src/test/ref/examples/3d/3d.asm @@ -943,7 +943,7 @@ print_str_at: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/examples/3d/3d.cfg b/src/test/ref/examples/3d/3d.cfg index dca4ec0b2..cc6b6ab68 100644 --- a/src/test/ref/examples/3d/3d.cfg +++ b/src/test/ref/examples/3d/3d.cfg @@ -426,7 +426,7 @@ print_str_at: scope:[print_str_at] from debug_print_init::@10 debug_print_init: print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [244] (byte*) print_str_at::at#13 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 ) [244] (byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 ) - [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 + [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [246] return diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index 6e8c507c3..56ab3ec2f 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -95,6 +95,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (signed byte*) xr Identified constant variable (signed byte*) yr @@ -275,7 +280,7 @@ print_str_at: scope:[print_str_at] from debug_print_init::@10 debug_print_init: print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 (byte*) print_str_at::at#14 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 ) (byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 ) - (bool~) print_str_at::$0 ← *((byte*) print_str_at::str#13) != (byte) '@' + (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#13) if((bool~) print_str_at::$0) goto print_str_at::@2 to:print_str_at::@return print_str_at::@2: scope:[print_str_at] from print_str_at::@1 @@ -2242,6 +2247,7 @@ Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5 Adding number conversion cast (unumber) $e in (byte) LIGHT_BLUE#0 ← (number) $e Adding number conversion cast (unumber) $f in (byte) LIGHT_GREY#0 ← (number) $f Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#13) Adding number conversion cast (snumber) 0 in (bool~) print_sbyte_at::$0 ← (signed byte) print_sbyte_at::b#22 < (number) 0 Adding number conversion cast (unumber) 1 in (byte*~) print_sbyte_at::$2 ← (byte*) print_sbyte_at::at#23 + (number) 1 Adding number conversion cast (unumber) 4 in (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#1 >> (number) 4 @@ -2455,6 +2461,7 @@ Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -2579,6 +2586,7 @@ Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $e Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 4 @@ -2901,7 +2909,7 @@ Identical Phi Values (byte*) debug_print_init::at_cols#2 (byte*) debug_print_ini Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [12] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [22] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str_at::$0 [33] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 +Simple Condition (bool~) print_str_at::$0 [33] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 Simple Condition (bool~) print_sbyte_at::$0 [41] if((signed byte) print_sbyte_at::b#22<(signed byte) 0) goto print_sbyte_at::@1 Simple Condition (bool~) anim::$0 [131] if(*((byte*) RASTER#0)!=(byte) $ff) goto anim::@4 Simple Condition (bool~) anim::$1 [134] if(*((byte*) RASTER#0)!=(byte) $fe) goto anim::@10 @@ -4133,7 +4141,7 @@ print_str_at: scope:[print_str_at] from debug_print_init::@10 debug_print_init: print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [244] (byte*) print_str_at::at#13 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 ) [244] (byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 ) - [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 + [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [246] return @@ -6570,10 +6578,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -6917,7 +6925,7 @@ Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2) Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp ZP_BYTE:14 [ debug_print_init::i#2 debug_print_init::i#1 ] Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a -Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y +Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a @@ -7026,7 +7034,7 @@ Statement [235] (byte*~) debug_print_init::$65 ← (const byte*) debug_print_ini Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2) ← (byte) debug_print_init::col#0 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ( main:2::debug_print_init:8 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ) always clobbers reg byte a Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a -Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y +Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a @@ -7137,7 +7145,7 @@ Statement [235] (byte*~) debug_print_init::$65 ← (const byte*) debug_print_ini Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2) ← (byte) debug_print_init::col#0 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ( main:2::debug_print_init:8 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ) always clobbers reg byte a Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a -Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y +Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a @@ -9034,10 +9042,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -11689,11 +11697,11 @@ print_str_at: { // [244] phi (byte*) print_str_at::str#13 = (byte*) print_str_at::str#15 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy // print_str_at::@1 b1: - // while(*str!='@') - // [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str_at::@return // } diff --git a/src/test/ref/examples/3d/perspective.asm b/src/test/ref/examples/3d/perspective.asm index 07ded8416..61ea002ed 100644 --- a/src/test/ref/examples/3d/perspective.asm +++ b/src/test/ref/examples/3d/perspective.asm @@ -120,7 +120,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/examples/3d/perspective.cfg b/src/test/ref/examples/3d/perspective.cfg index 4ac0e7749..bb2b0bcb6 100644 --- a/src/test/ref/examples/3d/perspective.cfg +++ b/src/test/ref/examples/3d/perspective.cfg @@ -96,7 +96,7 @@ print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspec print_str::@1: scope:[print_str] from print_str print_str::@2 [45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 ) [45] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) - [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 + [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [47] return diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index 085778600..7e7978cab 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -7,6 +7,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (signed byte*) xr Identified constant variable (signed byte*) yr @@ -122,7 +127,7 @@ print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspec print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#64 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#7) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#7) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -905,6 +910,7 @@ SYMBOL TABLE SSA (signed byte*) zr#0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#7) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#4 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (number) 4 @@ -952,6 +958,7 @@ Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 4 @@ -978,6 +985,7 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 @@ -1114,7 +1122,7 @@ Identified duplicate assignment right side [215] (byte~) mulf_init::$4 ← - (by Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 Simple Condition (bool~) print_sbyte::$0 [48] if((signed byte) print_sbyte::b#4<(signed byte) 0) goto print_sbyte::@1 Simple Condition (bool~) mulf_init::$11 [231] if((byte) mulf_init::i#1!=rangelast(0,$80)) goto mulf_init::@1 @@ -1480,7 +1488,7 @@ print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspec print_str::@1: scope:[print_str] from print_str print_str::@2 [45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 ) [45] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) - [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 + [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [47] return @@ -2039,10 +2047,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -2451,7 +2459,7 @@ Statement [6] *((const word*) psp1#0) ← (word)(const byte[$200]) mulf_sqr1#0 [ Statement [7] *((const word*) psp2#0) ← (word)(const byte[$200]) mulf_sqr2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [41] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [42] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y Statement [48] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#7) [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y Statement [52] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ( main:2::do_perspective:10::print_byte:29 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_byte:33 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] @@ -2485,7 +2493,7 @@ Statement [6] *((const word*) psp1#0) ← (word)(const byte[$200]) mulf_sqr1#0 [ Statement [7] *((const word*) psp2#0) ← (word)(const byte[$200]) mulf_sqr2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [41] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [42] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y Statement [48] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#7) [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y Statement [52] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ( main:2::do_perspective:10::print_byte:29 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_byte:33 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ) always clobbers reg byte a Statement [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::do_perspective:10::print_byte:29 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_byte:33 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a @@ -2873,10 +2881,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3822,11 +3830,11 @@ print_str: { // [45] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm index e5704aa09..8fd12c5a9 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.asm +++ b/src/test/ref/examples/chargen/chargen-analysis.asm @@ -395,7 +395,7 @@ print_str_at: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/examples/chargen/chargen-analysis.cfg b/src/test/ref/examples/chargen/chargen-analysis.cfg index 1005317c8..3d33daeb9 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.cfg +++ b/src/test/ref/examples/chargen/chargen-analysis.cfg @@ -256,7 +256,7 @@ print_str_at: scope:[print_str_at] from main::@17 main::@18 main::@19 main::@3 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 ) [128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 ) - [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 + [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [130] return diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index 0b1dd7021..641a47f3c 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Identified constant variable (byte*) SCREEN Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 @@ -431,7 +432,7 @@ print_str_at: scope:[print_str_at] from main::@29 main::@3 main::@30 main::@31 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 (byte*) print_str_at::at#6 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 ) (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 ) - (bool~) print_str_at::$0 ← *((byte*) print_str_at::str#5) != (byte) '@' + (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#5) if((bool~) print_str_at::$0) goto print_str_at::@2 to:print_str_at::@return print_str_at::@2: scope:[print_str_at] from print_str_at::@1 @@ -1132,6 +1133,7 @@ Adding number conversion cast (unumber) 0 in (byte) main::shift#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::pressed#0 ← (number) 0 Adding number conversion cast (unumber) $3f in (bool~) main::$30 ← (byte) main::key#0 != (number) $3f Adding number conversion cast (unumber) 0 in (bool~) main::$33 ← (byte) main::pressed#2 != (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#5) Adding number conversion cast (unumber) 8 in (number~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (number) 8 Adding number conversion cast (unumber) plot_chargen::$1 in (number~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (number) 0 @@ -1353,6 +1355,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $3f Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast $32 @@ -1455,6 +1458,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 @@ -1579,7 +1583,7 @@ Simple Condition (bool~) main::$28 [200] if((byte~) main::$27!=(byte) 0) goto ma Simple Condition (bool~) main::$31 [218] if((byte) main::key#0==(byte) $3f) goto main::@17 Simple Condition (bool~) main::$34 [222] if((byte) main::pressed#2==(byte) 0) goto main::@18 Simple Condition (bool~) main::$36 [233] if((byte) main::ch#1!=rangelast(0,$3f)) goto main::@16 -Simple Condition (bool~) print_str_at::$0 [246] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 +Simple Condition (bool~) print_str_at::$0 [246] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 Simple Condition (bool~) plot_chargen::$4 [260] if((byte) plot_chargen::shift#2==(byte) 0) goto plot_chargen::@1 Simple Condition (bool~) plot_chargen::$12 [285] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5 Simple Condition (bool~) plot_chargen::$14 [293] if((byte) plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4 @@ -2220,7 +2224,7 @@ print_str_at: scope:[print_str_at] from main::@17 main::@18 main::@19 main::@3 print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 [128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 ) [128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 ) - [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 + [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 to:print_str_at::@return print_str_at::@return: scope:[print_str_at] from print_str_at::@1 [130] return @@ -3512,10 +3516,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -3585,7 +3589,7 @@ Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pr Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ] Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a @@ -3606,7 +3610,7 @@ Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:29 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:35 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:41 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:47 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:60 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , @@ -4567,10 +4571,10 @@ print_str_at: { jmp b1 // print_str_at::@1 b1: - // [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str_at::@return @@ -5888,11 +5892,11 @@ print_str_at: { // [128] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy // print_str_at::@1 b1: - // while(*str!='@') - // [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str_at::@return // } diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index b39ad9235..a77ee1d17 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -6,6 +6,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte) init_screen::WHITE Identified constant variable (signed byte*) ap diff --git a/src/test/ref/examples/helloworld/helloworld.asm b/src/test/ref/examples/helloworld/helloworld.asm index f7558a392..e1f8e6c8b 100644 --- a/src/test/ref/examples/helloworld/helloworld.asm +++ b/src/test/ref/examples/helloworld/helloworld.asm @@ -49,7 +49,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/examples/helloworld/helloworld.cfg b/src/test/ref/examples/helloworld/helloworld.cfg index 0873614dc..a327aad75 100644 --- a/src/test/ref/examples/helloworld/helloworld.cfg +++ b/src/test/ref/examples/helloworld/helloworld.cfg @@ -35,7 +35,7 @@ print_str: scope:[print_str] from main print_str::@1: scope:[print_str] from print_str print_str::@2 [15] (byte*) print_char_cursor#10 ← phi( print_str/(byte*) 1024 print_str::@2/(byte*) print_char_cursor#1 ) [15] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 ) - [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [17] return diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index b872108ac..7555ef90c 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -60,7 +65,7 @@ print_str: scope:[print_str] from main print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#17 ← phi( print_str/(byte*) print_char_cursor#21 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -211,13 +216,16 @@ SYMBOL TABLE SSA (byte*) print_str::str#3 (byte*) print_str::str#4 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#6 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#20 (byte*) print_line_cursor#14 @@ -244,7 +252,7 @@ Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#14 Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#10 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [6] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_char_cursor#0 = (byte*) 1024 @@ -328,7 +336,7 @@ print_str: scope:[print_str] from main print_str::@1: scope:[print_str] from print_str print_str::@2 [15] (byte*) print_char_cursor#10 ← phi( print_str/(byte*) 1024 print_str::@2/(byte*) print_char_cursor#1 ) [15] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 ) - [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [17] return @@ -476,10 +484,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -514,7 +522,7 @@ print_str: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [11] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#6 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a Statement [12] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a -Statement [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [18] *((byte*) print_char_cursor#10) ← *((byte*) print_str::str#2) [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ print_line_cursor#6 print_line_cursor#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print_str::str#2 print_str::str#0 ] : zp ZP_WORD:4 , @@ -644,10 +652,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -845,11 +853,11 @@ print_str: { sta str+1 // print_str::@1 b1: - // while(*str!='@') - // [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index e3aa6fb39..cf56eba04 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index ebc5bca17..d859a01a0 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$4 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index 0de9fbab6..fdbdb2b71 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -5,6 +5,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) SCREEN Identified constant variable (byte*) SPRITE diff --git a/src/test/ref/examples/scroll/scroll.asm b/src/test/ref/examples/scroll/scroll.asm index 930c58da1..e260728d9 100644 --- a/src/test/ref/examples/scroll/scroll.asm +++ b/src/test/ref/examples/scroll/scroll.asm @@ -39,7 +39,7 @@ main: { ldy #0 lda (nxt),y tax - cpx #'@' + cpx #0 bne b9 ldx TEXT lda # (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 @@ -1504,6 +1510,7 @@ Inlining cast (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1560,6 +1567,7 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $200 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -1840,7 +1848,7 @@ Identical Phi Values (byte*) print_char_cursor#130 (byte*) print_char_cursor#19 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 @@ -2527,7 +2535,7 @@ print_str: scope:[print_str] from main::@1 main::@11 print_str::@1: scope:[print_str] from print_str print_str::@2 [143] (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 ) [143] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [145] return @@ -3796,10 +3804,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -4063,7 +4071,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ p Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a -Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a @@ -4099,7 +4107,7 @@ Statement [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - Statement [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ) always clobbers reg byte a Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } always clobbers reg byte a reg byte x Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a -Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a @@ -5081,10 +5089,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -6558,11 +6566,11 @@ print_str: { // [143] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-10.asm b/src/test/ref/function-pointer-noarg-call-10.asm index cf57caa37..93ae2bea5 100644 --- a/src/test/ref/function-pointer-noarg-call-10.asm +++ b/src/test/ref/function-pointer-noarg-call-10.asm @@ -59,7 +59,7 @@ print: { inc idx iny lda (msg),y - cmp #'@' + cmp #0 bne b1 rts } diff --git a/src/test/ref/function-pointer-noarg-call-10.cfg b/src/test/ref/function-pointer-noarg-call-10.cfg index a3ad637d2..5f4961137 100644 --- a/src/test/ref/function-pointer-noarg-call-10.cfg +++ b/src/test/ref/function-pointer-noarg-call-10.cfg @@ -49,7 +49,7 @@ print::@1: scope:[print] from print print::@1 [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [22] (byte) idx#12 ← ++ (byte) idx#11 [23] (byte) print::i#1 ← ++ (byte) print::i#2 - [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 + [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 to:print::@return print::@return: scope:[print] from print::@1 [25] return diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index 9fecfe578..c37a2fd7e 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -1,5 +1,6 @@ Resolved forward reference hello to (void()) hello() Resolved forward reference world to (void()) world() +Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg + (byte) print::i) Culled Empty Block (label) @1 Culled Empty Block (label) do10::@2 Culled Empty Block (label) @2 @@ -83,7 +84,7 @@ print::@1: scope:[print] from print print::@1 *((byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#2 + (byte) print::i#2) (byte) idx#5 ← ++ (byte) idx#11 (byte) print::i#1 ← ++ (byte) print::i#2 - (bool~) print::$0 ← *((byte*) print::msg#2 + (byte) print::i#1) != (byte) '@' + (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2 + (byte) print::i#1) if((bool~) print::$0) goto print::@1 to:print::@return print::@return: scope:[print] from print::@1 @@ -168,6 +169,7 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) print::i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2 + (byte) print::i#1) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#4 ← (unumber)(number) 0 @@ -176,9 +178,11 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) do10::fn#0 = (void()*~) main::$0 Alias (void()*) do10::fn#1 = (void()*~) main::$2 @@ -197,7 +201,7 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) idx#15 (byte) idx#16 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) do10::$1 [13] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 -Simple Condition (bool~) print::$0 [40] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 +Simple Condition (bool~) print::$0 [40] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [0] (void()*) do10::fn#0 ← & (void()) hello() Constant right-side identified [3] (void()*) do10::fn#1 ← & (void()) world() @@ -324,7 +328,7 @@ print::@1: scope:[print] from print print::@1 [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [22] (byte) idx#12 ← ++ (byte) idx#11 [23] (byte) print::i#1 ← ++ (byte) print::i#2 - [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 + [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 to:print::@return print::@return: scope:[print] from print::@1 [25] return @@ -522,10 +526,10 @@ print: { inc idx // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 inc i - // [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 + // [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuz2_then_la1 ldy i lda (msg),y - cmp #'@' + cmp #0 bne b1_from_b1 jmp breturn // print::@return @@ -564,12 +568,12 @@ Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10:: Statement [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 idx#11 ] ( print:17 [ print::msg#3 print::i#2 idx#11 ] print:27 [ print::msg#3 print::i#2 idx#11 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ print::i#2 print::i#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:7 [ print::i#2 print::i#1 ] -Statement [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a +Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a Statement [1] (byte) idx#16 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [12] call *((void()*) do10::fn#3) [ do10::fn#3 do10::i#2 ] ( main:3::do10:6 [ do10::fn#3 do10::i#2 ] main:3::do10:8 [ do10::fn#3 do10::i#2 ] ) always clobbers reg byte a reg byte x reg byte y Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10::i#1 ] ( main:3::do10:6 [ do10::fn#3 do10::i#1 ] main:3::do10:8 [ do10::fn#3 do10::i#1 ] ) always clobbers reg byte a Statement [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 idx#11 ] ( print:17 [ print::msg#3 print::i#2 idx#11 ] print:27 [ print::msg#3 print::i#2 idx#11 ] ) always clobbers reg byte a reg byte x -Statement [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a +Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ do10::fn#3 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ do10::i#2 do10::i#1 ] : zp ZP_BYTE:4 , Potential registers zp ZP_WORD:5 [ print::msg#3 ] : zp ZP_WORD:5 , @@ -736,9 +740,9 @@ print: { inc idx // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy iny - // [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 + // [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1 lda (msg),y - cmp #'@' + cmp #0 bne b1_from_b1 jmp breturn // print::@return @@ -980,10 +984,10 @@ print: { inc idx // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy iny - // while(msg[i]!='@') - // [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 + // while(msg[i]) + // [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1 lda (msg),y - cmp #'@' + cmp #0 bne b1 // print::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-7.asm b/src/test/ref/function-pointer-noarg-call-7.asm index f7e66a4fe..b62d4fcf3 100644 --- a/src/test/ref/function-pointer-noarg-call-7.asm +++ b/src/test/ref/function-pointer-noarg-call-7.asm @@ -33,8 +33,10 @@ hello: { sta SCREEN,y inc idx inx - lda msg,x - cmp #'@' + txa + tay + lda #0 + cmp msg,y bne b1 rts } diff --git a/src/test/ref/function-pointer-noarg-call-7.cfg b/src/test/ref/function-pointer-noarg-call-7.cfg index 7280a1ef7..a5582da48 100644 --- a/src/test/ref/function-pointer-noarg-call-7.cfg +++ b/src/test/ref/function-pointer-noarg-call-7.cfg @@ -38,7 +38,7 @@ hello::@1: scope:[hello] from hello hello::@1 [16] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((const byte[]) msg#0 + (byte) hello::i#2) [17] (byte) idx#1 ← ++ (byte) idx#3 [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 - [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 + [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 [20] return diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 5697ce7b4..d0daf60e2 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -1,4 +1,5 @@ Resolved forward reference hello to (void()) hello() +Warning! Adding boolean cast to non-boolean condition *((byte[]) msg + (byte) hello::i) Culled Empty Block (label) @1 Culled Empty Block (label) do10::@2 Culled Empty Block (label) hello::@2 @@ -47,7 +48,7 @@ hello::@1: scope:[hello] from hello hello::@1 *((byte*) SCREEN#0 + (byte) idx#3) ← *((byte[]) msg#0 + (byte) hello::i#2) (byte) idx#1 ← ++ (byte) idx#3 (byte) hello::i#1 ← ++ (byte) hello::i#2 - (bool~) hello::$0 ← *((byte[]) msg#0 + (byte) hello::i#1) != (byte) '@' + (bool~) hello::$0 ← (number) 0 != *((byte[]) msg#0 + (byte) hello::i#1) if((bool~) hello::$0) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 @@ -111,6 +112,7 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) hello::$0 ← (number) 0 != *((byte[]) msg#0 + (byte) hello::i#1) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#0 ← (unumber)(number) 0 @@ -119,9 +121,11 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) main::f#0 = (void()*~) main::$0 Alias (byte) idx#1 = (byte) idx#4 (byte) idx#2 @@ -132,7 +136,7 @@ Identical Phi Values (void()*) do10::fn#1 (void()*) do10::fn#2 Identical Phi Values (byte) idx#5 (byte) idx#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) do10::$1 [11] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 -Simple Condition (bool~) hello::$0 [23] if(*((byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 +Simple Condition (bool~) hello::$0 [23] if((byte) 0!=*((byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello() Successful SSA optimization Pass2ConstantRValueConsolidation @@ -237,7 +241,7 @@ hello::@1: scope:[hello] from hello hello::@1 [16] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((const byte[]) msg#0 + (byte) hello::i#2) [17] (byte) idx#1 ← ++ (byte) idx#3 [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 - [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 + [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 [20] return @@ -378,8 +382,8 @@ hello: { inc idx // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1 inc i - // [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy i cmp msg,y bne b1_from_b1 @@ -400,10 +404,10 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ do Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] -Statement [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ idx#0 hello::i#1 idx#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a +Statement [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 [ idx#0 hello::i#1 idx#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a reg byte y Statement [1] (byte) idx#0 ← (byte) 0 [ idx#0 ] ( [ idx#0 ] ) always clobbers reg byte a Statement [16] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((const byte[]) msg#0 + (byte) hello::i#2) [ idx#0 hello::i#2 idx#3 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx#0 hello::i#2 idx#3 ] ) always clobbers reg byte a reg byte y -Statement [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ idx#0 hello::i#1 idx#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a +Statement [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 [ idx#0 hello::i#1 idx#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] : zp ZP_BYTE:4 , @@ -414,14 +418,14 @@ Uplift Scope [] 224.1: zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] Uplift Scope [do10] 27.5: zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] Uplift Scope [main] -Uplifting [hello] best 4349 combination reg byte x [ hello::i#2 hello::i#1 ] -Uplifting [] best 4349 combination zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] -Uplifting [do10] best 4349 combination zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] -Uplifting [main] best 4349 combination +Uplifting [hello] best 4749 combination reg byte x [ hello::i#2 hello::i#1 ] +Uplifting [] best 4749 combination zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] +Uplifting [do10] best 4749 combination zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] +Uplifting [main] best 4749 combination Attempting to uplift remaining variables inzp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] -Uplifting [] best 4349 combination zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] +Uplifting [] best 4749 combination zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] -Uplifting [do10] best 4349 combination zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] +Uplifting [do10] best 4749 combination zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ idx#0 idx#3 idx#7 idx#1 ] ASSEMBLER BEFORE OPTIMIZATION @@ -521,9 +525,11 @@ hello: { inc idx // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx inx - // [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda msg,x - cmp #'@' + // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 + txa + tay + lda #0 + cmp msg,y bne b1_from_b1 jmp breturn // hello::@return @@ -606,7 +612,7 @@ zp ZP_BYTE:3 [ idx#0 idx#3 idx#7 idx#1 ] FINAL ASSEMBLER -Score: 3326 +Score: 3726 // File Comments // Tests calling into a function pointer with local variables @@ -691,10 +697,12 @@ hello: { inc idx // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx inx - // while(msg[i]!='@') - // [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda msg,x - cmp #'@' + // while(msg[i]) + // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 + txa + tay + lda #0 + cmp msg,y bne b1 // hello::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-8.asm b/src/test/ref/function-pointer-noarg-call-8.asm index fa304eafe..c08b01e89 100644 --- a/src/test/ref/function-pointer-noarg-call-8.asm +++ b/src/test/ref/function-pointer-noarg-call-8.asm @@ -46,7 +46,7 @@ hello: { inc idx iny lda (msg),y - cmp #'@' + cmp #0 bne b1 rts } diff --git a/src/test/ref/function-pointer-noarg-call-8.cfg b/src/test/ref/function-pointer-noarg-call-8.cfg index 1bbe639f4..85521c416 100644 --- a/src/test/ref/function-pointer-noarg-call-8.cfg +++ b/src/test/ref/function-pointer-noarg-call-8.cfg @@ -43,7 +43,7 @@ hello::@1: scope:[hello] from hello hello::@1 [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2) [20] (byte) idx#1 ← ++ (byte) idx#3 [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 - [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 + [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 [23] return diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 2da5a1f67..eaf8144ea 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -3,6 +3,7 @@ Resolved forward reference msg1 to (byte[]) msg1 Resolved forward reference msg to (byte*) msg Resolved forward reference msg2 to (byte[]) msg2 Resolved forward reference msg to (byte*) msg +Warning! Adding boolean cast to non-boolean condition *((byte*) msg + (byte) hello::i) Culled Empty Block (label) @1 Culled Empty Block (label) do10::@2 Culled Empty Block (label) hello::@2 @@ -65,7 +66,7 @@ hello::@1: scope:[hello] from hello hello::@1 *((byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#6 + (byte) hello::i#2) (byte) idx#1 ← ++ (byte) idx#3 (byte) hello::i#1 ← ++ (byte) hello::i#2 - (bool~) hello::$0 ← *((byte*) msg#6 + (byte) hello::i#1) != (byte) '@' + (bool~) hello::$0 ← (number) 0 != *((byte*) msg#6 + (byte) hello::i#1) if((bool~) hello::$0) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 @@ -150,6 +151,7 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) hello::$0 ← (number) 0 != *((byte*) msg#6 + (byte) hello::i#1) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#0 ← (unumber)(number) 0 @@ -158,9 +160,11 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) main::f#0 = (void()*~) main::$0 (void()*) main::f#1 Alias (byte*) msg#1 = (byte*) msg#8 (byte*) msg#5 (byte*) msg#2 @@ -176,7 +180,7 @@ Identical Phi Values (byte*) msg#6 (byte*) msg#9 Identical Phi Values (byte*) msg#4 (byte*) msg#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) do10::$1 [19] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 -Simple Condition (bool~) hello::$0 [33] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 +Simple Condition (bool~) hello::$0 [33] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello() Successful SSA optimization Pass2ConstantRValueConsolidation @@ -291,7 +295,7 @@ hello::@1: scope:[hello] from hello hello::@1 [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2) [20] (byte) idx#1 ← ++ (byte) idx#3 [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 - [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 + [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 to:hello::@return hello::@return: scope:[hello] from hello::@1 [23] return @@ -462,10 +466,10 @@ hello: { inc idx // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1 inc i - // [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 + // [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuz2_then_la1 ldy i lda (msg),y - cmp #'@' + cmp #0 bne b1_from_b1 jmp breturn // hello::@return @@ -489,13 +493,13 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ do Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] -Statement [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a +Statement [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a Statement [1] (byte*) msg#10 ← (byte*) 0 [ msg#10 ] ( [ msg#10 ] ) always clobbers reg byte a Statement [2] (byte) idx#0 ← (byte) 0 [ msg#10 idx#0 ] ( [ msg#10 idx#0 ] ) always clobbers reg byte a Statement [6] (byte*) msg#0 ← (const byte[]) msg1#0 [ msg#10 idx#0 ] ( main:4 [ msg#10 idx#0 ] ) always clobbers reg byte a Statement [8] (byte*) msg#1 ← (const byte[]) msg2#0 [ msg#10 idx#0 ] ( main:4 [ msg#10 idx#0 ] ) always clobbers reg byte a Statement [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2) [ msg#10 idx#0 hello::i#2 idx#3 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#2 idx#3 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#2 idx#3 ] ) always clobbers reg byte a reg byte x -Statement [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a +Statement [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] : zp ZP_BYTE:2 , reg byte y , Potential registers zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] : zp ZP_BYTE:3 , reg byte y , Potential registers zp ZP_WORD:4 [ msg#0 msg#1 msg#10 ] : zp ZP_WORD:4 , @@ -636,9 +640,9 @@ hello: { inc idx // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy iny - // [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 + // [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1 lda (msg),y - cmp #'@' + cmp #0 bne b1_from_b1 jmp breturn // hello::@return @@ -842,10 +846,10 @@ hello: { inc idx // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy iny - // while(msg[i]!='@') - // [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 + // while(msg[i]) + // [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1 lda (msg),y - cmp #'@' + cmp #0 bne b1 // hello::@return // } diff --git a/src/test/ref/helloworld2-inline.asm b/src/test/ref/helloworld2-inline.asm index 9c45ee222..838550919 100644 --- a/src/test/ref/helloworld2-inline.asm +++ b/src/test/ref/helloworld2-inline.asm @@ -7,13 +7,13 @@ main: { ldx #0 ldy #0 print21_b1: - lda #'@' + lda #0 cmp hello,y bne print21_b2 - ldx #0 - ldy #0 + tax + tay print22_b1: - lda #'@' + lda #0 cmp hello,y bne print22_b2 rts diff --git a/src/test/ref/helloworld2-inline.cfg b/src/test/ref/helloworld2-inline.cfg index 42e89d4bd..4cc02d05c 100644 --- a/src/test/ref/helloworld2-inline.cfg +++ b/src/test/ref/helloworld2-inline.cfg @@ -16,7 +16,7 @@ main::print21: scope:[main] from main main::print21_@1: scope:[main] from main::print21 main::print21_@2 [6] (byte) main::print21_j#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_j#1 ) [6] (byte) main::print21_i#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_i#1 ) - [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 + [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 to:main::print22 main::print22: scope:[main] from main::print21_@1 [8] phi() @@ -24,7 +24,7 @@ main::print22: scope:[main] from main::print21_@1 main::print22_@1: scope:[main] from main::print22 main::print22_@2 [9] (byte) main::print22_j#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_j#1 ) [9] (byte) main::print22_i#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_i#1 ) - [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 + [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 to:main::@return main::@return: scope:[main] from main::print22_@1 [11] return diff --git a/src/test/ref/helloworld2-inline.log b/src/test/ref/helloworld2-inline.log index 69924eb1a..6243dfc86 100644 --- a/src/test/ref/helloworld2-inline.log +++ b/src/test/ref/helloworld2-inline.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print2::msg + (byte) print2::i) Identified constant variable (byte*) screen Identified constant variable (byte*) main::hello Inlined call call print2 (byte*) screen (byte*) main::hello @@ -35,7 +36,7 @@ main::print21_@1: scope:[main] from main::print21 main::print21_@2 (byte*) main::print21_at#2 ← phi( main::print21/(byte*) main::print21_at#3 main::print21_@2/(byte*) main::print21_at#1 ) (byte) main::print21_i#2 ← phi( main::print21/(byte) main::print21_i#0 main::print21_@2/(byte) main::print21_i#1 ) (byte*) main::print21_msg#1 ← phi( main::print21/(byte*) main::print21_msg#3 main::print21_@2/(byte*) main::print21_msg#2 ) - (bool~) main::print21_$0#0 ← *((byte*) main::print21_msg#1 + (byte) main::print21_i#2) != (byte) '@' + (bool~) main::print21_$0#0 ← (number) 0 != *((byte*) main::print21_msg#1 + (byte) main::print21_i#2) if((bool~) main::print21_$0#0) goto main::print21_@2 to:main::@1 main::print21_@2: scope:[main] from main::print21_@1 @@ -63,7 +64,7 @@ main::print22_@1: scope:[main] from main::print22 main::print22_@2 (byte*) main::print22_at#2 ← phi( main::print22/(byte*) main::print22_at#3 main::print22_@2/(byte*) main::print22_at#1 ) (byte) main::print22_i#2 ← phi( main::print22/(byte) main::print22_i#0 main::print22_@2/(byte) main::print22_i#1 ) (byte*) main::print22_msg#1 ← phi( main::print22/(byte*) main::print22_msg#3 main::print22_@2/(byte*) main::print22_msg#2 ) - (bool~) main::print22_$0#0 ← *((byte*) main::print22_msg#1 + (byte) main::print22_i#2) != (byte) '@' + (bool~) main::print22_$0#0 ← (number) 0 != *((byte*) main::print22_msg#1 + (byte) main::print22_i#2) if((bool~) main::print22_$0#0) goto main::print22_@2 to:main::@return main::print22_@2: scope:[main] from main::print22_@1 @@ -152,10 +153,12 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) main::print21_j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::print21_i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::print21_$0#0 ← (number) 0 != *((byte*) main::print21_msg#1 + (byte) main::print21_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (number) 2 Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (byte*) screen#0 + (number) $50 Adding number conversion cast (unumber) 0 in (byte) main::print22_j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::print22_i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::print22_$0#0 ← (number) 0 != *((byte*) main::print22_msg#1 + (byte) main::print22_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 @@ -167,18 +170,22 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $50 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::hello#0 = (byte*) main::print21_msg#0 (byte*) main::print21_msg#3 (byte*) main::print22_msg#0 (byte*) main::print22_msg#3 @@ -198,8 +205,8 @@ Identical Phi Values (byte*) main::print21_at#1 (byte*) main::print21_at#0 Identical Phi Values (byte*) main::print22_msg#1 (byte*) main::hello#0 Identical Phi Values (byte*) main::print22_at#1 (byte*) main::print22_at#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::print21_$0#0 [9] if(*((byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -Simple Condition (bool~) main::print22_$0#0 [22] if(*((byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 +Simple Condition (bool~) main::print21_$0#0 [9] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 +Simple Condition (bool~) main::print22_$0#0 [22] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) main::hello#0 = main::$3 @@ -271,7 +278,7 @@ main::print21: scope:[main] from main main::print21_@1: scope:[main] from main::print21 main::print21_@2 [6] (byte) main::print21_j#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_j#1 ) [6] (byte) main::print21_i#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_i#1 ) - [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 + [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 to:main::print22 main::print22: scope:[main] from main::print21_@1 [8] phi() @@ -279,7 +286,7 @@ main::print22: scope:[main] from main::print21_@1 main::print22_@1: scope:[main] from main::print22 main::print22_@2 [9] (byte) main::print22_j#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_j#1 ) [9] (byte) main::print22_i#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_i#1 ) - [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 + [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 to:main::@return main::@return: scope:[main] from main::print22_@1 [11] return @@ -382,8 +389,8 @@ main: { jmp print21_b1 // main::print21_@1 print21_b1: - // [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy print21_i cmp hello,y bne print21_b2 @@ -403,8 +410,8 @@ main: { jmp print22_b1 // main::print22_@1 print22_b1: - // [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy print22_i cmp hello,y bne print22_b2 @@ -457,16 +464,16 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a +Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print21_i#2 main::print21_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print21_j#2 main::print21_j#1 ] -Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a +Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print22_i#2 main::print22_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print22_j#2 main::print22_j#1 ] Statement [12] *((const byte*) main::print22_at#0 + (byte) main::print22_j#2) ← *((const byte*) main::hello#0 + (byte) main::print22_i#2) [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a Statement [15] *((const byte*) screen#0 + (byte) main::print21_j#2) ← *((const byte*) main::hello#0 + (byte) main::print21_i#2) [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a -Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a -Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a +Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a +Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a Statement [12] *((const byte*) main::print22_at#0 + (byte) main::print22_j#2) ← *((const byte*) main::hello#0 + (byte) main::print22_i#2) [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a Statement [15] *((const byte*) screen#0 + (byte) main::print21_j#2) ← *((const byte*) main::hello#0 + (byte) main::print21_i#2) [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::print21_i#2 main::print21_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , @@ -522,8 +529,8 @@ main: { jmp print21_b1 // main::print21_@1 print21_b1: - // [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print21_b2 // [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22] @@ -540,8 +547,8 @@ main: { jmp print22_b1 // main::print22_@1 print22_b1: - // [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print22_b2 jmp breturn @@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Replacing instruction ldx #0 with TAX +Replacing instruction ldy #0 with TAY Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -686,23 +695,23 @@ main: { ldy #0 // main::print21_@1 print21_b1: - // for(byte i=0; msg[i]!='@'; i++) - // [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // for(byte i=0; msg[i]; i++) + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print21_b2 // [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22] // main::print22 // [9] phi from main::print22 to main::print22_@1 [phi:main::print22->main::print22_@1] // [9] phi (byte) main::print22_j#2 = (byte) 0 [phi:main::print22->main::print22_@1#0] -- vbuxx=vbuc1 - ldx #0 + tax // [9] phi (byte) main::print22_i#2 = (byte) 0 [phi:main::print22->main::print22_@1#1] -- vbuyy=vbuc1 - ldy #0 + tay // main::print22_@1 print22_b1: - // for(byte i=0; msg[i]!='@'; i++) - // [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // for(byte i=0; msg[i]; i++) + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print22_b2 // main::@return @@ -719,7 +728,7 @@ main: { // [13] (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 inx inx - // for(byte i=0; msg[i]!='@'; i++) + // for(byte i=0; msg[i]; i++) // [14] (byte) main::print22_i#1 ← ++ (byte) main::print22_i#2 -- vbuyy=_inc_vbuyy iny // [9] phi from main::print22_@2 to main::print22_@1 [phi:main::print22_@2->main::print22_@1] @@ -736,7 +745,7 @@ main: { // [16] (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 inx inx - // for(byte i=0; msg[i]!='@'; i++) + // for(byte i=0; msg[i]; i++) // [17] (byte) main::print21_i#1 ← ++ (byte) main::print21_i#2 -- vbuyy=_inc_vbuyy iny // [6] phi from main::print21_@2 to main::print21_@1 [phi:main::print21_@2->main::print21_@1] diff --git a/src/test/ref/helloworld2.asm b/src/test/ref/helloworld2.asm index a347ceee6..61a804f06 100644 --- a/src/test/ref/helloworld2.asm +++ b/src/test/ref/helloworld2.asm @@ -19,19 +19,26 @@ main: { } // print2(byte* zeropage(2) at) print2: { + .label j = 4 .label at = 2 - ldy #0 - ldx #0 + lda #0 + sta j + tax b1: - lda main.hello,x - cmp #'@' + txa + tay + lda #0 + cmp main.hello,y bne b2 rts b2: lda main.hello,x + ldy j sta (at),y - iny - iny + tya + clc + adc #2 + sta j inx jmp b1 } diff --git a/src/test/ref/helloworld2.cfg b/src/test/ref/helloworld2.cfg index 004698c63..31817732e 100644 --- a/src/test/ref/helloworld2.cfg +++ b/src/test/ref/helloworld2.cfg @@ -24,7 +24,7 @@ print2: scope:[print2] from main main::@1 print2::@1: scope:[print2] from print2 print2::@2 [10] (byte) print2::j#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::j#1 ) [10] (byte) print2::i#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::i#1 ) - [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 + [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 to:print2::@return print2::@return: scope:[print2] from print2::@1 [12] return diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index f88730154..33596d591 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print2::msg + (byte) print2::i) Identified constant variable (byte*) screen Identified constant variable (byte*) main::hello Culled Empty Block (label) @1 @@ -38,7 +39,7 @@ print2::@1: scope:[print2] from print2 print2::@2 (byte*) print2::at#3 ← phi( print2/(byte*) print2::at#4 print2::@2/(byte*) print2::at#2 ) (byte) print2::i#2 ← phi( print2/(byte) print2::i#0 print2::@2/(byte) print2::i#1 ) (byte*) print2::msg#2 ← phi( print2/(byte*) print2::msg#4 print2::@2/(byte*) print2::msg#3 ) - (bool~) print2::$0 ← *((byte*) print2::msg#2 + (byte) print2::i#2) != (byte) '@' + (bool~) print2::$0 ← (number) 0 != *((byte*) print2::msg#2 + (byte) print2::i#2) if((bool~) print2::$0) goto print2::@2 to:print2::@return print2::@2: scope:[print2] from print2::@1 @@ -106,6 +107,7 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (byte*) screen#0 + (number) $50 Adding number conversion cast (unumber) 0 in (byte) print2::j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) print2::i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print2::$0 ← (number) 0 != *((byte*) print2::msg#2 + (byte) print2::i#2) Adding number conversion cast (unumber) 2 in (byte) print2::j#1 ← (byte) print2::j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 @@ -116,11 +118,13 @@ Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $50 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print2::at#1 = (byte*~) main::$1 @@ -132,7 +136,7 @@ Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte*) print2::msg#2 (byte*) print2::msg#4 Identical Phi Values (byte*) print2::at#2 (byte*) print2::at#4 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print2::$0 [15] if(*((byte*) print2::msg#4 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 +Simple Condition (bool~) print2::$0 [15] if((byte) 0!=*((byte*) print2::msg#4 + (byte) print2::i#2)) goto print2::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) main::hello#0 = main::$3 @@ -214,7 +218,7 @@ print2: scope:[print2] from main main::@1 print2::@1: scope:[print2] from print2 print2::@2 [10] (byte) print2::j#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::j#1 ) [10] (byte) print2::i#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::i#1 ) - [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 + [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 to:print2::@return print2::@return: scope:[print2] from print2::@1 [12] return @@ -328,8 +332,8 @@ print2: { jmp b1 // print2::@1 b1: - // [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy i cmp main.hello,y bne b2 @@ -361,11 +365,11 @@ print2: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a +Statement [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] Statement [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a -Statement [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a +Statement [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a Statement [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ print2::at#4 ] : zp ZP_WORD:2 , Potential registers zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , @@ -376,9 +380,12 @@ Uplift Scope [print2] 33: zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] 22: zp ZP_BYT Uplift Scope [main] Uplift Scope [] -Uplifting [print2] best 447 combination reg byte x [ print2::i#2 print2::i#1 ] reg byte y [ print2::j#2 print2::j#1 ] zp ZP_WORD:2 [ print2::at#4 ] -Uplifting [main] best 447 combination -Uplifting [] best 447 combination +Uplifting [print2] best 607 combination reg byte x [ print2::i#2 print2::i#1 ] zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] zp ZP_WORD:2 [ print2::at#4 ] +Uplifting [main] best 607 combination +Uplifting [] best 607 combination +Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] +Uplifting [print2] best 607 combination zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] +Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ print2::j#2 print2::j#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -440,19 +447,23 @@ main: { // print2 // print2(byte* zeropage(2) at) print2: { + .label j = 4 .label at = 2 // [10] phi from print2 to print2::@1 [phi:print2->print2::@1] b1_from_print2: - // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuyy=vbuc1 - ldy #0 + // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1 + lda #0 + sta j // [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1 ldx #0 jmp b1 // print2::@1 b1: - // [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda main.hello,x - cmp #'@' + // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 + txa + tay + lda #0 + cmp main.hello,y bne b2 jmp breturn // print2::@return @@ -461,12 +472,15 @@ print2: { rts // print2::@2 b2: - // [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx + // [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx lda main.hello,x + ldy j sta (at),y - // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2 - iny - iny + // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 + lda j + clc + adc #2 + sta j // [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx inx // [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1] @@ -485,6 +499,8 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction ldx #0 with TAX +Replacing instruction lda j with TYA Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: @@ -525,19 +541,19 @@ FINAL SYMBOL TABLE (byte) print2::i#1 reg byte x 22.0 (byte) print2::i#2 reg byte x 11.0 (byte) print2::j -(byte) print2::j#1 reg byte y 11.0 -(byte) print2::j#2 reg byte y 11.0 +(byte) print2::j#1 j zp ZP_BYTE:4 11.0 +(byte) print2::j#2 j zp ZP_BYTE:4 11.0 (byte*) print2::msg (byte*) screen (const byte*) screen#0 screen = (byte*) 1024 zp ZP_WORD:2 [ print2::at#4 ] reg byte x [ print2::i#2 print2::i#1 ] -reg byte y [ print2::j#2 print2::j#1 ] +zp ZP_BYTE:4 [ print2::j#2 print2::j#1 ] FINAL ASSEMBLER -Score: 369 +Score: 519 // File Comments // Upstart @@ -585,18 +601,22 @@ main: { // print2 // print2(byte* zeropage(2) at) print2: { + .label j = 4 .label at = 2 // [10] phi from print2 to print2::@1 [phi:print2->print2::@1] - // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuyy=vbuc1 - ldy #0 + // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1 + lda #0 + sta j // [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1 - ldx #0 + tax // print2::@1 b1: - // for(byte i=0; msg[i]!='@'; i++) - // [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda main.hello,x - cmp #'@' + // for(byte i=0; msg[i]; i++) + // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 + txa + tay + lda #0 + cmp main.hello,y bne b2 // print2::@return // } @@ -605,14 +625,17 @@ print2: { // print2::@2 b2: // at[j] = msg[i] - // [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx + // [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx lda main.hello,x + ldy j sta (at),y // j += 2 - // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2 - iny - iny - // for(byte i=0; msg[i]!='@'; i++) + // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2 + tya + clc + adc #2 + sta j + // for(byte i=0; msg[i]; i++) // [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx inx // [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1] diff --git a/src/test/ref/helloworld2.sym b/src/test/ref/helloworld2.sym index 0ec1e51c6..29eb782fe 100644 --- a/src/test/ref/helloworld2.sym +++ b/src/test/ref/helloworld2.sym @@ -16,12 +16,12 @@ (byte) print2::i#1 reg byte x 22.0 (byte) print2::i#2 reg byte x 11.0 (byte) print2::j -(byte) print2::j#1 reg byte y 11.0 -(byte) print2::j#2 reg byte y 11.0 +(byte) print2::j#1 j zp ZP_BYTE:4 11.0 +(byte) print2::j#2 j zp ZP_BYTE:4 11.0 (byte*) print2::msg (byte*) screen (const byte*) screen#0 screen = (byte*) 1024 zp ZP_WORD:2 [ print2::at#4 ] reg byte x [ print2::i#2 print2::i#1 ] -reg byte y [ print2::j#2 print2::j#1 ] +zp ZP_BYTE:4 [ print2::j#2 print2::j#1 ] diff --git a/src/test/ref/incrementinarray.asm b/src/test/ref/incrementinarray.asm index 913f47ef0..80f698961 100644 --- a/src/test/ref/incrementinarray.asm +++ b/src/test/ref/incrementinarray.asm @@ -63,7 +63,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/incrementinarray.cfg b/src/test/ref/incrementinarray.cfg index 5457a3f40..694aa6f4e 100644 --- a/src/test/ref/incrementinarray.cfg +++ b/src/test/ref/incrementinarray.cfg @@ -49,7 +49,7 @@ print_str: scope:[print_str] from main::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 [21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 ) - [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [23] return diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index c4dd8bd17..106e8e963 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -107,7 +112,7 @@ print_str: scope:[print_str] from main::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#22 ← phi( print_str/(byte*) print_char_cursor#27 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -382,6 +387,7 @@ SYMBOL TABLE SSA (byte[]) txt#0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) 1 in *((byte[]) txt#0 + (number) 1) ← ++ *((byte[]) txt#0 + (number) 1) @@ -394,12 +400,14 @@ Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 1 @@ -458,7 +466,7 @@ Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 Simple Condition (bool~) main::$3 [79] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -631,7 +639,7 @@ print_str: scope:[print_str] from main::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 [21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 ) - [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [23] return @@ -860,10 +868,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -963,7 +971,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ ma Statement [14] (byte*~) print_char_cursor#31 ← (byte*) print_line_cursor#1 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:28 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y @@ -972,7 +980,7 @@ Statement [10] *((const byte[]) txt#0+(byte) 1) ← ++ *((const byte[]) txt#0+(b Statement [14] (byte*~) print_char_cursor#31 ← (byte*) print_line_cursor#1 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a -Statement [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:28 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [34] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:28 [ memset::dst#1 ] ) always clobbers reg byte a @@ -1145,10 +1153,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -1488,11 +1496,11 @@ print_str: { sta str+1 // print_str::@1 b1: - // while(*str!='@') - // [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/inline-function-print.asm b/src/test/ref/inline-function-print.asm index e1d2e08cc..5a68c4a90 100644 --- a/src/test/ref/inline-function-print.asm +++ b/src/test/ref/inline-function-print.asm @@ -8,13 +8,13 @@ main: { ldx #0 ldy #0 print1_b1: - lda #'@' + lda #0 cmp hello,y bne print1_b2 - ldx #0 - ldy #0 + tax + tay print2_b1: - lda #'@' + lda #0 cmp hello,y bne print2_b2 rts diff --git a/src/test/ref/inline-function-print.cfg b/src/test/ref/inline-function-print.cfg index 8b267c4d1..8702f8cd8 100644 --- a/src/test/ref/inline-function-print.cfg +++ b/src/test/ref/inline-function-print.cfg @@ -16,7 +16,7 @@ main::print1: scope:[main] from main main::print1_@1: scope:[main] from main::print1 main::print1_@2 [6] (byte) main::print1_j#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_j#1 ) [6] (byte) main::print1_i#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_i#1 ) - [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 + [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 to:main::print2 main::print2: scope:[main] from main::print1_@1 [8] phi() @@ -24,7 +24,7 @@ main::print2: scope:[main] from main::print1_@1 main::print2_@1: scope:[main] from main::print2 main::print2_@2 [9] (byte) main::print2_j#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_j#1 ) [9] (byte) main::print2_i#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_i#1 ) - [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 + [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 to:main::@return main::@return: scope:[main] from main::print2_@1 [11] return diff --git a/src/test/ref/inline-function-print.log b/src/test/ref/inline-function-print.log index d813f3038..89b36e06b 100644 --- a/src/test/ref/inline-function-print.log +++ b/src/test/ref/inline-function-print.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg + (byte) print::i) Identified constant variable (byte*) screen Identified constant variable (byte*) main::hello Inlined call call print (byte*) screen (byte*) main::hello @@ -35,7 +36,7 @@ main::print1_@1: scope:[main] from main::print1 main::print1_@2 (byte*) main::print1_at#2 ← phi( main::print1/(byte*) main::print1_at#3 main::print1_@2/(byte*) main::print1_at#1 ) (byte) main::print1_i#2 ← phi( main::print1/(byte) main::print1_i#0 main::print1_@2/(byte) main::print1_i#1 ) (byte*) main::print1_msg#1 ← phi( main::print1/(byte*) main::print1_msg#3 main::print1_@2/(byte*) main::print1_msg#2 ) - (bool~) main::print1_$0#0 ← *((byte*) main::print1_msg#1 + (byte) main::print1_i#2) != (byte) '@' + (bool~) main::print1_$0#0 ← (number) 0 != *((byte*) main::print1_msg#1 + (byte) main::print1_i#2) if((bool~) main::print1_$0#0) goto main::print1_@2 to:main::@1 main::print1_@2: scope:[main] from main::print1_@1 @@ -63,7 +64,7 @@ main::print2_@1: scope:[main] from main::print2 main::print2_@2 (byte*) main::print2_at#2 ← phi( main::print2/(byte*) main::print2_at#3 main::print2_@2/(byte*) main::print2_at#1 ) (byte) main::print2_i#2 ← phi( main::print2/(byte) main::print2_i#0 main::print2_@2/(byte) main::print2_i#1 ) (byte*) main::print2_msg#1 ← phi( main::print2/(byte*) main::print2_msg#3 main::print2_@2/(byte*) main::print2_msg#2 ) - (bool~) main::print2_$0#0 ← *((byte*) main::print2_msg#1 + (byte) main::print2_i#2) != (byte) '@' + (bool~) main::print2_$0#0 ← (number) 0 != *((byte*) main::print2_msg#1 + (byte) main::print2_i#2) if((bool~) main::print2_$0#0) goto main::print2_@2 to:main::@return main::print2_@2: scope:[main] from main::print2_@1 @@ -152,10 +153,12 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) main::print1_j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::print1_i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::print1_$0#0 ← (number) 0 != *((byte*) main::print1_msg#1 + (byte) main::print1_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (number) 2 Adding number conversion cast (unumber) 2*$28 in (byte*~) main::$1 ← (byte*) screen#0 + (number) 2*(number) $28 Adding number conversion cast (unumber) 0 in (byte) main::print2_j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::print2_i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::print2_$0#0 ← (number) 0 != *((byte*) main::print2_msg#1 + (byte) main::print2_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 @@ -167,16 +170,20 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::hello#0 = (byte*) main::print1_msg#0 (byte*) main::print1_msg#3 (byte*) main::print2_msg#0 (byte*) main::print2_msg#3 @@ -196,8 +203,8 @@ Identical Phi Values (byte*) main::print1_at#1 (byte*) main::print1_at#0 Identical Phi Values (byte*) main::print2_msg#1 (byte*) main::hello#0 Identical Phi Values (byte*) main::print2_at#1 (byte*) main::print2_at#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::print1_$0#0 [9] if(*((byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -Simple Condition (bool~) main::print2_$0#0 [22] if(*((byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 +Simple Condition (bool~) main::print1_$0#0 [9] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 +Simple Condition (bool~) main::print2_$0#0 [22] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) main::hello#0 = main::$3 @@ -269,7 +276,7 @@ main::print1: scope:[main] from main main::print1_@1: scope:[main] from main::print1 main::print1_@2 [6] (byte) main::print1_j#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_j#1 ) [6] (byte) main::print1_i#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_i#1 ) - [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 + [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 to:main::print2 main::print2: scope:[main] from main::print1_@1 [8] phi() @@ -277,7 +284,7 @@ main::print2: scope:[main] from main::print1_@1 main::print2_@1: scope:[main] from main::print2 main::print2_@2 [9] (byte) main::print2_j#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_j#1 ) [9] (byte) main::print2_i#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_i#1 ) - [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 + [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 to:main::@return main::@return: scope:[main] from main::print2_@1 [11] return @@ -381,8 +388,8 @@ main: { jmp print1_b1 // main::print1_@1 print1_b1: - // [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy print1_i cmp hello,y bne print1_b2 @@ -402,8 +409,8 @@ main: { jmp print2_b1 // main::print2_@1 print2_b1: - // [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy print2_i cmp hello,y bne print2_b2 @@ -456,16 +463,16 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a +Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ] -Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a +Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print2_j#2 main::print2_j#1 ] Statement [12] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::hello#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Statement [15] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::hello#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a -Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a -Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a +Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a +Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Statement [12] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::hello#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Statement [15] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::hello#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , @@ -522,8 +529,8 @@ main: { jmp print1_b1 // main::print1_@1 print1_b1: - // [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print1_b2 // [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2] @@ -540,8 +547,8 @@ main: { jmp print2_b1 // main::print2_@1 print2_b1: - // [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print2_b2 jmp breturn @@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Replacing instruction ldx #0 with TAX +Replacing instruction ldy #0 with TAY Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -687,23 +696,23 @@ main: { ldy #0 // main::print1_@1 print1_b1: - // for(byte i=0; msg[i]!='@'; i++) - // [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // for(byte i=0; msg[i]; i++) + // [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print1_b2 // [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2] // main::print2 // [9] phi from main::print2 to main::print2_@1 [phi:main::print2->main::print2_@1] // [9] phi (byte) main::print2_j#2 = (byte) 0 [phi:main::print2->main::print2_@1#0] -- vbuxx=vbuc1 - ldx #0 + tax // [9] phi (byte) main::print2_i#2 = (byte) 0 [phi:main::print2->main::print2_@1#1] -- vbuyy=vbuc1 - ldy #0 + tay // main::print2_@1 print2_b1: - // for(byte i=0; msg[i]!='@'; i++) - // [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 - lda #'@' + // for(byte i=0; msg[i]; i++) + // [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 cmp hello,y bne print2_b2 // main::@return @@ -720,7 +729,7 @@ main: { // [13] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 inx inx - // for(byte i=0; msg[i]!='@'; i++) + // for(byte i=0; msg[i]; i++) // [14] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 -- vbuyy=_inc_vbuyy iny // [9] phi from main::print2_@2 to main::print2_@1 [phi:main::print2_@2->main::print2_@1] @@ -737,7 +746,7 @@ main: { // [16] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 inx inx - // for(byte i=0; msg[i]!='@'; i++) + // for(byte i=0; msg[i]; i++) // [17] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 -- vbuyy=_inc_vbuyy iny // [6] phi from main::print1_@2 to main::print1_@1 [phi:main::print1_@2->main::print1_@1] diff --git a/src/test/ref/inline-string-2.asm b/src/test/ref/inline-string-2.asm index 234084441..02fc80a19 100644 --- a/src/test/ref/inline-string-2.asm +++ b/src/test/ref/inline-string-2.asm @@ -43,7 +43,7 @@ print: { b1: ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/inline-string-2.cfg b/src/test/ref/inline-string-2.cfg index b9b9e093b..e7e21737c 100644 --- a/src/test/ref/inline-string-2.cfg +++ b/src/test/ref/inline-string-2.cfg @@ -40,7 +40,7 @@ print: scope:[print] from print_msg::@2 print::@1: scope:[print] from print print::@2 [17] (byte*) screen#14 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#6 ) [17] (byte*) print::msg#2 ← phi( print/(byte*) print::msg#0 print::@2/(byte*) print::msg#1 ) - [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 + [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [19] return diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index 739769996..5c29267b4 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg) Culled Empty Block (label) @1 Culled Empty Block (label) print_msg::@4 Culled Empty Block (label) print::@4 @@ -68,7 +69,7 @@ print: scope:[print] from print_msg::@2 print::@1: scope:[print] from print print::@2 (byte*) screen#19 ← phi( print/(byte*) screen#23 print::@2/(byte*) screen#6 ) (byte*) print::msg#2 ← phi( print/(byte*) print::msg#4 print::@2/(byte*) print::msg#1 ) - (bool~) print::$0 ← *((byte*) print::msg#2) != (byte) '@' + (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2) if((bool~) print::$0) goto print::@2 to:print::@return print::@2: scope:[print] from print::@1 @@ -162,6 +163,7 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1 in (byte) print_msg::idx#0 ← (number) 1 Adding number conversion cast (unumber) 2 in (byte) print_msg::idx#1 ← (number) 2 Adding number conversion cast (unumber) 1 in (bool~) print_msg::$0 ← (byte) print_msg::idx#2 == (number) 1 +Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) print_msg::idx#0 ← (unumber)(number) 1 Inlining cast (byte) print_msg::idx#1 ← (unumber)(number) 2 @@ -171,10 +173,12 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) screen#0 = (byte*) screen#9 Alias (byte*) screen#1 = (byte*) screen#10 (byte*) screen#11 (byte*) screen#2 @@ -196,7 +200,7 @@ Identical Phi Values (byte*) screen#23 (byte*) screen#18 Identical Phi Values (byte*) screen#16 (byte*) screen#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) print_msg::$0 [15] if((byte) print_msg::idx#2==(byte) 1) goto print_msg::@1 -Simple Condition (bool~) print::$0 [32] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 +Simple Condition (bool~) print::$0 [32] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) print_msg::idx#0 = 1 Constant (const byte) print_msg::idx#1 = 2 @@ -301,7 +305,7 @@ print: scope:[print] from print_msg::@2 print::@1: scope:[print] from print print::@2 [17] (byte*) screen#14 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#6 ) [17] (byte*) print::msg#2 ← phi( print/(byte*) print::msg#0 print::@2/(byte*) print::msg#1 ) - [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 + [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [19] return @@ -467,10 +471,10 @@ print: { jmp b1 // print::@1 b1: - // [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -500,7 +504,7 @@ print: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) always clobbers reg byte a -Statement [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y +Statement [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y Statement [20] *((byte*) screen#14) ← *((byte*) print::msg#2) [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_BYTE:2 [ print_msg::idx#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ] : zp ZP_WORD:3 , @@ -634,10 +638,10 @@ print: { jmp b1 // print::@1 b1: - // [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -835,11 +839,11 @@ print: { // [17] phi (byte*) print::msg#2 = (byte*) print::msg#0 [phi:print/print::@2->print::@1#1] -- register_copy // print::@1 b1: - // while(*msg!='@') - // [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*msg) + // [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 // print::@return // } diff --git a/src/test/ref/inline-string.asm b/src/test/ref/inline-string.asm index ba2cba525..f4aba4fde 100644 --- a/src/test/ref/inline-string.asm +++ b/src/test/ref/inline-string.asm @@ -35,7 +35,7 @@ print: { b1: ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/inline-string.cfg b/src/test/ref/inline-string.cfg index f4872f319..a814e5b4c 100644 --- a/src/test/ref/inline-string.cfg +++ b/src/test/ref/inline-string.cfg @@ -29,7 +29,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 ) - [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index ad4a14f92..704c6cdaf 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg) Culled Empty Block (label) print::@4 Culled Empty Block (label) print::@3 Culled Empty Block (label) print::@5 @@ -44,7 +45,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 (byte*) screen#16 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) (byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 ) - (bool~) print::$0 ← *((byte*) print::msg#4) != (byte) '@' + (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#4) if((bool~) print::$0) goto print::@2 to:print::@return print::@2: scope:[print] from print::@1 @@ -121,10 +122,15 @@ SYMBOL TABLE SSA (byte*) screen#8 (byte*) screen#9 +Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#4) +Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#4 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) screen#0 = (byte*) screen#8 Alias (byte*) screen#1 = (byte*) screen#9 Alias (byte*) screen#10 = (byte*) screen#2 (byte*) screen#11 (byte*) screen#3 @@ -139,7 +145,7 @@ Identical Phi Values (byte*) screen#1 (byte*) screen#12 Identical Phi Values (byte*) screen#10 (byte*) screen#12 Identical Phi Values (byte*) screen#14 (byte*) screen#10 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print::$0 [22] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 +Simple Condition (bool~) print::$0 [22] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) msg1#0 = $0 Constant (const byte[]) main::msg2#0 = main::$3 @@ -222,7 +228,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 ) - [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return @@ -351,10 +357,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -385,7 +391,7 @@ print: { .byte 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y +Statement [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y Statement [15] *((byte*) screen#12) ← *((byte*) print::msg#4) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print::msg#4 print::msg#6 print::msg#3 ] : zp ZP_WORD:4 , @@ -492,10 +498,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -667,11 +673,11 @@ print: { // [12] phi (byte*) print::msg#4 = (byte*) print::msg#6 [phi:print/print::@2->print::@1#1] -- register_copy // print::@1 b1: - // while(*msg!='@') - // [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*msg) + // [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y - cmp #'@' + cmp #0 bne b2 // print::@return // } diff --git a/src/test/ref/linegen.asm b/src/test/ref/linegen.asm index 27873e4ad..ff9ecdb6d 100644 --- a/src/test/ref/linegen.asm +++ b/src/test/ref/linegen.asm @@ -249,7 +249,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/linegen.cfg b/src/test/ref/linegen.cfg index 629e27a3c..682d3937c 100644 --- a/src/test/ref/linegen.cfg +++ b/src/test/ref/linegen.cfg @@ -179,7 +179,7 @@ print_str: scope:[print_str] from main::@11 main::@14 main::@16 main::@18 main: print_str::@1: scope:[print_str] from print_str print_str::@2 [88] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 ) [88] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [90] return diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 0a238d4c7..059feffe6 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -8,6 +8,11 @@ Fixing pointer array-indexing *((word[$14]) main::lintab1 + (byte) main::i) Fixing pointer array-indexing *((word[$14]) main::lintab2 + (byte) main::i) Fixing pointer array-indexing *((word[$14]) main::lintab3 + (byte) main::i) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) divr16u::@7 @@ -207,7 +212,7 @@ print_str: scope:[print_str] from main::@10 main::@12 main::@14 main::@18 main: print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#78 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#10) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1244,6 +1249,7 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#4 & (number) $f @@ -1310,6 +1316,7 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -1350,6 +1357,7 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1561,7 +1569,7 @@ Simple Condition (bool~) divr16u::$9 [19] if((word) divr16u::rem#6<(word) divr16 Simple Condition (bool~) divr16u::$11 [26] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 Simple Condition (bool~) memset::$1 [41] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [51] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [65] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [65] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [78] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 Simple Condition (bool~) main::$18 [194] if((byte) main::i#10<(byte) $14) goto main::@2 Simple Condition (bool~) lin16u_gen::$5 [296] if((word) lin16u_gen::i#2<(word) lin16u_gen::length#3) goto lin16u_gen::@2 @@ -2124,7 +2132,7 @@ print_str: scope:[print_str] from main::@11 main::@14 main::@16 main::@18 main: print_str::@1: scope:[print_str] from print_str print_str::@2 [88] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 ) [88] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [90] return @@ -3077,10 +3085,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3498,7 +3506,7 @@ Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ p Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#12 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a @@ -3537,7 +3545,7 @@ Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y -Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4250,10 +4258,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5552,11 +5560,11 @@ print_str: { // [88] phi (byte*) print_str::str#10 = (byte*) print_str::str#12 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/local-string.asm b/src/test/ref/local-string.asm index 15f245a6f..71172714d 100644 --- a/src/test/ref/local-string.asm +++ b/src/test/ref/local-string.asm @@ -4,16 +4,16 @@ .pc = $80d "Program" main: { .label screen = $400 - ldx #0 + ldy #0 b1: - lda msg,x - cmp #'@' + lda #0 + cmp msg,y bne b2 rts b2: - lda msg,x - sta screen,x - inx + lda msg,y + sta screen,y + iny jmp b1 msg: .text "message 2 " .byte 0 diff --git a/src/test/ref/local-string.cfg b/src/test/ref/local-string.cfg index 3a1a5defa..902f5dac9 100644 --- a/src/test/ref/local-string.cfg +++ b/src/test/ref/local-string.cfg @@ -12,7 +12,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 + [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 [7] return diff --git a/src/test/ref/local-string.log b/src/test/ref/local-string.log index b82ea5aa7..f8c891798 100644 --- a/src/test/ref/local-string.log +++ b/src/test/ref/local-string.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte[]) main::msg + (byte) main::i) Identified constant variable (byte*) main::screen Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@3 @@ -14,7 +15,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (bool~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' + (bool~) main::$0 ← (number) 0 != *((byte[]) main::msg#0 + (byte) main::i#2) if((bool~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 @@ -54,18 +55,21 @@ SYMBOL TABLE SSA (byte*) main::screen#0 Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != *((byte[]) main::msg#0 + (byte) main::i#2) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$0 [5] if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 +Simple Condition (bool~) main::$0 [5] if((byte) 0!=*((byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = (byte*) 1024 Constant (const byte[]) main::msg#0 = main::$1 @@ -107,7 +111,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 + [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 [7] return @@ -169,8 +173,8 @@ main: { jmp b1 // main::@1 b1: - // [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1 + lda #0 ldy i cmp msg,y bne b2 @@ -197,10 +201,10 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Statement [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , @@ -208,7 +212,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] -Uplifting [main] best 333 combination reg byte x [ main::i#2 main::i#1 ] +Uplifting [main] best 333 combination reg byte y [ main::i#2 main::i#1 ] Uplifting [] best 333 combination ASSEMBLER BEFORE OPTIMIZATION @@ -240,14 +244,14 @@ main: { .label screen = $400 // [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 jmp b1 // main::@1 b1: - // [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda msg,x - cmp #'@' + // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 + cmp msg,y bne b2 jmp breturn // main::@return @@ -256,11 +260,11 @@ main: { rts // main::@2 b2: - // [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda msg,x - sta screen,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx + // [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy + lda msg,y + sta screen,y + // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy @@ -301,14 +305,14 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte y 22.0 +(byte) main::i#2 reg byte y 18.333333333333332 (byte[]) main::msg (const byte[]) main::msg#0 msg = (string) "message 2 " (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] +reg byte y [ main::i#2 main::i#1 ] FINAL ASSEMBLER @@ -332,14 +336,14 @@ Score: 261 main: { .label screen = $400 // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 // main::@1 b1: - // while(msg[i]!='@') - // [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 - lda msg,x - cmp #'@' + // while(msg[i]) + // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1 + lda #0 + cmp msg,y bne b2 // main::@return // } @@ -348,12 +352,12 @@ main: { // main::@2 b2: // screen[i++] = msg[i] - // [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda msg,x - sta screen,x + // [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy + lda msg,y + sta screen,y // screen[i++] = msg[i]; - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx + // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy jmp b1 diff --git a/src/test/ref/local-string.sym b/src/test/ref/local-string.sym index 22022a0a4..f97f9efd1 100644 --- a/src/test/ref/local-string.sym +++ b/src/test/ref/local-string.sym @@ -6,11 +6,11 @@ (label) main::@2 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 +(byte) main::i#1 reg byte y 22.0 +(byte) main::i#2 reg byte y 18.333333333333332 (byte[]) main::msg (const byte[]) main::msg#0 msg = (string) "message 2 " (byte*) main::screen (const byte*) main::screen#0 screen = (byte*) 1024 -reg byte x [ main::i#2 main::i#1 ] +reg byte y [ main::i#2 main::i#1 ] diff --git a/src/test/ref/loop-break-continue.asm b/src/test/ref/loop-break-continue.asm index aa68f3da0..8323db54f 100644 --- a/src/test/ref/loop-break-continue.asm +++ b/src/test/ref/loop-break-continue.asm @@ -1,5 +1,5 @@ // Illustrates both break & continue statements in a loop -// Prints a message ending at '@' skipping all spaces +// Prints a message ending at NUL skipping all spaces .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" @@ -12,7 +12,7 @@ main: { ldx #0 b1: lda str,x - cmp #'@' + cmp #0 bne b2 breturn: rts diff --git a/src/test/ref/loop-break-continue.cfg b/src/test/ref/loop-break-continue.cfg index c216770dc..38389e37c 100644 --- a/src/test/ref/loop-break-continue.cfg +++ b/src/test/ref/loop-break-continue.cfg @@ -13,7 +13,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@4 [5] (byte*) main::screen#2 ← phi( main/(byte*) 1024 main::@4/(byte*) main::screen#5 ) [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@4/(byte) main::i#1 ) - [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 + [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 main::@4 [7] return diff --git a/src/test/ref/loop-break-continue.log b/src/test/ref/loop-break-continue.log index b84eacd8d..53f41b0f7 100644 --- a/src/test/ref/loop-break-continue.log +++ b/src/test/ref/loop-break-continue.log @@ -16,7 +16,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@5 (byte*) main::screen#4 ← phi( main/(byte*) main::screen#0 main::@5/(byte*) main::screen#5 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 ) - (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@' + (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (number) 0 (bool~) main::$1 ← ! (bool~) main::$0 if((bool~) main::$1) goto main::@2 to:main::@return @@ -84,11 +84,16 @@ SYMBOL TABLE SSA (byte[]) main::str (byte[]) main::str#0 +Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (number) 0 +Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Inversing boolean not [5] (bool~) main::$1 ← *((byte[]) main::str#0 + (byte) main::i#2) != (byte) '@' from [4] (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@' +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [5] (bool~) main::$1 ← *((byte[]) main::str#0 + (byte) main::i#2) != (byte) 0 from [4] (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) 0 Inversing boolean not [9] (bool~) main::$3 ← *((byte[]) main::str#0 + (byte) main::i#3) != (byte) ' ' from [8] (bool~) main::$2 ← *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' ' Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 @@ -96,7 +101,7 @@ Alias (byte*) main::screen#2 = (byte*) main::screen#3 (byte*) main::screen#4 Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#5 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$1 [6] if(*((byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 +Simple Condition (bool~) main::$1 [6] if(*((byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 Simple Condition (bool~) main::$3 [10] if(*((byte[]) main::str#0 + (byte) main::i#2)!=(byte) ' ') goto main::@4 Simple Condition (bool~) main::$4 [17] if((byte) main::i#1!=rangelast(0,$ff)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -163,7 +168,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@4 [5] (byte*) main::screen#2 ← phi( main/(byte*) 1024 main::@4/(byte*) main::screen#5 ) [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@4/(byte) main::i#1 ) - [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 + [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 main::@4 [7] return @@ -206,7 +211,7 @@ INITIAL ASM Target platform is c64basic // File Comments // Illustrates both break & continue statements in a loop -// Prints a message ending at '@' skipping all spaces +// Prints a message ending at NUL skipping all spaces // Upstart .pc = $801 "Basic" :BasicUpstart(bbegin) @@ -245,10 +250,10 @@ main: { jmp b1 // main::@1 b1: - // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 - lda #'@' + // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 -- pbuc1_derefidx_vbuz1_neq_0_then_la1 ldy i - cmp str,y + lda str,y + cmp #0 bne b2 jmp breturn // main::@return @@ -299,12 +304,12 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a +Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Statement [8] if(*((const byte[]) main::str#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a Statement [9] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a +Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a Statement [8] if(*((const byte[]) main::str#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a Statement [9] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , @@ -321,7 +326,7 @@ Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::screen#2 main::screen#5 main:: ASSEMBLER BEFORE OPTIMIZATION // File Comments // Illustrates both break & continue statements in a loop -// Prints a message ending at '@' skipping all spaces +// Prints a message ending at NUL skipping all spaces // Upstart .pc = $801 "Basic" :BasicUpstart(bbegin) @@ -358,9 +363,9 @@ main: { jmp b1 // main::@1 b1: - // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 + // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 -- pbuc1_derefidx_vbuxx_neq_0_then_la1 lda str,x - cmp #'@' + cmp #0 bne b2 jmp breturn // main::@return @@ -463,7 +468,7 @@ Score: 651 // File Comments // Illustrates both break & continue statements in a loop -// Prints a message ending at '@' skipping all spaces +// Prints a message ending at NUL skipping all spaces // Upstart .pc = $801 "Basic" :BasicUpstart(main) @@ -489,10 +494,10 @@ main: { ldx #0 // main::@1 b1: - // if(str[i]=='@') - // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 + // if(str[i]==0) + // [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2 -- pbuc1_derefidx_vbuxx_neq_0_then_la1 lda str,x - cmp #'@' + cmp #0 bne b2 // main::@return breturn: diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index 703d8f095..176ab49ba 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) RASTER Identified constant variable (byte*) BORDERCOL diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index de0dc3568..4ca5b545b 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -9,7 +9,12 @@ Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val) Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$5 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET diff --git a/src/test/ref/pointer-pointer-2.asm b/src/test/ref/pointer-pointer-2.asm index 9f4f26188..73e473ab0 100644 --- a/src/test/ref/pointer-pointer-2.asm +++ b/src/test/ref/pointer-pointer-2.asm @@ -21,7 +21,7 @@ main: { b2: ldy #0 lda (text),y - cmp #'@' + cmp #0 bne b3 inx cpx #$15 diff --git a/src/test/ref/pointer-pointer-2.cfg b/src/test/ref/pointer-pointer-2.cfg index b984181ba..0bfe3e822 100644 --- a/src/test/ref/pointer-pointer-2.cfg +++ b/src/test/ref/pointer-pointer-2.cfg @@ -20,7 +20,7 @@ main::@1: scope:[main] from main main::@4 main::@2: scope:[main] from main::@1 main::@3 [7] (byte*) main::screen#2 ← phi( main::@3/(byte*) main::screen#1 main::@1/(byte*) main::screen#4 ) [7] (byte*) main::text#3 ← phi( main::@3/(byte*) main::text#1 main::@1/(byte*) main::text#2 ) - [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 + [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@2 [9] (byte) main::i#1 ← ++ (byte) main::i#5 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index d531e27f0..6f52f6756 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -1,4 +1,5 @@ Setting inferred volatile on symbol affected by address-of (byte**~) main::$0 ← & (byte*) main::text +Warning! Adding boolean cast to non-boolean condition *((byte*) main::text) Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@7 @@ -36,8 +37,8 @@ main::@2: scope:[main] from main::@3 main::@9 (byte) main::i#3 ← phi( main::@3/(byte) main::i#4 main::@9/(byte) main::i#5 ) (byte*) main::screen#3 ← phi( main::@3/(byte*) main::screen#1 main::@9/(byte*) main::screen#4 ) (byte*) main::text#3 ← phi( main::@3/(byte*) main::text#1 main::@9/(byte*) main::text#6 ) - (bool~) main::$2 ← *((byte*) main::text#3) != (byte) '@' - if((bool~) main::$2) goto main::@3 + (bool~) main::$3 ← (number) 0 != *((byte*) main::text#3) + if((bool~) main::$3) goto main::@3 to:main::@4 main::@3: scope:[main] from main::@2 (byte) textid#18 ← phi( main::@2/(byte) textid#17 ) @@ -54,8 +55,8 @@ main::@4: scope:[main] from main::@2 (byte*) main::text#5 ← phi( main::@2/(byte*) main::text#3 ) (byte) main::i#2 ← phi( main::@2/(byte) main::i#3 ) (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$14) - (bool~) main::$3 ← (byte) main::i#1 != rangelast(0,$14) - if((bool~) main::$3) goto main::@1 + (bool~) main::$2 ← (byte) main::i#1 != rangelast(0,$14) + if((bool~) main::$2) goto main::@1 to:main::@return main::@return: scope:[main] from main::@4 (byte) textid#7 ← phi( main::@4/(byte) textid#12 ) @@ -178,6 +179,7 @@ SYMBOL TABLE SSA (byte) textid#8 (byte) textid#9 +Adding number conversion cast (unumber) 0 in (bool~) main::$3 ← (number) 0 != *((byte*) main::text#3) Adding number conversion cast (unumber) 0 in (byte) textid#2 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) nexttext::$0 ← (byte) textid#8 & (number) 1 Adding number conversion cast (unumber) nexttext::$0 in (number~) nexttext::$0 ← (byte) textid#8 & (unumber)(number) 1 @@ -188,10 +190,12 @@ Inlining cast (byte) textid#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -221,8 +225,8 @@ Identical Phi Values (byte) textid#8 (byte) textid#11 Identical Phi Values (byte**) nexttext::textp#1 (byte**) nexttext::textp#0 Identical Phi Values (byte) textid#10 (byte) textid#1 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::$2 [12] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 -Simple Condition (bool~) main::$3 [20] if((byte) main::i#1!=rangelast(0,$14)) goto main::@1 +Simple Condition (bool~) main::$3 [12] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 +Simple Condition (bool~) main::$2 [20] if((byte) main::i#1!=rangelast(0,$14)) goto main::@1 Simple Condition (bool~) nexttext::$1 [31] if((byte~) nexttext::$0==(byte) 0) goto nexttext::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [5] (byte**) nexttext::textp#0 ← & (byte*) main::text#2 @@ -305,7 +309,7 @@ main::@1: scope:[main] from main main::@4 main::@2: scope:[main] from main::@1 main::@3 [7] (byte*) main::screen#2 ← phi( main::@3/(byte*) main::screen#1 main::@1/(byte*) main::screen#4 ) [7] (byte*) main::text#3 ← phi( main::@3/(byte*) main::text#1 main::@1/(byte*) main::text#2 ) - [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 + [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@2 [9] (byte) main::i#1 ← ++ (byte) main::i#5 @@ -444,10 +448,10 @@ main: { jmp b2 // main::@2 b2: - // [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (text),y - cmp #'@' + cmp #0 bne b3 jmp b4 // main::@4 @@ -527,7 +531,7 @@ nexttext: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte*) main::text#0 ← (byte*) 0 [ main::text#0 ] ( main:2 [ main::text#0 ] ) always clobbers reg byte a -Statement [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ( main:2 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ( main:2 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::i#5 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::i#5 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ textid#11 textid#13 ] @@ -537,7 +541,7 @@ Statement [15] (byte~) nexttext::$0 ← (byte) textid#11 & (byte) 1 [ textid#11 Statement [18] *((const byte**) nexttext::textp#0) ← (const byte[]) text2#0 [ textid#13 ] ( main:2::nexttext:6 [ main::text#2 main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a Statement [20] *((const byte**) nexttext::textp#0) ← (const byte[]) text1#0 [ textid#13 ] ( main:2::nexttext:6 [ main::text#2 main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a Statement [4] (byte*) main::text#0 ← (byte*) 0 [ main::text#0 ] ( main:2 [ main::text#0 ] ) always clobbers reg byte a -Statement [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ( main:2 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ( main:2 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y Statement [12] *((byte*) main::screen#2) ← *((byte*) main::text#3) [ main::i#5 main::text#3 textid#13 main::screen#2 ] ( main:2 [ main::i#5 main::text#3 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y Statement [15] (byte~) nexttext::$0 ← (byte) textid#11 & (byte) 1 [ textid#11 nexttext::$0 ] ( main:2::nexttext:6 [ main::text#2 main::screen#4 main::i#5 textid#11 nexttext::$0 ] ) always clobbers reg byte a Statement [18] *((const byte**) nexttext::textp#0) ← (const byte[]) text2#0 [ textid#13 ] ( main:2::nexttext:6 [ main::text#2 main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a @@ -624,10 +628,10 @@ main: { jmp b2 // main::@2 b2: - // [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (text),y - cmp #'@' + cmp #0 bne b3 jmp b4 // main::@4 @@ -839,11 +843,11 @@ main: { // [7] phi (byte*) main::text#3 = (byte*) main::text#2 [phi:main::@1/main::@3->main::@2#1] -- register_copy // main::@2 b2: - // while(*text!='@') - // [8] if(*((byte*) main::text#3)!=(byte) '@') goto main::@3 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*text) + // [8] if((byte) 0!=*((byte*) main::text#3)) goto main::@3 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (text),y - cmp #'@' + cmp #0 bne b3 // main::@4 // for(byte i: 0..20) diff --git a/src/test/ref/printmsg.asm b/src/test/ref/printmsg.asm index 773a0dec8..21502839d 100644 --- a/src/test/ref/printmsg.asm +++ b/src/test/ref/printmsg.asm @@ -67,7 +67,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/printmsg.cfg b/src/test/ref/printmsg.cfg index 799a46df3..596f1fce0 100644 --- a/src/test/ref/printmsg.cfg +++ b/src/test/ref/printmsg.cfg @@ -52,7 +52,7 @@ print_str: scope:[print_str] from main main::@2 main::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 [23] (byte*) print_char_cursor#13 ← phi( print_str/(byte*) print_char_cursor#29 print_str::@2/(byte*) print_char_cursor#1 ) [23] (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) - [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 + [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [25] return diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index 9bffc38bf..f9e44b464 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -59,7 +64,7 @@ print_str: scope:[print_str] from main main::@2 main::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#25 ← phi( print_str/(byte*) print_char_cursor#29 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#4) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#4) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -276,13 +281,16 @@ SYMBOL TABLE SSA (byte*) print_str::str#5 (byte*) print_str::str#6 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#4) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#8 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#30 (byte*) print_line_cursor#22 (byte*) print_char_cursor#28 (byte*) print_line_cursor#20 @@ -319,7 +327,7 @@ Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_char_cursor#26 (byte*) print_char_cursor#13 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [6] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#13) goto print_ln::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_char_cursor#0 = (byte*) 1024 @@ -440,7 +448,7 @@ print_str: scope:[print_str] from main main::@2 main::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 [23] (byte*) print_char_cursor#13 ← phi( print_str/(byte*) print_char_cursor#29 print_str::@2/(byte*) print_char_cursor#1 ) [23] (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) - [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 + [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [25] return @@ -651,10 +659,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -693,7 +701,7 @@ Statement [8] (byte*~) print_char_cursor#31 ← (byte*) print_line_cursor#1 [ pr Statement [12] (byte*~) print_char_cursor#32 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#32 ] ( main:2 [ print_line_cursor#1 print_char_cursor#32 ] ) always clobbers reg byte a Statement [19] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 [ print_line_cursor#1 print_char_cursor#13 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#13 ] main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#13 ] main:2::print_ln:15 [ print_line_cursor#1 print_char_cursor#13 ] ) always clobbers reg byte a Statement [20] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#13) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#13 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#13 ] main:2::print_ln:11 [ print_line_cursor#1 print_char_cursor#13 ] main:2::print_ln:15 [ print_line_cursor#1 print_char_cursor#13 ] ) always clobbers reg byte a -Statement [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ print_char_cursor#13 print_str::str#4 ] ( main:2::print_str:5 [ print_char_cursor#13 print_str::str#4 ] main:2::print_str:9 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] ) always clobbers reg byte a reg byte y +Statement [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 [ print_char_cursor#13 print_str::str#4 ] ( main:2::print_str:5 [ print_char_cursor#13 print_str::str#4 ] main:2::print_str:9 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] ) always clobbers reg byte a reg byte y Statement [26] *((byte*) print_char_cursor#13) ← *((byte*) print_str::str#4) [ print_char_cursor#13 print_str::str#4 ] ( main:2::print_str:5 [ print_char_cursor#13 print_str::str#4 ] main:2::print_str:9 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#13 print_str::str#4 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ print_line_cursor#8 print_line_cursor#16 print_line_cursor#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print_str::str#4 print_str::str#6 print_str::str#0 ] : zp ZP_WORD:4 , @@ -875,10 +883,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -1151,11 +1159,11 @@ print_str: { // [23] phi (byte*) print_str::str#4 = (byte*) print_str::str#6 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [24] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [24] if((byte) 0!=*((byte*) print_str::str#4)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/processor-port-test.asm b/src/test/ref/processor-port-test.asm index 8172f7c77..1d00f389f 100644 --- a/src/test/ref/processor-port-test.asm +++ b/src/test/ref/processor-port-test.asm @@ -341,7 +341,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/processor-port-test.cfg b/src/test/ref/processor-port-test.cfg index 4bf750d23..818c2f0e5 100644 --- a/src/test/ref/processor-port-test.cfg +++ b/src/test/ref/processor-port-test.cfg @@ -248,7 +248,7 @@ print_str: scope:[print_str] from main::@2 testProcport testProcport::@10 testP print_str::@1: scope:[print_str] from print_str print_str::@2 [127] (byte*) print_char_cursor#114 ← phi( print_str/(byte*) print_char_cursor#121 print_str::@2/(byte*) print_char_cursor#1 ) [127] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [129] return diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 1bad1fc16..5d4dd6857 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 @@ -123,7 +128,7 @@ print_str: scope:[print_str] from main::@7 testProcport testProcport::@10 testP print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#114 ← phi( print_str/(byte*) print_char_cursor#121 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#10) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1188,6 +1193,7 @@ Adding number conversion cast (unumber) 1 in (byte) PROCPORT_RAM_CHARROM#0 ← ( Adding number conversion cast (unumber) 6 in (byte) PROCPORT_KERNEL_IO#0 ← (number) 6 Adding number conversion cast (unumber) 7 in (byte) PROCPORT_BASIC_KERNEL_IO#0 ← (number) 7 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#34 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#9 & (number) $f @@ -1342,6 +1348,7 @@ Simplifying constant integer cast 6 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -1419,6 +1426,7 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1678,7 +1686,7 @@ Identical Phi Values (byte*) print_line_cursor#71 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [11] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [21] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [34] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [34] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [47] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#115) goto print_ln::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = (byte*) 0 @@ -2393,7 +2401,7 @@ print_str: scope:[print_str] from main::@2 testProcport testProcport::@10 testP print_str::@1: scope:[print_str] from print_str print_str::@2 [127] (byte*) print_char_cursor#114 ← phi( print_str/(byte*) print_char_cursor#121 print_str::@2/(byte*) print_char_cursor#1 ) [127] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [129] return @@ -3449,10 +3457,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3567,7 +3575,7 @@ Statement [123] *((byte*) print_char_cursor#65) ← (byte) print_char::ch#2 [ pr Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ testProcport::port#23 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ testProcport::ddr2#23 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ print_byte::b#8 print_byte::b#0 print_byte::b#5 print_byte::b#6 print_byte::b#7 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 ] -Statement [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ testProcport::ddr#23 ] Statement [130] *((byte*) print_char_cursor#114) ← *((byte*) print_str::str#10) [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [138] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:13::memset:134 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y @@ -3590,7 +3598,7 @@ Statement [112] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#115) go Statement [115] (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (byte) 4 [ print_char_cursor#114 print_byte::b#8 print_byte::$0 ] ( main:2::testProcport:19::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:85 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:89 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:93 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:97 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:101 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:19::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:21::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:23::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:25::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:27::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:29::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:31::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:33::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:35::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:37::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:39::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:41::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:43::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:45::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:47::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:49::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:51::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:53::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:55::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:57::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:59::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:61::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] main:2::testProcport:63::print_byte:105 [ print_line_cursor#1 print_char_cursor#114 print_byte::b#8 print_byte::$0 ] ) always clobbers reg byte a Statement [118] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#66 print_byte::$2 ] ( main:2::testProcport:19::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:77 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:81 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:85 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:89 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:93 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:97 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:101 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:19::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:21::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:23::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:25::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:27::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:29::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:31::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:33::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:35::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:37::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:39::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:41::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:43::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:45::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:47::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:49::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:51::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:53::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:55::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:57::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:59::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:61::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] main:2::testProcport:63::print_byte:105 [ print_line_cursor#1 print_char_cursor#66 print_byte::$2 ] ) always clobbers reg byte a Statement [123] *((byte*) print_char_cursor#65) ← (byte) print_char::ch#2 [ print_char_cursor#65 ] ( main:2::testProcport:19::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:77::print_char:117 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:81::print_char:117 [ testProcport::ddr2#23 print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:85::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:89::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:93::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:97::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:101::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:21::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:23::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:25::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:27::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:29::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:31::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:33::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:35::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:37::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:39::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:41::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:43::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:45::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:47::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:49::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:51::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:53::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:55::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:57::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:59::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:61::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:63::print_byte:105::print_char:117 [ print_line_cursor#1 print_byte::b#8 print_char_cursor#65 ] main:2::testProcport:19::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:77::print_char:120 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:81::print_char:120 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:85::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:89::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:93::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:97::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:101::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:19::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:21::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:23::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:25::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:27::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:29::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:31::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:33::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:35::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:37::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:39::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:41::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:43::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:45::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:47::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:49::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:51::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:53::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:55::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:57::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:59::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:61::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] main:2::testProcport:63::print_byte:105::print_char:120 [ print_line_cursor#1 print_char_cursor#65 ] ) always clobbers reg byte y -Statement [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [130] *((byte*) print_char_cursor#114) ← *((byte*) print_str::str#10) [ print_char_cursor#114 print_str::str#10 ] ( main:2::print_str:15 [ print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:75 [ testProcport::ddr#23 testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:79 [ testProcport::port#23 testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:83 [ testProcport::ddr2#23 print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:87 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:91 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:95 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:99 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:19::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:21::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:23::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:25::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:27::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:29::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:31::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:33::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:35::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:37::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:39::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:41::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:43::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:45::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:47::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:49::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:51::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:53::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:55::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:57::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:59::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:61::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] main:2::testProcport:63::print_str:103 [ print_line_cursor#1 print_char_cursor#114 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [138] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:13::memset:134 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [140] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:13::memset:134 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4511,10 +4519,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5752,11 +5760,11 @@ print_str: { // [127] phi (byte*) print_str::str#10 = (byte*) print_str::str#12 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [128] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [128] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index c4ba7cd44..8923f69be 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -8,7 +8,12 @@ Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::dig Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) main::BASE_SCREEN Identified constant variable (byte*) main::BASE_CHARSET diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index 660c3bdb6..018d5cf57 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -9,6 +9,11 @@ Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) main::BASE_SCREEN Identified constant variable (byte*) main::BASE_CHARSET diff --git a/src/test/ref/scroll-clobber.asm b/src/test/ref/scroll-clobber.asm index 61581576c..b84ad7667 100644 --- a/src/test/ref/scroll-clobber.asm +++ b/src/test/ref/scroll-clobber.asm @@ -13,7 +13,7 @@ main: { ldy #0 lda (nxt),y tay - cpy #'@' + cpy #0 bne b2 ldy TEXT lda # (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f @@ -917,6 +923,7 @@ Inlining cast (byte*~) print_points::pointYpos1_$1#0 ← (byte*)(byte*~) print_p Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -938,6 +945,7 @@ Simplifying constant integer cast 1 Simplifying constant integer cast (byte*~) print_points::pointYpos1_$0#0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1040,7 +1048,7 @@ Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#29) goto print_ln::@1 Simple Condition (bool~) init_points::$4 [135] if((byte) init_points::i#1!=rangelast(0,init_points::$0)) goto init_points::@1 Simple Condition (bool~) print_points::$9 [191] if((byte) print_points::i#1!=rangelast(0,print_points::$1)) goto print_points::@1 @@ -1373,7 +1381,7 @@ print_str: scope:[print_str] from print_points::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 [46] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#29 print_str::@2/(byte*) print_char_cursor#1 ) [46] (byte*) print_str::str#2 ← phi( print_str/(const string) print_points::str print_str::@2/(byte*) print_str::str#0 ) - [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [48] return @@ -1878,10 +1886,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -2075,7 +2083,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ pr Statement [37] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#29 print_byte::$2 ] ( main:2::print_points:7::print_byte:16 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#29 print_byte::$2 ] main:2::print_points:7::print_byte:21 [ print_points::i#10 print_line_cursor#24 print_char_cursor#29 print_byte::$2 ] ) always clobbers reg byte a Statement [42] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#2 [ print_char_cursor#28 ] ( main:2::print_points:7::print_byte:16::print_char:36 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_byte::b#2 print_char_cursor#28 ] main:2::print_points:7::print_byte:21::print_char:36 [ print_points::i#10 print_line_cursor#24 print_byte::b#2 print_char_cursor#28 ] main:2::print_points:7::print_byte:16::print_char:39 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#28 ] main:2::print_points:7::print_byte:21::print_char:39 [ print_points::i#10 print_line_cursor#24 print_char_cursor#28 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [49] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [57] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_points:7::print_cls:10::memset:53 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [59] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_points:7::print_cls:10::memset:53 [ memset::dst#1 ] ) always clobbers reg byte a @@ -2098,7 +2106,7 @@ Statement [31] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#29) goto Statement [34] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#42 print_byte::$0 ] ( main:2::print_points:7::print_byte:16 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_byte::b#2 print_char_cursor#42 print_byte::$0 ] main:2::print_points:7::print_byte:21 [ print_points::i#10 print_line_cursor#24 print_byte::b#2 print_char_cursor#42 print_byte::$0 ] ) always clobbers reg byte a Statement [37] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#29 print_byte::$2 ] ( main:2::print_points:7::print_byte:16 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#29 print_byte::$2 ] main:2::print_points:7::print_byte:21 [ print_points::i#10 print_line_cursor#24 print_char_cursor#29 print_byte::$2 ] ) always clobbers reg byte a Statement [42] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#2 [ print_char_cursor#28 ] ( main:2::print_points:7::print_byte:16::print_char:36 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_byte::b#2 print_char_cursor#28 ] main:2::print_points:7::print_byte:21::print_char:36 [ print_points::i#10 print_line_cursor#24 print_byte::b#2 print_char_cursor#28 ] main:2::print_points:7::print_byte:16::print_char:39 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#28 ] main:2::print_points:7::print_byte:21::print_char:39 [ print_points::i#10 print_line_cursor#24 print_char_cursor#28 ] ) always clobbers reg byte y -Statement [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [49] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::print_points:7::print_str:18 [ print_points::i#10 print_line_cursor#24 print_points::point#0 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [57] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_points:7::print_cls:10::memset:53 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [59] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_points:7::print_cls:10::memset:53 [ memset::dst#1 ] ) always clobbers reg byte a @@ -2449,10 +2457,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3136,11 +3144,11 @@ print_str: { sta str+1 // print_str::@1 b1: - // while(*str!='@') - // [47] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [47] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm index 51784c8fa..2a6065653 100644 --- a/src/test/ref/semi-struct-2.asm +++ b/src/test/ref/semi-struct-2.asm @@ -267,7 +267,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/semi-struct-2.cfg b/src/test/ref/semi-struct-2.cfg index ad6afe593..3fa24edee 100644 --- a/src/test/ref/semi-struct-2.cfg +++ b/src/test/ref/semi-struct-2.cfg @@ -169,7 +169,7 @@ print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@22 print print_str::@1: scope:[print_str] from print_str print_str::@2 [84] (byte*) print_char_cursor#142 ← phi( print_str/(byte*) print_char_cursor#164 print_str::@2/(byte*) print_char_cursor#1 ) [84] (byte*) print_str::str#18 ← phi( print_str/(byte*) print_str::str#20 print_str::@2/(byte*) print_str::str#0 ) - [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 + [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [86] return diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index b6768fb01..3f3c9f5eb 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte*~) main::$1 ← call fileEntry (number) 1 @@ -253,7 +258,7 @@ print_str: scope:[print_str] from main::@20 main::@25 main::@28 main::@33 print print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#142 ← phi( print_str/(byte*) print_char_cursor#164 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#18 ← phi( print_str/(byte*) print_str::str#20 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#18) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#18) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -3095,6 +3100,7 @@ Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mu Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#5 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#18) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#10 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#11 & (number) $f @@ -3228,6 +3234,7 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -3326,6 +3333,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -3685,7 +3693,7 @@ Simple Condition (bool~) mul8u::$0 [5] if((byte) mul8u::a#3!=(byte) 0) goto mul8 Simple Condition (bool~) mul8u::$3 [10] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@4 Simple Condition (bool~) memset::$1 [27] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [37] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [50] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [50] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#143) goto print_ln::@1 Simple Condition (bool~) main::$21 [237] if((byte~) main::$20==(byte) 0) goto main::@1 Simple Condition (bool~) main::$23 [275] if((byte~) main::$22==(byte) 0) goto main::@7 @@ -4464,7 +4472,7 @@ print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@22 print print_str::@1: scope:[print_str] from print_str print_str::@2 [84] (byte*) print_char_cursor#142 ← phi( print_str/(byte*) print_char_cursor#164 print_str::@2/(byte*) print_char_cursor#1 ) [84] (byte*) print_str::str#18 ← phi( print_str/(byte*) print_str::str#20 print_str::@2/(byte*) print_str::str#0 ) - [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 + [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [86] return @@ -5882,10 +5890,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -7140,7 +7148,7 @@ Statement [70] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::d Statement [72] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#1 ] main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#1 ] main:2::print_cls:63::memset:66 [ memset::dst#1 ] ) always clobbers reg byte a Statement [80] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] ) always clobbers reg byte a Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y +Statement [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y Statement [87] *((byte*) print_char_cursor#142) ← *((byte*) print_str::str#18) [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y Statement [92] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 [ print_line_cursor#1 print_char_cursor#143 ] ( main:2::print_ln:25 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:28 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:33 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:46 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:49 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:54 [ print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:103 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:103 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:110 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:110 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:117 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:117 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:124 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:124 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:131 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:131 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:138 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:138 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:145 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:145 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:152 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:152 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:159 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:159 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:166 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:166 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:173 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:173 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:180 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:180 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:187 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:187 [ print_line_cursor#1 print_char_cursor#143 ] ) always clobbers reg byte a Statement [93] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#143) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#143 ] ( main:2::print_ln:25 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:28 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:33 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:46 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:49 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:54 [ print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:103 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:103 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:110 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:110 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:117 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:117 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:124 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:124 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:131 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:131 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:138 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:138 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:145 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:145 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:152 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:152 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:159 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:159 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:166 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:166 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:173 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:173 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:180 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:180 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:187 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:187 [ print_line_cursor#1 print_char_cursor#143 ] ) always clobbers reg byte a @@ -7247,7 +7255,7 @@ Statement [70] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::d Statement [72] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#1 ] main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#1 ] main:2::print_cls:63::memset:66 [ memset::dst#1 ] ) always clobbers reg byte a Statement [80] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] ) always clobbers reg byte a Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y +Statement [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y Statement [87] *((byte*) print_char_cursor#142) ← *((byte*) print_str::str#18) [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:98 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:98 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:105 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:105 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:112 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:112 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:119 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:119 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:126 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:126 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:133 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:133 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:140 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:140 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:147 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:147 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:154 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:154 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:161 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:161 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:168 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:168 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:175 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:175 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:30::print_str:182 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] main:2::printEntry:51::print_str:182 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] ) always clobbers reg byte a reg byte y Statement [92] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 [ print_line_cursor#1 print_char_cursor#143 ] ( main:2::print_ln:25 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:28 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:33 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:46 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:49 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:54 [ print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:103 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:103 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:110 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:110 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:117 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:117 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:124 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:124 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:131 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:131 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:138 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:138 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:145 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:145 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:152 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:152 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:159 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:159 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:166 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:166 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:173 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:173 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:180 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:180 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:187 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:187 [ print_line_cursor#1 print_char_cursor#143 ] ) always clobbers reg byte a Statement [93] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#143) goto print_ln::@2 [ print_line_cursor#1 print_char_cursor#143 ] ( main:2::print_ln:25 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:28 [ main::entry1#0 main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:33 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:46 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:49 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::print_ln:54 [ print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:103 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:103 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:110 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:110 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:117 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:117 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:124 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:124 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:131 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:131 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:138 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:138 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:145 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:145 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:152 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:152 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:159 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:159 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:166 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:166 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:173 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:173 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:180 [ main::entry2#0 printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:180 [ printEntry::entry#10 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:30::print_ln:187 [ main::entry2#0 print_line_cursor#1 print_char_cursor#143 ] main:2::printEntry:51::print_ln:187 [ print_line_cursor#1 print_char_cursor#143 ] ) always clobbers reg byte a @@ -8001,10 +8009,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -10573,11 +10581,11 @@ print_str: { // [84] phi (byte*) print_str::str#18 = (byte*) print_str::str#20 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [85] if(*((byte*) print_str::str#18)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 583ad47b8..5319dfa09 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Warning! Adding boolean cast to non-boolean sub-expression *((byte*) main::sieve_i) Warning! Adding boolean cast to non-boolean sub-expression *((byte*) sieve + (word) main::i) Identified constant variable (byte*) HEAP_TOP diff --git a/src/test/ref/sieve.asm b/src/test/ref/sieve.asm index 5425b2f71..a8f160001 100644 --- a/src/test/ref/sieve.asm +++ b/src/test/ref/sieve.asm @@ -276,7 +276,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sieve.cfg b/src/test/ref/sieve.cfg index 6ddbdad1d..4cc987d06 100644 --- a/src/test/ref/sieve.cfg +++ b/src/test/ref/sieve.cfg @@ -147,7 +147,7 @@ print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@23 main: print_str::@1: scope:[print_str] from print_str print_str::@2 [71] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) [71] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) - [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 + [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [73] return diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index 8d662c426..21f12017a 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Warning! Adding boolean cast to non-boolean sub-expression *((byte*) main::sieve_i) Warning! Adding boolean cast to non-boolean sub-expression *((byte*) sieve + (word) main::i) Identified constant variable (byte*) HEAP_TOP @@ -700,7 +705,7 @@ print_str: scope:[print_str] from main::@17 main::@30 main::@32 main::@39 main: print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#56 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#8) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#8) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -2201,6 +2206,7 @@ Adding number conversion cast (unumber) ultoa::$5 in (number~) ultoa::$5 ← (by Adding number conversion cast (unumber) 0 in *((byte*) ultoa::buffer#3) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) ultoa::started#1 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) ultoa_append::digit#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#8) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) $4000 in (word) COUNT#0 ← (number) $4000 @@ -2425,6 +2431,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant pointer cast (byte*) 1024 @@ -2489,6 +2496,7 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $4000 @@ -2791,7 +2799,7 @@ Simple Condition (bool~) ultoa::$2 [227] if((byte) ultoa::radix#0==(const byte) Simple Condition (bool~) ultoa::$3 [233] if((byte) ultoa::radix#0==(const byte) BINARY) goto ultoa::@4 Simple Condition (bool~) ultoa::$6 [252] if((byte) ultoa::digit#2<(byte~) ultoa::$5) goto ultoa::@19 Simple Condition (bool~) ultoa_append::$0 [282] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -Simple Condition (bool~) print_str::$0 [299] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [299] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [312] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 Simple Condition (bool~) main::$22 [429] if((word) main::i#12<(byte) SQRT_COUNT#0) goto main::@2 Simple Condition (bool~) main::$24 [434] if((byte) 0!=*((byte*) main::sieve_i#2)) goto main::@4 @@ -3728,7 +3736,7 @@ print_str: scope:[print_str] from main::@10 main::@15 main::@17 main::@23 main: print_str::@1: scope:[print_str] from print_str print_str::@2 [71] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#66 print_str::@2/(byte*) print_char_cursor#1 ) [71] (byte*) print_str::str#8 ← phi( print_str/(byte*) print_str::str#10 print_str::@2/(byte*) print_str::str#0 ) - [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 + [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [73] return @@ -5056,10 +5064,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -6147,7 +6155,7 @@ Statement [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 [ Statement [67] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y Statement [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ) always clobbers reg byte a Statement [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ) always clobbers reg byte a -Statement [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y Statement [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y Statement [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:58 [ main::i#22 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y Statement [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:44 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:56 [ main::i#22 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a @@ -6248,7 +6256,7 @@ Statement [66] (byte*~) print_char_cursor#106 ← (byte*) print_char_cursor#90 [ Statement [67] *((byte*) main::s#2) ← (byte) 1 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y Statement [68] (byte*) main::s#1 ← (byte*) main::s#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#2 main::s#1 ] ) always clobbers reg byte a Statement [69] (word) main::j#1 ← (word) main::j#2 + (word) main::i#17 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ( main:2 [ print_line_cursor#1 main::i#17 main::sieve_i#11 main::j#1 main::s#1 ] ) always clobbers reg byte a -Statement [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y +Statement [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y Statement [74] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#8) [ print_char_cursor#2 print_str::str#8 ] ( main:2::print_str:9 [ print_char_cursor#2 print_str::str#8 ] main:2::print_str:13 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_str:42 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:46 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_str:63 [ print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:15::print_str:84 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:44::print_str:84 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#2 print_str::str#8 ] main:2::print_word_decimal:56::print_str:84 [ main::i#22 print_char_cursor#2 print_str::str#8 ] main:2::print_dword_decimal:48::print_str:124 [ print_line_cursor#1 print_char_cursor#2 print_str::str#8 ] ) always clobbers reg byte a reg byte y Statement [77] *((byte*) print_char_cursor#2) ← (const byte) print_char::ch#0 [ print_char_cursor#2 ] ( main:2::print_char:58 [ main::i#22 print_char_cursor#2 ] ) always clobbers reg byte a reg byte y Statement [81] (word) utoa::value#1 ← (word) print_word_decimal::w#3 [ print_char_cursor#58 utoa::value#1 ] ( main:2::print_word_decimal:15 [ print_line_cursor#1 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:44 [ print_line_cursor#1 main::cyclecount#0 print_char_cursor#58 utoa::value#1 ] main:2::print_word_decimal:56 [ main::i#22 print_char_cursor#58 utoa::value#1 ] ) always clobbers reg byte a @@ -6996,10 +7004,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -9046,11 +9054,11 @@ print_str: { // [71] phi (byte*) print_str::str#8 = (byte*) print_str::str#10 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [72] if(*((byte*) print_str::str#8)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [72] if((byte) 0!=*((byte*) print_str::str#8)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index 283931914..2427227e8 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -7,6 +7,11 @@ Fixing pointer array-indexing *((signed word[]) words + (byte) main::j) Fixing pointer array-indexing *((signed word[]) words + (byte) sub::idx) Fixing pointer array-indexing *((signed word[]) words + (byte) sub::idx) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index 0ca79bfa9..92ee82ee0 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm index 3825324ae..f3e172608 100644 --- a/src/test/ref/sinusgen16.asm +++ b/src/test/ref/sinusgen16.asm @@ -77,7 +77,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sinusgen16.cfg b/src/test/ref/sinusgen16.cfg index 343d63e65..850cad64d 100644 --- a/src/test/ref/sinusgen16.cfg +++ b/src/test/ref/sinusgen16.cfg @@ -50,7 +50,7 @@ print_str: scope:[print_str] from main::@4 main::@6 print_str::@1: scope:[print_str] from print_str print_str::@2 [22] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@2/(byte*) print_char_cursor#1 ) [22] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [24] return diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index f3811eff8..dc9cc53a1 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -8,6 +8,11 @@ Fixing pointer increment (signed word*) main::st1 ← ++ (signed word*) main::st Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (word) main::wavelength Culled Empty Block (label) @1 @@ -527,7 +532,7 @@ print_str: scope:[print_str] from main::@11 main::@7 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#44 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1450,6 +1455,7 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (nu Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f @@ -1519,6 +1525,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 @@ -1556,6 +1563,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1779,7 +1787,7 @@ Simple Condition (bool~) sin16s::$3 [130] if((dword) sin16s::x#4<(dword) PI_HALF Simple Condition (bool~) sin16s::$16 [189] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@3 Simple Condition (bool~) memset::$1 [218] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [228] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [242] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [242] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 Simple Condition (bool~) print_sword::$0 [252] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) main::$3 [340] if((signed word*) main::st1#2<(signed word*~) main::$2) goto main::@2 Simple Condition (bool~) main::$5 [345] if((signed word) main::sw#0<(signed byte) 0) goto main::@4 @@ -2167,7 +2175,7 @@ print_str: scope:[print_str] from main::@4 main::@6 print_str::@1: scope:[print_str] from print_str print_str::@2 [22] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@2/(byte*) print_char_cursor#1 ) [22] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [24] return @@ -2998,10 +3006,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -4133,7 +4141,7 @@ Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) [ main Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@3 [ main::st1#2 print_char_cursor#21 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#21 main::sw#0 ] ) always clobbers reg byte a Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ( main:2 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [28] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#51 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [32] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#13 print_word::w#0 ] ( main:2::print_sword:17 [ main::st1#2 print_char_cursor#13 print_word::w#0 ] ) always clobbers reg byte a @@ -4215,7 +4223,7 @@ Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) [ main Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@3 [ main::st1#2 print_char_cursor#21 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#21 main::sw#0 ] ) always clobbers reg byte a Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ( main:2 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [28] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#51 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [32] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#13 print_word::w#0 ] ( main:2::print_sword:17 [ main::st1#2 print_char_cursor#13 print_word::w#0 ] ) always clobbers reg byte a @@ -4603,10 +4611,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -6201,11 +6209,11 @@ print_str: { // [22] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/sinusgen16b.asm b/src/test/ref/sinusgen16b.asm index 8c3f687c2..d57b87799 100644 --- a/src/test/ref/sinusgen16b.asm +++ b/src/test/ref/sinusgen16b.asm @@ -92,7 +92,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sinusgen16b.cfg b/src/test/ref/sinusgen16b.cfg index fc1804355..24f7a2fdc 100644 --- a/src/test/ref/sinusgen16b.cfg +++ b/src/test/ref/sinusgen16b.cfg @@ -56,7 +56,7 @@ print_str: scope:[print_str] from main::@3 main::@6 print_str::@1: scope:[print_str] from print_str print_str::@2 [26] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#54 print_str::@2/(byte*) print_char_cursor#1 ) [26] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [28] return diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index d8c72a80d..7d73419f5 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -9,6 +9,11 @@ Fixing pointer increment (signed word*) main::st2 ← ++ (signed word*) main::st Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (word) main::wavelength Culled Empty Block (label) @1 @@ -716,7 +721,7 @@ print_str: scope:[print_str] from main::@3 main::@8 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#44 ← phi( print_str/(byte*) print_char_cursor#54 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1868,6 +1873,7 @@ Adding number conversion cast (unumber) $10 in (number~) sin16sb::$11 ← (word) Adding number conversion cast (unumber) sin16sb::$11 in (number~) sin16sb::$11 ← (word) sin16sb::x5#0 / (unumber)(number) $10 Adding number conversion cast (unumber) 0 in (bool~) sin16sb::$14 ← (byte) sin16sb::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f @@ -1965,6 +1971,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 @@ -2016,6 +2023,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -2300,7 +2308,7 @@ Simple Condition (bool~) sin16sb::$3 [254] if((word) sin16sb::x#4<(word) PI_HALF Simple Condition (bool~) sin16sb::$15 [312] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@3 Simple Condition (bool~) memset::$1 [328] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [338] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [352] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [352] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 Simple Condition (bool~) print_sword::$0 [362] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) main::$5 [459] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 Simple Condition (bool~) main::$9 [473] if((byte) main::i#1!=rangelast(0,$77)) goto main::@1 @@ -2809,7 +2817,7 @@ print_str: scope:[print_str] from main::@3 main::@6 print_str::@1: scope:[print_str] from print_str print_str::@2 [26] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#54 print_str::@2/(byte*) print_char_cursor#1 ) [26] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [28] return @@ -3917,10 +3925,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5516,7 +5524,7 @@ Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 [ main Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [32] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#51 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [36] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#13 print_word::w#0 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_word::w#0 ] ) always clobbers reg byte a @@ -5637,7 +5645,7 @@ Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 [ main Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a -Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [32] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#51 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#51 print_sword::w#1 ] ) always clobbers reg byte a Statement [36] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#13 print_word::w#0 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_word::w#0 ] ) always clobbers reg byte a @@ -6149,10 +6157,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -8298,11 +8306,11 @@ print_str: { // [26] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/sinusgen8.asm b/src/test/ref/sinusgen8.asm index 616c130af..0b1e71997 100644 --- a/src/test/ref/sinusgen8.asm +++ b/src/test/ref/sinusgen8.asm @@ -56,7 +56,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sinusgen8.cfg b/src/test/ref/sinusgen8.cfg index 9b3f18909..5607233ff 100644 --- a/src/test/ref/sinusgen8.cfg +++ b/src/test/ref/sinusgen8.cfg @@ -48,7 +48,7 @@ print_str: scope:[print_str] from main::@3 main::@5 print_str::@1: scope:[print_str] from print_str print_str::@2 [22] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#47 print_str::@2/(byte*) print_char_cursor#1 ) [22] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [24] return diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index f1188ff7a..13384e064 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -6,6 +6,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (word) main::wavelength Culled Empty Block (label) @1 @@ -495,7 +500,7 @@ print_str: scope:[print_str] from main::@3 main::@7 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#38 ← phi( print_str/(byte*) print_char_cursor#47 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1302,6 +1307,7 @@ Adding number conversion cast (unumber) 4 in (byte~) sin8s::$12 ← (byte) sin8s Adding number conversion cast (unumber) $80 in (bool~) sin8s::$14 ← (byte) sin8s::usinx#1 >= (number) $80 Adding number conversion cast (unumber) 0 in (bool~) sin8s::$17 ← (byte) sin8s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3) Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#1 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (number) $f @@ -1372,6 +1378,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 @@ -1602,6 +1609,7 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1792,7 +1800,7 @@ Simple Condition (bool~) sin8s::$15 [165] if((byte) sin8s::usinx#1<(byte) $80) g Simple Condition (bool~) sin8s::$18 [174] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@4 Simple Condition (bool~) memset::$1 [202] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [212] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [225] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [225] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 Simple Condition (bool~) print_sbyte::$0 [235] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 Simple Condition (bool~) main::$5 [311] if((signed byte) main::sb#0<(signed byte) 0) goto main::@2 Simple Condition (bool~) main::$9 [323] if((byte) main::i#1!=rangelast(0,$bf)) goto main::@1 @@ -2166,7 +2174,7 @@ print_str: scope:[print_str] from main::@3 main::@5 print_str::@1: scope:[print_str] from print_str print_str::@2 [22] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#47 print_str::@2/(byte*) print_char_cursor#1 ) [22] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) - [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [24] return @@ -2935,10 +2943,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3848,7 +3856,7 @@ divr16u: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [9] (signed byte) main::sb#0 ← *((const signed byte[$c0]) main::sintab2#0 + (byte) main::i#2) - (signed byte)*((const byte[]) main::sintabref#0 + (byte) main::i#2) [ main::i#2 print_char_cursor#45 main::sb#0 ] ( main:2 [ main::i#2 print_char_cursor#45 main::sb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::i#2 main::sb#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::i#2 main::sb#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ main::sb#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:38 [ main::sb#0 ] @@ -3897,7 +3905,7 @@ Statement [146] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ div Statement [150] if((word) divr16u::rem#5<(const word) main::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8s_gen:5::div16u:59::divr16u:136 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [152] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8s_gen:5::div16u:59::divr16u:136 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [9] (signed byte) main::sb#0 ← *((const signed byte[$c0]) main::sintab2#0 + (byte) main::i#2) - (signed byte)*((const byte[]) main::sintabref#0 + (byte) main::i#2) [ main::i#2 print_char_cursor#45 main::sb#0 ] ( main:2 [ main::i#2 print_char_cursor#45 main::sb#0 ] ) always clobbers reg byte a -Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::i#2 main::sb#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::i#2 main::sb#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::i#2 main::sb#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [37] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#10 print_sbyte::b#0 ] ( main:2::print_sbyte:15 [ main::i#2 print_char_cursor#10 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [39] *((byte*) print_char_cursor#29) ← (byte) print_char::ch#4 [ print_char_cursor#29 ] ( main:2::print_sbyte:15::print_char:30 [ main::i#2 print_sbyte::b#1 print_char_cursor#29 ] main:2::print_sbyte:15::print_char:36 [ main::i#2 print_sbyte::b#1 print_char_cursor#29 ] main:2::print_sbyte:15::print_byte:33::print_char:44 [ main::i#2 print_byte::b#0 print_char_cursor#29 ] main:2::print_sbyte:15::print_byte:33::print_char:47 [ main::i#2 print_char_cursor#29 ] ) always clobbers reg byte y @@ -4233,10 +4241,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5638,11 +5646,11 @@ print_str: { // [22] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [23] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm index b9f39a61e..3984a9915 100644 --- a/src/test/ref/sinusgen8b.asm +++ b/src/test/ref/sinusgen8b.asm @@ -80,7 +80,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sinusgen8b.cfg b/src/test/ref/sinusgen8b.cfg index cf0ad110a..ee36ab4fc 100644 --- a/src/test/ref/sinusgen8b.cfg +++ b/src/test/ref/sinusgen8b.cfg @@ -49,7 +49,7 @@ print_str: scope:[print_str] from main::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 [26] (byte*) print_char_cursor#19 ← phi( print_str/(byte*) print_char_cursor#10 print_str::@2/(byte*) print_char_cursor#1 ) [26] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 ) - [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [28] return diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index 8166468f8..14c0d8ba9 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -7,6 +7,11 @@ Fixing pointer addition (signed word*~) main::$4 ← (signed word[$c0]) main::si Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (word) main::wavelength Culled Empty Block (label) @1 @@ -825,7 +830,7 @@ print_str: scope:[print_str] from main::@6 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#36 ← phi( print_str/(byte*) print_char_cursor#44 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1973,6 +1978,7 @@ Adding number conversion cast (unumber) 4 in (byte~) sin8s::$12 ← (byte) sin8s Adding number conversion cast (unumber) $80 in (bool~) sin8s::$14 ← (byte) sin8s::usinx#1 >= (number) $80 Adding number conversion cast (unumber) 0 in (bool~) sin8s::$17 ← (byte) sin8s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#1 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (number) $f @@ -2084,6 +2090,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 @@ -2144,6 +2151,7 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -2429,7 +2437,7 @@ Simple Condition (bool~) sin8s::$15 [337] if((byte) sin8s::usinx#1<(byte) $80) g Simple Condition (bool~) sin8s::$18 [346] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@4 Simple Condition (bool~) memset::$1 [387] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [397] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [411] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [411] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_sbyte::$0 [421] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 Simple Condition (bool~) main::$10 [517] if((byte) main::i#1!=rangelast(0,$bf)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -2941,7 +2949,7 @@ print_str: scope:[print_str] from main::@4 print_str::@1: scope:[print_str] from print_str print_str::@2 [26] (byte*) print_char_cursor#19 ← phi( print_str/(byte*) print_char_cursor#10 print_str::@2/(byte*) print_char_cursor#1 ) [26] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 ) - [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [28] return @@ -4159,10 +4167,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5845,7 +5853,7 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ ma Removing always clobbered register reg byte y as potential for zp ZP_BYTE:70 [ main::sb#0 ] Statement [16] (byte~) main::$6 ← > (signed word) main::sw#0 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ) always clobbers reg byte a Statement [17] (signed byte) main::sd#0 ← (signed byte) main::sb#0 - (signed byte)(byte~) main::$6 [ main::i#2 print_char_cursor#42 main::sd#0 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sd#0 ] ) always clobbers reg byte a -Statement [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#19) ← *((byte*) print_str::str#2) [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [41] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#10 print_sbyte::b#0 ] ( main:2::print_sbyte:19 [ main::i#2 print_char_cursor#10 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [43] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#4 [ print_char_cursor#28 ] ( main:2::print_sbyte:19::print_char:34 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_char:40 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:48 [ main::i#2 print_byte::b#0 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:51 [ main::i#2 print_char_cursor#28 ] ) always clobbers reg byte y @@ -5954,7 +5962,7 @@ Statement [14] (signed word*~) main::$4 ← (const signed word[$c0]) main::sinta Statement [15] (signed word) main::sw#0 ← *((signed word*~) main::$4) [ main::i#2 print_char_cursor#42 main::sb#0 main::sw#0 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::sw#0 ] ) always clobbers reg byte a reg byte y Statement [16] (byte~) main::$6 ← > (signed word) main::sw#0 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ) always clobbers reg byte a Statement [17] (signed byte) main::sd#0 ← (signed byte) main::sb#0 - (signed byte)(byte~) main::$6 [ main::i#2 print_char_cursor#42 main::sd#0 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sd#0 ] ) always clobbers reg byte a -Statement [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#19) ← *((byte*) print_str::str#2) [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [41] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#10 print_sbyte::b#0 ] ( main:2::print_sbyte:19 [ main::i#2 print_char_cursor#10 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [43] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#4 [ print_char_cursor#28 ] ( main:2::print_sbyte:19::print_char:34 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_char:40 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:48 [ main::i#2 print_byte::b#0 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:51 [ main::i#2 print_char_cursor#28 ] ) always clobbers reg byte y @@ -6469,10 +6477,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -8753,11 +8761,11 @@ print_str: { sta str+1 // print_str::@1 b1: - // while(*str!='@') - // [27] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm index 1e47243bf..d302dd8f9 100644 --- a/src/test/ref/sinusgenscale8.asm +++ b/src/test/ref/sinusgenscale8.asm @@ -255,7 +255,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/sinusgenscale8.cfg b/src/test/ref/sinusgenscale8.cfg index 68cf7ddaf..906d82f91 100644 --- a/src/test/ref/sinusgenscale8.cfg +++ b/src/test/ref/sinusgenscale8.cfg @@ -173,7 +173,7 @@ print_str: scope:[print_str] from sin8u_table::@11 sin8u_table::@15 sin8u_table print_str::@1: scope:[print_str] from print_str print_str::@2 [86] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#109 print_str::@2/(byte*) print_char_cursor#1 ) [86] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [88] return diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index e05c49610..26a945b1c 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -6,6 +6,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (word) main::tabsize Culled Empty Block (label) @1 @@ -483,7 +488,7 @@ print_str: scope:[print_str] from sin8u_table::@11 sin8u_table::@13 sin8u_table print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#94 ← phi( print_str/(byte*) print_char_cursor#109 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#10) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -2100,6 +2105,7 @@ Adding number conversion cast (unumber) 4 in (byte~) sin8s::$12 ← (byte) sin8s Adding number conversion cast (unumber) $80 in (bool~) sin8s::$14 ← (byte) sin8s::usinx#1 >= (number) $80 Adding number conversion cast (unumber) 0 in (bool~) sin8s::$17 ← (byte) sin8s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#12 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 @@ -2187,6 +2193,7 @@ Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2233,6 +2240,7 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -2516,7 +2524,7 @@ Simple Condition (bool~) sin8s::$15 [165] if((byte) sin8s::usinx#1<(byte) $80) g Simple Condition (bool~) sin8s::$18 [174] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@4 Simple Condition (bool~) memset::$1 [202] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [212] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [225] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [225] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [238] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [247] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sbyte::$0 [271] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 @@ -3150,7 +3158,7 @@ print_str: scope:[print_str] from sin8u_table::@11 sin8u_table::@15 sin8u_table print_str::@1: scope:[print_str] from print_str print_str::@2 [86] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#109 print_str::@2/(byte*) print_char_cursor#1 ) [86] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 ) - [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 + [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [88] return @@ -4435,10 +4443,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5366,7 +5374,7 @@ Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ p Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:94 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:100 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:110 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:116 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a @@ -5424,7 +5432,7 @@ Statement [71] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto Statement [74] (byte~) print_byte::$0 ← (byte) print_byte::b#8 >> (byte) 4 [ print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#103 print_byte::$0 ] ) always clobbers reg byte a Statement [77] (byte~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::sin8u_table:7::print_byte:19 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:23 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:27 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:31 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_byte:61 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:104 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:15::print_byte:106 [ sin8u_table::step#0 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_word:49::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a Statement [82] *((byte*) print_char_cursor#66) ← (byte) print_char::ch#6 [ print_char_cursor#66 ] ( main:2::sin8u_table:7::print_byte:19::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:76 [ sin8u_table::step#0 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:76 [ sin8u_table::step#0 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:76 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_byte::b#8 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:19::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:23::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:27::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:31::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_byte:61::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:104::print_char:79 [ sin8u_table::step#0 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:104::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_word::w#3 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:15::print_byte:106::print_char:79 [ sin8u_table::step#0 print_char_cursor#66 ] main:2::sin8u_table:7::print_word:49::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_word:97::print_byte:106::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_byte:113::print_char:79 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:94 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sword:57::print_char:100 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:110 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] main:2::sin8u_table:7::print_sbyte:53::print_char:116 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sbyte::b#1 print_char_cursor#66 ] ) always clobbers reg byte y -Statement [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y +Statement [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [89] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::sin8u_table:7::print_str:13 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:17 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:21 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:25 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:29 [ sin8u_table::step#0 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:47 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:51 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx#0 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:55 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_sc#0 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::sin8u_table:7::print_str:59 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y Statement [92] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_sword::w#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [96] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::sin8u_table:7::print_sword:57 [ sin8u_table::step#0 sin8u_table::i#15 sin8u_table::x#15 sin8u_table::sintab#1 sin8u_table::sinx_tr#0 print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a @@ -6203,10 +6211,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -8166,11 +8174,11 @@ print_str: { // [86] phi (byte*) print_str::str#10 = (byte*) print_str::str#12 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [87] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [87] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/string-const-consolidation-noroot.asm b/src/test/ref/string-const-consolidation-noroot.asm index 0b720bc5b..fd2edd8eb 100644 --- a/src/test/ref/string-const-consolidation-noroot.asm +++ b/src/test/ref/string-const-consolidation-noroot.asm @@ -25,7 +25,7 @@ print: { b1: ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/string-const-consolidation-noroot.cfg b/src/test/ref/string-const-consolidation-noroot.cfg index e5ae9e1aa..35b06f1f8 100644 --- a/src/test/ref/string-const-consolidation-noroot.cfg +++ b/src/test/ref/string-const-consolidation-noroot.cfg @@ -28,7 +28,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::string#4 ← phi( print/(const string) main::string print::@2/(byte*) print::string#3 ) - [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 8daba8760..38e765132 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print::string) Culled Empty Block (label) @1 Culled Empty Block (label) print::@4 Culled Empty Block (label) print::@3 @@ -43,7 +44,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 (byte*) screen#16 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) (byte*) print::string#4 ← phi( print/(byte*) print::string#6 print::@2/(byte*) print::string#3 ) - (bool~) print::$0 ← *((byte*) print::string#4) != (byte) '@' + (bool~) print::$0 ← (number) 0 != *((byte*) print::string#4) if((bool~) print::$0) goto print::@2 to:print::@return print::@2: scope:[print] from print::@1 @@ -119,10 +120,15 @@ SYMBOL TABLE SSA (byte*) screen#8 (byte*) screen#9 +Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::string#4) +Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) screen#1 = (byte*) screen#8 Alias (byte*) screen#2 = (byte*) screen#9 Alias (byte*) screen#10 = (byte*) screen#3 (byte*) screen#11 (byte*) screen#4 @@ -137,7 +143,7 @@ Identical Phi Values (byte*) screen#2 (byte*) screen#12 Identical Phi Values (byte*) screen#10 (byte*) screen#12 Identical Phi Values (byte*) screen#14 (byte*) screen#10 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print::$0 [22] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 +Simple Condition (bool~) print::$0 [22] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte[]) main::rex1#0 = main::$3 @@ -223,7 +229,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::string#4 ← phi( print/(const string) main::string print::@2/(byte*) print::string#3 ) - [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return @@ -337,10 +343,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -373,7 +379,7 @@ print: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y +Statement [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y Statement [15] *((byte*) screen#12) ← *((byte*) print::string#4) [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print::string#4 print::string#3 ] : zp ZP_WORD:4 , @@ -466,10 +472,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -626,11 +632,11 @@ print: { sta string+1 // print::@1 b1: - // while(*string!='@') - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*string) + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 // print::@return // } diff --git a/src/test/ref/string-const-consolidation.asm b/src/test/ref/string-const-consolidation.asm index 15cc20622..df46d838d 100644 --- a/src/test/ref/string-const-consolidation.asm +++ b/src/test/ref/string-const-consolidation.asm @@ -23,7 +23,7 @@ print: { b1: ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/string-const-consolidation.cfg b/src/test/ref/string-const-consolidation.cfg index 8ca3753dc..321c26318 100644 --- a/src/test/ref/string-const-consolidation.cfg +++ b/src/test/ref/string-const-consolidation.cfg @@ -28,7 +28,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::string#4 ← phi( print/(const byte[]) rex1#0 print::@2/(byte*) print::string#3 ) - [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 792ce6bd7..3b8bbb0fb 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -1,3 +1,4 @@ +Warning! Adding boolean cast to non-boolean condition *((byte*) print::string) Culled Empty Block (label) @1 Culled Empty Block (label) print::@4 Culled Empty Block (label) print::@3 @@ -43,7 +44,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 (byte*) screen#16 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) (byte*) print::string#4 ← phi( print/(byte*) print::string#6 print::@2/(byte*) print::string#3 ) - (bool~) print::$0 ← *((byte*) print::string#4) != (byte) '@' + (bool~) print::$0 ← (number) 0 != *((byte*) print::string#4) if((bool~) print::$0) goto print::@2 to:print::@return print::@2: scope:[print] from print::@1 @@ -119,10 +120,15 @@ SYMBOL TABLE SSA (byte*) screen#8 (byte*) screen#9 +Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::string#4) +Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) screen#1 = (byte*) screen#8 Alias (byte*) screen#2 = (byte*) screen#9 Alias (byte*) screen#10 = (byte*) screen#3 (byte*) screen#11 (byte*) screen#4 @@ -137,7 +143,7 @@ Identical Phi Values (byte*) screen#2 (byte*) screen#12 Identical Phi Values (byte*) screen#10 (byte*) screen#12 Identical Phi Values (byte*) screen#14 (byte*) screen#10 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print::$0 [22] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 +Simple Condition (bool~) print::$0 [22] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) rex1#0 = $0 Constant (const byte*) screen#0 = (byte*) 1024 @@ -223,7 +229,7 @@ print: scope:[print] from main main::@1 main::@2 print::@1: scope:[print] from print print::@2 [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [12] (byte*) print::string#4 ← phi( print/(const byte[]) rex1#0 print::@2/(byte*) print::string#3 ) - [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 + [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 [14] return @@ -335,10 +341,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -373,7 +379,7 @@ print: { .byte 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y +Statement [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y Statement [15] *((byte*) screen#12) ← *((byte*) print::string#4) [ screen#12 print::string#4 ] ( main:2::print:5 [ screen#12 print::string#4 ] main:2::print:7 [ screen#12 print::string#4 ] main:2::print:9 [ screen#12 print::string#4 ] ) always clobbers reg byte a reg byte y Potential registers zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ print::string#4 print::string#3 ] : zp ZP_WORD:4 , @@ -464,10 +470,10 @@ print: { jmp b1 // print::@1 b1: - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print::@return @@ -624,11 +630,11 @@ print: { sta string+1 // print::@1 b1: - // while(*string!='@') - // [13] if(*((byte*) print::string#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*string) + // [13] if((byte) 0!=*((byte*) print::string#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (string),y - cmp #'@' + cmp #0 bne b2 // print::@return // } diff --git a/src/test/ref/test-comparisons-sword.asm b/src/test/ref/test-comparisons-sword.asm index 1b25d0468..fe3fe5d05 100644 --- a/src/test/ref/test-comparisons-sword.asm +++ b/src/test/ref/test-comparisons-sword.asm @@ -369,7 +369,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-comparisons-sword.cfg b/src/test/ref/test-comparisons-sword.cfg index cea9c46c6..22984ad0c 100644 --- a/src/test/ref/test-comparisons-sword.cfg +++ b/src/test/ref/test-comparisons-sword.cfg @@ -250,7 +250,7 @@ print_str: scope:[print_str] from compare::@29 print_str::@1: scope:[print_str] from print_str print_str::@2 [106] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#15 print_str::@2/(byte*) print_char_cursor#1 ) [106] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [108] return diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index d4d2b6be2..5b554da99 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -6,6 +6,11 @@ Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::dig Fixing pointer array-indexing *((signed word[]) swords + (byte) main::i) Fixing pointer array-indexing *((signed word[]) swords + (byte) main::j) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 @@ -129,7 +134,7 @@ print_str: scope:[print_str] from compare::@39 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#60 ← phi( print_str/(byte*) print_char_cursor#76 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1320,6 +1325,7 @@ SYMBOL TABLE SSA (signed word[]) swords#0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#3 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 @@ -1360,6 +1366,7 @@ Inlining cast (byte) TT#0 ← (unumber)(number) $51 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 4 @@ -1383,6 +1390,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 @@ -1564,7 +1572,7 @@ Identical Phi Values (byte*) print_char_cursor#66 (byte*) print_char_cursor#15 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#15) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#3<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) main::$3 [146] if((byte) main::s#1!=(byte) 3) goto main::@4 @@ -2181,7 +2189,7 @@ print_str: scope:[print_str] from compare::@29 print_str::@1: scope:[print_str] from print_str print_str::@2 [106] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#15 print_str::@2/(byte*) print_char_cursor#1 ) [106] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [108] return @@ -3241,10 +3249,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -3375,7 +3383,7 @@ Statement [94] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_ Statement [98] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#15 print_byte::b#2 print_byte::$0 ] ( main:2::compare:16::print_sword:50::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:50::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [101] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#15 print_byte::$2 ] ( main:2::compare:16::print_sword:50::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:50::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::$2 ] ) always clobbers reg byte a -Statement [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [109] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:113 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:113 [ memset::dst#1 ] ) always clobbers reg byte a @@ -3407,7 +3415,7 @@ Statement [92] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_char_ Statement [94] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#15 print_byte::b#1 ] ( main:2::compare:16::print_sword:50::print_word:87 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::b#1 ] main:2::compare:16::print_sword:58::print_word:87 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::b#1 ] ) always clobbers reg byte a Statement [98] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#15 print_byte::b#2 print_byte::$0 ] ( main:2::compare:16::print_sword:50::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:50::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [101] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#15 print_byte::$2 ] ( main:2::compare:16::print_sword:50::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:93 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#0 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:50::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#10 compare::r#10 print_char_cursor#15 print_byte::$2 ] main:2::compare:16::print_sword:58::print_word:87::print_byte:95 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#15 print_byte::$2 ] ) always clobbers reg byte a -Statement [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [109] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:52 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [117] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:113 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [119] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:113 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4285,10 +4293,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -5506,11 +5514,11 @@ print_str: { // [106] phi (byte*) print_str::str#2 = (byte*) print_str::str#1 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [107] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [107] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-comparisons-word.asm b/src/test/ref/test-comparisons-word.asm index d39040273..14245edfc 100644 --- a/src/test/ref/test-comparisons-word.asm +++ b/src/test/ref/test-comparisons-word.asm @@ -325,7 +325,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-comparisons-word.cfg b/src/test/ref/test-comparisons-word.cfg index 1433fe425..ec9084529 100644 --- a/src/test/ref/test-comparisons-word.cfg +++ b/src/test/ref/test-comparisons-word.cfg @@ -217,7 +217,7 @@ print_str: scope:[print_str] from compare::@25 print_str::@1: scope:[print_str] from print_str print_str::@2 [90] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#11 print_str::@2/(byte*) print_char_cursor#1 ) [90] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [92] return diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 3aa18f96a..1006f49aa 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -6,6 +6,11 @@ Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::dig Fixing pointer array-indexing *((word[]) words + (byte) main::i) Fixing pointer array-indexing *((word[]) words + (byte) main::j) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Culled Empty Block (label) @1 @@ -128,7 +133,7 @@ print_str: scope:[print_str] from compare::@35 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#50 ← phi( print_str/(byte*) print_char_cursor#60 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1145,6 +1150,7 @@ SYMBOL TABLE SSA (word[]) words#0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f @@ -1175,6 +1181,7 @@ Inlining cast (byte) TT#0 ← (unumber)(number) $51 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -1195,6 +1202,7 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -1344,7 +1352,7 @@ Identical Phi Values (byte) main::i#10 (byte) main::i#2 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1 Simple Condition (bool~) main::$3 [122] if((byte) main::s#1!=(byte) 3) goto main::@4 Simple Condition (bool~) main::$5 [126] if((byte) main::op#1!=rangelast(0,5)) goto main::@3 @@ -1886,7 +1894,7 @@ print_str: scope:[print_str] from compare::@25 print_str::@1: scope:[print_str] from print_str print_str::@2 [90] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#11 print_str::@2/(byte*) print_char_cursor#1 ) [90] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [92] return @@ -2823,10 +2831,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -2952,7 +2960,7 @@ Statement [78] (byte) print_byte::b#1 ← < (word) print_word::w#2 [ print_char_ Statement [82] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#53 print_byte::b#2 print_byte::$0 ] ( main:2::compare:16::print_word:46::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_word::w#2 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:50::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#2 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:46::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:50::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [85] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::compare:16::print_word:46::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:46::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [93] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:97 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:97 [ memset::dst#1 ] ) always clobbers reg byte a @@ -2979,7 +2987,7 @@ Statement [76] (byte) print_byte::b#0 ← > (word) print_word::w#2 [ print_word: Statement [78] (byte) print_byte::b#1 ← < (word) print_word::w#2 [ print_char_cursor#11 print_byte::b#1 ] ( main:2::compare:16::print_word:46 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#11 print_byte::b#1 ] main:2::compare:16::print_word:50 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a Statement [82] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#53 print_byte::b#2 print_byte::$0 ] ( main:2::compare:16::print_word:46::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_word::w#2 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:50::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#2 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:46::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] main:2::compare:16::print_word:50::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#53 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [85] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::compare:16::print_word:46::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:77 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_word::w#2 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:46::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::ops#7 compare::r#10 print_char_cursor#11 print_byte::$2 ] main:2::compare:16::print_word:50::print_byte:79 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::r#10 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [93] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::compare:16::print_str:48 [ main::i#2 main::w1#0 main::j#2 main::w2#0 main::op#2 main::s#3 print_line_cursor#19 compare::w2#0 compare::r#10 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [101] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:97 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [103] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:97 [ memset::dst#1 ] ) always clobbers reg byte a @@ -3752,10 +3760,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -4830,11 +4838,11 @@ print_str: { // [90] phi (byte*) print_str::str#2 = (byte*) print_str::str#1 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [91] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [91] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-comparisons.asm b/src/test/ref/test-comparisons.asm index 130ee9b6a..5e4ebbeb3 100644 --- a/src/test/ref/test-comparisons.asm +++ b/src/test/ref/test-comparisons.asm @@ -460,7 +460,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-comparisons.cfg b/src/test/ref/test-comparisons.cfg index 3dba6af08..c68e669ec 100644 --- a/src/test/ref/test-comparisons.cfg +++ b/src/test/ref/test-comparisons.cfg @@ -378,7 +378,7 @@ print_str: scope:[print_str] from printu::@2 print_str::@1: scope:[print_str] from print_str print_str::@2 [193] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@2/(byte*) print_char_cursor#1 ) [193] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [195] return diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index 0bef2db5e..07cbf53e0 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -109,7 +114,7 @@ print_str: scope:[print_str] from printu::@2 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#92 ← phi( print_str/(byte*) print_char_cursor#119 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -1859,6 +1864,7 @@ SYMBOL TABLE SSA (byte) printu::res#9 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#13 + (number) $28 Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f @@ -1895,6 +1901,7 @@ Inlining cast (byte) printu::b#17 ← (unumber)(number) $37 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f @@ -1919,6 +1926,7 @@ Simplifying constant integer cast $37 Simplifying constant integer cast $30 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f @@ -2201,7 +2209,7 @@ Identical Phi Values (byte*) print_char_cursor#93 (byte*) print_char_cursor#55 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#55) goto print_ln::@1 Simple Condition (bool~) main::$3 [96] if((byte) main::a#10>=(byte) main::b#0) goto main::@2 Simple Condition (bool~) main::$6 [108] if((byte) main::a#10>=(byte) $37) goto main::@3 @@ -3125,7 +3133,7 @@ print_str: scope:[print_str] from printu::@2 print_str::@1: scope:[print_str] from print_str print_str::@2 [193] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@2/(byte*) print_char_cursor#1 ) [193] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#1 print_str::@2/(byte*) print_str::str#0 ) - [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [195] return @@ -4766,10 +4774,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -4896,7 +4904,7 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ p Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a -Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4925,7 +4933,7 @@ Statement [171] (byte*) print_str::str#1 ← (byte[]) printu::op#20 [ print_char Statement [181] *((byte*) print_char_cursor#54) ← (byte) print_char::ch#5 [ print_char_cursor#54 ] ( main:2::printu:14::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:20::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:27::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:34::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:44::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:50::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:57::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:64::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:74::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:80::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:87::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:94::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:104::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:110::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:117::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:124::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:134::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:140::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:147::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:154::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] ) always clobbers reg byte y Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a -Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4963,7 +4971,7 @@ Statement [171] (byte*) print_str::str#1 ← (byte[]) printu::op#20 [ print_char Statement [181] *((byte*) print_char_cursor#54) ← (byte) print_char::ch#5 [ print_char_cursor#54 ] ( main:2::printu:14::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:20::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:27::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:34::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:44::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:50::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:57::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:64::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:74::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:80::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:87::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:94::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:104::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:110::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:117::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:124::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:134::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:140::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:147::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:154::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] ) always clobbers reg byte y Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a -Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a @@ -4996,7 +5004,7 @@ Statement [171] (byte*) print_str::str#1 ← (byte[]) printu::op#20 [ print_char Statement [181] *((byte*) print_char_cursor#54) ← (byte) print_char::ch#5 [ print_char_cursor#54 ] ( main:2::printu:14::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:168 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:168 [ main::a#10 main::i#10 print_line_cursor#1 printu::a#20 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_char:176 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_char:176 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:20::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:27::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:34::print_char:178 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 print_char_cursor#54 ] main:2::printu:44::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:50::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:57::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:64::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:74::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:80::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:87::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:94::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:104::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:110::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:117::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:124::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 print_char_cursor#54 ] main:2::printu:134::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:140::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:147::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:154::print_char:178 [ main::a#10 main::i#10 print_line_cursor#1 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:187 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_byte::b#2 print_char_cursor#54 ] main:2::printu:14::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:170::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#54 ] main:2::printu:14::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:20::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:27::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:34::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:44::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:50::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:57::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:64::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:74::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:80::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:87::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:94::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:104::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:110::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:117::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:124::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#54 ] main:2::printu:134::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:140::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:147::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] main:2::printu:154::print_byte:174::print_char:190 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#54 ] ) always clobbers reg byte y Statement [185] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#94 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Statement [188] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#55 print_byte::$2 ] ( main:2::printu:14::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:170 [ main::a#10 main::i#10 print_line_cursor#1 printu::op#20 printu::b#20 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:14::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:20::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:27::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:34::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:44::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:50::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:57::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:64::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:74::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:80::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:87::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:94::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:104::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:110::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:117::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:124::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:134::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:140::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:147::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] main:2::printu:154::print_byte:174 [ main::a#10 main::i#10 print_line_cursor#1 printu::res#20 print_char_cursor#55 print_byte::$2 ] ) always clobbers reg byte a -Statement [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [196] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#2) [ print_char_cursor#2 print_str::str#2 ] ( main:2::printu:14::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:20::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:27::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:34::print_str:172 [ main::a#10 main::i#10 print_line_cursor#27 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:44::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:50::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:57::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:64::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:74::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:80::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:87::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:94::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:104::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:110::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:117::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:124::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 main::b#0 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:134::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:140::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:147::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] main:2::printu:154::print_str:172 [ main::a#10 main::i#10 print_line_cursor#1 printu::b#20 printu::res#20 print_char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [204] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:200 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y Statement [206] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:200 [ memset::dst#1 ] ) always clobbers reg byte a @@ -6319,10 +6327,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -8016,11 +8024,11 @@ print_str: { // [193] phi (byte*) print_str::str#2 = (byte*) print_str::str#1 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [194] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [194] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-division.asm b/src/test/ref/test-division.asm index 51a9ee811..86a5fe93f 100644 --- a/src/test/ref/test-division.asm +++ b/src/test/ref/test-division.asm @@ -170,7 +170,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-division.cfg b/src/test/ref/test-division.cfg index 627f03615..d83b5eeb1 100644 --- a/src/test/ref/test-division.cfg +++ b/src/test/ref/test-division.cfg @@ -162,7 +162,7 @@ print_str: scope:[print_str] from test_16s::@3 test_16s::@5 test_16s::@7 test_1 print_str::@1: scope:[print_str] from print_str print_str::@2 [80] (byte*) print_char_cursor#130 ← phi( print_str/(byte*) print_char_cursor#19 print_str::@2/(byte*) print_char_cursor#1 ) [80] (byte*) print_str::str#13 ← phi( print_str/(byte*) print_str::str#15 print_str::@2/(byte*) print_str::str#0 ) - [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 + [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [82] return diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index 3866f2693..6acb6381f 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -8,6 +8,11 @@ Fixing pointer array-indexing *((word[]) test_16u::divisors + (byte) test_16u::i Fixing pointer array-indexing *((signed word[]) test_16s::dividends + (byte) test_16s::i) Fixing pointer array-indexing *((signed word[]) test_16s::divisors + (byte) test_16s::i) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte) test_8u::rem Culled Empty Block (label) @1 @@ -142,7 +147,7 @@ print_str: scope:[print_str] from test_16s::@4 test_16s::@6 test_16s::@8 test_1 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#130 ← phi( print_str/(byte*) print_char_cursor#146 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#13 ← phi( print_str/(byte*) print_str::str#15 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#13) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#13) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -2690,6 +2695,7 @@ SYMBOL TABLE SSA (const string) test_8u::str2 = (string) " " Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#13) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#20 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#5 < (number) 0 @@ -2797,6 +2803,7 @@ Inlining cast (signed word) divr16s::rem#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2892,6 +2899,7 @@ Simplifying constant integer cast -$11 Simplifying constant integer cast $13 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -3349,7 +3357,7 @@ Identified duplicate assignment right side [596] (byte~) test_16s::$11 ← (byte Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#19) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#10<(signed byte) 0) goto print_sbyte::@1 @@ -4113,7 +4121,7 @@ print_str: scope:[print_str] from test_16s::@3 test_16s::@5 test_16s::@7 test_1 print_str::@1: scope:[print_str] from print_str print_str::@2 [80] (byte*) print_char_cursor#130 ← phi( print_str/(byte*) print_char_cursor#19 print_str::@2/(byte*) print_char_cursor#1 ) [80] (byte*) print_str::str#13 ← phi( print_str/(byte*) print_str::str#15 print_str::@2/(byte*) print_str::str#0 ) - [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 + [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [82] return @@ -5568,10 +5576,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -7011,7 +7019,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:121 [ test_8u::divisor#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:123 [ test_8u::res#0 ] Statement [75] (byte~) print_byte::$2 ← (byte) print_byte::b#7 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::test_16s:13::print_sword:27::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:67 [ print_line_cursor#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:27::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:69 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:145::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:149::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:153::print_byte:169 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:157::print_byte:169 [ print_line_cursor#1 test_8s::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:268 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:272 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:276 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:280 [ print_line_cursor#41 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y +Statement [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [83] *((byte*) print_char_cursor#130) ← *((byte*) print_str::str#13) [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [86] (signed word) divr16s::dividend#0 ← (signed word) div16s::dividend#0 [ div16s::divisor#0 divr16s::dividend#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 div16s::divisor#0 divr16s::dividend#0 ] ) always clobbers reg byte a Statement [87] (signed word) divr16s::divisor#0 ← (signed word) div16s::divisor#0 [ divr16s::dividend#0 divr16s::divisor#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 divr16s::dividend#0 divr16s::divisor#0 ] ) always clobbers reg byte a @@ -7105,7 +7113,7 @@ Statement [66] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word: Statement [68] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::test_16s:13::print_sword:27::print_word:56 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:31::print_word:56 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:35::print_word:56 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:39::print_word:56 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:234 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:238 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:242 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:246 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a Statement [72] (byte~) print_byte::$0 ← (byte) print_byte::b#7 >> (byte) 4 [ print_char_cursor#139 print_byte::b#7 print_byte::$0 ] ( main:2::test_16s:13::print_sword:27::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:234::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:238::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:242::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:246::print_byte:67 [ print_line_cursor#1 test_16u::i#10 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:27::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:234::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:238::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:242::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:246::print_byte:69 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:145::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:149::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:153::print_byte:169 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:157::print_byte:169 [ print_line_cursor#1 test_8s::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:268 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:272 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:276 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:280 [ print_line_cursor#41 test_8u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] ) always clobbers reg byte a Statement [75] (byte~) print_byte::$2 ← (byte) print_byte::b#7 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::test_16s:13::print_sword:27::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:67 [ print_line_cursor#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:27::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:69 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:145::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:149::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:153::print_byte:169 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:157::print_byte:169 [ print_line_cursor#1 test_8s::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:268 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:272 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:276 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:280 [ print_line_cursor#41 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y +Statement [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [83] *((byte*) print_char_cursor#130) ← *((byte*) print_str::str#13) [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [86] (signed word) divr16s::dividend#0 ← (signed word) div16s::dividend#0 [ div16s::divisor#0 divr16s::dividend#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 div16s::divisor#0 divr16s::dividend#0 ] ) always clobbers reg byte a Statement [87] (signed word) divr16s::divisor#0 ← (signed word) div16s::divisor#0 [ divr16s::dividend#0 divr16s::divisor#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 divr16s::dividend#0 divr16s::divisor#0 ] ) always clobbers reg byte a @@ -7186,7 +7194,7 @@ Statement [66] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word: Statement [68] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::test_16s:13::print_sword:27::print_word:56 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:31::print_word:56 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:35::print_word:56 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::b#2 ] main:2::test_16s:13::print_sword:39::print_word:56 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:234 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:238 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:242 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#19 print_byte::b#2 ] main:2::test_16u:9::print_word:246 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a Statement [72] (byte~) print_byte::$0 ← (byte) print_byte::b#7 >> (byte) 4 [ print_char_cursor#139 print_byte::b#7 print_byte::$0 ] ( main:2::test_16s:13::print_sword:27::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:234::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:238::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:242::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:246::print_byte:67 [ print_line_cursor#1 test_16u::i#10 print_word::w#5 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:27::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:234::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:238::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:242::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_16u:9::print_word:246::print_byte:69 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:145::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:149::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:153::print_byte:169 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8s:11::print_sbyte:157::print_byte:169 [ print_line_cursor#1 test_8s::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:268 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:272 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:276 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] main:2::test_8u:7::print_byte:280 [ print_line_cursor#41 test_8u::i#10 print_char_cursor#139 print_byte::b#7 print_byte::$0 ] ) always clobbers reg byte a Statement [75] (byte~) print_byte::$2 ← (byte) print_byte::b#7 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::test_16s:13::print_sword:27::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:67 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:67 [ test_16s::i#10 print_line_cursor#1 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:67 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:67 [ print_line_cursor#1 test_16u::i#10 print_word::w#5 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:27::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:31::print_word:56::print_byte:69 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:35::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#19 print_byte::$2 ] main:2::test_16s:13::print_sword:39::print_word:56::print_byte:69 [ test_16s::i#10 print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:234::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:238::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:242::print_byte:69 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_16u:9::print_word:246::print_byte:69 [ print_line_cursor#1 test_16u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:145::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:149::print_byte:169 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:153::print_byte:169 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#19 print_byte::$2 ] main:2::test_8s:11::print_sbyte:157::print_byte:169 [ print_line_cursor#1 test_8s::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:268 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:272 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:276 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] main:2::test_8u:7::print_byte:280 [ print_line_cursor#41 test_8u::i#10 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y +Statement [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [83] *((byte*) print_char_cursor#130) ← *((byte*) print_str::str#13) [ print_char_cursor#130 print_str::str#13 ] ( main:2::test_16s:13::print_str:29 [ test_16s::i#10 test_16s::divisor#0 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:33 [ test_16s::i#10 test_16s::res#0 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_16s:13::print_str:37 [ test_16s::i#10 print_line_cursor#1 rem16s#11 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:147 [ print_line_cursor#1 test_8s::i#10 test_8s::divisor#0 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:151 [ print_line_cursor#1 test_8s::i#10 test_8s::res#0 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_8s:11::print_str:155 [ print_line_cursor#1 test_8s::i#10 rem8s#3 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:236 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::divisor#0 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:240 [ print_line_cursor#1 rem16u#1 test_16u::i#10 test_16u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_16u:9::print_str:244 [ print_line_cursor#1 rem16u#1 test_16u::i#10 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:270 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:274 [ print_line_cursor#41 rem8u#17 test_8u::i#10 test_8u::res#0 print_char_cursor#130 print_str::str#13 ] main:2::test_8u:7::print_str:278 [ print_line_cursor#41 rem8u#17 test_8u::i#10 print_char_cursor#130 print_str::str#13 ] ) always clobbers reg byte a reg byte y Statement [86] (signed word) divr16s::dividend#0 ← (signed word) div16s::dividend#0 [ div16s::divisor#0 divr16s::dividend#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 div16s::divisor#0 divr16s::dividend#0 ] ) always clobbers reg byte a Statement [87] (signed word) divr16s::divisor#0 ← (signed word) div16s::divisor#0 [ divr16s::dividend#0 divr16s::divisor#0 ] ( main:2::test_16s:13::div16s:22 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 print_line_cursor#1 divr16s::dividend#0 divr16s::divisor#0 ] ) always clobbers reg byte a @@ -7926,10 +7934,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -10361,11 +10369,11 @@ print_str: { // [80] phi (byte*) print_str::str#13 = (byte*) print_str::str#15 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [81] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [81] if((byte) 0!=*((byte*) print_str::str#13)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 24357dee5..e1cc8487e 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm index 7e31d2831..0581dd80d 100644 --- a/src/test/ref/test-multiply-16bit.asm +++ b/src/test/ref/test-multiply-16bit.asm @@ -152,7 +152,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-multiply-16bit.cfg b/src/test/ref/test-multiply-16bit.cfg index 259f2df34..4e884a700 100644 --- a/src/test/ref/test-multiply-16bit.cfg +++ b/src/test/ref/test-multiply-16bit.cfg @@ -130,7 +130,7 @@ print_str: scope:[print_str] from mul16s_compare::@1 mul16s_compare::@13 mul16s print_str::@1: scope:[print_str] from print_str print_str::@2 [65] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#154 print_str::@2/(byte*) print_char_cursor#1 ) [65] (byte*) print_str::str#15 ← phi( print_str/(byte*) print_str::str#17 print_str::@2/(byte*) print_str::str#0 ) - [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 + [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [67] return diff --git a/src/test/ref/test-multiply-16bit.log b/src/test/ref/test-multiply-16bit.log index 83900e2bd..3d55e5f63 100644 --- a/src/test/ref/test-multiply-16bit.log +++ b/src/test/ref/test-multiply-16bit.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) BGCOL Inlined call call mulf8s_prepare (signed byte) mulf8s::a @@ -159,7 +164,7 @@ print_str: scope:[print_str] from mul16s_compare::@1 mul16s_compare::@17 mul16s print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#154 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#15 ← phi( print_str/(byte*) print_str::str#17 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#15) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#15) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -2769,6 +2774,7 @@ SYMBOL TABLE SSA (word) print_word::w#6 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#15) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#22 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#3 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw#4 < (number) 0 @@ -2884,6 +2890,7 @@ Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2950,6 +2957,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -3433,7 +3441,7 @@ Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#3<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sdword::$0 [100] if((signed dword) print_sdword::dw#4<(signed byte) 0) goto print_sdword::@1 @@ -4194,7 +4202,7 @@ print_str: scope:[print_str] from mul16s_compare::@1 mul16s_compare::@13 mul16s print_str::@1: scope:[print_str] from print_str print_str::@2 [65] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#154 print_str::@2/(byte*) print_char_cursor#1 ) [65] (byte*) print_str::str#15 ← phi( print_str/(byte*) print_str::str#17 print_str::@2/(byte*) print_str::str#0 ) - [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 + [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [67] return @@ -5762,10 +5770,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -7883,7 +7891,7 @@ Statement [46] (signed dword) mul16s_error::mf#0 ← (signed dword) mul16s_compa Statement [55] (byte*~) print_char_cursor#183 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#183 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#183 ] ) always clobbers reg byte a Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] @@ -8037,7 +8045,7 @@ Statement [52] if((byte) mul16s_compare::i#1!=(byte) $10) goto mul16s_compare::@ Statement [55] (byte*~) print_char_cursor#183 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#183 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#183 ] ) always clobbers reg byte a Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Statement [68] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#15) [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Statement [73] (signed word) print_sword::w#1 ← (signed word) mul16s_error::a#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ) always clobbers reg byte a Statement [77] (signed word) print_sword::w#2 ← (signed word) mul16s_error::b#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ) always clobbers reg byte a @@ -8740,10 +8748,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -11823,11 +11831,11 @@ print_str: { // [65] phi (byte*) print_str::str#15 = (byte*) print_str::str#17 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [66] if(*((byte*) print_str::str#15)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-multiply-8bit.asm b/src/test/ref/test-multiply-8bit.asm index 438702113..0384985a8 100644 --- a/src/test/ref/test-multiply-8bit.asm +++ b/src/test/ref/test-multiply-8bit.asm @@ -59,7 +59,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/test-multiply-8bit.cfg b/src/test/ref/test-multiply-8bit.cfg index 07c74da50..61d3db6ec 100644 --- a/src/test/ref/test-multiply-8bit.cfg +++ b/src/test/ref/test-multiply-8bit.cfg @@ -67,7 +67,7 @@ print_str: scope:[print_str] from mul8s_compare::@1 mul8u_compare::@9 mul8u_err print_str::@1: scope:[print_str] from print_str print_str::@2 [29] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) [29] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) - [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 + [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [31] return diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index a73e78be4..3e049df50 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) BGCOL Identified constant variable (byte*) mulf_init_asm::mem @@ -174,7 +179,7 @@ print_str: scope:[print_str] from mul8s_compare::@3 mul8s_error mul8s_error::@2 print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#16) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#16) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -2914,6 +2919,7 @@ SYMBOL TABLE SSA Fixing inline constructor with mulf8u_prepared::$0 ← (byte)*(mulf8u_prepared::memB#0) w= (byte)*(mulf8u_prepared::resL#0) Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#16) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#23 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#4 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 @@ -3026,6 +3032,7 @@ Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -3093,6 +3100,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -3569,7 +3577,7 @@ Identical Phi Values (byte*) print_line_cursor#19 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5 -Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 @@ -4366,7 +4374,7 @@ print_str: scope:[print_str] from mul8s_compare::@1 mul8u_compare::@9 mul8u_err print_str::@1: scope:[print_str] from print_str print_str::@2 [29] (byte*) print_char_cursor#134 ← phi( print_str/(byte*) print_char_cursor#155 print_str::@2/(byte*) print_char_cursor#1 ) [29] (byte*) print_str::str#16 ← phi( print_str/(byte*) print_str::str#18 print_str::@2/(byte*) print_str::str#0 ) - [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 + [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [31] return @@ -5272,10 +5280,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -6605,7 +6613,7 @@ Statement [4] *((const byte*) BGCOL#0) ← (byte) 5 [ ] ( main:2 [ ] ) always cl Statement [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 [ print_char_cursor#193 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#193 print_line_cursor#1 ] ) always clobbers reg byte a Statement [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a Statement [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:60 [ mul8u_error::a#0 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:60 [ mul8u_error::a#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ mul8u_error::b#0 ] @@ -6688,7 +6696,7 @@ Statement [4] *((const byte*) BGCOL#0) ← (byte) 5 [ ] ( main:2 [ ] ) always cl Statement [18] (byte*~) print_char_cursor#193 ← (byte*) print_line_cursor#1 [ print_char_cursor#193 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#193 print_line_cursor#1 ] ) always clobbers reg byte a Statement [25] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a Statement [26] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:21 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:75 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:66::print_ln:97 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:154 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y Statement [32] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:19 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:73 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:77 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:81 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:85 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:89 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:66::print_str:93 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:152 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:160 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:164 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y Statement [41] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a Statement [42] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a @@ -7060,10 +7068,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -9031,11 +9039,11 @@ print_str: { // [29] phi (byte*) print_str::str#16 = (byte*) print_str::str#18 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [30] if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [30] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index 7e8510bea..7da83c940 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/travis1.asm b/src/test/ref/travis1.asm index 0815e0752..8d923c996 100644 --- a/src/test/ref/travis1.asm +++ b/src/test/ref/travis1.asm @@ -83,7 +83,7 @@ print_str: { b1: ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 rts b2: diff --git a/src/test/ref/travis1.cfg b/src/test/ref/travis1.cfg index 07315043b..bbd461498 100644 --- a/src/test/ref/travis1.cfg +++ b/src/test/ref/travis1.cfg @@ -67,7 +67,7 @@ print_str: scope:[print_str] from print_str_ln print_str::@1: scope:[print_str] from print_str print_str::@2 [28] (byte*) print_char_cursor#17 ← phi( print_str/(byte*) print_char_cursor#27 print_str::@2/(byte*) print_char_cursor#4 ) [28] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#0 print_str::@2/(byte*) print_str::str#1 ) - [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [30] return diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 7c080e8b9..eea1d4ff8 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 @@ -88,7 +93,7 @@ print_str: scope:[print_str] from print_str_ln print_str::@1: scope:[print_str] from print_str print_str::@2 (byte*) print_char_cursor#28 ← phi( print_str/(byte*) print_char_cursor#35 print_str::@2/(byte*) print_char_cursor#4 ) (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#1 ) - (bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@' + (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) if((bool~) print_str::$0) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 @@ -422,6 +427,7 @@ SYMBOL TABLE SSA (byte*) print_str_ln::str#1 (byte*) print_str_ln::str#2 +Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#13 + (number) $28 Adding number conversion cast (unumber) 0 in (byte) action_count#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (byte) READY_FRAMES#0 ← (number) 5 @@ -433,12 +439,14 @@ Inlining cast (byte) action_count#0 ← (unumber)(number) 0 Inlining cast (byte) READY_FRAMES#0 ← (unumber)(number) 5 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 @@ -510,7 +518,7 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_line_cursor#14 Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#14 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) print_str::$0 [19] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_str::$0 [19] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 Simple Condition (bool~) print_ln::$1 [32] if((byte*) print_line_cursor#14<(byte*) print_char_cursor#17) goto print_ln::@1 Simple Condition (bool~) main::$3 [57] if((byte) main::i#1!=rangelast(0,5)) goto main::@1 Simple Condition (bool~) game_ready::$1 [72] if((byte) action_count#13!=(byte) 0) goto game_ready::@1 @@ -677,7 +685,7 @@ print_str: scope:[print_str] from print_str_ln print_str::@1: scope:[print_str] from print_str print_str::@2 [28] (byte*) print_char_cursor#17 ← phi( print_str/(byte*) print_char_cursor#27 print_str::@2/(byte*) print_char_cursor#4 ) [28] (byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#0 print_str::@2/(byte*) print_str::str#1 ) - [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 + [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [30] return @@ -968,10 +976,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -1064,7 +1072,7 @@ Statement [15] (byte*~) print_char_cursor#44 ← (byte*) print_line_cursor#14 [ Statement [17] (byte*) print_str::str#0 ← (byte*) print_str_ln::str#2 [ print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] ( main:2::print_str_ln:11 [ main::i#2 action_count#11 print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] main:2::game_ready:6::print_str_ln:37 [ main::i#2 action_count#10 print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] ) always clobbers reg byte a Statement [24] (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#13 + (byte) $28 [ print_line_cursor#14 print_char_cursor#17 ] ( main:2::print_str_ln:11::print_ln:20 [ main::i#2 action_count#11 print_line_cursor#14 print_char_cursor#17 ] main:2::game_ready:6::print_str_ln:37::print_ln:20 [ main::i#2 action_count#10 print_line_cursor#14 print_char_cursor#17 ] ) always clobbers reg byte a Statement [25] if((byte*) print_line_cursor#14<(byte*) print_char_cursor#17) goto print_ln::@1 [ print_line_cursor#14 print_char_cursor#17 ] ( main:2::print_str_ln:11::print_ln:20 [ main::i#2 action_count#11 print_line_cursor#14 print_char_cursor#17 ] main:2::game_ready:6::print_str_ln:37::print_ln:20 [ main::i#2 action_count#10 print_line_cursor#14 print_char_cursor#17 ] ) always clobbers reg byte a -Statement [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ action_count#10 action_count#13 action_count#11 ] Statement [31] *((byte*) print_char_cursor#17) ← *((byte*) print_str::str#2) [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y @@ -1074,7 +1082,7 @@ Statement [15] (byte*~) print_char_cursor#44 ← (byte*) print_line_cursor#14 [ Statement [17] (byte*) print_str::str#0 ← (byte*) print_str_ln::str#2 [ print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] ( main:2::print_str_ln:11 [ main::i#2 action_count#11 print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] main:2::game_ready:6::print_str_ln:37 [ main::i#2 action_count#10 print_char_cursor#27 print_line_cursor#22 print_str::str#0 ] ) always clobbers reg byte a Statement [24] (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#13 + (byte) $28 [ print_line_cursor#14 print_char_cursor#17 ] ( main:2::print_str_ln:11::print_ln:20 [ main::i#2 action_count#11 print_line_cursor#14 print_char_cursor#17 ] main:2::game_ready:6::print_str_ln:37::print_ln:20 [ main::i#2 action_count#10 print_line_cursor#14 print_char_cursor#17 ] ) always clobbers reg byte a Statement [25] if((byte*) print_line_cursor#14<(byte*) print_char_cursor#17) goto print_ln::@1 [ print_line_cursor#14 print_char_cursor#17 ] ( main:2::print_str_ln:11::print_ln:20 [ main::i#2 action_count#11 print_line_cursor#14 print_char_cursor#17 ] main:2::game_ready:6::print_str_ln:37::print_ln:20 [ main::i#2 action_count#10 print_line_cursor#14 print_char_cursor#17 ] ) always clobbers reg byte a -Statement [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y +Statement [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [31] *((byte*) print_char_cursor#17) ← *((byte*) print_str::str#2) [ print_char_cursor#17 print_str::str#2 ] ( main:2::print_str_ln:11::print_str:18 [ main::i#2 action_count#11 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] main:2::game_ready:6::print_str_ln:37::print_str:18 [ main::i#2 action_count#10 print_line_cursor#22 print_char_cursor#17 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [39] (bool) game_ready::return#1 ← (byte) action_count#11 == (byte) 0 [ print_line_cursor#14 action_count#11 game_ready::return#1 ] ( main:2::game_ready:6 [ main::i#2 print_line_cursor#14 action_count#11 game_ready::return#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , @@ -1289,10 +1297,10 @@ print_str: { jmp b1 // print_str::@1 b1: - // [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 jmp breturn // print_str::@return @@ -1670,11 +1678,11 @@ print_str: { // [28] phi (byte*) print_str::str#2 = (byte*) print_str::str#0 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy // print_str::@1 b1: - // while(*str!='@') - // [29] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + // while(*str) + // [29] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y - cmp #'@' + cmp #0 bne b2 // print_str::@return // } diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index 037ce10ef..3d72227f2 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -4,6 +4,11 @@ Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index f33c6d672..d51c25cb2 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -6,6 +6,11 @@ Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::dig Fixing pointer array-indexing *((word[MAX_OBJECTS]) OBJ_WORLD_X + (byte) move_enemy::obj_slot) Fixing pointer array-indexing *((word[MAX_OBJECTS]) OBJ_WORLD_X + (byte) move_enemy::obj_slot) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) +Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) +Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) +Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2