1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-07-11 15:29:16 +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.
// The sequence of lines is terminated by another zero.
void print_str_lines(byte* str) {
while(*str!='@') {
while(*str) {
do {
byte ch = *(str++);
if(ch!='@') {
if(ch) {
*(print_char_cursor++) = ch;
}
} while (ch!='@');
} while (ch);
print_ln();
}
}
@ -27,14 +27,14 @@ void print_str_ln(byte* str) {
// Print a zero-terminated string
void print_str(byte* str) {
while(*str!='@') {
while(*str) {
*(print_char_cursor++) = *(str++);
}
}
// Print a string at a specific screen position
void print_str_at(byte* str, byte* at) {
while(*str!='@') {
while(*str) {
*(at++) = *(str++);
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -25,7 +25,7 @@ void hello() {
byte i=0;
do {
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) {
byte j=0;
for(byte i=0; msg[i]!='@'; i++) {
for(byte i=0; msg[i]; i++) {
at[j] = msg[i];
j += 2;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,10 +1,10 @@
// Illustrates both break & continue statements in a loop
// Prints a message ending at '@' skipping all spaces
// Prints a message ending at NUL skipping all spaces
void main() {
byte* screen = $400;
byte[] str = "hello brave new world";
for( byte i: 0..255) {
if(str[i]=='@') break;
if(str[i]==0) break;
if(str[i]==' ') continue;
*screen++ = str[i];
}

View File

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

View File

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

View File

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

View File

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

View File

@ -11,7 +11,7 @@ void main() {
}
void print(byte* string) {
while(*string!='@') {
while(*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 (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN

View File

@ -177,7 +177,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[71] (byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 )
[71] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 )
[72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2
[72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[73] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) testChar::u
Identified constant variable (byte) testChar::n
@ -125,7 +130,7 @@ print_str: scope:[print_str] from testChar testInt testLong testShort
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#5) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#5)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -1239,6 +1244,7 @@ SYMBOL TABLE SSA
(word) testShort::u#0
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#5)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#20 + (number) $28
Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (number) 0
Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0
@ -1282,6 +1288,7 @@ Inlining cast (signed dword) testLong::s#0 ← (snumber)(number) -$222e0
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast 0
@ -1303,6 +1310,7 @@ Simplifying constant integer cast -$222e0
Simplifying constant integer cast -$222e0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
@ -1515,7 +1523,7 @@ Identical Phi Values (byte*) print_char_cursor#148 (byte*) print_char_cursor#26
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#26) goto print_ln::@1
Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1
Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1
@ -2015,7 +2023,7 @@ print_str: scope:[print_str] from testChar testInt testLong testShort
print_str::@1: scope:[print_str] from print_str print_str::@2
[71] (byte*) print_char_cursor#136 ← phi( print_str/(byte*) print_char_cursor#156 print_str::@2/(byte*) print_char_cursor#1 )
[71] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 )
[72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2
[72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[73] return
@ -2757,10 +2765,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -3287,7 +3295,7 @@ Statement [59] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_
Statement [63] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ]
Statement [66] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#26 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#26 print_byte::$2 ] ) always clobbers reg byte a
Statement [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [74] *((byte*) print_char_cursor#136) ← *((byte*) print_str::str#5) [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [77] (byte*~) print_char_cursor#161 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#161 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#161 ] ) always clobbers reg byte a
Statement [93] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#26 print_sword::w#10 ] ( main:2::testInt:11::print_sword:84 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testInt:11::print_sword:88 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:114 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] ) always clobbers reg byte a
@ -3309,7 +3317,7 @@ Statement [57] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word:
Statement [59] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#26 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_word:80 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_sword:84::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testInt:11::print_sword:88::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_sword:110::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_sword:114::print_word:98 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] main:2::testShort:9::print_word:106 [ print_line_cursor#1 print_char_cursor#26 print_byte::b#2 ] ) always clobbers reg byte a
Statement [63] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#149 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a
Statement [66] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#26 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:58 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:58 [ print_line_cursor#1 print_word::w#5 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:52::print_byte:60 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:41::print_word:54::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_word:80::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:84::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testInt:11::print_sword:88::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_sword:114::print_word:98::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testShort:9::print_word:106::print_byte:60 [ print_line_cursor#1 print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:121 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_byte:125 [ print_char_cursor#26 print_byte::$2 ] main:2::testChar:7::print_sbyte:129::print_byte:137 [ print_char_cursor#26 print_byte::$2 ] ) always clobbers reg byte a
Statement [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [74] *((byte*) print_char_cursor#136) ← *((byte*) print_str::str#5) [ print_char_cursor#136 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testInt:11::print_str:78 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testShort:9::print_str:104 [ print_line_cursor#1 print_char_cursor#136 print_str::str#5 ] main:2::testChar:7::print_str:119 [ print_char_cursor#136 print_str::str#5 ] ) always clobbers reg byte a reg byte y
Statement [77] (byte*~) print_char_cursor#161 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#161 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#161 ] ) always clobbers reg byte a
Statement [93] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#26 print_sword::w#10 ] ( main:2::testInt:11::print_sword:84 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testInt:11::print_sword:88 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] main:2::testShort:9::print_sword:114 [ print_line_cursor#1 print_char_cursor#26 print_sword::w#10 ] ) always clobbers reg byte a
@ -3808,10 +3816,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -5102,11 +5110,11 @@ print_str: {
// [71] phi (byte*) print_str::str#5 = (byte*) print_str::str#7 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy
// print_str::@1
b1:
// while(*str!='@')
// [72] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [72] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

View File

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

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
[322] (byte*) print_str_at::at#2 ← phi( print_str_at/(const byte*) FORM_SCREEN#0+(byte)(number) $28*(number) 2+(byte) $a print_str_at::@2/(byte*) print_str_at::at#0 )
[322] (byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#1 print_str_at::@2/(byte*) print_str_at::str#0 )
[323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2
[323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[324] return
@ -820,7 +820,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin
[414] (byte*) print_line_cursor#2 ← phi( print_str_lines/(byte*) print_set_screen::screen#2 print_str_lines::@6/(byte*) print_line_cursor#22 )
[414] (byte*) print_char_cursor#22 ← phi( print_str_lines/(byte*~) print_char_cursor#73 print_str_lines::@6/(byte*~) print_char_cursor#74 )
[414] (byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@6/(byte*) print_str_lines::str#0 )
[415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2
[415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2
to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[416] return
@ -830,7 +830,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str
[417] (byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@3/(byte*) print_str_lines::str#0 )
[418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4)
[419] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4
[420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3
[420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3
to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0
@ -838,7 +838,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[423] (byte*) print_char_cursor#38 ← phi( print_str_lines::@2/(byte*) print_char_cursor#20 print_str_lines::@4/(byte*) print_char_cursor#1 )
[424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2
[424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[425] phi()

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) HEAP_TOP
@ -422,8 +427,8 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin
(byte*) print_line_cursor#37 ← phi( print_str_lines/(byte*) print_line_cursor#45 print_str_lines::@11/(byte*) print_line_cursor#1 )
(byte*) print_char_cursor#39 ← phi( print_str_lines/(byte*) print_char_cursor#47 print_str_lines::@11/(byte*) print_char_cursor#2 )
(byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@11/(byte*) print_str_lines::str#6 )
(bool~) print_str_lines::$0 ← *((byte*) print_str_lines::str#3) != (byte) '@'
if((bool~) print_str_lines::$0) goto print_str_lines::@4
(bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#3)
if((bool~) print_str_lines::$2) goto print_str_lines::@4
to:print_str_lines::@return
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5
(byte*) print_line_cursor#54 ← phi( print_str_lines::@1/(byte*) print_line_cursor#37 print_str_lines::@5/(byte*) print_line_cursor#46 )
@ -431,16 +436,16 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str
(byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@5/(byte*) print_str_lines::str#7 )
(byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4)
(byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4
(bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@'
(bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1
if((bool~) print_str_lines::$2) goto print_str_lines::@5
(bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0
(bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4
if((bool~) print_str_lines::$0) goto print_str_lines::@5
to:print_str_lines::@6
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str_lines::@6
(byte*) print_line_cursor#46 ← phi( print_str_lines::@4/(byte*) print_line_cursor#54 print_str_lines::@6/(byte*) print_line_cursor#55 )
(byte*) print_char_cursor#48 ← phi( print_str_lines::@4/(byte*) print_char_cursor#37 print_str_lines::@6/(byte*) print_char_cursor#1 )
(byte*) print_str_lines::str#7 ← phi( print_str_lines::@4/(byte*) print_str_lines::str#0 print_str_lines::@6/(byte*) print_str_lines::str#8 )
(byte) print_str_lines::ch#1 ← phi( print_str_lines::@4/(byte) print_str_lines::ch#0 print_str_lines::@6/(byte) print_str_lines::ch#2 )
(bool~) print_str_lines::$3 ← (byte) print_str_lines::ch#1 != (byte) '@'
(bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1
if((bool~) print_str_lines::$3) goto print_str_lines::@4
to:print_str_lines::@7
print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4
@ -478,7 +483,7 @@ print_str_at: scope:[print_str_at] from render_preset_name::@22
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
(byte*) print_str_at::at#3 ← phi( print_str_at/(byte*) print_str_at::at#4 print_str_at::@2/(byte*) print_str_at::at#0 )
(byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#4 print_str_at::@2/(byte*) print_str_at::str#0 )
(bool~) print_str_at::$0 ← *((byte*) print_str_at::str#2) != (byte) '@'
(bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#2)
if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1
@ -6711,9 +6716,9 @@ SYMBOL TABLE SSA
(byte*) print_str_at::str#4
(void()) print_str_lines((byte*) print_str_lines::str)
(bool~) print_str_lines::$0
(bool~) print_str_lines::$1
(bool~) print_str_lines::$2
(bool~) print_str_lines::$3
(bool~) print_str_lines::$4
(label) print_str_lines::@1
(label) print_str_lines::@11
(label) print_str_lines::@4
@ -6840,6 +6845,10 @@ Adding number conversion cast (unumber) $10 in (byte) DTV_COLORRAM_OFF#0 ← (nu
Adding number conversion cast (unumber) $40 in (byte) DTV_CHUNKY#0 ← (number) $40
Adding number conversion cast (unumber) $1d800 in (dword) DTV_COLOR_BANK_DEFAULT#0 ← (number) $1d800
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#3)
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1
Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#2)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#21 + (number) $28
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 2 in (byte) KEY_CRSR_RIGHT#0 ← (number) 2
@ -7480,6 +7489,10 @@ Simplifying constant pointer cast (byte*) 53309
Simplifying constant pointer cast (byte*) 255
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $3e8
Simplifying constant integer cast 2
@ -8369,6 +8382,10 @@ Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $40
Finalized unsigned number type (dword) $1d800
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 2
@ -8732,7 +8749,7 @@ Adding pointer type conversion cast (byte*) bitmap_clear::$0 in (byte*~) bitmap_
Adding pointer type conversion cast (byte*) form_field_ptr::$0 in (byte*~) form_field_ptr::$0 ← (word~) form_field_ptr::$2
Successful SSA optimization PassNAddTypeConversionAssignment
Inversing boolean not [63] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [62] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Inversing boolean not [92] (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from [91] (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@'
Inversing boolean not [92] (bool~) print_str_lines::$0 ← (byte) 0 == (byte) print_str_lines::ch#0 from [91] (bool~) print_str_lines::$4 ← (byte) 0 != (byte) print_str_lines::ch#0
Inversing boolean not [211] (bool~) keyboard_event_scan::$18 ← (byte~) keyboard_event_scan::$16 == (byte) 0 from [210] (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte) 0
Inversing boolean not [220] (bool~) keyboard_event_scan::$20 ← (byte) keyboard_events_size#18 == (byte) 8 from [219] (bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#18 != (byte) 8
Inversing boolean not [244] (bool~) keyboard_event_scan::$2 ← (byte~) keyboard_event_scan::$0 == (byte) 0 from [243] (bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte) 0
@ -9414,10 +9431,10 @@ Identified duplicate assignment right side [1577] (dword~) form_mode::$15 ← (d
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [64] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [74] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str_lines::$0 [87] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@4
Simple Condition (bool~) print_str_lines::$2 [93] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5
Simple Condition (bool~) print_str_lines::$3 [96] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4
Simple Condition (bool~) print_str_at::$0 [112] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2
Simple Condition (bool~) print_str_lines::$2 [87] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@4
Simple Condition (bool~) print_str_lines::$0 [93] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@5
Simple Condition (bool~) print_str_lines::$3 [96] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@4
Simple Condition (bool~) print_str_at::$0 [112] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2
Simple Condition (bool~) print_ln::$1 [123] if((byte*) print_line_cursor#22<(byte*) print_char_cursor#38) goto print_ln::@1
Simple Condition (bool~) keyboard_event_scan::$13 [197] if((byte) keyboard_event_scan::row_scan#0!=*((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9
Simple Condition (bool~) keyboard_event_scan::$25 [206] if((byte) keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@8
@ -12444,7 +12461,7 @@ print_str_at: scope:[print_str_at] from render_preset_name::@2
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
[322] (byte*) print_str_at::at#2 ← phi( print_str_at/(const byte*) FORM_SCREEN#0+(byte)(number) $28*(number) 2+(byte) $a print_str_at::@2/(byte*) print_str_at::at#0 )
[322] (byte*) print_str_at::str#2 ← phi( print_str_at/(byte*) print_str_at::str#1 print_str_at::@2/(byte*) print_str_at::str#0 )
[323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2
[323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[324] return
@ -12651,7 +12668,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin
[414] (byte*) print_line_cursor#2 ← phi( print_str_lines/(byte*) print_set_screen::screen#2 print_str_lines::@6/(byte*) print_line_cursor#22 )
[414] (byte*) print_char_cursor#22 ← phi( print_str_lines/(byte*~) print_char_cursor#73 print_str_lines::@6/(byte*~) print_char_cursor#74 )
[414] (byte*) print_str_lines::str#3 ← phi( print_str_lines/(byte*) print_str_lines::str#5 print_str_lines::@6/(byte*) print_str_lines::str#0 )
[415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2
[415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2
to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[416] return
@ -12661,7 +12678,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str
[417] (byte*) print_str_lines::str#4 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#3 print_str_lines::@3/(byte*) print_str_lines::str#0 )
[418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4)
[419] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#4
[420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3
[420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3
to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0
@ -12669,7 +12686,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[423] (byte*) print_char_cursor#38 ← phi( print_str_lines::@2/(byte*) print_char_cursor#20 print_str_lines::@4/(byte*) print_char_cursor#1 )
[424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2
[424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[425] phi()
@ -17592,10 +17609,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -18278,10 +18295,10 @@ print_str_lines: {
jmp b1
// print_str_lines::@1
b1:
// [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2_from_b1
jmp breturn
// print_str_lines::@return
@ -18305,8 +18322,8 @@ print_str_lines: {
bne !+
inc str+1
!:
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1
lda #'@'
// [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1
lda #0
cmp ch
beq b3_from_b2
jmp b4
@ -18328,8 +18345,8 @@ print_str_lines: {
jmp b3
// print_str_lines::@3
b3:
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1
lda #'@'
// [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1
lda #0
cmp ch
bne b2_from_b3
// [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
@ -21192,7 +21209,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb
Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a
Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a
Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a
Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ]
Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a
@ -21217,7 +21234,7 @@ Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::
Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ form_set_screen::y#2 form_set_screen::y#1 ]
Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a
Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:275 [ print_str_lines::ch#0 ]
@ -21529,7 +21546,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb
Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a
Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a
Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a
Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ form_render_values::idx#5 form_render_values::idx#1 ]
@ -21552,7 +21569,7 @@ Statement [400] (byte~) form_control::$14 ← *((byte*)(word) form_field_ptr::li
Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$14 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y
Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a
Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a
Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y
Statement [427] (byte*~) print_char_cursor#74 ← (byte*) print_line_cursor#22 [ print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ) always clobbers reg byte a
@ -21745,7 +21762,7 @@ Statement [286] *((const byte*) BGCOL#0) ← (byte) 0 [ form_cursor_count#1 keyb
Statement [287] *((const byte*) BORDERCOL#0) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) always clobbers reg byte a
Statement [290] if(*((const byte*) RASTER#0)!=(byte) $ff) goto form_mode::@4 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ( main:2::form_mode:13 [ keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_mode::preset_current#6 ] ) always clobbers reg byte a
Statement [318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) always clobbers reg byte a
Statement [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [325] *((byte*) print_str_at::at#2) ← *((byte*) print_str_at::str#2) [ print_str_at::str#2 print_str_at::at#2 ] ( main:2::form_mode:13::render_preset_name:269::print_str_at:319 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#2 print_str_at::at#2 ] main:2::form_mode:13::render_preset_name:303::print_str_at:319 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#2 print_str_at::at#2 ] ) always clobbers reg byte a reg byte y
Statement [332] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#5)) [ form_render_values::idx#5 ] ( main:2::form_mode:13::form_render_values:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 ] main:2::form_mode:13::form_render_values:301 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 ] ) always clobbers reg byte a reg byte y
Statement [338] (word) form_field_ptr::line#0 ← *((const byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) w= *((const byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) [ form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ( main:2::form_mode:13::form_render_values:267::form_field_ptr:331 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_render_values:301::form_field_ptr:331 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#5 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] main:2::form_mode:13::form_control:292::form_field_ptr:360 [ form_mode::preset_current#6 keyboard_events_size#47 form_cursor_count#21 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::field_idx#2 ] ) always clobbers reg byte a
@ -21766,7 +21783,7 @@ Statement [400] (byte~) form_control::$14 ← *((byte*)(word) form_field_ptr::li
Statement [401] *((byte*)(word) form_field_ptr::line#0 + (byte) form_field_ptr::x#0) ← (byte~) form_control::$14 [ keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:292 [ form_mode::preset_current#6 keyboard_events_size#47 form_field_idx#28 form_field_ptr::line#0 form_field_ptr::x#0 form_cursor_count#15 ] ) always clobbers reg byte y
Statement [408] (byte*) form_set_screen::line#1 ← (byte*) form_set_screen::line#2 + (byte) $28 [ form_set_screen::y#2 form_set_screen::line#1 ] ( main:2::form_mode:13::form_set_screen:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_set_screen::y#2 form_set_screen::line#1 ] ) always clobbers reg byte a
Statement [413] (byte*~) print_char_cursor#73 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#73 print_set_screen::screen#2 ] ) always clobbers reg byte a
Statement [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 [ print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#3 print_char_cursor#22 print_line_cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [418] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#4) [ print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#4 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [421] *((byte*) print_char_cursor#20) ← (byte) print_str_lines::ch#0 [ print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_line_cursor#2 print_str_lines::str#0 print_char_cursor#20 print_str_lines::ch#0 ] ) always clobbers reg byte y
Statement [427] (byte*~) print_char_cursor#74 ← (byte*) print_line_cursor#22 [ print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ( main:2::form_mode:13::print_str_lines:257 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] main:2::form_mode:13::print_str_lines:263 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#0 print_char_cursor#74 print_line_cursor#22 ] ) always clobbers reg byte a
@ -24718,10 +24735,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -25336,10 +25353,10 @@ print_str_lines: {
jmp b1
// print_str_lines::@1
b1:
// [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2_from_b1
jmp breturn
// print_str_lines::@return
@ -25362,8 +25379,8 @@ print_str_lines: {
bne !+
inc str+1
!:
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1
cmp #'@'
// [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #0
beq b3_from_b2
jmp b4
// print_str_lines::@4
@ -25383,8 +25400,8 @@ print_str_lines: {
jmp b3
// print_str_lines::@3
b3:
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #'@'
// [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #0
bne b2_from_b3
// [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
b5_from_b3:
@ -32469,11 +32486,11 @@ print_str_at: {
// [322] phi (byte*) print_str_at::str#2 = (byte*) print_str_at::str#1 [phi:print_str_at->print_str_at::@1#1] -- register_copy
// print_str_at::@1
b1:
// while(*str!='@')
// [323] if(*((byte*) print_str_at::str#2)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [323] if((byte) 0!=*((byte*) print_str_at::str#2)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str_at::@return
// }
@ -33029,11 +33046,11 @@ print_str_lines: {
// [414] phi (byte*) print_str_lines::str#3 = (byte*) print_str_lines::str#5 [phi:print_str_lines/print_str_lines::@6->print_str_lines::@1#2] -- register_copy
// print_str_lines::@1
b1:
// while(*str!='@')
// [415] if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [415] if((byte) 0!=*((byte*) print_str_lines::str#3)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str_lines::@return
// }
@ -33053,9 +33070,9 @@ print_str_lines: {
bne !+
inc str+1
!:
// if(ch!='@')
// [420] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1
cmp #'@'
// if(ch)
// [420] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #0
beq b3
// print_str_lines::@4
// *(print_char_cursor++) = ch
@ -33072,9 +33089,9 @@ print_str_lines: {
// [423] phi (byte*) print_char_cursor#38 = (byte*) print_char_cursor#20 [phi:print_str_lines::@2/print_str_lines::@4->print_str_lines::@3#0] -- register_copy
// print_str_lines::@3
b3:
// while (ch!='@')
// [424] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #'@'
// while (ch)
// [424] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #0
bne b2
// [425] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
// print_str_lines::@5

View File

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

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_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*~) print_char_cursor#100 )
[865] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@6/(byte*) print_str_lines::str#0 )
[866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2
[866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2
to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[867] return
@ -1517,7 +1517,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str
[868] (byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@3/(byte*) print_str_lines::str#0 )
[869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3)
[870] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3
[871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3
[871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3
to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0
@ -1525,7 +1525,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[874] (byte*) print_char_cursor#32 ← phi( print_str_lines::@2/(byte*) print_char_cursor#17 print_str_lines::@4/(byte*) print_char_cursor#1 )
[875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2
[875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[876] phi()

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) HEAP_TOP
@ -274,8 +279,8 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin
(byte*) print_line_cursor#31 ← phi( print_str_lines/(byte*) print_line_cursor#50 print_str_lines::@11/(byte*) print_line_cursor#1 )
(byte*) print_char_cursor#33 ← phi( print_str_lines/(byte*) print_char_cursor#52 print_str_lines::@11/(byte*) print_char_cursor#2 )
(byte*) print_str_lines::str#2 ← phi( print_str_lines/(byte*) print_str_lines::str#4 print_str_lines::@11/(byte*) print_str_lines::str#5 )
(bool~) print_str_lines::$0 ← *((byte*) print_str_lines::str#2) != (byte) '@'
if((bool~) print_str_lines::$0) goto print_str_lines::@4
(bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#2)
if((bool~) print_str_lines::$2) goto print_str_lines::@4
to:print_str_lines::@return
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@5
(byte*) print_line_cursor#68 ← phi( print_str_lines::@1/(byte*) print_line_cursor#31 print_str_lines::@5/(byte*) print_line_cursor#51 )
@ -283,16 +288,16 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@1 print_str
(byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@5/(byte*) print_str_lines::str#6 )
(byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3)
(byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3
(bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@'
(bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1
if((bool~) print_str_lines::$2) goto print_str_lines::@5
(bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0
(bool~) print_str_lines::$0 ← ! (bool~) print_str_lines::$4
if((bool~) print_str_lines::$0) goto print_str_lines::@5
to:print_str_lines::@6
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str_lines::@6
(byte*) print_line_cursor#51 ← phi( print_str_lines::@4/(byte*) print_line_cursor#68 print_str_lines::@6/(byte*) print_line_cursor#69 )
(byte*) print_char_cursor#53 ← phi( print_str_lines::@4/(byte*) print_char_cursor#31 print_str_lines::@6/(byte*) print_char_cursor#1 )
(byte*) print_str_lines::str#6 ← phi( print_str_lines::@4/(byte*) print_str_lines::str#0 print_str_lines::@6/(byte*) print_str_lines::str#7 )
(byte) print_str_lines::ch#1 ← phi( print_str_lines::@4/(byte) print_str_lines::ch#0 print_str_lines::@6/(byte) print_str_lines::ch#2 )
(bool~) print_str_lines::$3 ← (byte) print_str_lines::ch#1 != (byte) '@'
(bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1
if((bool~) print_str_lines::$3) goto print_str_lines::@4
to:print_str_lines::@7
print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@4
@ -6074,9 +6079,9 @@ SYMBOL TABLE SSA
(byte*) print_set_screen::screen#1
(void()) print_str_lines((byte*) print_str_lines::str)
(bool~) print_str_lines::$0
(bool~) print_str_lines::$1
(bool~) print_str_lines::$2
(bool~) print_str_lines::$3
(bool~) print_str_lines::$4
(label) print_str_lines::@1
(label) print_str_lines::@11
(label) print_str_lines::@4
@ -6125,6 +6130,9 @@ Adding number conversion cast (unumber) $10 in (byte) DTV_COLORRAM_OFF#0 ← (nu
Adding number conversion cast (unumber) $40 in (byte) DTV_CHUNKY#0 ← (number) $40
Adding number conversion cast (unumber) $1d800 in (dword) DTV_COLOR_BANK_DEFAULT#0 ← (number) $1d800
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$2 ← (number) 0 != *((byte*) print_str_lines::str#2)
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$4 ← (number) 0 != (byte) print_str_lines::ch#0
Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$3 ← (number) 0 != (byte) print_str_lines::ch#1
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#18 + (number) $28
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 8 in (byte) KEY_3#0 ← (number) 8
@ -6935,6 +6943,9 @@ Simplifying constant pointer cast (byte*) 53309
Simplifying constant pointer cast (byte*) 255
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $3e8
Simplifying constant integer cast 8
@ -7336,6 +7347,9 @@ Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $40
Finalized unsigned number type (dword) $1d800
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 8
@ -7779,7 +7793,7 @@ Inferred type updated to dword in (unumber~) mode_8bppchunkybmm::$16 ← (dword)
Adding pointer type conversion cast (byte*) bitmap_clear::$0 in (byte*~) bitmap_clear::$0 ← (word~) bitmap_clear::$3
Successful SSA optimization PassNAddTypeConversionAssignment
Inversing boolean not [64] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [63] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Inversing boolean not [93] (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from [92] (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@'
Inversing boolean not [93] (bool~) print_str_lines::$0 ← (byte) 0 == (byte) print_str_lines::ch#0 from [92] (bool~) print_str_lines::$4 ← (byte) 0 != (byte) print_str_lines::ch#0
Inversing boolean not [206] (bool~) bitmap_init::$4 ← (byte) bitmap_init::bits#1 != (byte) 0 from [205] (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (byte) 0
Inversing boolean not [225] (bool~) bitmap_init::$12 ← (byte~) bitmap_init::$10 != (byte) 7 from [224] (bool~) bitmap_init::$11 ← (byte~) bitmap_init::$10 == (byte) 7
Inversing boolean not [366] (bool~) bitmap_line_xdyi::$4 ← (byte) bitmap_line_xdyi::xd#2 >= (byte) bitmap_line_xdyi::e#1 from [365] (bool~) bitmap_line_xdyi::$3 ← (byte) bitmap_line_xdyi::xd#2 < (byte) bitmap_line_xdyi::e#1
@ -8377,9 +8391,9 @@ Identified duplicate assignment right side [1792] (word~) mode_8bppchunkybmm::$1
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [65] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [75] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str_lines::$0 [88] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4
Simple Condition (bool~) print_str_lines::$2 [94] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5
Simple Condition (bool~) print_str_lines::$3 [97] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4
Simple Condition (bool~) print_str_lines::$2 [88] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@4
Simple Condition (bool~) print_str_lines::$0 [94] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@5
Simple Condition (bool~) print_str_lines::$3 [97] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@4
Simple Condition (bool~) print_ln::$1 [115] if((byte*) print_line_cursor#19<(byte*) print_char_cursor#32) goto print_ln::@1
Simple Condition (bool~) bitmap_init::$4 [207] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@2
Simple Condition (bool~) bitmap_init::$5 [211] if((byte) bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1
@ -12472,7 +12486,7 @@ print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lin
[865] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*) print_line_cursor#19 )
[865] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@6/(byte*~) print_char_cursor#100 )
[865] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@6/(byte*) print_str_lines::str#0 )
[866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2
[866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2
to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
[867] return
@ -12482,7 +12496,7 @@ print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str
[868] (byte*) print_str_lines::str#3 ← phi( print_str_lines::@1/(byte*) print_str_lines::str#2 print_str_lines::@3/(byte*) print_str_lines::str#0 )
[869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3)
[870] (byte*) print_str_lines::str#0 ← ++ (byte*) print_str_lines::str#3
[871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3
[871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3
to:print_str_lines::@4
print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0
@ -12490,7 +12504,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[874] (byte*) print_char_cursor#32 ← phi( print_str_lines::@2/(byte*) print_char_cursor#17 print_str_lines::@4/(byte*) print_char_cursor#1 )
[875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2
[875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
[876] phi()
@ -19298,10 +19312,10 @@ print_str_lines: {
jmp b1
// print_str_lines::@1
b1:
// [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2_from_b1
jmp breturn
// print_str_lines::@return
@ -19325,8 +19339,8 @@ print_str_lines: {
bne !+
inc str+1
!:
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuz1_eq_vbuc1_then_la1
lda #'@'
// [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuz1_then_la1
lda #0
cmp ch
beq b3_from_b2
jmp b4
@ -19348,8 +19362,8 @@ print_str_lines: {
jmp b3
// print_str_lines::@3
b3:
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuz1_neq_vbuc1_then_la1
lda #'@'
// [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuz1_then_la1
lda #0
cmp ch
bne b2_from_b3
// [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
@ -19954,7 +19968,7 @@ Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte
Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:291 [ mode_stdchar::$28 ]
Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y
Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y
Statement [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y
Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:294 [ print_str_lines::ch#0 ]
@ -20263,7 +20277,7 @@ Statement [851] (byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#4 & (byte)
Statement [852] (byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte) 4 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 ] ) always clobbers reg byte a
Statement [853] (byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte) $f [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 mode_stdchar::$28 mode_stdchar::$29 ] ) always clobbers reg byte a
Statement [855] *((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ( main:2::menu:9::mode_stdchar:40 [ mode_stdchar::cy#4 mode_stdchar::col#1 mode_stdchar::cx#2 mode_stdchar::ch#2 ] ) always clobbers reg byte y
Statement [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y
Statement [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) always clobbers reg byte a reg byte y
Statement [869] (byte) print_str_lines::ch#0 ← *((byte*) print_str_lines::str#3) [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#3 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [872] *((byte*) print_char_cursor#17) ← (byte) print_str_lines::ch#0 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ( main:2::menu:9::print_str_lines:33 [ print_line_cursor#17 print_str_lines::str#0 print_char_cursor#17 print_str_lines::ch#0 ] ) always clobbers reg byte y
Statement [878] (byte*~) print_char_cursor#100 ← (byte*) print_line_cursor#19 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#0 print_char_cursor#100 print_line_cursor#19 ] ) always clobbers reg byte a
@ -25654,10 +25668,10 @@ print_str_lines: {
jmp b1
// print_str_lines::@1
b1:
// [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2_from_b1
jmp breturn
// print_str_lines::@return
@ -25680,8 +25694,8 @@ print_str_lines: {
bne !+
inc str+1
!:
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1
cmp #'@'
// [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #0
beq b3_from_b2
jmp b4
// print_str_lines::@4
@ -25701,8 +25715,8 @@ print_str_lines: {
jmp b3
// print_str_lines::@3
b3:
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #'@'
// [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #0
bne b2_from_b3
// [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
b5_from_b3:
@ -32576,11 +32590,11 @@ print_str_lines: {
sta str+1
// print_str_lines::@1
b1:
// while(*str!='@')
// [866] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [866] if((byte) 0!=*((byte*) print_str_lines::str#2)) goto print_str_lines::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str_lines::@return
// }
@ -32600,9 +32614,9 @@ print_str_lines: {
bne !+
inc str+1
!:
// if(ch!='@')
// [871] if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@3 -- vbuaa_eq_vbuc1_then_la1
cmp #'@'
// if(ch)
// [871] if((byte) 0==(byte) print_str_lines::ch#0) goto print_str_lines::@3 -- vbuc1_eq_vbuaa_then_la1
cmp #0
beq b3
// print_str_lines::@4
// *(print_char_cursor++) = ch
@ -32619,9 +32633,9 @@ print_str_lines: {
// [874] phi (byte*) print_char_cursor#32 = (byte*) print_char_cursor#17 [phi:print_str_lines::@2/print_str_lines::@4->print_str_lines::@3#0] -- register_copy
// print_str_lines::@3
b3:
// while (ch!='@')
// [875] if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #'@'
// while (ch)
// [875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2 -- vbuc1_neq_vbuaa_then_la1
cmp #0
bne b2
// [876] phi from print_str_lines::@3 to print_str_lines::@5 [phi:print_str_lines::@3->print_str_lines::@5]
// print_str_lines::@5

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1

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 (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call call mulf8s_prepare (signed byte) mulf8s::a

View File

@ -110,7 +110,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
[37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
[38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
[38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[39] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) test_bytes::bb
Identified constant variable (signed byte) test_sbytes::bb
@ -114,7 +119,7 @@ print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 a
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#66 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#9 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#9) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#9)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -857,6 +862,7 @@ SYMBOL TABLE SSA
(const string) test_sbytes::msg4 = (string) "-127-127=2"
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#9)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#24 + (number) $28
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5
@ -903,6 +909,7 @@ Inlining cast (signed byte) assert_sbyte::c#4 ← (snumber)(number) 2
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $3e8
Simplifying constant pointer cast (byte*) 53281
@ -924,6 +931,7 @@ Simplifying constant integer cast 2
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 5
@ -1077,7 +1085,7 @@ Identical Phi Values (byte*) print_char_cursor#67 (byte*) print_char_cursor#2
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
Simple Condition (bool~) assert_byte::$2 [124] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1
Simple Condition (bool~) assert_sbyte::$2 [204] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
@ -1448,7 +1456,7 @@ print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 a
print_str::@1: scope:[print_str] from print_str print_str::@2
[37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
[37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
[38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
[38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[39] return
@ -1913,10 +1921,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -2230,7 +2238,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ as
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ]
@ -2250,7 +2258,7 @@ Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ]
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
@ -2576,10 +2584,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -3363,11 +3371,11 @@ print_str: {
// [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy
// print_str::@1
b1:
// while(*str!='@')
// [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [38] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Culled Empty Block (label) @1
Culled Empty Block (label) @2

View File

@ -943,7 +943,7 @@ print_str_at: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[244] (byte*) print_str_at::at#13 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 )
[244] (byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 )
[245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2
[245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[246] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (signed byte*) xr
Identified constant variable (signed byte*) yr
@ -275,7 +280,7 @@ print_str_at: scope:[print_str_at] from debug_print_init::@10 debug_print_init:
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
(byte*) print_str_at::at#14 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 )
(byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 )
(bool~) print_str_at::$0 ← *((byte*) print_str_at::str#13) != (byte) '@'
(bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#13)
if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1
@ -2242,6 +2247,7 @@ Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5
Adding number conversion cast (unumber) $e in (byte) LIGHT_BLUE#0 ← (number) $e
Adding number conversion cast (unumber) $f in (byte) LIGHT_GREY#0 ← (number) $f
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#13)
Adding number conversion cast (snumber) 0 in (bool~) print_sbyte_at::$0 ← (signed byte) print_sbyte_at::b#22 < (number) 0
Adding number conversion cast (unumber) 1 in (byte*~) print_sbyte_at::$2 ← (byte*) print_sbyte_at::at#23 + (number) 1
Adding number conversion cast (unumber) 4 in (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#1 >> (number) 4
@ -2455,6 +2461,7 @@ Simplifying constant integer cast $f
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 4
Simplifying constant integer cast $f
@ -2579,6 +2586,7 @@ Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 4
@ -2901,7 +2909,7 @@ Identical Phi Values (byte*) debug_print_init::at_cols#2 (byte*) debug_print_ini
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [12] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [22] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str_at::$0 [33] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2
Simple Condition (bool~) print_str_at::$0 [33] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2
Simple Condition (bool~) print_sbyte_at::$0 [41] if((signed byte) print_sbyte_at::b#22<(signed byte) 0) goto print_sbyte_at::@1
Simple Condition (bool~) anim::$0 [131] if(*((byte*) RASTER#0)!=(byte) $ff) goto anim::@4
Simple Condition (bool~) anim::$1 [134] if(*((byte*) RASTER#0)!=(byte) $fe) goto anim::@10
@ -4133,7 +4141,7 @@ print_str_at: scope:[print_str_at] from debug_print_init::@10 debug_print_init:
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
[244] (byte*) print_str_at::at#13 ← phi( print_str_at/(byte*) print_str_at::at#15 print_str_at::@2/(byte*) print_str_at::at#0 )
[244] (byte*) print_str_at::str#13 ← phi( print_str_at/(byte*) print_str_at::str#15 print_str_at::@2/(byte*) print_str_at::str#0 )
[245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2
[245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[246] return
@ -6570,10 +6578,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -6917,7 +6925,7 @@ Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2)
Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:14 [ debug_print_init::i#2 debug_print_init::i#1 ]
Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a
Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a
@ -7026,7 +7034,7 @@ Statement [235] (byte*~) debug_print_init::$65 ← (const byte*) debug_print_ini
Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2) ← (byte) debug_print_init::col#0 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ( main:2::debug_print_init:8 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ) always clobbers reg byte a
Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x
Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a
Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a
@ -7137,7 +7145,7 @@ Statement [235] (byte*~) debug_print_init::$65 ← (const byte*) debug_print_ini
Statement [236] *((byte*~) debug_print_init::$65 + (byte) debug_print_init::j#2) ← (byte) debug_print_init::col#0 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ( main:2::debug_print_init:8 [ debug_print_init::c#2 debug_print_init::i#2 debug_print_init::j#2 ] ) always clobbers reg byte a
Statement [239] (byte) debug_print_init::c#1 ← (byte) debug_print_init::c#2 + (byte) 4 [ debug_print_init::i#2 debug_print_init::c#1 ] ( main:2::debug_print_init:8 [ debug_print_init::i#2 debug_print_init::c#1 ] ) always clobbers reg byte a reg byte x
Statement [241] if((byte) debug_print_init::i#1!=(byte) 8) goto debug_print_init::@1 [ debug_print_init::c#1 debug_print_init::i#1 ] ( main:2::debug_print_init:8 [ debug_print_init::c#1 debug_print_init::i#1 ] ) always clobbers reg byte a
Statement [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [247] *((byte*) print_str_at::at#13) ← *((byte*) print_str_at::str#13) [ print_str_at::str#13 print_str_at::at#13 ] ( main:2::debug_print_init:8::print_str_at:184 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:186 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:188 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:190 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:192 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:194 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:196 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:198 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:200 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:202 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:204 [ print_str_at::str#13 print_str_at::at#13 ] main:2::debug_print_init:8::print_str_at:206 [ print_str_at::str#13 print_str_at::at#13 ] ) always clobbers reg byte a reg byte y
Statement [255] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [257] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::debug_print_init:8::print_cls:182::memset:251 [ memset::dst#1 ] ) always clobbers reg byte a
@ -9034,10 +9042,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -11689,11 +11697,11 @@ print_str_at: {
// [244] phi (byte*) print_str_at::str#13 = (byte*) print_str_at::str#15 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy
// print_str_at::@1
b1:
// while(*str!='@')
// [245] if(*((byte*) print_str_at::str#13)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [245] if((byte) 0!=*((byte*) print_str_at::str#13)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str_at::@return
// }

View File

@ -120,7 +120,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )
[45] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 )
[46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2
[46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[47] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (signed byte*) xr
Identified constant variable (signed byte*) yr
@ -122,7 +127,7 @@ print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspec
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#64 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#7) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#7)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -905,6 +910,7 @@ SYMBOL TABLE SSA
(signed byte*) zr#0
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#7)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28
Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#4 < (number) 0
Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (number) 4
@ -952,6 +958,7 @@ Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast 4
@ -978,6 +985,7 @@ Simplifying constant integer cast 1
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 4
@ -1114,7 +1122,7 @@ Identified duplicate assignment right side [215] (byte~) mulf_init::$4 ← - (by
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
Simple Condition (bool~) print_sbyte::$0 [48] if((signed byte) print_sbyte::b#4<(signed byte) 0) goto print_sbyte::@1
Simple Condition (bool~) mulf_init::$11 [231] if((byte) mulf_init::i#1!=rangelast(0,$80)) goto mulf_init::@1
@ -1480,7 +1488,7 @@ print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspec
print_str::@1: scope:[print_str] from print_str print_str::@2
[45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )
[45] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 )
[46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2
[46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[47] return
@ -2039,10 +2047,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -2451,7 +2459,7 @@ Statement [6] *((const word*) psp1#0) ← (word)(const byte[$200]) mulf_sqr1#0 [
Statement [7] *((const word*) psp2#0) ← (word)(const byte[$200]) mulf_sqr2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [41] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [42] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [48] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#7) [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [52] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ( main:2::do_perspective:10::print_byte:29 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_byte:33 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ]
@ -2485,7 +2493,7 @@ Statement [6] *((const word*) psp1#0) ← (word)(const byte[$200]) mulf_sqr1#0 [
Statement [7] *((const word*) psp2#0) ← (word)(const byte[$200]) mulf_sqr2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [41] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [42] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::do_perspective:10::print_ln:37 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [48] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#7) [ print_char_cursor#2 print_str::str#7 ] ( main:2::do_perspective:10::print_str:13 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:17 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:21 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:25 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:31 [ print_char_cursor#2 print_str::str#7 ] main:2::do_perspective:10::print_str:35 [ print_char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y
Statement [52] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ( main:2::do_perspective:10::print_byte:29 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_byte:33 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_byte::b#3 print_char_cursor#69 print_byte::$0 ] ) always clobbers reg byte a
Statement [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#12 print_byte::$2 ] ( main:2::do_perspective:10::print_byte:29 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_byte:33 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:15::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:19::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] main:2::do_perspective:10::print_sbyte:23::print_byte:74 [ print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a
@ -2873,10 +2881,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -3822,11 +3830,11 @@ print_str: {
// [45] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy
// print_str::@1
b1:
// while(*str!='@')
// [46] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

View File

@ -395,7 +395,7 @@ print_str_at: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
[128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
[129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2
[129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[130] return

View File

@ -1,3 +1,4 @@
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Identified constant variable (byte*) SCREEN
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
@ -431,7 +432,7 @@ print_str_at: scope:[print_str_at] from main::@29 main::@3 main::@30 main::@31
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
(byte*) print_str_at::at#6 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
(byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
(bool~) print_str_at::$0 ← *((byte*) print_str_at::str#5) != (byte) '@'
(bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#5)
if((bool~) print_str_at::$0) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@2: scope:[print_str_at] from print_str_at::@1
@ -1132,6 +1133,7 @@ Adding number conversion cast (unumber) 0 in (byte) main::shift#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) main::pressed#0 ← (number) 0
Adding number conversion cast (unumber) $3f in (bool~) main::$30 ← (byte) main::key#0 != (number) $3f
Adding number conversion cast (unumber) 0 in (bool~) main::$33 ← (byte) main::pressed#2 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#5)
Adding number conversion cast (unumber) 8 in (number~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (number) 8
Adding number conversion cast (unumber) plot_chargen::$1 in (number~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (unumber)(number) 8
Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (number) 0
@ -1353,6 +1355,7 @@ Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $3f
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast $32
@ -1455,6 +1458,7 @@ Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $3f
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $32
@ -1579,7 +1583,7 @@ Simple Condition (bool~) main::$28 [200] if((byte~) main::$27!=(byte) 0) goto ma
Simple Condition (bool~) main::$31 [218] if((byte) main::key#0==(byte) $3f) goto main::@17
Simple Condition (bool~) main::$34 [222] if((byte) main::pressed#2==(byte) 0) goto main::@18
Simple Condition (bool~) main::$36 [233] if((byte) main::ch#1!=rangelast(0,$3f)) goto main::@16
Simple Condition (bool~) print_str_at::$0 [246] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2
Simple Condition (bool~) print_str_at::$0 [246] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
Simple Condition (bool~) plot_chargen::$4 [260] if((byte) plot_chargen::shift#2==(byte) 0) goto plot_chargen::@1
Simple Condition (bool~) plot_chargen::$12 [285] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5
Simple Condition (bool~) plot_chargen::$14 [293] if((byte) plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4
@ -2220,7 +2224,7 @@ print_str_at: scope:[print_str_at] from main::@17 main::@18 main::@19 main::@3
print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2
[128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
[128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
[129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2
[129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
to:print_str_at::@return
print_str_at::@return: scope:[print_str_at] from print_str_at::@1
[130] return
@ -3512,10 +3516,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -3585,7 +3589,7 @@ Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pr
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ keyboard_key_pressed::colidx#0 ]
Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Statement [6] *((byte*) main::sc#4) ← (byte) ' ' [ main::sc#4 ] ( main:2 [ main::sc#4 ] ) always clobbers reg byte a reg byte y
Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a
@ -3606,7 +3610,7 @@ Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:29 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:35 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:41 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:47 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] main:2::keyboard_key_pressed:60 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ) always clobbers reg byte a
Statement [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] ) always clobbers reg byte a
Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:29::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:35::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:41::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:47::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:60::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_WORD:2 [ main::sc#4 main::sc#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x ,
@ -4567,10 +4571,10 @@ print_str_at: {
jmp b1
// print_str_at::@1
b1:
// [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str_at::@return
@ -5888,11 +5892,11 @@ print_str_at: {
// [128] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy
// print_str_at::@1
b1:
// while(*str!='@')
// [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str_at::@return
// }

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) init_screen::WHITE
Identified constant variable (signed byte*) ap

View File

@ -49,7 +49,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[15] (byte*) print_char_cursor#10 ← phi( print_str/(byte*) 1024 print_str::@2/(byte*) print_char_cursor#1 )
[15] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 )
[16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
[16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[17] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Culled Empty Block (label) @1
Culled Empty Block (label) @2
@ -60,7 +65,7 @@ print_str: scope:[print_str] from main
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#17 ← phi( print_str/(byte*) print_char_cursor#21 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -211,13 +216,16 @@ SYMBOL TABLE SSA
(byte*) print_str::str#3
(byte*) print_str::str#4
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#6 + (number) $28
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#20 (byte*) print_line_cursor#14
@ -244,7 +252,7 @@ Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#14
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#10
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [6] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = (byte*) 1024
@ -328,7 +336,7 @@ print_str: scope:[print_str] from main
print_str::@1: scope:[print_str] from print_str print_str::@2
[15] (byte*) print_char_cursor#10 ← phi( print_str/(byte*) 1024 print_str::@2/(byte*) print_char_cursor#1 )
[15] (byte*) print_str::str#2 ← phi( print_str/(const string) main::str print_str::@2/(byte*) print_str::str#0 )
[16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
[16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[17] return
@ -476,10 +484,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -514,7 +522,7 @@ print_str: {
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [11] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#6 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [12] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:2::print_ln:7 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [18] *((byte*) print_char_cursor#10) ← *((byte*) print_str::str#2) [ print_char_cursor#10 print_str::str#2 ] ( main:2::print_str:5 [ print_char_cursor#10 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_WORD:2 [ print_line_cursor#6 print_line_cursor#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ print_str::str#2 print_str::str#0 ] : zp ZP_WORD:4 ,
@ -644,10 +652,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -845,11 +853,11 @@ print_str: {
sta str+1
// print_str::@1
b1:
// while(*str!='@')
// [16] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [16] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$4 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte*) SCREEN
Identified constant variable (byte*) SPRITE

View File

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

View File

@ -34,7 +34,7 @@ main::@5: scope:[main] from main::@6
to:main::@7
main::@7: scope:[main] from main::@5
[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
main::@8: scope:[main] from main::@7
[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::nxt#3 ← phi( main::@8/(byte*) main::nxt#5 )
(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
if((bool~) main::$9) goto main::@15
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) 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) 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) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8
Successful SSA optimization PassNAddNumberTypeConversions
@ -269,6 +270,7 @@ Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast $27
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $27
Simplifying constant integer cast $3e8
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) $27
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27
Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions
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 [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
Alias (byte[]) main::line#0 = (byte*~) main::$1
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::$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::$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
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = (byte*) 1024
@ -471,7 +474,7 @@ main::@5: scope:[main] from main::@6
to:main::@7
main::@7: scope:[main] from main::@5
[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
main::@8: scope:[main] from main::@7
[18] (byte) main::c#1 ← *((const byte*) TEXT#0)
@ -668,9 +671,9 @@ main: {
ldy #0
lda (nxt),y
sta c
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuz1_neq_vbuc1_then_la1
lda #'@'
cmp c
// [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuz1_neq_0_then_la1
lda c
cmp #0
bne b9_from_b7
jmp b8
// main::@8
@ -910,8 +913,8 @@ main: {
ldy #0
lda (nxt),y
tax
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1
cpx #'@'
// [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuxx_neq_0_then_la1
cpx #0
bne b9_from_b7
jmp b8
// main::@8
@ -1218,9 +1221,9 @@ main: {
ldy #0
lda (nxt),y
tax
// if(c=='@')
// [17] if((byte) main::c#0!=(byte) '@') goto main::@9 -- vbuxx_neq_vbuc1_then_la1
cpx #'@'
// if(c==0)
// [17] if((byte) main::c#0!=(byte) 0) goto main::@9 -- vbuxx_neq_0_then_la1
cpx #0
bne b9
// main::@8
// c = *nxt

View File

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

View File

@ -117,7 +117,7 @@ scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1
to:@return
next_char: scope:[next_char] from scroll_bit::@2
[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
next_char::@2: scope:[next_char] from next_char
[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
(byte*) nxt#17 ← phi( scroll_bit::@2/(byte*) nxt#24 )
(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
if((bool~) next_char::$1) goto next_char::@1
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 ← ((unumber)) (number) $80+(byte) ' '
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) $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
@ -737,6 +738,7 @@ Simplifying constant integer cast (unumber)(number) $80+(byte) ' '
Simplifying constant integer cast $80
Simplifying constant integer cast $37
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $27
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) $37
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27
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 [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 [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
Alias (byte) scroll#20 = (byte) scroll#21
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::$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~) 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~) fillscreen::$1 [168] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
@ -1258,7 +1261,7 @@ scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1
to:@return
next_char: scope:[next_char] from scroll_bit::@2
[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
next_char::@2: scope:[next_char] from next_char
[59] (byte) next_char::c#1 ← *((const byte*) TEXT#0)
@ -1770,9 +1773,9 @@ next_char: {
ldy #0
lda (nxt),y
sta c
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuz1_neq_vbuc1_then_la1
lda #'@'
cmp c
// [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuz1_neq_0_then_la1
lda c
cmp #0
bne b1_from_next_char
jmp b2
// next_char::@2
@ -2283,8 +2286,8 @@ next_char: {
ldy #0
lda (nxt),y
tax
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #'@'
// [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuxx_neq_0_then_la1
cpx #0
bne b1_from_next_char
jmp b2
// next_char::@2
@ -2892,9 +2895,9 @@ next_char: {
ldy #0
lda (nxt),y
tax
// if(c=='@')
// [58] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #'@'
// if(c==0)
// [58] if((byte) next_char::c#0!=(byte) 0) goto next_char::@1 -- vbuxx_neq_0_then_la1
cpx #0
bne b1
// next_char::@2
// 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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte*) gen_sintab::f_2pi
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx

View File

@ -343,7 +343,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[143] (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 )
[143] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 )
[144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
[144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[145] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Culled Empty Block (label) @1
Culled Empty Block (label) @2
@ -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
(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 )
(bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -1396,6 +1401,7 @@ SYMBOL TABLE SSA
(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~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#3)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28
Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0
Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0
@ -1504,6 +1510,7 @@ Inlining cast (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast 0
@ -1560,6 +1567,7 @@ Simplifying constant integer cast 2
Simplifying constant integer cast $200
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
@ -1840,7 +1848,7 @@ Identical Phi Values (byte*) print_char_cursor#130 (byte*) print_char_cursor#19
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1
Simple Condition (bool~) print_sword::$0 [48] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1
Simple Condition (bool~) print_sbyte::$0 [72] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1
@ -2527,7 +2535,7 @@ print_str: scope:[print_str] from main::@1 main::@11
print_str::@1: scope:[print_str] from print_str print_str::@2
[143] (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 )
[143] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 )
[144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
[144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[145] return
@ -3796,10 +3804,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -4063,7 +4071,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ p
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ print_mulf8u127::a#8 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ]
Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a
Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a
Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a
@ -4099,7 +4107,7 @@ Statement [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 -
Statement [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ) always clobbers reg byte a
Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } always clobbers reg byte a reg byte x
Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a
Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a
Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a
@ -5081,10 +5089,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -6558,11 +6566,11 @@ print_str: {
// [143] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy
// print_str::@1
b1:
// while(*str!='@')
// [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [144] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

View File

@ -59,7 +59,7 @@ print: {
inc idx
iny
lda (msg),y
cmp #'@'
cmp #0
bne b1
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)
[22] (byte) idx#12 ← ++ (byte) idx#11
[23] (byte) print::i#1 ← ++ (byte) print::i#2
[24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1
[24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1
to:print::@return
print::@return: scope:[print] from print::@1
[25] return

View File

@ -1,5 +1,6 @@
Resolved forward reference hello to (void()) hello()
Resolved forward reference world to (void()) world()
Warning! Adding boolean cast to non-boolean condition *((byte*) print::msg + (byte) print::i)
Culled Empty Block (label) @1
Culled Empty Block (label) do10::@2
Culled Empty Block (label) @2
@ -83,7 +84,7 @@ print::@1: scope:[print] from print print::@1
*((byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#2 + (byte) print::i#2)
(byte) idx#5 ← ++ (byte) idx#11
(byte) print::i#1 ← ++ (byte) print::i#2
(bool~) print::$0 ← *((byte*) print::msg#2 + (byte) print::i#1) != (byte) '@'
(bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2 + (byte) print::i#1)
if((bool~) print::$0) goto print::@1
to:print::@return
print::@return: scope:[print] from print::@1
@ -168,6 +169,7 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) print::i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2 + (byte) print::i#1)
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) idx#4 ← (unumber)(number) 0
@ -176,9 +178,11 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (void()*) do10::fn#0 = (void()*~) main::$0
Alias (void()*) do10::fn#1 = (void()*~) main::$2
@ -197,7 +201,7 @@ Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte) idx#15 (byte) idx#16
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) do10::$1 [13] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1
Simple Condition (bool~) print::$0 [40] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1
Simple Condition (bool~) print::$0 [40] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (void()*) do10::fn#0 ← & (void()) hello()
Constant right-side identified [3] (void()*) do10::fn#1 ← & (void()) world()
@ -324,7 +328,7 @@ print::@1: scope:[print] from print print::@1
[21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2)
[22] (byte) idx#12 ← ++ (byte) idx#11
[23] (byte) print::i#1 ← ++ (byte) print::i#2
[24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1
[24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1
to:print::@return
print::@return: scope:[print] from print::@1
[25] return
@ -522,10 +526,10 @@ print: {
inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1
inc i
// [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1
// [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuz2_then_la1
ldy i
lda (msg),y
cmp #'@'
cmp #0
bne b1_from_b1
jmp breturn
// print::@return
@ -564,12 +568,12 @@ Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10::
Statement [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 idx#11 ] ( print:17 [ print::msg#3 print::i#2 idx#11 ] print:27 [ print::msg#3 print::i#2 idx#11 ] ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ print::i#2 print::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:7 [ print::i#2 print::i#1 ]
Statement [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a
Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a
Statement [1] (byte) idx#16 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a
Statement [12] call *((void()*) do10::fn#3) [ do10::fn#3 do10::i#2 ] ( main:3::do10:6 [ do10::fn#3 do10::i#2 ] main:3::do10:8 [ do10::fn#3 do10::i#2 ] ) always clobbers reg byte a reg byte x reg byte y
Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10::i#1 ] ( main:3::do10:6 [ do10::fn#3 do10::i#1 ] main:3::do10:8 [ do10::fn#3 do10::i#1 ] ) always clobbers reg byte a
Statement [21] *((const byte*) SCREEN#0 + (byte) idx#11) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 idx#11 ] ( print:17 [ print::msg#3 print::i#2 idx#11 ] print:27 [ print::msg#3 print::i#2 idx#11 ] ) always clobbers reg byte a reg byte x
Statement [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a
Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ print::msg#3 print::i#1 idx#12 ] ( print:17 [ print::msg#3 print::i#1 idx#12 ] print:27 [ print::msg#3 print::i#1 idx#12 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ do10::fn#3 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ do10::i#2 do10::i#1 ] : zp ZP_BYTE:4 ,
Potential registers zp ZP_WORD:5 [ print::msg#3 ] : zp ZP_WORD:5 ,
@ -736,9 +740,9 @@ print: {
inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy
iny
// [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1
// [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1
lda (msg),y
cmp #'@'
cmp #0
bne b1_from_b1
jmp breturn
// print::@return
@ -980,10 +984,10 @@ print: {
inc idx
// [23] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuyy=_inc_vbuyy
iny
// while(msg[i]!='@')
// [24] if(*((byte*) print::msg#3 + (byte) print::i#1)!=(byte) '@') goto print::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1
// while(msg[i])
// [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1
lda (msg),y
cmp #'@'
cmp #0
bne b1
// print::@return
// }

View File

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

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

View File

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

View File

@ -46,7 +46,7 @@ hello: {
inc idx
iny
lda (msg),y
cmp #'@'
cmp #0
bne b1
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)
[20] (byte) idx#1 ← ++ (byte) idx#3
[21] (byte) hello::i#1 ← ++ (byte) hello::i#2
[22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1
[22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1
to:hello::@return
hello::@return: scope:[hello] from hello::@1
[23] return

View File

@ -3,6 +3,7 @@ Resolved forward reference msg1 to (byte[]) msg1
Resolved forward reference msg to (byte*) msg
Resolved forward reference msg2 to (byte[]) msg2
Resolved forward reference msg to (byte*) msg
Warning! Adding boolean cast to non-boolean condition *((byte*) msg + (byte) hello::i)
Culled Empty Block (label) @1
Culled Empty Block (label) do10::@2
Culled Empty Block (label) hello::@2
@ -65,7 +66,7 @@ hello::@1: scope:[hello] from hello hello::@1
*((byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#6 + (byte) hello::i#2)
(byte) idx#1 ← ++ (byte) idx#3
(byte) hello::i#1 ← ++ (byte) hello::i#2
(bool~) hello::$0 ← *((byte*) msg#6 + (byte) hello::i#1) != (byte) '@'
(bool~) hello::$0 ← (number) 0 != *((byte*) msg#6 + (byte) hello::i#1)
if((bool~) hello::$0) goto hello::@1
to:hello::@return
hello::@return: scope:[hello] from hello::@1
@ -150,6 +151,7 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) hello::$0 ← (number) 0 != *((byte*) msg#6 + (byte) hello::i#1)
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) idx#0 ← (unumber)(number) 0
@ -158,9 +160,11 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (void()*) main::f#0 = (void()*~) main::$0 (void()*) main::f#1
Alias (byte*) msg#1 = (byte*) msg#8 (byte*) msg#5 (byte*) msg#2
@ -176,7 +180,7 @@ Identical Phi Values (byte*) msg#6 (byte*) msg#9
Identical Phi Values (byte*) msg#4 (byte*) msg#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) do10::$1 [19] if((byte) do10::i#1!=rangelast(0,9)) goto do10::@1
Simple Condition (bool~) hello::$0 [33] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1
Simple Condition (bool~) hello::$0 [33] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (void()*) main::f#0 ← & (void()) hello()
Successful SSA optimization Pass2ConstantRValueConsolidation
@ -291,7 +295,7 @@ hello::@1: scope:[hello] from hello hello::@1
[19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2)
[20] (byte) idx#1 ← ++ (byte) idx#3
[21] (byte) hello::i#1 ← ++ (byte) hello::i#2
[22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1
[22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1
to:hello::@return
hello::@return: scope:[hello] from hello::@1
[23] return
@ -462,10 +466,10 @@ hello: {
inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuz1=_inc_vbuz1
inc i
// [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1
// [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuz2_then_la1
ldy i
lda (msg),y
cmp #'@'
cmp #0
bne b1_from_b1
jmp breturn
// hello::@return
@ -489,13 +493,13 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ do
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ]
Statement [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a
Statement [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a
Statement [1] (byte*) msg#10 ← (byte*) 0 [ msg#10 ] ( [ msg#10 ] ) always clobbers reg byte a
Statement [2] (byte) idx#0 ← (byte) 0 [ msg#10 idx#0 ] ( [ msg#10 idx#0 ] ) always clobbers reg byte a
Statement [6] (byte*) msg#0 ← (const byte[]) msg1#0 [ msg#10 idx#0 ] ( main:4 [ msg#10 idx#0 ] ) always clobbers reg byte a
Statement [8] (byte*) msg#1 ← (const byte[]) msg2#0 [ msg#10 idx#0 ] ( main:4 [ msg#10 idx#0 ] ) always clobbers reg byte a
Statement [19] *((const byte*) SCREEN#0 + (byte) idx#3) ← *((byte*) msg#10 + (byte) hello::i#2) [ msg#10 idx#0 hello::i#2 idx#3 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#2 idx#3 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#2 idx#3 ] ) always clobbers reg byte a reg byte x
Statement [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a
Statement [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 [ msg#10 idx#0 hello::i#1 idx#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg#10 idx#0 hello::i#1 idx#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ do10::i#2 do10::i#1 ] : zp ZP_BYTE:2 , reg byte y ,
Potential registers zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] : zp ZP_BYTE:3 , reg byte y ,
Potential registers zp ZP_WORD:4 [ msg#0 msg#1 msg#10 ] : zp ZP_WORD:4 ,
@ -636,9 +640,9 @@ hello: {
inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy
iny
// [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1
// [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1
lda (msg),y
cmp #'@'
cmp #0
bne b1_from_b1
jmp breturn
// hello::@return
@ -842,10 +846,10 @@ hello: {
inc idx
// [21] (byte) hello::i#1 ← ++ (byte) hello::i#2 -- vbuyy=_inc_vbuyy
iny
// while(msg[i]!='@')
// [22] if(*((byte*) msg#10 + (byte) hello::i#1)!=(byte) '@') goto hello::@1 -- pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1
// while(msg[i])
// [22] if((byte) 0!=*((byte*) msg#10 + (byte) hello::i#1)) goto hello::@1 -- vbuc1_neq_pbuz1_derefidx_vbuyy_then_la1
lda (msg),y
cmp #'@'
cmp #0
bne b1
// hello::@return
// }

View File

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

View File

@ -16,7 +16,7 @@ main::print21: scope:[main] from main
main::print21_@1: scope:[main] from main::print21 main::print21_@2
[6] (byte) main::print21_j#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_j#1 )
[6] (byte) main::print21_i#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_i#1 )
[7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2
[7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2
to:main::print22
main::print22: scope:[main] from main::print21_@1
[8] phi()
@ -24,7 +24,7 @@ main::print22: scope:[main] from main::print21_@1
main::print22_@1: scope:[main] from main::print22 main::print22_@2
[9] (byte) main::print22_j#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_j#1 )
[9] (byte) main::print22_i#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_i#1 )
[10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2
[10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2
to:main::@return
main::@return: scope:[main] from main::print22_@1
[11] return

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*) main::hello
Inlined call call print2 (byte*) screen (byte*) main::hello
@ -35,7 +36,7 @@ main::print21_@1: scope:[main] from main::print21 main::print21_@2
(byte*) main::print21_at#2 ← phi( main::print21/(byte*) main::print21_at#3 main::print21_@2/(byte*) main::print21_at#1 )
(byte) main::print21_i#2 ← phi( main::print21/(byte) main::print21_i#0 main::print21_@2/(byte) main::print21_i#1 )
(byte*) main::print21_msg#1 ← phi( main::print21/(byte*) main::print21_msg#3 main::print21_@2/(byte*) main::print21_msg#2 )
(bool~) main::print21_$0#0 ← *((byte*) main::print21_msg#1 + (byte) main::print21_i#2) != (byte) '@'
(bool~) main::print21_$0#0 ← (number) 0 != *((byte*) main::print21_msg#1 + (byte) main::print21_i#2)
if((bool~) main::print21_$0#0) goto main::print21_@2
to:main::@1
main::print21_@2: scope:[main] from main::print21_@1
@ -63,7 +64,7 @@ main::print22_@1: scope:[main] from main::print22 main::print22_@2
(byte*) main::print22_at#2 ← phi( main::print22/(byte*) main::print22_at#3 main::print22_@2/(byte*) main::print22_at#1 )
(byte) main::print22_i#2 ← phi( main::print22/(byte) main::print22_i#0 main::print22_@2/(byte) main::print22_i#1 )
(byte*) main::print22_msg#1 ← phi( main::print22/(byte*) main::print22_msg#3 main::print22_@2/(byte*) main::print22_msg#2 )
(bool~) main::print22_$0#0 ← *((byte*) main::print22_msg#1 + (byte) main::print22_i#2) != (byte) '@'
(bool~) main::print22_$0#0 ← (number) 0 != *((byte*) main::print22_msg#1 + (byte) main::print22_i#2)
if((bool~) main::print22_$0#0) goto main::print22_@2
to:main::@return
main::print22_@2: scope:[main] from main::print22_@1
@ -152,10 +153,12 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) 0 in (byte) main::print21_j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) main::print21_i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::print21_$0#0 ← (number) 0 != *((byte*) main::print21_msg#1 + (byte) main::print21_i#2)
Adding number conversion cast (unumber) 2 in (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (number) 2
Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (byte*) screen#0 + (number) $50
Adding number conversion cast (unumber) 0 in (byte) main::print22_j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) main::print22_i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::print22_$0#0 ← (number) 0 != *((byte*) main::print22_msg#1 + (byte) main::print22_i#2)
Adding number conversion cast (unumber) 2 in (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400
@ -167,18 +170,22 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast $50
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $50
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) main::hello#0 = (byte*) main::print21_msg#0 (byte*) main::print21_msg#3 (byte*) main::print22_msg#0 (byte*) main::print22_msg#3
@ -198,8 +205,8 @@ Identical Phi Values (byte*) main::print21_at#1 (byte*) main::print21_at#0
Identical Phi Values (byte*) main::print22_msg#1 (byte*) main::hello#0
Identical Phi Values (byte*) main::print22_at#1 (byte*) main::print22_at#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::print21_$0#0 [9] if(*((byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2
Simple Condition (bool~) main::print22_$0#0 [22] if(*((byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2
Simple Condition (bool~) main::print21_$0#0 [9] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2
Simple Condition (bool~) main::print22_$0#0 [22] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3
@ -271,7 +278,7 @@ main::print21: scope:[main] from main
main::print21_@1: scope:[main] from main::print21 main::print21_@2
[6] (byte) main::print21_j#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_j#1 )
[6] (byte) main::print21_i#2 ← phi( main::print21/(byte) 0 main::print21_@2/(byte) main::print21_i#1 )
[7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2
[7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2
to:main::print22
main::print22: scope:[main] from main::print21_@1
[8] phi()
@ -279,7 +286,7 @@ main::print22: scope:[main] from main::print21_@1
main::print22_@1: scope:[main] from main::print22 main::print22_@2
[9] (byte) main::print22_j#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_j#1 )
[9] (byte) main::print22_i#2 ← phi( main::print22/(byte) 0 main::print22_@2/(byte) main::print22_i#1 )
[10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2
[10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2
to:main::@return
main::@return: scope:[main] from main::print22_@1
[11] return
@ -382,8 +389,8 @@ main: {
jmp print21_b1
// main::print21_@1
print21_b1:
// [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #'@'
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #0
ldy print21_i
cmp hello,y
bne print21_b2
@ -403,8 +410,8 @@ main: {
jmp print22_b1
// main::print22_@1
print22_b1:
// [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #'@'
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #0
ldy print22_i
cmp hello,y
bne print22_b2
@ -457,16 +464,16 @@ main: {
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print21_i#2 main::print21_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print21_j#2 main::print21_j#1 ]
Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print22_i#2 main::print22_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print22_j#2 main::print22_j#1 ]
Statement [12] *((const byte*) main::print22_at#0 + (byte) main::print22_j#2) ← *((const byte*) main::hello#0 + (byte) main::print22_i#2) [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Statement [15] *((const byte*) screen#0 + (byte) main::print21_j#2) ← *((const byte*) main::hello#0 + (byte) main::print21_i#2) [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Statement [12] *((const byte*) main::print22_at#0 + (byte) main::print22_j#2) ← *((const byte*) main::hello#0 + (byte) main::print22_i#2) [ main::print22_i#2 main::print22_j#2 ] ( main:2 [ main::print22_i#2 main::print22_j#2 ] ) always clobbers reg byte a
Statement [15] *((const byte*) screen#0 + (byte) main::print21_j#2) ← *((const byte*) main::hello#0 + (byte) main::print21_i#2) [ main::print21_i#2 main::print21_j#2 ] ( main:2 [ main::print21_i#2 main::print21_j#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::print21_i#2 main::print21_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
@ -522,8 +529,8 @@ main: {
jmp print21_b1
// main::print21_@1
print21_b1:
// [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print21_b2
// [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22]
@ -540,8 +547,8 @@ main: {
jmp print22_b1
// main::print22_@1
print22_b1:
// [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print22_b2
jmp breturn
@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Replacing instruction ldx #0 with TAX
Replacing instruction ldy #0 with TAY
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
@ -686,23 +695,23 @@ main: {
ldy #0
// main::print21_@1
print21_b1:
// for(byte i=0; msg[i]!='@'; i++)
// [7] if(*((const byte*) main::hello#0 + (byte) main::print21_i#2)!=(byte) '@') goto main::print21_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// for(byte i=0; msg[i]; i++)
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print21_i#2)) goto main::print21_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print21_b2
// [8] phi from main::print21_@1 to main::print22 [phi:main::print21_@1->main::print22]
// main::print22
// [9] phi from main::print22 to main::print22_@1 [phi:main::print22->main::print22_@1]
// [9] phi (byte) main::print22_j#2 = (byte) 0 [phi:main::print22->main::print22_@1#0] -- vbuxx=vbuc1
ldx #0
tax
// [9] phi (byte) main::print22_i#2 = (byte) 0 [phi:main::print22->main::print22_@1#1] -- vbuyy=vbuc1
ldy #0
tay
// main::print22_@1
print22_b1:
// for(byte i=0; msg[i]!='@'; i++)
// [10] if(*((const byte*) main::hello#0 + (byte) main::print22_i#2)!=(byte) '@') goto main::print22_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// for(byte i=0; msg[i]; i++)
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print22_i#2)) goto main::print22_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print22_b2
// main::@return
@ -719,7 +728,7 @@ main: {
// [13] (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx
inx
// for(byte i=0; msg[i]!='@'; i++)
// for(byte i=0; msg[i]; i++)
// [14] (byte) main::print22_i#1 ← ++ (byte) main::print22_i#2 -- vbuyy=_inc_vbuyy
iny
// [9] phi from main::print22_@2 to main::print22_@1 [phi:main::print22_@2->main::print22_@1]
@ -736,7 +745,7 @@ main: {
// [16] (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx
inx
// for(byte i=0; msg[i]!='@'; i++)
// for(byte i=0; msg[i]; i++)
// [17] (byte) main::print21_i#1 ← ++ (byte) main::print21_i#2 -- vbuyy=_inc_vbuyy
iny
// [6] phi from main::print21_@2 to main::print21_@1 [phi:main::print21_@2->main::print21_@1]

View File

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

View File

@ -24,7 +24,7 @@ print2: scope:[print2] from main main::@1
print2::@1: scope:[print2] from print2 print2::@2
[10] (byte) print2::j#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::j#1 )
[10] (byte) print2::i#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::i#1 )
[11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2
[11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2
to:print2::@return
print2::@return: scope:[print2] from print2::@1
[12] return

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*) main::hello
Culled Empty Block (label) @1
@ -38,7 +39,7 @@ print2::@1: scope:[print2] from print2 print2::@2
(byte*) print2::at#3 ← phi( print2/(byte*) print2::at#4 print2::@2/(byte*) print2::at#2 )
(byte) print2::i#2 ← phi( print2/(byte) print2::i#0 print2::@2/(byte) print2::i#1 )
(byte*) print2::msg#2 ← phi( print2/(byte*) print2::msg#4 print2::@2/(byte*) print2::msg#3 )
(bool~) print2::$0 ← *((byte*) print2::msg#2 + (byte) print2::i#2) != (byte) '@'
(bool~) print2::$0 ← (number) 0 != *((byte*) print2::msg#2 + (byte) print2::i#2)
if((bool~) print2::$0) goto print2::@2
to:print2::@return
print2::@2: scope:[print2] from print2::@1
@ -106,6 +107,7 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (byte*) screen#0 + (number) $50
Adding number conversion cast (unumber) 0 in (byte) print2::j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) print2::i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print2::$0 ← (number) 0 != *((byte*) print2::msg#2 + (byte) print2::i#2)
Adding number conversion cast (unumber) 2 in (byte) print2::j#1 ← (byte) print2::j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400
@ -116,11 +118,13 @@ Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $50
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $50
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) print2::at#1 = (byte*~) main::$1
@ -132,7 +136,7 @@ Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) print2::msg#2 (byte*) print2::msg#4
Identical Phi Values (byte*) print2::at#2 (byte*) print2::at#4
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print2::$0 [15] if(*((byte*) print2::msg#4 + (byte) print2::i#2)!=(byte) '@') goto print2::@2
Simple Condition (bool~) print2::$0 [15] if((byte) 0!=*((byte*) print2::msg#4 + (byte) print2::i#2)) goto print2::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3
@ -214,7 +218,7 @@ print2: scope:[print2] from main main::@1
print2::@1: scope:[print2] from print2 print2::@2
[10] (byte) print2::j#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::j#1 )
[10] (byte) print2::i#2 ← phi( print2/(byte) 0 print2::@2/(byte) print2::i#1 )
[11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2
[11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2
to:print2::@return
print2::@return: scope:[print2] from print2::@1
[12] return
@ -328,8 +332,8 @@ print2: {
jmp b1
// print2::@1
b1:
// [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #'@'
// [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #0
ldy i
cmp main.hello,y
bne b2
@ -361,11 +365,11 @@ print2: {
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Statement [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ]
Statement [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Statement [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Statement [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Statement [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#4 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#4 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#4 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ print2::at#4 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
@ -376,9 +380,12 @@ Uplift Scope [print2] 33: zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] 22: zp ZP_BYT
Uplift Scope [main]
Uplift Scope []
Uplifting [print2] best 447 combination reg byte x [ print2::i#2 print2::i#1 ] reg byte y [ print2::j#2 print2::j#1 ] zp ZP_WORD:2 [ print2::at#4 ]
Uplifting [main] best 447 combination
Uplifting [] best 447 combination
Uplifting [print2] best 607 combination reg byte x [ print2::i#2 print2::i#1 ] zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] zp ZP_WORD:2 [ print2::at#4 ]
Uplifting [main] best 607 combination
Uplifting [] best 607 combination
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ print2::j#2 print2::j#1 ]
Uplifting [print2] best 607 combination zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ]
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ print2::j#2 print2::j#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -440,19 +447,23 @@ main: {
// print2
// print2(byte* zeropage(2) at)
print2: {
.label j = 4
.label at = 2
// [10] phi from print2 to print2::@1 [phi:print2->print2::@1]
b1_from_print2:
// [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuyy=vbuc1
ldy #0
// [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1
lda #0
sta j
// [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1
ldx #0
jmp b1
// print2::@1
b1:
// [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
lda main.hello,x
cmp #'@'
// [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
txa
tay
lda #0
cmp main.hello,y
bne b2
jmp breturn
// print2::@return
@ -461,12 +472,15 @@ print2: {
rts
// print2::@2
b2:
// [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
// [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx
lda main.hello,x
ldy j
sta (at),y
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2
iny
iny
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2
lda j
clc
adc #2
sta j
// [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx
inx
// [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1]
@ -485,6 +499,8 @@ Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx #0 with TAX
Replacing instruction lda j with TYA
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction main_from_b1:
@ -525,19 +541,19 @@ FINAL SYMBOL TABLE
(byte) print2::i#1 reg byte x 22.0
(byte) print2::i#2 reg byte x 11.0
(byte) print2::j
(byte) print2::j#1 reg byte y 11.0
(byte) print2::j#2 reg byte y 11.0
(byte) print2::j#1 j zp ZP_BYTE:4 11.0
(byte) print2::j#2 j zp ZP_BYTE:4 11.0
(byte*) print2::msg
(byte*) screen
(const byte*) screen#0 screen = (byte*) 1024
zp ZP_WORD:2 [ print2::at#4 ]
reg byte x [ print2::i#2 print2::i#1 ]
reg byte y [ print2::j#2 print2::j#1 ]
zp ZP_BYTE:4 [ print2::j#2 print2::j#1 ]
FINAL ASSEMBLER
Score: 369
Score: 519
// File Comments
// Upstart
@ -585,18 +601,22 @@ main: {
// print2
// print2(byte* zeropage(2) at)
print2: {
.label j = 4
.label at = 2
// [10] phi from print2 to print2::@1 [phi:print2->print2::@1]
// [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuyy=vbuc1
ldy #0
// [10] phi (byte) print2::j#2 = (byte) 0 [phi:print2->print2::@1#0] -- vbuz1=vbuc1
lda #0
sta j
// [10] phi (byte) print2::i#2 = (byte) 0 [phi:print2->print2::@1#1] -- vbuxx=vbuc1
ldx #0
tax
// print2::@1
b1:
// for(byte i=0; msg[i]!='@'; i++)
// [11] if(*((const byte*) main::hello#0 + (byte) print2::i#2)!=(byte) '@') goto print2::@2 -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
lda main.hello,x
cmp #'@'
// for(byte i=0; msg[i]; i++)
// [11] if((byte) 0!=*((const byte*) main::hello#0 + (byte) print2::i#2)) goto print2::@2 -- vbuc1_neq_pbuc2_derefidx_vbuxx_then_la1
txa
tay
lda #0
cmp main.hello,y
bne b2
// print2::@return
// }
@ -605,14 +625,17 @@ print2: {
// print2::@2
b2:
// at[j] = msg[i]
// [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
// [13] *((byte*) print2::at#4 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx
lda main.hello,x
ldy j
sta (at),y
// j += 2
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuyy=vbuyy_plus_2
iny
iny
// for(byte i=0; msg[i]!='@'; i++)
// [14] (byte) print2::j#1 ← (byte) print2::j#2 + (byte) 2 -- vbuz1=vbuz1_plus_2
tya
clc
adc #2
sta j
// for(byte i=0; msg[i]; i++)
// [15] (byte) print2::i#1 ← ++ (byte) print2::i#2 -- vbuxx=_inc_vbuxx
inx
// [10] phi from print2::@2 to print2::@1 [phi:print2::@2->print2::@1]

View File

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

View File

@ -63,7 +63,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 )
[21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 )
[22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
[22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[23] return

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 *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Culled Empty Block (label) @1
Culled Empty Block (label) @2
@ -107,7 +112,7 @@ print_str: scope:[print_str] from main::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#22 ← phi( print_str/(byte*) print_char_cursor#27 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#2 ← phi( print_str/(byte*) print_str::str#4 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#2) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -382,6 +387,7 @@ SYMBOL TABLE SSA
(byte[]) txt#0
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 1 in *((byte[]) txt#0 + (number) 1) ← ++ *((byte[]) txt#0 + (number) 1)
@ -394,12 +400,14 @@ Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $3e8
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
@ -458,7 +466,7 @@ Identical Phi Values (void*) memset::return#0 (void*) memset::str#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1
Simple Condition (bool~) main::$3 [79] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
@ -631,7 +639,7 @@ print_str: scope:[print_str] from main::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 )
[21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 )
[22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2
[22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[23] return
@ -860,10 +868,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -963,7 +971,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ ma
Statement [14] (byte*~) print_char_cursor#31 ← (byte*) print_line_cursor#1 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a
Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
Statement [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:28 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
@ -972,7 +980,7 @@ Statement [10] *((const byte[]) txt#0+(byte) 1) ← ++ *((const byte[]) txt#0+(b
Statement [14] (byte*~) print_char_cursor#31 ← (byte*) print_line_cursor#1 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#31 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a
Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte) $28 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
Statement [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [32] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:5::memset:28 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [34] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:5::memset:28 [ memset::dst#1 ] ) always clobbers reg byte a
@ -1145,10 +1153,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -1488,11 +1496,11 @@ print_str: {
sta str+1
// print_str::@1
b1:
// while(*str!='@')
// [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [22] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

View File

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

View File

@ -16,7 +16,7 @@ main::print1: scope:[main] from main
main::print1_@1: scope:[main] from main::print1 main::print1_@2
[6] (byte) main::print1_j#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_j#1 )
[6] (byte) main::print1_i#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_i#1 )
[7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2
[7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2
to:main::print2
main::print2: scope:[main] from main::print1_@1
[8] phi()
@ -24,7 +24,7 @@ main::print2: scope:[main] from main::print1_@1
main::print2_@1: scope:[main] from main::print2 main::print2_@2
[9] (byte) main::print2_j#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_j#1 )
[9] (byte) main::print2_i#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_i#1 )
[10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2
[10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2
to:main::@return
main::@return: scope:[main] from main::print2_@1
[11] return

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*) main::hello
Inlined call call print (byte*) screen (byte*) main::hello
@ -35,7 +36,7 @@ main::print1_@1: scope:[main] from main::print1 main::print1_@2
(byte*) main::print1_at#2 ← phi( main::print1/(byte*) main::print1_at#3 main::print1_@2/(byte*) main::print1_at#1 )
(byte) main::print1_i#2 ← phi( main::print1/(byte) main::print1_i#0 main::print1_@2/(byte) main::print1_i#1 )
(byte*) main::print1_msg#1 ← phi( main::print1/(byte*) main::print1_msg#3 main::print1_@2/(byte*) main::print1_msg#2 )
(bool~) main::print1_$0#0 ← *((byte*) main::print1_msg#1 + (byte) main::print1_i#2) != (byte) '@'
(bool~) main::print1_$0#0 ← (number) 0 != *((byte*) main::print1_msg#1 + (byte) main::print1_i#2)
if((bool~) main::print1_$0#0) goto main::print1_@2
to:main::@1
main::print1_@2: scope:[main] from main::print1_@1
@ -63,7 +64,7 @@ main::print2_@1: scope:[main] from main::print2 main::print2_@2
(byte*) main::print2_at#2 ← phi( main::print2/(byte*) main::print2_at#3 main::print2_@2/(byte*) main::print2_at#1 )
(byte) main::print2_i#2 ← phi( main::print2/(byte) main::print2_i#0 main::print2_@2/(byte) main::print2_i#1 )
(byte*) main::print2_msg#1 ← phi( main::print2/(byte*) main::print2_msg#3 main::print2_@2/(byte*) main::print2_msg#2 )
(bool~) main::print2_$0#0 ← *((byte*) main::print2_msg#1 + (byte) main::print2_i#2) != (byte) '@'
(bool~) main::print2_$0#0 ← (number) 0 != *((byte*) main::print2_msg#1 + (byte) main::print2_i#2)
if((bool~) main::print2_$0#0) goto main::print2_@2
to:main::@return
main::print2_@2: scope:[main] from main::print2_@1
@ -152,10 +153,12 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) 0 in (byte) main::print1_j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) main::print1_i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::print1_$0#0 ← (number) 0 != *((byte*) main::print1_msg#1 + (byte) main::print1_i#2)
Adding number conversion cast (unumber) 2 in (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (number) 2
Adding number conversion cast (unumber) 2*$28 in (byte*~) main::$1 ← (byte*) screen#0 + (number) 2*(number) $28
Adding number conversion cast (unumber) 0 in (byte) main::print2_j#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) main::print2_i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::print2_$0#0 ← (number) 0 != *((byte*) main::print2_msg#1 + (byte) main::print2_i#2)
Adding number conversion cast (unumber) 2 in (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (number) 2
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#0 ← (byte*)(number) $400
@ -167,16 +170,20 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) main::hello#0 = (byte*) main::print1_msg#0 (byte*) main::print1_msg#3 (byte*) main::print2_msg#0 (byte*) main::print2_msg#3
@ -196,8 +203,8 @@ Identical Phi Values (byte*) main::print1_at#1 (byte*) main::print1_at#0
Identical Phi Values (byte*) main::print2_msg#1 (byte*) main::hello#0
Identical Phi Values (byte*) main::print2_at#1 (byte*) main::print2_at#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::print1_$0#0 [9] if(*((byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2
Simple Condition (bool~) main::print2_$0#0 [22] if(*((byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2
Simple Condition (bool~) main::print1_$0#0 [9] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2
Simple Condition (bool~) main::print2_$0#0 [22] if((byte) 0!=*((byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = (byte*) 1024
Constant (const byte*) main::hello#0 = main::$3
@ -269,7 +276,7 @@ main::print1: scope:[main] from main
main::print1_@1: scope:[main] from main::print1 main::print1_@2
[6] (byte) main::print1_j#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_j#1 )
[6] (byte) main::print1_i#2 ← phi( main::print1/(byte) 0 main::print1_@2/(byte) main::print1_i#1 )
[7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2
[7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2
to:main::print2
main::print2: scope:[main] from main::print1_@1
[8] phi()
@ -277,7 +284,7 @@ main::print2: scope:[main] from main::print1_@1
main::print2_@1: scope:[main] from main::print2 main::print2_@2
[9] (byte) main::print2_j#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_j#1 )
[9] (byte) main::print2_i#2 ← phi( main::print2/(byte) 0 main::print2_@2/(byte) main::print2_i#1 )
[10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2
[10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2
to:main::@return
main::@return: scope:[main] from main::print2_@1
[11] return
@ -381,8 +388,8 @@ main: {
jmp print1_b1
// main::print1_@1
print1_b1:
// [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #'@'
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #0
ldy print1_i
cmp hello,y
bne print1_b2
@ -402,8 +409,8 @@ main: {
jmp print2_b1
// main::print2_@1
print2_b1:
// [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #'@'
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
lda #0
ldy print2_i
cmp hello,y
bne print2_b2
@ -456,16 +463,16 @@ main: {
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ]
Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print2_j#2 main::print2_j#1 ]
Statement [12] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::hello#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [15] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::hello#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Statement [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Statement [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Statement [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [12] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::hello#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [15] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::hello#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
@ -522,8 +529,8 @@ main: {
jmp print1_b1
// main::print1_@1
print1_b1:
// [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print1_b2
// [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2]
@ -540,8 +547,8 @@ main: {
jmp print2_b1
// main::print2_@1
print2_b1:
// [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print2_b2
jmp breturn
@ -612,6 +619,8 @@ Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Replacing instruction ldx #0 with TAX
Replacing instruction ldy #0 with TAY
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
@ -687,23 +696,23 @@ main: {
ldy #0
// main::print1_@1
print1_b1:
// for(byte i=0; msg[i]!='@'; i++)
// [7] if(*((const byte*) main::hello#0 + (byte) main::print1_i#2)!=(byte) '@') goto main::print1_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// for(byte i=0; msg[i]; i++)
// [7] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print1_i#2)) goto main::print1_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print1_b2
// [8] phi from main::print1_@1 to main::print2 [phi:main::print1_@1->main::print2]
// main::print2
// [9] phi from main::print2 to main::print2_@1 [phi:main::print2->main::print2_@1]
// [9] phi (byte) main::print2_j#2 = (byte) 0 [phi:main::print2->main::print2_@1#0] -- vbuxx=vbuc1
ldx #0
tax
// [9] phi (byte) main::print2_i#2 = (byte) 0 [phi:main::print2->main::print2_@1#1] -- vbuyy=vbuc1
ldy #0
tay
// main::print2_@1
print2_b1:
// for(byte i=0; msg[i]!='@'; i++)
// [10] if(*((const byte*) main::hello#0 + (byte) main::print2_i#2)!=(byte) '@') goto main::print2_@2 -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda #'@'
// for(byte i=0; msg[i]; i++)
// [10] if((byte) 0!=*((const byte*) main::hello#0 + (byte) main::print2_i#2)) goto main::print2_@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
lda #0
cmp hello,y
bne print2_b2
// main::@return
@ -720,7 +729,7 @@ main: {
// [13] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx
inx
// for(byte i=0; msg[i]!='@'; i++)
// for(byte i=0; msg[i]; i++)
// [14] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 -- vbuyy=_inc_vbuyy
iny
// [9] phi from main::print2_@2 to main::print2_@1 [phi:main::print2_@2->main::print2_@1]
@ -737,7 +746,7 @@ main: {
// [16] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte) 2 -- vbuxx=vbuxx_plus_2
inx
inx
// for(byte i=0; msg[i]!='@'; i++)
// for(byte i=0; msg[i]; i++)
// [17] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 -- vbuyy=_inc_vbuyy
iny
// [6] phi from main::print1_@2 to main::print1_@1 [phi:main::print1_@2->main::print1_@1]

View File

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

View File

@ -40,7 +40,7 @@ print: scope:[print] from print_msg::@2
print::@1: scope:[print] from print print::@2
[17] (byte*) screen#14 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#6 )
[17] (byte*) print::msg#2 ← phi( print/(byte*) print::msg#0 print::@2/(byte*) print::msg#1 )
[18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2
[18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2
to:print::@return
print::@return: scope:[print] from print::@1
[19] return

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) print_msg::@4
Culled Empty Block (label) print::@4
@ -68,7 +69,7 @@ print: scope:[print] from print_msg::@2
print::@1: scope:[print] from print print::@2
(byte*) screen#19 ← phi( print/(byte*) screen#23 print::@2/(byte*) screen#6 )
(byte*) print::msg#2 ← phi( print/(byte*) print::msg#4 print::@2/(byte*) print::msg#1 )
(bool~) print::$0 ← *((byte*) print::msg#2) != (byte) '@'
(bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2)
if((bool~) print::$0) goto print::@2
to:print::@return
print::@2: scope:[print] from print::@1
@ -162,6 +163,7 @@ SYMBOL TABLE SSA
Adding number conversion cast (unumber) 1 in (byte) print_msg::idx#0 ← (number) 1
Adding number conversion cast (unumber) 2 in (byte) print_msg::idx#1 ← (number) 2
Adding number conversion cast (unumber) 1 in (bool~) print_msg::$0 ← (byte) print_msg::idx#2 == (number) 1
Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2)
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte) print_msg::idx#0 ← (unumber)(number) 1
Inlining cast (byte) print_msg::idx#1 ← (unumber)(number) 2
@ -171,10 +173,12 @@ Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) screen#0 = (byte*) screen#9
Alias (byte*) screen#1 = (byte*) screen#10 (byte*) screen#11 (byte*) screen#2
@ -196,7 +200,7 @@ Identical Phi Values (byte*) screen#23 (byte*) screen#18
Identical Phi Values (byte*) screen#16 (byte*) screen#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print_msg::$0 [15] if((byte) print_msg::idx#2==(byte) 1) goto print_msg::@1
Simple Condition (bool~) print::$0 [32] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2
Simple Condition (bool~) print::$0 [32] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) print_msg::idx#0 = 1
Constant (const byte) print_msg::idx#1 = 2
@ -301,7 +305,7 @@ print: scope:[print] from print_msg::@2
print::@1: scope:[print] from print print::@2
[17] (byte*) screen#14 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#6 )
[17] (byte*) print::msg#2 ← phi( print/(byte*) print::msg#0 print::@2/(byte*) print::msg#1 )
[18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2
[18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2
to:print::@return
print::@return: scope:[print] from print::@1
[19] return
@ -467,10 +471,10 @@ print: {
jmp b1
// print::@1
b1:
// [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print::@return
@ -500,7 +504,7 @@ print: {
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) always clobbers reg byte a
Statement [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y
Statement [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y
Statement [20] *((byte*) screen#14) ← *((byte*) print::msg#2) [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_BYTE:2 [ print_msg::idx#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ] : zp ZP_WORD:3 ,
@ -634,10 +638,10 @@ print: {
jmp b1
// print::@1
b1:
// [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print::@return
@ -835,11 +839,11 @@ print: {
// [17] phi (byte*) print::msg#2 = (byte*) print::msg#0 [phi:print/print::@2->print::@1#1] -- register_copy
// print::@1
b1:
// while(*msg!='@')
// [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*msg)
// [18] if((byte) 0!=*((byte*) print::msg#2)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
// print::@return
// }

View File

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

View File

@ -29,7 +29,7 @@ print: scope:[print] from main main::@1 main::@2
print::@1: scope:[print] from print print::@2
[12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 )
[12] (byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 )
[13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2
[13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2
to:print::@return
print::@return: scope:[print] from print::@1
[14] return

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::@3
Culled Empty Block (label) print::@5
@ -44,7 +45,7 @@ print: scope:[print] from main main::@1 main::@2
print::@1: scope:[print] from print print::@2
(byte*) screen#16 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 )
(byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 )
(bool~) print::$0 ← *((byte*) print::msg#4) != (byte) '@'
(bool~) print::$0 ← (number) 0 != *((byte*) print::msg#4)
if((bool~) print::$0) goto print::@2
to:print::@return
print::@2: scope:[print] from print::@1
@ -121,10 +122,15 @@ SYMBOL TABLE SSA
(byte*) screen#8
(byte*) screen#9
Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#4)
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) screen#4 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) screen#0 = (byte*) screen#8
Alias (byte*) screen#1 = (byte*) screen#9
Alias (byte*) screen#10 = (byte*) screen#2 (byte*) screen#11 (byte*) screen#3
@ -139,7 +145,7 @@ Identical Phi Values (byte*) screen#1 (byte*) screen#12
Identical Phi Values (byte*) screen#10 (byte*) screen#12
Identical Phi Values (byte*) screen#14 (byte*) screen#10
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print::$0 [22] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2
Simple Condition (bool~) print::$0 [22] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte[]) msg1#0 = $0
Constant (const byte[]) main::msg2#0 = main::$3
@ -222,7 +228,7 @@ print: scope:[print] from main main::@1 main::@2
print::@1: scope:[print] from print print::@2
[12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 )
[12] (byte*) print::msg#4 ← phi( print/(byte*) print::msg#6 print::@2/(byte*) print::msg#3 )
[13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2
[13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2
to:print::@return
print::@return: scope:[print] from print::@1
[14] return
@ -351,10 +357,10 @@ print: {
jmp b1
// print::@1
b1:
// [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print::@return
@ -385,7 +391,7 @@ print: {
.byte 0
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y
Statement [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y
Statement [15] *((byte*) screen#12) ← *((byte*) print::msg#4) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ print::msg#4 print::msg#6 print::msg#3 ] : zp ZP_WORD:4 ,
@ -492,10 +498,10 @@ print: {
jmp b1
// print::@1
b1:
// [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print::@return
@ -667,11 +673,11 @@ print: {
// [12] phi (byte*) print::msg#4 = (byte*) print::msg#6 [phi:print/print::@2->print::@1#1] -- register_copy
// print::@1
b1:
// while(*msg!='@')
// [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*msg)
// [13] if((byte) 0!=*((byte*) print::msg#4)) goto print::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (msg),y
cmp #'@'
cmp #0
bne b2
// print::@return
// }

View File

@ -249,7 +249,7 @@ print_str: {
b1:
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
rts
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
[88] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 )
[88] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 )
[89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
[89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[90] return

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::lintab3 + (byte) main::i)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Culled Empty Block (label) @1
Culled Empty Block (label) divr16u::@7
@ -207,7 +212,7 @@ print_str: scope:[print_str] from main::@10 main::@12 main::@14 main::@18 main:
print_str::@1: scope:[print_str] from print_str print_str::@2
(byte*) print_char_cursor#78 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 )
(byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 )
(bool~) print_str::$0 ← *((byte*) print_str::str#10) != (byte) '@'
(bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10)
if((bool~) print_str::$0) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
@ -1244,6 +1249,7 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr
Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1
Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#10)
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28
Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (number) 4
Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#4 & (number) $f
@ -1310,6 +1316,7 @@ Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 4
Simplifying constant integer cast $f
@ -1350,6 +1357,7 @@ Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
@ -1561,7 +1569,7 @@ Simple Condition (bool~) divr16u::$9 [19] if((word) divr16u::rem#6<(word) divr16
Simple Condition (bool~) divr16u::$11 [26] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1
Simple Condition (bool~) memset::$1 [41] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [51] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [65] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_str::$0 [65] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [78] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#11) goto print_ln::@1
Simple Condition (bool~) main::$18 [194] if((byte) main::i#10<(byte) $14) goto main::@2
Simple Condition (bool~) lin16u_gen::$5 [296] if((word) lin16u_gen::i#2<(word) lin16u_gen::length#3) goto lin16u_gen::@2
@ -2124,7 +2132,7 @@ print_str: scope:[print_str] from main::@11 main::@14 main::@16 main::@18 main:
print_str::@1: scope:[print_str] from print_str print_str::@2
[88] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 )
[88] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#12 print_str::@2/(byte*) print_str::str#0 )
[89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
[89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[90] return
@ -3077,10 +3085,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -3498,7 +3506,7 @@ Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ p
Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#12 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a
@ -3537,7 +3545,7 @@ Statement [72] (byte) print_byte::b#1 ← < (word) print_word::w#10 [ print_char
Statement [76] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:73 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) always clobbers reg byte a
Statement [79] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:71 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:71 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:71 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:73 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:34::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:39::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:44::print_byte:73 [ main::i#12 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:52::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:56::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:60::print_byte:73 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a
Statement [84] *((byte*) print_char_cursor#50) ← (byte) print_char::ch#2 [ print_char_cursor#50 ] ( main:2::print_byte:29::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:78 [ print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:78 [ main::i#12 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:78 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:78 [ print_byte::b#3 print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:78 [ main::i#12 print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:78 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#50 ] main:2::print_byte:29::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:15::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:19::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:23::print_byte:71::print_char:81 [ print_word::w#10 print_char_cursor#50 ] main:2::print_word:34::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:39::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:44::print_byte:71::print_char:81 [ main::i#12 print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:52::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:56::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:60::print_byte:71::print_char:81 [ print_line_cursor#1 print_word::w#10 print_char_cursor#50 ] main:2::print_word:15::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:19::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:23::print_byte:73::print_char:81 [ print_char_cursor#50 ] main:2::print_word:34::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:39::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:44::print_byte:73::print_char:81 [ main::i#12 print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:52::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:56::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] main:2::print_word:60::print_byte:73::print_char:81 [ print_line_cursor#1 print_char_cursor#50 ] ) always clobbers reg byte y
Statement [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [91] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::print_str:13 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:17 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:21 [ print_char_cursor#2 print_str::str#10 ] main:2::print_str:31 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:36 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:41 [ main::i#12 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:50 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:54 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::print_str:58 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [99] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::print_cls:11::memset:95 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [101] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::print_cls:11::memset:95 [ memset::dst#1 ] ) always clobbers reg byte a
@ -4250,10 +4258,10 @@ print_str: {
jmp b1
// print_str::@1
b1:
// [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
jmp breturn
// print_str::@return
@ -5552,11 +5560,11 @@ print_str: {
// [88] phi (byte*) print_str::str#10 = (byte*) print_str::str#12 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy
// print_str::@1
b1:
// while(*str!='@')
// [89] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1
// while(*str)
// [89] if((byte) 0!=*((byte*) print_str::str#10)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #'@'
cmp #0
bne b2
// print_str::@return
// }

View File

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

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to:main::@1
main::@1: scope:[main] from main main::@2
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 )
[6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
[6] if((byte) 0!=*((const byte[]) main::msg#0 + (byte) main::i#2)) goto main::@2
to:main::@return
main::@return: scope:[main] from main::@1
[7] return

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

View File

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

View File

@ -1,5 +1,5 @@
// Illustrates both break & continue statements in a loop
// Prints a message ending at '@' skipping all spaces
// Prints a message ending at NUL skipping all spaces
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
@ -12,7 +12,7 @@ main: {
ldx #0
b1:
lda str,x
cmp #'@'
cmp #0
bne b2
breturn:
rts

View File

@ -13,7 +13,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@4
[5] (byte*) main::screen#2 ← phi( main/(byte*) 1024 main::@4/(byte*) main::screen#5 )
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@4/(byte) main::i#1 )
[6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
[6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) 0) goto main::@2
to:main::@return
main::@return: scope:[main] from main::@1 main::@4
[7] return

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