1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +00:00

Updated stdlib & tests with 0-terminated strings.

This commit is contained in:
jespergravgaard 2019-08-07 19:48:56 +02:00
parent 6c59110896
commit c78bebf2a8
178 changed files with 1305 additions and 845 deletions

View File

@ -8,13 +8,13 @@ byte* print_char_cursor = print_line_cursor;
// Print a number of zero-terminated strings, each followed by a newline. // Print a number of zero-terminated strings, each followed by a newline.
// The sequence of lines is terminated by another zero. // The sequence of lines is terminated by another zero.
void print_str_lines(byte* str) { void print_str_lines(byte* str) {
while(*str!='@') { while(*str) {
do { do {
byte ch = *(str++); byte ch = *(str++);
if(ch!='@') { if(ch) {
*(print_char_cursor++) = ch; *(print_char_cursor++) = ch;
} }
} while (ch!='@'); } while (ch);
print_ln(); print_ln();
} }
} }
@ -27,14 +27,14 @@ void print_str_ln(byte* str) {
// Print a zero-terminated string // Print a zero-terminated string
void print_str(byte* str) { void print_str(byte* str) {
while(*str!='@') { while(*str) {
*(print_char_cursor++) = *(str++); *(print_char_cursor++) = *(str++);
} }
} }
// Print a string at a specific screen position // Print a string at a specific screen position
void print_str_at(byte* str, byte* at) { void print_str_at(byte* str, byte* at) {
while(*str!='@') { while(*str) {
*(at++) = *(str++); *(at++) = *(str++);
} }
} }

View File

@ -61,7 +61,7 @@ void main() {
// Print a string at a specific screen position // Print a string at a specific screen position
void print_str_at(byte* str, byte* at) { void print_str_at(byte* str, byte* at) {
while(*str!='@') { while(*str) {
*(at++) = *(str++); *(at++) = *(str++);
} }
} }

View File

@ -23,7 +23,7 @@ void main() {
} }
// Render next char // Render next char
byte c = *nxt; byte c = *nxt;
if(c=='@') { if(c==0) {
nxt = TEXT; nxt = TEXT;
c = *nxt; c = *nxt;
} }

View File

@ -61,7 +61,7 @@ byte* nxt = TEXT;
// Find the next char of the scroll text // Find the next char of the scroll text
byte next_char() { byte next_char() {
byte c = *nxt; byte c = *nxt;
if(c=='@') { if(c==0) {
nxt = TEXT; nxt = TEXT;
c = *nxt; c = *nxt;
} }

View File

@ -25,6 +25,6 @@ void print(byte* msg) {
byte i=0; byte i=0;
do { do {
SCREEN[idx++] = msg[i++]; SCREEN[idx++] = msg[i++];
} while(msg[i]!='@'); } while(msg[i]);
} }

View File

@ -20,7 +20,7 @@ void hello() {
byte i=0; byte i=0;
do { do {
SCREEN[idx++] = msg[i++]; SCREEN[idx++] = msg[i++];
} while(msg[i]!='@'); } while(msg[i]);
} }

View File

@ -25,7 +25,7 @@ void hello() {
byte i=0; byte i=0;
do { do {
SCREEN[idx++] = msg[i++]; SCREEN[idx++] = msg[i++];
} while(msg[i]!='@'); } while(msg[i]);
} }

View File

@ -7,7 +7,7 @@ void main() {
inline void print2(byte* at, byte* msg) { inline void print2(byte* at, byte* msg) {
byte j=0; byte j=0;
for(byte i=0; msg[i]!='@'; i++) { for(byte i=0; msg[i]; i++) {
at[j] = msg[i]; at[j] = msg[i];
j += 2; j += 2;
} }

View File

@ -7,7 +7,7 @@ void main() {
void print2(byte* at, byte* msg) { void print2(byte* at, byte* msg) {
byte j=0; byte j=0;
for(byte i=0; msg[i]!='@'; i++) { for(byte i=0; msg[i]; i++) {
at[j] = msg[i]; at[j] = msg[i];
j += 2; j += 2;
} }

View File

@ -10,7 +10,7 @@ void main() {
inline void print(byte* at, byte* msg) { inline void print(byte* at, byte* msg) {
byte j=0; byte j=0;
for(byte i=0; msg[i]!='@'; i++) { for(byte i=0; msg[i]; i++) {
at[j] = msg[i]; at[j] = msg[i];
j += 2; j += 2;
} }

View File

@ -17,7 +17,7 @@ void print_msg(byte idx) {
byte* screen = $0400; byte* screen = $0400;
void print(byte* msg) { void print(byte* msg) {
while(*msg!='@') { while(*msg) {
*(screen++) = *(msg++); *(screen++) = *(msg++);
} }
} }

View File

@ -10,7 +10,7 @@ void main() {
byte* screen = $0400; byte* screen = $0400;
void print(byte* msg) { void print(byte* msg) {
while(*msg!='@') { while(*msg) {
*(screen++) = *(msg++); *(screen++) = *(msg++);
} }
} }

View File

@ -3,7 +3,7 @@ void main() {
byte* screen = $0400; byte* screen = $0400;
byte[] msg = "message 2 "; byte[] msg = "message 2 ";
byte i=0; byte i=0;
while(msg[i]!='@') { while(msg[i]) {
screen[i++] = msg[i]; screen[i++] = msg[i];
} }
} }

View File

@ -1,10 +1,10 @@
// Illustrates both break & continue statements in a loop // 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() { void main() {
byte* screen = $400; byte* screen = $400;
byte[] str = "hello brave new world"; byte[] str = "hello brave new world";
for( byte i: 0..255) { for( byte i: 0..255) {
if(str[i]=='@') break; if(str[i]==0) break;
if(str[i]==' ') continue; if(str[i]==' ') continue;
*screen++ = str[i]; *screen++ = str[i];
} }

View File

@ -7,7 +7,7 @@ void main() {
byte* text; byte* text;
for(byte i: 0..20) { for(byte i: 0..20) {
nexttext(&text); nexttext(&text);
while(*text!='@') { while(*text) {
*screen++ = *text++; *screen++ = *text++;
} }
} }

View File

@ -7,7 +7,7 @@ void main() {
byte i=0; byte i=0;
do { do {
byte c = *nxt; byte c = *nxt;
if(c=='@') { if(c==0) {
nxt = TEXT; nxt = TEXT;
c = *nxt; c = *nxt;
} }

View File

@ -14,7 +14,7 @@ byte* nxt = TEXT;
// Find the next char of the text // Find the next char of the text
byte next_char() { byte next_char() {
byte c = *nxt; byte c = *nxt;
if(c=='@') { if(c==0) {
nxt = TEXT; nxt = TEXT;
c = *nxt; c = *nxt;
} }

View File

@ -11,7 +11,7 @@ void main() {
} }
void print(byte* string) { void print(byte* string) {
while(*string!='@') { while(*string) {
*screen++ = *string++; *screen++ = *string++;
} }
} }

View File

@ -11,7 +11,7 @@ void main() {
} }
void print(byte* string) { void print(byte* string) {
while(*string!='@') { while(*string) {
*screen++ = *string++; *screen++ = *string++;
} }
} }

View File

@ -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 *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1 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 (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*) HEAP_TOP
Identified constant variable (byte*) BITMAP Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN Identified constant variable (byte*) SCREEN

View File

@ -177,7 +177,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[73] return [73] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (byte) testChar::u Identified constant variable (byte) testChar::u
Identified constant variable (byte) testChar::n 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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 print_str::@2: scope:[print_str] from print_str::@1
@ -1239,6 +1244,7 @@ SYMBOL TABLE SSA
(word) testShort::u#0 (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~) 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 (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_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 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 Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0 Simplifying constant integer cast 0
@ -1303,6 +1310,7 @@ Simplifying constant integer cast -$222e0
Simplifying constant integer cast -$222e0 Simplifying constant integer cast -$222e0
Successful SSA optimization PassNCastSimplification 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) $28 Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0
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 Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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_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_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 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[73] return [73] return
@ -2757,10 +2765,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 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 ] 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 [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 [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 [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 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 // [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 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -1123,7 +1123,7 @@ print_str_at: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:
@ -1417,7 +1417,7 @@ print_str_lines: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:
@ -1427,7 +1427,7 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
cmp #'@' cmp #0
beq b3 beq b3
ldy #0 ldy #0
sta (print_char_cursor),y sta (print_char_cursor),y
@ -1436,7 +1436,7 @@ print_str_lines: {
inc print_char_cursor+1 inc print_char_cursor+1
!: !:
b3: b3:
cmp #'@' cmp #0
bne b2 bne b2
jsr print_ln jsr print_ln
lda print_line_cursor lda print_line_cursor

View File

@ -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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[324] return [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_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_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 ) [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 to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[416] return [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 ) [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) [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 [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 to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 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 [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 to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 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 ) [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 to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[425] phi() [425] phi()

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) dtvSetCpuBankSegment1::cpuBank
Identified constant variable (byte*) DTV_BLITTER_ALU Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) HEAP_TOP 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_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_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 ) (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) '@' (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#3)
if((bool~) print_str_lines::$0) goto print_str_lines::@4 if((bool~) print_str_lines::$2) goto print_str_lines::@4
to:print_str_lines::@return to:print_str_lines::@return
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5 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 ) (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::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::ch#0 ← *((byte*) print_str_lines::str#4)
(byte*) print_str_lines::str#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::$4 ← (number) 0 != (byte) print_str_lines::ch#0
(bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1 (bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4
if((bool~) print_str_lines::$2) goto print_str_lines::@5 if((bool~) print_str_lines::$0) goto print_str_lines::@5
to:print_str_lines::@6 to:print_str_lines::@6
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 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_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_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::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 ) (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 if((bool~) print_str_lines::$3) goto print_str_lines::@4
to:print_str_lines::@7 to:print_str_lines::@7
print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4 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 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::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 ) (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 if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1 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 (byte*) print_str_at::str#4
(void()) print_str_lines((byte*) print_str_lines::str) (void()) print_str_lines((byte*) print_str_lines::str)
(bool~) print_str_lines::$0 (bool~) print_str_lines::$0
(bool~) print_str_lines::$1
(bool~) print_str_lines::$2 (bool~) print_str_lines::$2
(bool~) print_str_lines::$3 (bool~) print_str_lines::$3
(bool~) print_str_lines::$4
(label) print_str_lines::@1 (label) print_str_lines::@1
(label) print_str_lines::@11 (label) print_str_lines::@11
(label) print_str_lines::@4 (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) $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) $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~) 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) $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) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 2 in (byte) KEY_CRSR_RIGHT#0 ← (number) 2 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 pointer cast (byte*) 255
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 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 $28
Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8
Simplifying constant integer cast 2 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 (byte) $40
Finalized unsigned number type (dword) $1d800 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) 0
Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 2 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 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 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 [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 [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 [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 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 Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [64] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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 [87] if((byte) 0!=*((byte*) print_str_lines::str#3)) 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::$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) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 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*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 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~) 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::$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 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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[324] return [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_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_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 ) [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 to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[416] return [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 ) [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) [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 [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 to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 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 [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 to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 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 ) [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 to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[425] phi() [425] phi()
@ -17592,10 +17609,10 @@ print_str_at: {
jmp b1 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // print_str_at::@return
@ -18278,10 +18295,10 @@ print_str_lines: {
jmp b1 jmp b1
// print_str_lines::@1 // print_str_lines::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2_from_b1 bne b2_from_b1
jmp breturn jmp breturn
// print_str_lines::@return // print_str_lines::@return
@ -18305,8 +18322,8 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1 // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1
lda #'@' lda #0
cmp ch cmp ch
beq b3_from_b2 beq b3_from_b2
jmp b4 jmp b4
@ -18328,8 +18345,8 @@ print_str_lines: {
jmp b3 jmp b3
// print_str_lines::@3 // print_str_lines::@3
b3: b3:
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1 // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1
lda #'@' lda #0
cmp ch cmp ch
bne b2_from_b3 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] // [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 [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 [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 [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 ] 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 [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 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 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 ] 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 [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 [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 [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 ] 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 [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 [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 [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 [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 [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 ] 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 [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 [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 [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 [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 [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 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 [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 [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 [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 [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 [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 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // print_str_at::@return
@ -25336,10 +25353,10 @@ print_str_lines: {
jmp b1 jmp b1
// print_str_lines::@1 // print_str_lines::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2_from_b1 bne b2_from_b1
jmp breturn jmp breturn
// print_str_lines::@return // print_str_lines::@return
@ -25362,8 +25379,8 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #'@' cmp #0
beq b3_from_b2 beq b3_from_b2
jmp b4 jmp b4
// print_str_lines::@4 // print_str_lines::@4
@ -25383,8 +25400,8 @@ print_str_lines: {
jmp b3 jmp b3
// print_str_lines::@3 // print_str_lines::@3
b3: b3:
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #'@' cmp #0
bne b2_from_b3 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] // [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
b5_from_b3: 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 // [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 // print_str_at::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str_at::@return // 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 // [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 // print_str_lines::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str_lines::@return // print_str_lines::@return
// } // }
@ -33053,9 +33070,9 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// if(ch!='@') // if(ch)
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 // [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #'@' cmp #0
beq b3 beq b3
// print_str_lines::@4 // print_str_lines::@4
// *(print_char_cursor++) = ch // *(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 // [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 // print_str_lines::@3
b3: b3:
// while (ch!='@') // while (ch)
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 // [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #'@' cmp #0
bne b2 bne b2
// [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] // [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 // print_str_lines::@5

View File

@ -2242,7 +2242,7 @@ print_str_lines: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:
@ -2252,7 +2252,7 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
cmp #'@' cmp #0
beq b3 beq b3
ldy #0 ldy #0
sta (print_char_cursor),y sta (print_char_cursor),y
@ -2261,7 +2261,7 @@ print_str_lines: {
inc print_char_cursor+1 inc print_char_cursor+1
!: !:
b3: b3:
cmp #'@' cmp #0
bne b2 bne b2
jsr print_ln jsr print_ln
lda print_line_cursor lda print_line_cursor

View File

@ -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_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_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 ) [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 to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[867] return [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 ) [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) [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 [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 to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 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 [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 to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 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 ) [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 to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[876] phi() [876] phi()

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) dtvSetCpuBankSegment1::cpuBank
Identified constant variable (byte*) DTV_BLITTER_ALU Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) HEAP_TOP 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_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_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 ) (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) '@' (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#2)
if((bool~) print_str_lines::$0) goto print_str_lines::@4 if((bool~) print_str_lines::$2) goto print_str_lines::@4
to:print_str_lines::@return to:print_str_lines::@return
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5 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 ) (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::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::ch#0 ← *((byte*) print_str_lines::str#3)
(byte*) print_str_lines::str#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::$4 ← (number) 0 != (byte) print_str_lines::ch#0
(bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1 (bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4
if((bool~) print_str_lines::$2) goto print_str_lines::@5 if((bool~) print_str_lines::$0) goto print_str_lines::@5
to:print_str_lines::@6 to:print_str_lines::@6
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 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_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_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::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 ) (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 if((bool~) print_str_lines::$3) goto print_str_lines::@4
to:print_str_lines::@7 to:print_str_lines::@7
print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4 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 (byte*) print_set_screen::screen#1
(void()) print_str_lines((byte*) print_str_lines::str) (void()) print_str_lines((byte*) print_str_lines::str)
(bool~) print_str_lines::$0 (bool~) print_str_lines::$0
(bool~) print_str_lines::$1
(bool~) print_str_lines::$2 (bool~) print_str_lines::$2
(bool~) print_str_lines::$3 (bool~) print_str_lines::$3
(bool~) print_str_lines::$4
(label) print_str_lines::@1 (label) print_str_lines::@1
(label) print_str_lines::@11 (label) print_str_lines::@11
(label) print_str_lines::@4 (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) $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) $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~) 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) $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) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 8 in (byte) KEY_3#0 ← (number) 8 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 pointer cast (byte*) 255
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 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 $28
Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8
Simplifying constant integer cast 8 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 (byte) $40
Finalized unsigned number type (dword) $1d800 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 (byte) $28
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 8 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 Adding pointer type conversion cast (byte*) bitmap_clear::$0 in (byte*~) bitmap_clear::$0 ← (word~) bitmap_clear::$3
Successful SSA optimization PassNAddTypeConversionAssignment 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 [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 [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 [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 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 Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [65] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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 [88] if((byte) 0!=*((byte*) print_str_lines::str#2)) 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::$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) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 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~) 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::$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 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_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_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 ) [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 to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[867] return [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 ) [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) [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 [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 to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 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 [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 to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4 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 ) [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 to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3 print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[876] phi() [876] phi()
@ -19298,10 +19312,10 @@ print_str_lines: {
jmp b1 jmp b1
// print_str_lines::@1 // print_str_lines::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2_from_b1 bne b2_from_b1
jmp breturn jmp breturn
// print_str_lines::@return // print_str_lines::@return
@ -19325,8 +19339,8 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1 // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1
lda #'@' lda #0
cmp ch cmp ch
beq b3_from_b2 beq b3_from_b2
jmp b4 jmp b4
@ -19348,8 +19362,8 @@ print_str_lines: {
jmp b3 jmp b3
// print_str_lines::@3 // print_str_lines::@3
b3: b3:
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1 // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1
lda #'@' lda #0
cmp ch cmp ch
bne b2_from_b3 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] // [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 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 ] 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 [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 [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 [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 ] 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str_lines::@1 // print_str_lines::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2_from_b1 bne b2_from_b1
jmp breturn jmp breturn
// print_str_lines::@return // print_str_lines::@return
@ -25680,8 +25694,8 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #'@' cmp #0
beq b3_from_b2 beq b3_from_b2
jmp b4 jmp b4
// print_str_lines::@4 // print_str_lines::@4
@ -25701,8 +25715,8 @@ print_str_lines: {
jmp b3 jmp b3
// print_str_lines::@3 // print_str_lines::@3
b3: b3:
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #'@' cmp #0
bne b2_from_b3 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] // [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
b5_from_b3: b5_from_b3:
@ -32576,11 +32590,11 @@ print_str_lines: {
sta str+1 sta str+1
// print_str_lines::@1 // print_str_lines::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str_lines::@return // print_str_lines::@return
// } // }
@ -32600,9 +32614,9 @@ print_str_lines: {
bne !+ bne !+
inc str+1 inc str+1
!: !:
// if(ch!='@') // if(ch)
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1 // [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #'@' cmp #0
beq b3 beq b3
// print_str_lines::@4 // print_str_lines::@4
// *(print_char_cursor++) = ch // *(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 // [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 // print_str_lines::@3
b3: b3:
// while (ch!='@') // while (ch)
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1 // [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #'@' cmp #0
bne b2 bne b2
// [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5] // [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 // print_str_lines::@5

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1 Culled Empty Block (label) @1

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1 Culled Empty Block (label) @1

View File

@ -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 *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1 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 (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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call mulf8s_prepare (signed byte) mulf8s::a

View File

@ -110,7 +110,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[39] return [39] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (byte) test_bytes::bb Identified constant variable (byte) test_bytes::bb
Identified constant variable (signed byte) test_sbytes::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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 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" (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~) 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) $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) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5 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 Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8
Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53281
@ -924,6 +931,7 @@ Simplifying constant integer cast 2
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification 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) $28 Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 5 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 Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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~) 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_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 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[39] return [39] return
@ -1913,10 +1921,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 ] 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 [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 [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: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 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 ] 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 // [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 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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) 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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @2 Culled Empty Block (label) @2

View File

@ -943,7 +943,7 @@ print_str_at: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[246] return [246] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (signed byte*) xr Identified constant variable (signed byte*) xr
Identified constant variable (signed byte*) yr 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 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::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 ) (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 if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1 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) $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) $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~) 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 (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) 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 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 integer cast 0
Simplifying constant pointer cast (byte*) 1024 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 1 Simplifying constant integer cast 1
Simplifying constant integer cast 4 Simplifying constant integer cast 4
Simplifying constant integer cast $f 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) $e
Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 4 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 Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [12] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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~) 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::$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 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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[246] return [246] return
@ -6570,10 +6578,10 @@ print_str_at: {
jmp b1 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // 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 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 ] 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 [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 [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 [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 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 [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 [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 [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 [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 [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 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // 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 // [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 // print_str_at::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str_at::@return // print_str_at::@return
// } // }

View File

@ -120,7 +120,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[47] return [47] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (signed byte*) xr Identified constant variable (signed byte*) xr
Identified constant variable (signed byte*) yr 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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 print_str::@2: scope:[print_str] from print_str::@1
@ -905,6 +910,7 @@ SYMBOL TABLE SSA
(signed byte*) zr#0 (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~) 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 (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 (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 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 Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 4 Simplifying constant integer cast 4
@ -978,6 +985,7 @@ Simplifying constant integer cast 1
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification 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) $28 Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 4 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 Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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_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~) 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 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[47] return [47] return
@ -2039,10 +2047,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 [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 [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 [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 [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 [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 ] 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 // [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 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -395,7 +395,7 @@ print_str_at: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[130] return [130] return

View File

@ -1,3 +1,4 @@
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Identified constant variable (byte*) SCREEN Identified constant variable (byte*) SCREEN
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1 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 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::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 ) (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 if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1 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) 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) $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~) 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) 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) 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 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 0
Simplifying constant integer cast $3f Simplifying constant integer cast $3f
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 8 Simplifying constant integer cast 8
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast $32 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) 0
Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) $3f
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $32 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::$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::$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~) 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::$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::$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 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 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::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 ) [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 to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1 print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[130] return [130] return
@ -3512,10 +3516,10 @@ print_str_at: {
jmp b1 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // 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 ] 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 [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 [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 [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 [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 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 [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 [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 [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 [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_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 , 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 jmp b1
// print_str_at::@1 // print_str_at::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str_at::@return // 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 // [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 // print_str_at::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str_at::@return // print_str_at::@return
// } // }

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (byte) init_screen::WHITE Identified constant variable (byte) init_screen::WHITE
Identified constant variable (signed byte*) ap Identified constant variable (signed byte*) ap

View File

@ -49,7 +49,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -35,7 +35,7 @@ print_str: scope:[print_str] from main
print_str::@1: scope:[print_str] from print_str print_str::@2 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[17] return [17] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @2 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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 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#3
(byte*) print_str::str#4 (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 Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#6 + (number) $28
Successful SSA optimization PassNAddNumberTypeConversions Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28
Successful SSA optimization PassNFinalizeNumberTypeConversions 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 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_char_cursor#16 (byte*) print_char_cursor#14
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#10 Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#10
Successful SSA optimization Pass2IdenticalPhiElimination 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 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = (byte*) 1024 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[17] return [17] return
@ -476,10 +484,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // print_str::@return
@ -514,7 +522,7 @@ print_str: {
REGISTER UPLIFT POTENTIAL REGISTERS 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 [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 [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 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: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 , 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // print_str::@return
@ -845,11 +853,11 @@ print_str: {
sta str+1 sta str+1
// print_str::@1 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$4 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET Inlined call (byte~) main::$4 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (byte*) SCREEN Identified constant variable (byte*) SCREEN
Identified constant variable (byte*) SPRITE Identified constant variable (byte*) SPRITE

View File

@ -39,7 +39,7 @@ main: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
cpx #'@' cpx #0
bne b9 bne b9
ldx TEXT ldx TEXT
lda #<TEXT lda #<TEXT

View File

@ -34,7 +34,7 @@ main::@5: scope:[main] from main::@6
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@5 main::@7: scope:[main] from main::@5
[16] (byte) main::c#0 ← *((byte*) main::nxt#10) [16] (byte) main::c#0 ← *((byte*) main::nxt#10)
[17] if((byte) main::c#0!=(byte) '@') goto main::@9 [17] if((byte) main::c#0!=(byte) 0) goto main::@9
to:main::@8 to:main::@8
main::@8: scope:[main] from main::@7 main::@8: scope:[main] from main::@7
[18] (byte) main::c#1 ← *((const byte*) TEXT#0) [18] (byte) main::c#1 ← *((const byte*) TEXT#0)

View File

@ -86,7 +86,7 @@ main::@10: scope:[main] from main::@8
(byte) main::scroll#8 ← phi( main::@8/(byte) main::scroll#10 ) (byte) main::scroll#8 ← phi( main::@8/(byte) main::scroll#10 )
(byte*) main::nxt#3 ← phi( main::@8/(byte*) main::nxt#5 ) (byte*) main::nxt#3 ← phi( main::@8/(byte*) main::nxt#5 )
(byte) main::c#0 ← *((byte*) main::nxt#3) (byte) main::c#0 ← *((byte*) main::nxt#3)
(bool~) main::$8 ← (byte) main::c#0 == (byte) '@' (bool~) main::$8 ← (byte) main::c#0 == (number) 0
(bool~) main::$9 ← ! (bool~) main::$8 (bool~) main::$9 ← ! (bool~) main::$8
if((bool~) main::$9) goto main::@15 if((bool~) main::$9) goto main::@15
to:main::@14 to:main::@14
@ -243,6 +243,7 @@ Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
Adding number conversion cast (unumber) $27 in (bool~) main::$6 ← (byte) main::i#2 != (number) $27 Adding number conversion cast (unumber) $27 in (bool~) main::$6 ← (byte) main::i#2 != (number) $27
Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) main::i#3 + (number) 1 Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) main::i#3 + (number) 1
Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) main::i#3 + (unumber)(number) 1 Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) main::i#3 + (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) main::$8 ← (byte) main::c#0 == (number) 0
Adding number conversion cast (unumber) $27 in *((byte[]) main::line#0 + (number) $27) ← (byte) main::c#2 Adding number conversion cast (unumber) $27 in *((byte[]) main::line#0 + (number) $27) ← (byte) main::c#2
Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8 Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8
Successful SSA optimization PassNAddNumberTypeConversions Successful SSA optimization PassNAddNumberTypeConversions
@ -269,6 +270,7 @@ Simplifying constant integer cast 7
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast $27 Simplifying constant integer cast $27
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $27 Simplifying constant integer cast $27
Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
@ -282,12 +284,13 @@ Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $27
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) main::$7 ← (byte) main::i#3 + (byte) 1 Inferred type updated to byte in (unumber~) main::$7 ← (byte) main::i#3 + (byte) 1
Inversing boolean not [22] (bool~) main::$5 ← (byte) main::scroll#1 != (byte) $ff from [21] (bool~) main::$4 ← (byte) main::scroll#1 == (byte) $ff Inversing boolean not [22] (bool~) main::$5 ← (byte) main::scroll#1 != (byte) $ff from [21] (bool~) main::$4 ← (byte) main::scroll#1 == (byte) $ff
Inversing boolean not [41] (bool~) main::$9 ← (byte) main::c#0 != (byte) '@' from [40] (bool~) main::$8 ← (byte) main::c#0 == (byte) '@' Inversing boolean not [41] (bool~) main::$9 ← (byte) main::c#0 != (byte) 0 from [40] (bool~) main::$8 ← (byte) main::c#0 == (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte[]) main::line#0 = (byte*~) main::$1 Alias (byte[]) main::line#0 = (byte*~) main::$1
Alias (byte) main::scroll#3 = (byte) main::scroll#5 Alias (byte) main::scroll#3 = (byte) main::scroll#5
@ -315,7 +318,7 @@ Simple Condition (bool~) main::$2 [14] if(*((byte*) RASTER#0)!=(byte) $fe) goto
Simple Condition (bool~) main::$3 [17] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4 Simple Condition (bool~) main::$3 [17] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
Simple Condition (bool~) main::$5 [23] if((byte) main::scroll#1!=(byte) $ff) goto main::@7 Simple Condition (bool~) main::$5 [23] if((byte) main::scroll#1!=(byte) $ff) goto main::@7
Simple Condition (bool~) main::$6 [33] if((byte) main::i#2!=(byte) $27) goto main::@9 Simple Condition (bool~) main::$6 [33] if((byte) main::i#2!=(byte) $27) goto main::@9
Simple Condition (bool~) main::$9 [42] if((byte) main::c#0!=(byte) '@') goto main::@15 Simple Condition (bool~) main::$9 [42] if((byte) main::c#0!=(byte) 0) goto main::@15
Simple Condition (bool~) fillscreen::$1 [55] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2 Simple Condition (bool~) fillscreen::$1 [55] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = (byte*) 1024 Constant (const byte*) SCREEN#0 = (byte*) 1024
@ -471,7 +474,7 @@ main::@5: scope:[main] from main::@6
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@5 main::@7: scope:[main] from main::@5
[16] (byte) main::c#0 ← *((byte*) main::nxt#10) [16] (byte) main::c#0 ← *((byte*) main::nxt#10)
[17] if((byte) main::c#0!=(byte) '@') goto main::@9 [17] if((byte) main::c#0!=(byte) 0) goto main::@9
to:main::@8 to:main::@8
main::@8: scope:[main] from main::@7 main::@8: scope:[main] from main::@7
[18] (byte) main::c#1 ← *((const byte*) TEXT#0) [18] (byte) main::c#1 ← *((const byte*) TEXT#0)
@ -668,9 +671,9 @@ main: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
sta c sta c
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuz1_neq_vbuc1_then_la1 // [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuz1_neq_0_then_la1
lda #'@' lda c
cmp c cmp #0
bne b9_from_b7 bne b9_from_b7
jmp b8 jmp b8
// main::@8 // main::@8
@ -910,8 +913,8 @@ main: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 // [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuxx_neq_0_then_la1
cpx #'@' cpx #0
bne b9_from_b7 bne b9_from_b7
jmp b8 jmp b8
// main::@8 // main::@8
@ -1218,9 +1221,9 @@ main: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
// if(c=='@') // if(c==0)
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1 // [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuxx_neq_0_then_la1
cpx #'@' cpx #0
bne b9 bne b9
// main::@8 // main::@8
// c = *nxt // c = *nxt

View File

@ -145,7 +145,7 @@ next_char: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
cpx #'@' cpx #0
bne b1 bne b1
ldx TEXT ldx TEXT
lda #<TEXT lda #<TEXT

View File

@ -117,7 +117,7 @@ scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1
to:@return to:@return
next_char: scope:[next_char] from scroll_bit::@2 next_char: scope:[next_char] from scroll_bit::@2
[57] (byte) next_char::c#0 ← *((byte*) nxt#31) [57] (byte) next_char::c#0 ← *((byte*) nxt#31)
[58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1
to:next_char::@2 to:next_char::@2
next_char::@2: scope:[next_char] from next_char next_char::@2: scope:[next_char] from next_char
[59] (byte) next_char::c#1 ← *((const byte*) TEXT#0) [59] (byte) next_char::c#1 ← *((const byte*) TEXT#0)

View File

@ -247,7 +247,7 @@ scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6
next_char: scope:[next_char] from scroll_bit::@2 next_char: scope:[next_char] from scroll_bit::@2
(byte*) nxt#17 ← phi( scroll_bit::@2/(byte*) nxt#24 ) (byte*) nxt#17 ← phi( scroll_bit::@2/(byte*) nxt#24 )
(byte) next_char::c#0 ← *((byte*) nxt#17) (byte) next_char::c#0 ← *((byte*) nxt#17)
(bool~) next_char::$0 ← (byte) next_char::c#0 == (byte) '@' (bool~) next_char::$0 ← (byte) next_char::c#0 == (number) 0
(bool~) next_char::$1 ← ! (bool~) next_char::$0 (bool~) next_char::$1 ← ! (bool~) next_char::$0
if((bool~) next_char::$1) goto next_char::@1 if((bool~) next_char::$1) goto next_char::@1
to:next_char::@2 to:next_char::@2
@ -659,6 +659,7 @@ Adding number conversion cast (unumber) $28 in (byte*~) scroll_bit::$12 ← (byt
Adding number conversion cast (unumber) $80+' ' in (byte) scroll_bit::b#1 ← (number) $80+(byte) ' ' Adding number conversion cast (unumber) $80+' ' in (byte) scroll_bit::b#1 ← (number) $80+(byte) ' '
Adding number conversion cast (unumber) $80 in (byte) scroll_bit::b#1 ← ((unumber)) (number) $80+(byte) ' ' Adding number conversion cast (unumber) $80 in (byte) scroll_bit::b#1 ← ((unumber)) (number) $80+(byte) ' '
Adding number conversion cast (unumber) $37 in *((byte*) PROCPORT#0) ← (number) $37 Adding number conversion cast (unumber) $37 in *((byte*) PROCPORT#0) ← (number) $37
Adding number conversion cast (unumber) 0 in (bool~) next_char::$0 ← (byte) next_char::c#0 == (number) 0
Adding number conversion cast (unumber) 0 in (byte) scroll_hard::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) scroll_hard::i#0 ← (number) 0
Adding number conversion cast (unumber) $27 in (bool~) scroll_hard::$0 ← (byte) scroll_hard::i#2 != (number) $27 Adding number conversion cast (unumber) $27 in (bool~) scroll_hard::$0 ← (byte) scroll_hard::i#2 != (number) $27
Adding number conversion cast (unumber) $28*0 in (byte*~) scroll_hard::$1 ← (byte*) SCREEN#0 + (number) $28*(number) 0 Adding number conversion cast (unumber) $28*0 in (byte*~) scroll_hard::$1 ← (byte*) SCREEN#0 + (number) $28*(number) 0
@ -737,6 +738,7 @@ Simplifying constant integer cast (unumber)(number) $80+(byte) ' '
Simplifying constant integer cast $80 Simplifying constant integer cast $80
Simplifying constant integer cast $37 Simplifying constant integer cast $37
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $27 Simplifying constant integer cast $27
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Simplifying constant integer cast 1 Simplifying constant integer cast 1
@ -767,6 +769,7 @@ Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $37 Finalized unsigned number type (byte) $37
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
@ -791,7 +794,7 @@ Inferred type updated to byte in (unumber~) scroll_hard::$24 ← (byte) scroll_h
Inversing boolean not [38] (bool~) scroll_soft::$1 ← (byte) scroll#3 != (byte) $ff from [37] (bool~) scroll_soft::$0 ← (byte) scroll#3 == (byte) $ff Inversing boolean not [38] (bool~) scroll_soft::$1 ← (byte) scroll#3 != (byte) $ff from [37] (bool~) scroll_soft::$0 ← (byte) scroll#3 == (byte) $ff
Inversing boolean not [62] (bool~) scroll_bit::$2 ← (byte) current_bit#5 != (byte) 0 from [61] (bool~) scroll_bit::$1 ← (byte) current_bit#5 == (byte) 0 Inversing boolean not [62] (bool~) scroll_bit::$2 ← (byte) current_bit#5 != (byte) 0 from [61] (bool~) scroll_bit::$1 ← (byte) current_bit#5 == (byte) 0
Inversing boolean not [89] (bool~) scroll_bit::$11 ← (byte~) scroll_bit::$9 == (byte) 0 from [88] (bool~) scroll_bit::$10 ← (byte~) scroll_bit::$9 != (byte) 0 Inversing boolean not [89] (bool~) scroll_bit::$11 ← (byte~) scroll_bit::$9 == (byte) 0 from [88] (bool~) scroll_bit::$10 ← (byte~) scroll_bit::$9 != (byte) 0
Inversing boolean not [113] (bool~) next_char::$1 ← (byte) next_char::c#0 != (byte) '@' from [112] (bool~) next_char::$0 ← (byte) next_char::c#0 == (byte) '@' Inversing boolean not [113] (bool~) next_char::$1 ← (byte) next_char::c#0 != (byte) 0 from [112] (bool~) next_char::$0 ← (byte) next_char::c#0 == (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte) scroll#20 = (byte) scroll#21 Alias (byte) scroll#20 = (byte) scroll#21
Alias (byte) current_bit#30 = (byte) current_bit#31 Alias (byte) current_bit#30 = (byte) current_bit#31
@ -899,7 +902,7 @@ Simple Condition (bool~) scroll_soft::$1 [39] if((byte) scroll#3!=(byte) $ff) go
Simple Condition (bool~) scroll_bit::$2 [63] if((byte) current_bit#5!=(byte) 0) goto scroll_bit::@1 Simple Condition (bool~) scroll_bit::$2 [63] if((byte) current_bit#5!=(byte) 0) goto scroll_bit::@1
Simple Condition (bool~) scroll_bit::$11 [90] if((byte~) scroll_bit::$9==(byte) 0) goto scroll_bit::@4 Simple Condition (bool~) scroll_bit::$11 [90] if((byte~) scroll_bit::$9==(byte) 0) goto scroll_bit::@4
Simple Condition (bool~) scroll_bit::$13 [97] if((byte) scroll_bit::r#1!=rangelast(0,7)) goto scroll_bit::@3 Simple Condition (bool~) scroll_bit::$13 [97] if((byte) scroll_bit::r#1!=rangelast(0,7)) goto scroll_bit::@3
Simple Condition (bool~) next_char::$1 [114] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 Simple Condition (bool~) next_char::$1 [114] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1
Simple Condition (bool~) scroll_hard::$0 [127] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2 Simple Condition (bool~) scroll_hard::$0 [127] if((byte) scroll_hard::i#2!=(byte) $27) goto scroll_hard::@2
Simple Condition (bool~) fillscreen::$1 [168] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2 Simple Condition (bool~) fillscreen::$1 [168] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification Successful SSA optimization Pass2ConditionalJumpSimplification
@ -1258,7 +1261,7 @@ scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1
to:@return to:@return
next_char: scope:[next_char] from scroll_bit::@2 next_char: scope:[next_char] from scroll_bit::@2
[57] (byte) next_char::c#0 ← *((byte*) nxt#31) [57] (byte) next_char::c#0 ← *((byte*) nxt#31)
[58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1
to:next_char::@2 to:next_char::@2
next_char::@2: scope:[next_char] from next_char next_char::@2: scope:[next_char] from next_char
[59] (byte) next_char::c#1 ← *((const byte*) TEXT#0) [59] (byte) next_char::c#1 ← *((const byte*) TEXT#0)
@ -1770,9 +1773,9 @@ next_char: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
sta c sta c
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuz1_neq_vbuc1_then_la1 // [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuz1_neq_0_then_la1
lda #'@' lda c
cmp c cmp #0
bne b1_from_next_char bne b1_from_next_char
jmp b2 jmp b2
// next_char::@2 // next_char::@2
@ -2283,8 +2286,8 @@ next_char: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuxx_neq_vbuc1_then_la1 // [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuxx_neq_0_then_la1
cpx #'@' cpx #0
bne b1_from_next_char bne b1_from_next_char
jmp b2 jmp b2
// next_char::@2 // next_char::@2
@ -2892,9 +2895,9 @@ next_char: {
ldy #0 ldy #0
lda (nxt),y lda (nxt),y
tax tax
// if(c=='@') // if(c==0)
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuxx_neq_vbuc1_then_la1 // [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuxx_neq_0_then_la1
cpx #'@' cpx #0
bne b1 bne b1
// next_char::@2 // next_char::@2
// c = *nxt // c = *nxt

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Identified constant variable (byte*) gen_sintab::f_2pi Identified constant variable (byte*) gen_sintab::f_2pi
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx

View File

@ -343,7 +343,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -294,7 +294,7 @@ print_str: scope:[print_str] from main::@1 main::@11
print_str::@1: scope:[print_str] from print_str print_str::@2 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[145] return [145] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @2 Culled Empty Block (label) @2
@ -113,7 +118,7 @@ print_str: scope:[print_str] from main::@1 main::@11
print_str::@1: scope:[print_str] from print_str print_str::@2 print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 ) (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 print_str::@2: scope:[print_str] from print_str::@1
@ -1396,6 +1401,7 @@ SYMBOL TABLE SSA
(word) print_word::w#3 (word) print_word::w#3
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (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 (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28 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_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 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 Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0 Simplifying constant integer cast 0
@ -1560,6 +1567,7 @@ Simplifying constant integer cast 2
Simplifying constant integer cast $200 Simplifying constant integer cast $200
Successful SSA optimization PassNCastSimplification 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) $28 Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0
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 Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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_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_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 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[145] return [145] return
@ -3796,10 +3804,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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:21 [ print_mulf8u127::a#8 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] 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 [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 [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 [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 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 [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 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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 // [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 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -59,7 +59,7 @@ print: {
inc idx inc idx
iny iny
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b1 bne b1
rts rts
} }

View File

@ -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) [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2)
[22] (byte) idx#12 ← ++ (byte) idx#11 [22] (byte) idx#12 ← ++ (byte) idx#11
[23] (byte) print::i#1 ← ++ (byte) print::i#2 [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[25] return [25] return

View File

@ -1,5 +1,6 @@
Resolved forward reference hello to (void()) hello() Resolved forward reference hello to (void()) hello()
Resolved forward reference world to (void()) world() 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) @1
Culled Empty Block (label) do10::@2 Culled Empty Block (label) do10::@2
Culled Empty Block (label) @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*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#2 + (byte) print::i#2)
(byte) idx#5 ← ++ (byte) idx#11 (byte) idx#5 ← ++ (byte) idx#11
(byte) print::i#1 ← ++ (byte) print::i#2 (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 if((bool~) print::$0) goto print::@1
to:print::@return to:print::@return
print::@return: scope:[print] from print::@1 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) idx#4 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) print::i#0 ← (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 Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) idx#4 ← (unumber)(number) 0 Inlining cast (byte) idx#4 ← (unumber)(number) 0
@ -176,9 +178,11 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 0
Successful SSA optimization PassNCastSimplification 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) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (void()*) do10::fn#0 = (void()*~) main::$0 Alias (void()*) do10::fn#0 = (void()*~) main::$0
Alias (void()*) do10::fn#1 = (void()*~) main::$2 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 Identical Phi Values (byte) idx#15 (byte) idx#16
Successful SSA optimization Pass2IdenticalPhiElimination Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) do10::$1 [13] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (void()*) do10::fn#0 ← & (void()) hello() Constant right-side identified [0] (void()*) do10::fn#0 ← & (void()) hello()
Constant right-side identified [3] (void()*) do10::fn#1 ← & (void()) world() 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) [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2)
[22] (byte) idx#12 ← ++ (byte) idx#11 [22] (byte) idx#12 ← ++ (byte) idx#11
[23] (byte) print::i#1 ← ++ (byte) print::i#2 [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[25] return [25] return
@ -522,10 +526,10 @@ print: {
inc idx inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1
inc i 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 ldy i
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b1_from_b1 bne b1_from_b1
jmp breturn jmp breturn
// print::@return // 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 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 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 ] 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 [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 [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 [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 [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_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_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 , Potential registers zp ZP_WORD:5 [ print::msg#3 ] : zp ZP_WORD:5 ,
@ -736,9 +740,9 @@ print: {
inc idx inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy
iny 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 lda (msg),y
cmp #'@' cmp #0
bne b1_from_b1 bne b1_from_b1
jmp breturn jmp breturn
// print::@return // print::@return
@ -980,10 +984,10 @@ print: {
inc idx inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy // [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy
iny iny
// while(msg[i]!='@') // while(msg[i])
// [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 lda (msg),y
cmp #'@' cmp #0
bne b1 bne b1
// print::@return // print::@return
// } // }

View File

@ -33,8 +33,10 @@ hello: {
sta SCREEN,y sta SCREEN,y
inc idx inc idx
inx inx
lda msg,x txa
cmp #'@' tay
lda #0
cmp msg,y
bne b1 bne b1
rts rts
} }

View File

@ -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) [16] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((const byte[]) msg#0 + (byte) hello::i#2)
[17] (byte) idx#1 ← ++ (byte) idx#3 [17] (byte) idx#1 ← ++ (byte) idx#3
[18] (byte) hello::i#1 ← ++ (byte) hello::i#2 [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 to:hello::@return
hello::@return: scope:[hello] from hello::@1 hello::@return: scope:[hello] from hello::@1
[20] return [20] return

View File

@ -1,4 +1,5 @@
Resolved forward reference hello to (void()) hello() 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) @1
Culled Empty Block (label) do10::@2 Culled Empty Block (label) do10::@2
Culled Empty Block (label) hello::@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*) SCREEN#0 + (byte) idx#3) ← *((byte[]) msg#0 + (byte) hello::i#2)
(byte) idx#1 ← ++ (byte) idx#3 (byte) idx#1 ← ++ (byte) idx#3
(byte) hello::i#1 ← ++ (byte) hello::i#2 (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 if((bool~) hello::$0) goto hello::@1
to:hello::@return to:hello::@return
hello::@return: scope:[hello] from hello::@1 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) idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) hello::i#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 Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) idx#0 ← (unumber)(number) 0
@ -119,9 +121,11 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 0
Successful SSA optimization PassNCastSimplification 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) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (void()*) main::f#0 = (void()*~) main::$0 Alias (void()*) main::f#0 = (void()*~) main::$0
Alias (byte) idx#1 = (byte) idx#4 (byte) idx#2 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 Identical Phi Values (byte) idx#5 (byte) idx#0
Successful SSA optimization Pass2IdenticalPhiElimination Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) do10::$1 [11] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello() Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello()
Successful SSA optimization Pass2ConstantRValueConsolidation 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) [16] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((const byte[]) msg#0 + (byte) hello::i#2)
[17] (byte) idx#1 ← ++ (byte) idx#3 [17] (byte) idx#1 ← ++ (byte) idx#3
[18] (byte) hello::i#1 ← ++ (byte) hello::i#2 [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 to:hello::@return
hello::@return: scope:[hello] from hello::@1 hello::@return: scope:[hello] from hello::@1
[20] return [20] return
@ -378,8 +382,8 @@ hello: {
inc idx inc idx
// [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1 // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1
inc i inc i
// [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #'@' lda #0
ldy i ldy i
cmp msg,y cmp msg,y
bne b1_from_b1 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 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 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 ] 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 [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 [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: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: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 , 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 [do10] 27.5: zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ]
Uplift Scope [main] Uplift Scope [main]
Uplifting [hello] best 4349 combination reg byte x [ hello::i#2 hello::i#1 ] Uplifting [hello] best 4749 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 [] best 4749 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 [do10] best 4749 combination zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ]
Uplifting [main] best 4349 combination Uplifting [main] best 4749 combination
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] 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 ] 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 ] Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ idx#0 idx#3 idx#7 idx#1 ]
ASSEMBLER BEFORE OPTIMIZATION ASSEMBLER BEFORE OPTIMIZATION
@ -521,9 +525,11 @@ hello: {
inc idx inc idx
// [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx
inx inx
// [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
lda msg,x txa
cmp #'@' tay
lda #0
cmp msg,y
bne b1_from_b1 bne b1_from_b1
jmp breturn jmp breturn
// hello::@return // hello::@return
@ -606,7 +612,7 @@ zp ZP_BYTE:3 [ idx#0 idx#3 idx#7 idx#1 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 3326 Score: 3726
// File Comments // File Comments
// Tests calling into a function pointer with local variables // Tests calling into a function pointer with local variables
@ -691,10 +697,12 @@ hello: {
inc idx inc idx
// [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx // [18] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuxx=_inc_vbuxx
inx inx
// while(msg[i]!='@') // while(msg[i])
// [19] if(*((const byte[]) msg#0 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 // [19] if((byte) 0!=*((const byte[]) msg#0 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
lda msg,x txa
cmp #'@' tay
lda #0
cmp msg,y
bne b1 bne b1
// hello::@return // hello::@return
// } // }

View File

@ -46,7 +46,7 @@ hello: {
inc idx inc idx
iny iny
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b1 bne b1
rts rts
} }

View File

@ -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) [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2)
[20] (byte) idx#1 ← ++ (byte) idx#3 [20] (byte) idx#1 ← ++ (byte) idx#3
[21] (byte) hello::i#1 ← ++ (byte) hello::i#2 [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 to:hello::@return
hello::@return: scope:[hello] from hello::@1 hello::@return: scope:[hello] from hello::@1
[23] return [23] return

View File

@ -3,6 +3,7 @@ Resolved forward reference msg1 to (byte[]) msg1
Resolved forward reference msg to (byte*) msg Resolved forward reference msg to (byte*) msg
Resolved forward reference msg2 to (byte[]) msg2 Resolved forward reference msg2 to (byte[]) msg2
Resolved forward reference msg to (byte*) msg 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) @1
Culled Empty Block (label) do10::@2 Culled Empty Block (label) do10::@2
Culled Empty Block (label) hello::@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*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#6 + (byte) hello::i#2)
(byte) idx#1 ← ++ (byte) idx#3 (byte) idx#1 ← ++ (byte) idx#3
(byte) hello::i#1 ← ++ (byte) hello::i#2 (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 if((bool~) hello::$0) goto hello::@1
to:hello::@return to:hello::@return
hello::@return: scope:[hello] from hello::@1 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) idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) hello::i#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 Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) idx#0 ← (unumber)(number) 0
@ -158,9 +160,11 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 0
Successful SSA optimization PassNCastSimplification 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) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (void()*) main::f#0 = (void()*~) main::$0 (void()*) main::f#1 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 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 Identical Phi Values (byte*) msg#4 (byte*) msg#1
Successful SSA optimization Pass2IdenticalPhiElimination Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) do10::$1 [19] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello() Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello()
Successful SSA optimization Pass2ConstantRValueConsolidation 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) [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2)
[20] (byte) idx#1 ← ++ (byte) idx#3 [20] (byte) idx#1 ← ++ (byte) idx#3
[21] (byte) hello::i#1 ← ++ (byte) hello::i#2 [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 to:hello::@return
hello::@return: scope:[hello] from hello::@1 hello::@return: scope:[hello] from hello::@1
[23] return [23] return
@ -462,10 +466,10 @@ hello: {
inc idx inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1 // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1
inc i 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 ldy i
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b1_from_b1 bne b1_from_b1
jmp breturn jmp breturn
// hello::@return // 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 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 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 ] 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 [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 [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 [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 [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 [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: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_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 , Potential registers zp ZP_WORD:4 [ msg#0 msg#1 msg#10 ] : zp ZP_WORD:4 ,
@ -636,9 +640,9 @@ hello: {
inc idx inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy
iny 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 lda (msg),y
cmp #'@' cmp #0
bne b1_from_b1 bne b1_from_b1
jmp breturn jmp breturn
// hello::@return // hello::@return
@ -842,10 +846,10 @@ hello: {
inc idx inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy // [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy
iny iny
// while(msg[i]!='@') // while(msg[i])
// [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 lda (msg),y
cmp #'@' cmp #0
bne b1 bne b1
// hello::@return // hello::@return
// } // }

View File

@ -7,13 +7,13 @@ main: {
ldx #0 ldx #0
ldy #0 ldy #0
print21_b1: print21_b1:
lda #'@' lda #0
cmp hello,y cmp hello,y
bne print21_b2 bne print21_b2
ldx #0 tax
ldy #0 tay
print22_b1: print22_b1:
lda #'@' lda #0
cmp hello,y cmp hello,y
bne print22_b2 bne print22_b2
rts rts

View File

@ -16,7 +16,7 @@ main::print21: scope:[main] from main
main::print21_@1: scope:[main] from main::print21 main::print21_@2 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_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 ) [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 to:main::print22
main::print22: scope:[main] from main::print21_@1 main::print22: scope:[main] from main::print21_@1
[8] phi() [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 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_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 ) [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 to:main::@return
main::@return: scope:[main] from main::print22_@1 main::@return: scope:[main] from main::print22_@1
[11] return [11] return

View File

@ -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*) screen
Identified constant variable (byte*) main::hello Identified constant variable (byte*) main::hello
Inlined call call print2 (byte*) screen (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_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_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 ) (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 if((bool~) main::print21_$0#0) goto main::print21_@2
to:main::@1 to:main::@1
main::print21_@2: scope:[main] from main::print21_@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_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_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 ) (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 if((bool~) main::print22_$0#0) goto main::print22_@2
to:main::@return to:main::@return
main::print22_@2: scope:[main] from main::print22_@1 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_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 (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) 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) $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_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 (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 Adding number conversion cast (unumber) 2 in (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400 Inlining cast (byte*) screen#0 ← (byte*)(number) $400
@ -167,18 +170,22 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 0
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Simplifying constant integer cast $50 Simplifying constant integer cast $50
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification 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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $50 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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions 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 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_msg#1 (byte*) main::hello#0
Identical Phi Values (byte*) main::print22_at#1 (byte*) main::print22_at#0 Identical Phi Values (byte*) main::print22_at#1 (byte*) main::print22_at#0
Successful SSA optimization Pass2IdenticalPhiElimination 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::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*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3 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 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_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 ) [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 to:main::print22
main::print22: scope:[main] from main::print21_@1 main::print22: scope:[main] from main::print21_@1
[8] phi() [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 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_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 ) [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 to:main::@return
main::@return: scope:[main] from main::print22_@1 main::@return: scope:[main] from main::print22_@1
[11] return [11] return
@ -382,8 +389,8 @@ main: {
jmp print21_b1 jmp print21_b1
// main::print21_@1 // main::print21_@1
print21_b1: 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 // [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 #'@' lda #0
ldy print21_i ldy print21_i
cmp hello,y cmp hello,y
bne print21_b2 bne print21_b2
@ -403,8 +410,8 @@ main: {
jmp print22_b1 jmp print22_b1
// main::print22_@1 // main::print22_@1
print22_b1: 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 // [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 #'@' lda #0
ldy print22_i ldy print22_i
cmp hello,y cmp hello,y
bne print22_b2 bne print22_b2
@ -457,16 +464,16 @@ main: {
// File Data // File Data
REGISTER UPLIFT POTENTIAL REGISTERS 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: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 ] 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: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 ] 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 [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 [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 [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(*((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
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 [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 [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 , 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 jmp print21_b1
// main::print21_@1 // main::print21_@1
print21_b1: 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print21_b2 bne print21_b2
// [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22] // [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22]
@ -540,8 +547,8 @@ main: {
jmp print22_b1 jmp print22_b1
// main::print22_@1 // main::print22_@1
print22_b1: 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print22_b2 bne print22_b2
jmp breturn jmp breturn
@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly Updating BasicUpstart to call main directly
Removing instruction jsr main Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin Succesful ASM optimization Pass5SkipBegin
Replacing instruction ldx #0 with TAX
Replacing instruction ldy #0 with TAY
Removing instruction bbegin: Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination Succesful ASM optimization Pass5UnusedLabelElimination
@ -686,23 +695,23 @@ main: {
ldy #0 ldy #0
// main::print21_@1 // main::print21_@1
print21_b1: print21_b1:
// for(byte i=0; msg[i]!='@'; i++) // 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print21_b2 bne print21_b2
// [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22] // [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22]
// main::print22 // main::print22
// [9] phi from main::print22 to main::print22_@1 [phi:main::print22->main::print22_@1] // [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 // [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 // [9] phi (byte) main::print22_i#2 = (byte) 0 [phi:main::print22->main::print22_@1#1] -- vbuyy=vbuc1
ldy #0 tay
// main::print22_@1 // main::print22_@1
print22_b1: print22_b1:
// for(byte i=0; msg[i]!='@'; i++) // 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print22_b2 bne print22_b2
// main::@return // main::@return
@ -719,7 +728,7 @@ main: {
// [13] (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 // [13] (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx inx
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 // [14] (byte) main::print22_i#1 ← ++ (byte) main::print22_i#2 -- vbuyy=_inc_vbuyy
iny iny
// [9] phi from main::print22_@2 to main::print22_@1 [phi:main::print22_@2->main::print22_@1] // [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 // [16] (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx inx
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 // [17] (byte) main::print21_i#1 ← ++ (byte) main::print21_i#2 -- vbuyy=_inc_vbuyy
iny iny
// [6] phi from main::print21_@2 to main::print21_@1 [phi:main::print21_@2->main::print21_@1] // [6] phi from main::print21_@2 to main::print21_@1 [phi:main::print21_@2->main::print21_@1]

View File

@ -19,19 +19,26 @@ main: {
} }
// print2(byte* zeropage(2) at) // print2(byte* zeropage(2) at)
print2: { print2: {
.label j = 4
.label at = 2 .label at = 2
ldy #0 lda #0
ldx #0 sta j
tax
b1: b1:
lda main.hello,x txa
cmp #'@' tay
lda #0
cmp main.hello,y
bne b2 bne b2
rts rts
b2: b2:
lda main.hello,x lda main.hello,x
ldy j
sta (at),y sta (at),y
iny tya
iny clc
adc #2
sta j
inx inx
jmp b1 jmp b1
} }

View File

@ -24,7 +24,7 @@ print2: scope:[print2] from main main::@1
print2::@1: scope:[print2] from print2 print2::@2 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::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 ) [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 to:print2::@return
print2::@return: scope:[print2] from print2::@1 print2::@return: scope:[print2] from print2::@1
[12] return [12] return

View File

@ -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*) screen
Identified constant variable (byte*) main::hello Identified constant variable (byte*) main::hello
Culled Empty Block (label) @1 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::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::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 ) (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 if((bool~) print2::$0) goto print2::@2
to:print2::@return to:print2::@return
print2::@2: scope:[print2] from print2::@1 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) $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::j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) print2::i#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 Adding number conversion cast (unumber) 2 in (byte) print2::j#1 ← (byte) print2::j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400 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 $50
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $50 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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) print2::at#1 = (byte*~) main::$1 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::msg#2 (byte*) print2::msg#4
Identical Phi Values (byte*) print2::at#2 (byte*) print2::at#4 Identical Phi Values (byte*) print2::at#2 (byte*) print2::at#4
Successful SSA optimization Pass2IdenticalPhiElimination 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3 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 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::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 ) [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 to:print2::@return
print2::@return: scope:[print2] from print2::@1 print2::@return: scope:[print2] from print2::@1
[12] return [12] return
@ -328,8 +332,8 @@ print2: {
jmp b1 jmp b1
// print2::@1 // print2::@1
b1: b1:
// [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #'@' lda #0
ldy i ldy i
cmp main.hello,y cmp main.hello,y
bne b2 bne b2
@ -361,11 +365,11 @@ print2: {
// File Data // File Data
REGISTER UPLIFT POTENTIAL REGISTERS 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: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 ] 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 [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 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_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 , 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 [main]
Uplift Scope [] 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 [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 447 combination Uplifting [main] best 607 combination
Uplifting [] best 447 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 ASSEMBLER BEFORE OPTIMIZATION
// File Comments // File Comments
@ -440,19 +447,23 @@ main: {
// print2 // print2
// print2(byte* zeropage(2) at) // print2(byte* zeropage(2) at)
print2: { print2: {
.label j = 4
.label at = 2 .label at = 2
// [10] phi from print2 to print2::@1 [phi:print2->print2::@1] // [10] phi from print2 to print2::@1 [phi:print2->print2::@1]
b1_from_print2: b1_from_print2:
// [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuyy=vbuc1 // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1
ldy #0 lda #0
sta j
// [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1 // [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1
ldx #0 ldx #0
jmp b1 jmp b1
// print2::@1 // print2::@1
b1: b1:
// [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
lda main.hello,x txa
cmp #'@' tay
lda #0
cmp main.hello,y
bne b2 bne b2
jmp breturn jmp breturn
// print2::@return // print2::@return
@ -461,12 +472,15 @@ print2: {
rts rts
// print2::@2 // print2::@2
b2: 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 lda main.hello,x
ldy j
sta (at),y sta (at),y
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2 // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2
iny lda j
iny clc
adc #2
sta j
// [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx // [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx
inx inx
// [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1] // [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 b1
Removing instruction jmp breturn Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx #0 with TAX
Replacing instruction lda j with TYA
Removing instruction b1_from_bbegin: Removing instruction b1_from_bbegin:
Removing instruction b1: Removing instruction b1:
Removing instruction main_from_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#1 reg byte x 22.0
(byte) print2::i#2 reg byte x 11.0 (byte) print2::i#2 reg byte x 11.0
(byte) print2::j (byte) print2::j
(byte) print2::j#1 reg byte y 11.0 (byte) print2::j#1 j zp ZP_BYTE:4 11.0
(byte) print2::j#2 reg byte y 11.0 (byte) print2::j#2 j zp ZP_BYTE:4 11.0
(byte*) print2::msg (byte*) print2::msg
(byte*) screen (byte*) screen
(const byte*) screen#0 screen = (byte*) 1024 (const byte*) screen#0 screen = (byte*) 1024
zp ZP_WORD:2 [ print2::at#4 ] zp ZP_WORD:2 [ print2::at#4 ]
reg byte x [ print2::i#2 print2::i#1 ] 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 FINAL ASSEMBLER
Score: 369 Score: 519
// File Comments // File Comments
// Upstart // Upstart
@ -585,18 +601,22 @@ main: {
// print2 // print2
// print2(byte* zeropage(2) at) // print2(byte* zeropage(2) at)
print2: { print2: {
.label j = 4
.label at = 2 .label at = 2
// [10] phi from print2 to print2::@1 [phi:print2->print2::@1] // [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 // [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1
ldy #0 lda #0
sta j
// [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1 // [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1
ldx #0 tax
// print2::@1 // print2::@1
b1: b1:
// for(byte i=0; msg[i]!='@'; i++) // 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 // [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
lda main.hello,x txa
cmp #'@' tay
lda #0
cmp main.hello,y
bne b2 bne b2
// print2::@return // print2::@return
// } // }
@ -605,14 +625,17 @@ print2: {
// print2::@2 // print2::@2
b2: b2:
// at[j] = msg[i] // 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 lda main.hello,x
ldy j
sta (at),y sta (at),y
// j += 2 // j += 2
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2 // [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2
iny tya
iny clc
// for(byte i=0; msg[i]!='@'; i++) adc #2
sta j
// for(byte i=0; msg[i]; i++)
// [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx // [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx
inx inx
// [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1] // [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1]

View File

@ -16,12 +16,12 @@
(byte) print2::i#1 reg byte x 22.0 (byte) print2::i#1 reg byte x 22.0
(byte) print2::i#2 reg byte x 11.0 (byte) print2::i#2 reg byte x 11.0
(byte) print2::j (byte) print2::j
(byte) print2::j#1 reg byte y 11.0 (byte) print2::j#1 j zp ZP_BYTE:4 11.0
(byte) print2::j#2 reg byte y 11.0 (byte) print2::j#2 j zp ZP_BYTE:4 11.0
(byte*) print2::msg (byte*) print2::msg
(byte*) screen (byte*) screen
(const byte*) screen#0 screen = (byte*) 1024 (const byte*) screen#0 screen = (byte*) 1024
zp ZP_WORD:2 [ print2::at#4 ] zp ZP_WORD:2 [ print2::at#4 ]
reg byte x [ print2::i#2 print2::i#1 ] 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 ]

View File

@ -63,7 +63,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -49,7 +49,7 @@ print_str: scope:[print_str] from main::@1
print_str::@1: scope:[print_str] from print_str print_str::@2 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[23] return [23] return

View File

@ -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 *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::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*) 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*) HEAP_TOP
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @2 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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 print_str::@2: scope:[print_str] from print_str::@1
@ -382,6 +387,7 @@ SYMBOL TABLE SSA
(byte[]) txt#0 (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~) 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) $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) $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) 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 Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification 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) $28 Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1 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 Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 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~) 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~) 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 Simple Condition (bool~) main::$3 [79] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[23] return [23] return
@ -860,10 +868,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 [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 [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 [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 ] 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 [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 [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 [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 [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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // print_str::@return
@ -1488,11 +1496,11 @@ print_str: {
sta str+1 sta str+1
// print_str::@1 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -8,13 +8,13 @@ main: {
ldx #0 ldx #0
ldy #0 ldy #0
print1_b1: print1_b1:
lda #'@' lda #0
cmp hello,y cmp hello,y
bne print1_b2 bne print1_b2
ldx #0 tax
ldy #0 tay
print2_b1: print2_b1:
lda #'@' lda #0
cmp hello,y cmp hello,y
bne print2_b2 bne print2_b2
rts rts

View File

@ -16,7 +16,7 @@ main::print1: scope:[main] from main
main::print1_@1: scope:[main] from main::print1 main::print1_@2 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_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 ) [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 to:main::print2
main::print2: scope:[main] from main::print1_@1 main::print2: scope:[main] from main::print1_@1
[8] phi() [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 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_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 ) [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 to:main::@return
main::@return: scope:[main] from main::print2_@1 main::@return: scope:[main] from main::print2_@1
[11] return [11] return

View File

@ -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*) screen
Identified constant variable (byte*) main::hello Identified constant variable (byte*) main::hello
Inlined call call print (byte*) screen (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_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_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 ) (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 if((bool~) main::print1_$0#0) goto main::print1_@2
to:main::@1 to:main::@1
main::print1_@2: scope:[main] from main::print1_@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_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_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 ) (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 if((bool~) main::print2_$0#0) goto main::print2_@2
to:main::@return to:main::@return
main::print2_@2: scope:[main] from main::print2_@1 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_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 (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 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) 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_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 (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 Adding number conversion cast (unumber) 2 in (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400 Inlining cast (byte*) screen#0 ← (byte*)(number) $400
@ -167,16 +170,20 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 0
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification 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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2 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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions 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 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_msg#1 (byte*) main::hello#0
Identical Phi Values (byte*) main::print2_at#1 (byte*) main::print2_at#0 Identical Phi Values (byte*) main::print2_at#1 (byte*) main::print2_at#0
Successful SSA optimization Pass2IdenticalPhiElimination 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::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*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024 Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3 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 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_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 ) [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 to:main::print2
main::print2: scope:[main] from main::print1_@1 main::print2: scope:[main] from main::print1_@1
[8] phi() [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 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_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 ) [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 to:main::@return
main::@return: scope:[main] from main::print2_@1 main::@return: scope:[main] from main::print2_@1
[11] return [11] return
@ -381,8 +388,8 @@ main: {
jmp print1_b1 jmp print1_b1
// main::print1_@1 // main::print1_@1
print1_b1: 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 // [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 #'@' lda #0
ldy print1_i ldy print1_i
cmp hello,y cmp hello,y
bne print1_b2 bne print1_b2
@ -402,8 +409,8 @@ main: {
jmp print2_b1 jmp print2_b1
// main::print2_@1 // main::print2_@1
print2_b1: 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 // [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 #'@' lda #0
ldy print2_i ldy print2_i
cmp hello,y cmp hello,y
bne print2_b2 bne print2_b2
@ -456,16 +463,16 @@ main: {
// File Data // File Data
REGISTER UPLIFT POTENTIAL REGISTERS 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: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 ] 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: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 ] 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 [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 [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 [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(*((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
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 [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 [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 , 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 jmp print1_b1
// main::print1_@1 // main::print1_@1
print1_b1: 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print1_b2 bne print1_b2
// [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2] // [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2]
@ -540,8 +547,8 @@ main: {
jmp print2_b1 jmp print2_b1
// main::print2_@1 // main::print2_@1
print2_b1: 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print2_b2 bne print2_b2
jmp breturn jmp breturn
@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly Updating BasicUpstart to call main directly
Removing instruction jsr main Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin Succesful ASM optimization Pass5SkipBegin
Replacing instruction ldx #0 with TAX
Replacing instruction ldy #0 with TAY
Removing instruction bbegin: Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination Succesful ASM optimization Pass5UnusedLabelElimination
@ -687,23 +696,23 @@ main: {
ldy #0 ldy #0
// main::print1_@1 // main::print1_@1
print1_b1: print1_b1:
// for(byte i=0; msg[i]!='@'; i++) // 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print1_b2 bne print1_b2
// [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2] // [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2]
// main::print2 // main::print2
// [9] phi from main::print2 to main::print2_@1 [phi:main::print2->main::print2_@1] // [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 // [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 // [9] phi (byte) main::print2_i#2 = (byte) 0 [phi:main::print2->main::print2_@1#1] -- vbuyy=vbuc1
ldy #0 tay
// main::print2_@1 // main::print2_@1
print2_b1: print2_b1:
// for(byte i=0; msg[i]!='@'; i++) // 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 // [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 #'@' lda #0
cmp hello,y cmp hello,y
bne print2_b2 bne print2_b2
// main::@return // main::@return
@ -720,7 +729,7 @@ main: {
// [13] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2 // [13] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx inx
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 // [14] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 -- vbuyy=_inc_vbuyy
iny iny
// [9] phi from main::print2_@2 to main::print2_@1 [phi:main::print2_@2->main::print2_@1] // [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 // [16] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx inx
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 // [17] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 -- vbuyy=_inc_vbuyy
iny iny
// [6] phi from main::print1_@2 to main::print1_@1 [phi:main::print1_@2->main::print1_@1] // [6] phi from main::print1_@2 to main::print1_@1 [phi:main::print1_@2->main::print1_@1]

View File

@ -43,7 +43,7 @@ print: {
b1: b1:
ldy #0 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -40,7 +40,7 @@ print: scope:[print] from print_msg::@2
print::@1: scope:[print] from print print::@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*) 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 ) [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[19] return [19] return

View File

@ -1,3 +1,4 @@
Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg)
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) print_msg::@4 Culled Empty Block (label) print_msg::@4
Culled Empty Block (label) print::@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 print::@1: scope:[print] from print print::@2
(byte*) screen#19 ← phi( print/(byte*) screen#23 print::@2/(byte*) screen#6 ) (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 ) (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 if((bool~) print::$0) goto print::@2
to:print::@return to:print::@return
print::@2: scope:[print] from print::@1 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) 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) 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) 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 Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte) print_msg::idx#0 ← (unumber)(number) 1 Inlining cast (byte) print_msg::idx#0 ← (unumber)(number) 1
Inlining cast (byte) print_msg::idx#1 ← (unumber)(number) 2 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 2
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) screen#0 = (byte*) screen#9 Alias (byte*) screen#0 = (byte*) screen#9
Alias (byte*) screen#1 = (byte*) screen#10 (byte*) screen#11 (byte*) screen#2 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 Identical Phi Values (byte*) screen#16 (byte*) screen#1
Successful SSA optimization Pass2IdenticalPhiElimination 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_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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) print_msg::idx#0 = 1 Constant (const byte) print_msg::idx#0 = 1
Constant (const byte) print_msg::idx#1 = 2 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 print::@1: scope:[print] from print print::@2
[17] (byte*) screen#14 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#6 ) [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 ) [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[19] return [19] return
@ -467,10 +471,10 @@ print: {
jmp b1 jmp b1
// print::@1 // print::@1
b1: 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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print::@return // print::@return
@ -500,7 +504,7 @@ print: {
REGISTER UPLIFT POTENTIAL REGISTERS 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 [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 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_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 , Potential registers zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ] : zp ZP_WORD:3 ,
@ -634,10 +638,10 @@ print: {
jmp b1 jmp b1
// print::@1 // print::@1
b1: 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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print::@return // 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 // [17] phi (byte*) print::msg#2 = (byte*) print::msg#0 [phi:print/print::@2->print::@1#1] -- register_copy
// print::@1 // print::@1
b1: b1:
// while(*msg!='@') // while(*msg)
// [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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
// print::@return // print::@return
// } // }

View File

@ -35,7 +35,7 @@ print: {
b1: b1:
ldy #0 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -29,7 +29,7 @@ print: scope:[print] from main main::@1 main::@2
print::@1: scope:[print] from print print::@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*) 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 ) [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[14] return [14] return

View File

@ -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::@4
Culled Empty Block (label) print::@3 Culled Empty Block (label) print::@3
Culled Empty Block (label) print::@5 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 print::@1: scope:[print] from print print::@2
(byte*) screen#16 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) (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 ) (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 if((bool~) print::$0) goto print::@2
to:print::@return to:print::@return
print::@2: scope:[print] from print::@1 print::@2: scope:[print] from print::@1
@ -121,10 +122,15 @@ SYMBOL TABLE SSA
(byte*) screen#8 (byte*) screen#8
(byte*) screen#9 (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 Inlining cast (byte*) screen#4 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) screen#0 = (byte*) screen#8 Alias (byte*) screen#0 = (byte*) screen#8
Alias (byte*) screen#1 = (byte*) screen#9 Alias (byte*) screen#1 = (byte*) screen#9
Alias (byte*) screen#10 = (byte*) screen#2 (byte*) screen#11 (byte*) screen#3 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#10 (byte*) screen#12
Identical Phi Values (byte*) screen#14 (byte*) screen#10 Identical Phi Values (byte*) screen#14 (byte*) screen#10
Successful SSA optimization Pass2IdenticalPhiElimination 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte[]) msg1#0 = $0 Constant (const byte[]) msg1#0 = $0
Constant (const byte[]) main::msg2#0 = main::$3 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 print::@1: scope:[print] from print print::@2
[12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [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 ) [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 to:print::@return
print::@return: scope:[print] from print::@1 print::@return: scope:[print] from print::@1
[14] return [14] return
@ -351,10 +357,10 @@ print: {
jmp b1 jmp b1
// print::@1 // print::@1
b1: 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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print::@return // print::@return
@ -385,7 +391,7 @@ print: {
.byte 0 .byte 0
REGISTER UPLIFT POTENTIAL REGISTERS 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 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: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 , 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 jmp b1
// print::@1 // print::@1
b1: 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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print::@return // 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 // [12] phi (byte*) print::msg#4 = (byte*) print::msg#6 [phi:print/print::@2->print::@1#1] -- register_copy
// print::@1 // print::@1
b1: b1:
// while(*msg!='@') // while(*msg)
// [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 ldy #0
lda (msg),y lda (msg),y
cmp #'@' cmp #0
bne b2 bne b2
// print::@return // print::@return
// } // }

View File

@ -249,7 +249,7 @@ print_str: {
b1: b1:
ldy #0 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
rts rts
b2: b2:

View File

@ -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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[90] return [90] return

View File

@ -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::lintab2 + (byte) main::i)
Fixing pointer array-indexing *((word[$14]) main::lintab3 + (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*) 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*) HEAP_TOP
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) divr16u::@7 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 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_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 ) (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 if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1 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) 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) 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~) 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) $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) 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 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 1
Simplifying constant integer cast 0 Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28 Simplifying constant integer cast $28
Simplifying constant integer cast 4 Simplifying constant integer cast 4
Simplifying constant integer cast $f 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) 1 Finalized unsigned number type (byte) 1
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 (byte) $28
Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f 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~) 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::$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~) 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~) 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~) 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 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 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_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 ) [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 to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[90] return [90] return
@ -3077,10 +3085,10 @@ print_str: {
jmp b1 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 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: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 ] 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 [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 [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 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 [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 [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 [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 [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 [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 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 jmp b1
// print_str::@1 // print_str::@1
b1: 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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
jmp breturn jmp breturn
// print_str::@return // 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 // [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 // print_str::@1
b1: b1:
// while(*str!='@') // while(*str)
// [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 ldy #0
lda (str),y lda (str),y
cmp #'@' cmp #0
bne b2 bne b2
// print_str::@return // print_str::@return
// } // }

View File

@ -4,16 +4,16 @@
.pc = $80d "Program" .pc = $80d "Program"
main: { main: {
.label screen = $400 .label screen = $400
ldx #0 ldy #0
b1: b1:
lda msg,x lda #0
cmp #'@' cmp msg,y
bne b2 bne b2
rts rts
b2: b2:
lda msg,x lda msg,y
sta screen,x sta screen,y
inx iny
jmp b1 jmp b1
msg: .text "message 2 " msg: .text "message 2 "
.byte 0 .byte 0

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) [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 to:main::@return
main::@return: scope:[main] from main::@1 main::@return: scope:[main] from main::@1
[7] return [7] return

View File

@ -1,3 +1,4 @@
Warning! Adding boolean cast to non-boolean condition *((byte[]) main::msg + (byte) main::i)
Identified constant variable (byte*) main::screen Identified constant variable (byte*) main::screen
Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@3
@ -14,7 +15,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (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 if((bool~) main::$0) goto main::@2
to:main::@return to:main::@return
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
@ -54,18 +55,21 @@ SYMBOL TABLE SSA
(byte*) main::screen#0 (byte*) main::screen#0
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 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 Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400
Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::i#0 ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 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 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 Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::i#2 = (byte) main::i#3
Successful SSA optimization Pass2AliasElimination 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 Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::screen#0 = (byte*) 1024 Constant (const byte*) main::screen#0 = (byte*) 1024
Constant (const byte[]) main::msg#0 = main::$1 Constant (const byte[]) main::msg#0 = main::$1
@ -107,7 +111,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) [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 to:main::@return
main::@return: scope:[main] from main::@1 main::@return: scope:[main] from main::@1
[7] return [7] return
@ -169,8 +173,8 @@ main: {
jmp b1 jmp b1
// main::@1 // main::@1
b1: b1:
// [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #'@' lda #0
ldy i ldy i
cmp msg,y cmp msg,y
bne b2 bne b2
@ -197,10 +201,10 @@ main: {
// File Data // File Data
REGISTER UPLIFT POTENTIAL REGISTERS 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 ] 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 [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 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 , 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 [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Uplift Scope [] 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 Uplifting [] best 333 combination
ASSEMBLER BEFORE OPTIMIZATION ASSEMBLER BEFORE OPTIMIZATION
@ -240,14 +244,14 @@ main: {
.label screen = $400 .label screen = $400
// [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main: b1_from_main:
// [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldx #0 ldy #0
jmp b1 jmp b1
// main::@1 // main::@1
b1: b1:
// [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda msg,x lda #0
cmp #'@' cmp msg,y
bne b2 bne b2
jmp breturn jmp breturn
// main::@return // main::@return
@ -256,11 +260,11 @@ main: {
rts rts
// main::@2 // main::@2
b2: 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 // [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,x lda msg,y
sta screen,x sta screen,y
// [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
inx iny
// [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
b1_from_b2: b1_from_b2:
// [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy // [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::@2
(label) main::@return (label) main::@return
(byte) main::i (byte) main::i
(byte) main::i#1 reg byte x 22.0 (byte) main::i#1 reg byte y 22.0
(byte) main::i#2 reg byte x 18.333333333333332 (byte) main::i#2 reg byte y 18.333333333333332
(byte[]) main::msg (byte[]) main::msg
(const byte[]) main::msg#0 msg = (string) "message 2 " (const byte[]) main::msg#0 msg = (string) "message 2 "
(byte*) main::screen (byte*) main::screen
(const byte*) main::screen#0 screen = (byte*) 1024 (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 FINAL ASSEMBLER
@ -332,14 +336,14 @@ Score: 261
main: { main: {
.label screen = $400 .label screen = $400
// [5] phi from main to main::@1 [phi:main->main::@1] // [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 // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldx #0 ldy #0
// main::@1 // main::@1
b1: b1:
// while(msg[i]!='@') // 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 // [6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda msg,x lda #0
cmp #'@' cmp msg,y
bne b2 bne b2
// main::@return // main::@return
// } // }
@ -348,12 +352,12 @@ main: {
// main::@2 // main::@2
b2: b2:
// screen[i++] = msg[i] // 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 // [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,x lda msg,y
sta screen,x sta screen,y
// screen[i++] = msg[i]; // screen[i++] = msg[i];
// [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
inx iny
// [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [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 // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
jmp b1 jmp b1

View File

@ -6,11 +6,11 @@
(label) main::@2 (label) main::@2
(label) main::@return (label) main::@return
(byte) main::i (byte) main::i
(byte) main::i#1 reg byte x 22.0 (byte) main::i#1 reg byte y 22.0
(byte) main::i#2 reg byte x 18.333333333333332 (byte) main::i#2 reg byte y 18.333333333333332
(byte[]) main::msg (byte[]) main::msg
(const byte[]) main::msg#0 msg = (string) "message 2 " (const byte[]) main::msg#0 msg = (string) "message 2 "
(byte*) main::screen (byte*) main::screen
(const byte*) main::screen#0 screen = (byte*) 1024 (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 ]

View File

@ -1,5 +1,5 @@
// Illustrates both break & continue statements in a loop // 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" .pc = $801 "Basic"
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
@ -12,7 +12,7 @@ main: {
ldx #0 ldx #0
b1: b1:
lda str,x lda str,x
cmp #'@' cmp #0
bne b2 bne b2
breturn: breturn:
rts rts

View File

@ -13,7 +13,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@4 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::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 ) [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 to:main::@return
main::@return: scope:[main] from main::@1 main::@4 main::@return: scope:[main] from main::@1 main::@4
[7] return [7] return

Some files were not shown because too many files have changed in this diff Show More