Inlined call call __init Eliminating unused variable with no statement memset::$2 CONTROL FLOW GRAPH SSA void print_ln() print_ln: scope:[print_ln] from main::@16 print_char_cursor#66 = phi( main::@16/print_char_cursor#28 ) print_line_cursor#19 = phi( main::@16/print_line_cursor#21 ) to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 print_char_cursor#34 = phi( print_ln/print_char_cursor#66, print_ln::@1/print_char_cursor#34 ) print_line_cursor#10 = phi( print_ln/print_line_cursor#19, print_ln::@1/print_line_cursor#0 ) print_ln::$0 = print_line_cursor#10 + $28 print_line_cursor#0 = print_ln::$0 print_ln::$1 = print_line_cursor#0 < print_char_cursor#34 if(print_ln::$1) goto print_ln::@1 to:print_ln::@2 print_ln::@2: scope:[print_ln] from print_ln::@1 print_line_cursor#11 = phi( print_ln::@1/print_line_cursor#0 ) print_char_cursor#0 = print_line_cursor#11 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@2 print_char_cursor#35 = phi( print_ln::@2/print_char_cursor#0 ) print_line_cursor#12 = phi( print_ln::@2/print_line_cursor#11 ) print_line_cursor#1 = print_line_cursor#12 print_char_cursor#1 = print_char_cursor#35 return to:@return void print_uint(unsigned int w) print_uint: scope:[print_uint] from main::@5 main::@7 print_ulong print_ulong::@1 print_char_cursor#67 = phi( main::@5/print_char_cursor#17, main::@7/print_char_cursor#19, print_ulong/print_char_cursor#68, print_ulong::@1/print_char_cursor#5 ) print_uint::w#4 = phi( main::@5/print_uint::w#2, main::@7/print_uint::w#3, print_ulong/print_uint::w#0, print_ulong::@1/print_uint::w#1 ) print_uint::$0 = byte1 print_uint::w#4 print_uchar::b#0 = print_uint::$0 call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint print_uint::w#5 = phi( print_uint/print_uint::w#4 ) print_char_cursor#36 = phi( print_uint/print_char_cursor#10 ) print_char_cursor#2 = print_char_cursor#36 print_uint::$2 = byte0 print_uint::w#5 print_uchar::b#1 = print_uint::$2 call print_uchar to:print_uint::@2 print_uint::@2: scope:[print_uint] from print_uint::@1 print_char_cursor#37 = phi( print_uint::@1/print_char_cursor#10 ) print_char_cursor#3 = print_char_cursor#37 to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@2 print_char_cursor#38 = phi( print_uint::@2/print_char_cursor#3 ) print_char_cursor#4 = print_char_cursor#38 return to:@return void print_ulong(unsigned long dw) print_ulong: scope:[print_ulong] from main::@2 print_char_cursor#68 = phi( main::@2/print_char_cursor#71 ) print_ulong::dw#1 = phi( main::@2/print_ulong::dw#0 ) print_ulong::$0 = word1 print_ulong::dw#1 print_uint::w#0 = print_ulong::$0 call print_uint to:print_ulong::@1 print_ulong::@1: scope:[print_ulong] from print_ulong print_ulong::dw#2 = phi( print_ulong/print_ulong::dw#1 ) print_char_cursor#39 = phi( print_ulong/print_char_cursor#4 ) print_char_cursor#5 = print_char_cursor#39 print_ulong::$2 = word0 print_ulong::dw#2 print_uint::w#1 = print_ulong::$2 call print_uint to:print_ulong::@2 print_ulong::@2: scope:[print_ulong] from print_ulong::@1 print_char_cursor#40 = phi( print_ulong::@1/print_char_cursor#4 ) print_char_cursor#6 = print_char_cursor#40 to:print_ulong::@return print_ulong::@return: scope:[print_ulong] from print_ulong::@2 print_char_cursor#41 = phi( print_ulong::@2/print_char_cursor#6 ) print_char_cursor#7 = print_char_cursor#41 return to:@return void print_uchar(char b) print_uchar: scope:[print_uchar] from main::@11 main::@13 main::@15 main::@9 print_uint print_uint::@1 print_char_cursor#69 = phi( main::@11/print_char_cursor#23, main::@13/print_char_cursor#25, main::@15/print_char_cursor#27, main::@9/print_char_cursor#21, print_uint/print_char_cursor#67, print_uint::@1/print_char_cursor#2 ) print_uchar::b#6 = phi( main::@11/print_uchar::b#3, main::@13/print_uchar::b#4, main::@15/print_uchar::b#5, main::@9/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) print_uchar::$0 = print_uchar::b#6 >> 4 print_char::ch#0 = print_hextab[print_uchar::$0] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar print_uchar::b#7 = phi( print_uchar/print_uchar::b#6 ) print_char_cursor#42 = phi( print_uchar/print_char_cursor#12 ) print_char_cursor#8 = print_char_cursor#42 print_uchar::$2 = print_uchar::b#7 & $f print_char::ch#1 = print_hextab[print_uchar::$2] call print_char to:print_uchar::@2 print_uchar::@2: scope:[print_uchar] from print_uchar::@1 print_char_cursor#43 = phi( print_uchar::@1/print_char_cursor#12 ) print_char_cursor#9 = print_char_cursor#43 to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@2 print_char_cursor#44 = phi( print_uchar::@2/print_char_cursor#9 ) print_char_cursor#10 = print_char_cursor#44 return to:@return void print_char(char ch) print_char: scope:[print_char] from main::@10 main::@12 main::@14 main::@4 main::@6 main::@8 print_uchar print_uchar::@1 print_char_cursor#45 = phi( main::@10/print_char_cursor#22, main::@12/print_char_cursor#24, main::@14/print_char_cursor#26, main::@4/print_char_cursor#16, main::@6/print_char_cursor#18, main::@8/print_char_cursor#20, print_uchar/print_char_cursor#69, print_uchar::@1/print_char_cursor#8 ) print_char::ch#8 = phi( main::@10/print_char::ch#5, main::@12/print_char::ch#6, main::@14/print_char::ch#7, main::@4/print_char::ch#2, main::@6/print_char::ch#3, main::@8/print_char::ch#4, print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) *print_char_cursor#45 = print_char::ch#8 print_char_cursor#11 = ++ print_char_cursor#45 to:print_char::@return print_char::@return: scope:[print_char] from print_char print_char_cursor#46 = phi( print_char/print_char_cursor#11 ) print_char_cursor#12 = print_char_cursor#46 return to:@return void print_cls() print_cls: scope:[print_cls] from main print_screen#2 = phi( main/print_screen#5 ) memset::str#0 = (void *)print_screen#2 memset::c#0 = ' ' memset::num#0 = $3e8 call memset memset::return#0 = memset::return#2 to:print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_screen#3 = phi( print_cls/print_screen#2 ) print_line_cursor#2 = print_screen#3 print_char_cursor#13 = print_line_cursor#2 to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls::@1 print_char_cursor#47 = phi( print_cls::@1/print_char_cursor#13 ) print_line_cursor#13 = phi( print_cls::@1/print_line_cursor#2 ) print_line_cursor#3 = print_line_cursor#13 print_char_cursor#14 = print_char_cursor#47 return to:@return void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from print_cls memset::c#4 = phi( print_cls/memset::c#0 ) memset::str#3 = phi( print_cls/memset::str#0 ) memset::num#1 = phi( print_cls/memset::num#0 ) memset::$0 = memset::num#1 > 0 memset::$1 = ! memset::$0 if(memset::$1) goto memset::@1 to:memset::@2 memset::@1: scope:[memset] from memset memset::@3 memset::str#1 = phi( memset/memset::str#3, memset::@3/memset::str#4 ) memset::return#1 = memset::str#1 to:memset::@return memset::@2: scope:[memset] from memset memset::c#3 = phi( memset/memset::c#4 ) memset::num#2 = phi( memset/memset::num#1 ) memset::str#2 = phi( memset/memset::str#3 ) memset::$4 = (char *)memset::str#2 memset::end#0 = memset::$4 + memset::num#2 memset::dst#0 = ((char *)) memset::str#2 to:memset::@3 memset::@3: scope:[memset] from memset::@2 memset::@4 memset::c#2 = phi( memset::@2/memset::c#3, memset::@4/memset::c#1 ) memset::str#4 = phi( memset::@2/memset::str#2, memset::@4/memset::str#5 ) memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 ) memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 ) memset::$3 = memset::dst#2 != memset::end#1 if(memset::$3) goto memset::@4 to:memset::@1 memset::@4: scope:[memset] from memset::@3 memset::str#5 = phi( memset::@3/memset::str#4 ) memset::end#2 = phi( memset::@3/memset::end#1 ) memset::dst#3 = phi( memset::@3/memset::dst#2 ) memset::c#1 = phi( memset::@3/memset::c#2 ) *memset::dst#3 = memset::c#1 memset::dst#1 = ++ memset::dst#3 to:memset::@3 memset::@return: scope:[memset] from memset::@1 memset::return#3 = phi( memset::@1/memset::return#1 ) memset::return#2 = memset::return#3 return to:@return void main() main: scope:[main] from __start::@1 print_char_cursor#70 = phi( __start::@1/print_char_cursor#73 ) print_line_cursor#20 = phi( __start::@1/print_line_cursor#23 ) print_screen#5 = phi( __start::@1/print_screen#7 ) call print_cls to:main::@3 main::@3: scope:[main] from main print_char_cursor#48 = phi( main/print_char_cursor#14 ) print_line_cursor#14 = phi( main/print_line_cursor#3 ) print_line_cursor#4 = print_line_cursor#14 print_char_cursor#15 = print_char_cursor#48 main::dw#0 = $12345678 to:main::@1 main::@1: scope:[main] from main::@17 main::@3 print_char_cursor#72 = phi( main::@17/print_char_cursor#29, main::@3/print_char_cursor#15 ) print_line_cursor#22 = phi( main::@17/print_line_cursor#5, main::@3/print_line_cursor#4 ) main::dw#2 = phi( main::@17/main::dw#1, main::@3/main::dw#0 ) main::$1 = main::dw#2 != $12345690 if(main::$1) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 print_line_cursor#36 = phi( main::@1/print_line_cursor#22 ) print_char_cursor#71 = phi( main::@1/print_char_cursor#72 ) main::dw#3 = phi( main::@1/main::dw#2 ) main::dw2#0 = main::dw#3 main::$3 = word1 main::dw#3 main::$4 = main::$3 + $1111 main::$28 = main::$4 main::dw2#1 = main::dw2#0 word1= main::$28 main::$6 = word0 main::dw#3 main::$7 = main::$6 + $1111 main::$29 = main::$7 main::dw2#2 = main::dw2#1 word0= main::$29 print_ulong::dw#0 = main::dw2#2 call print_ulong to:main::@4 main::@4: scope:[main] from main::@2 main::dw#17 = phi( main::@2/main::dw#3 ) print_line_cursor#35 = phi( main::@2/print_line_cursor#36 ) main::dw2#9 = phi( main::@2/main::dw2#2 ) print_char_cursor#49 = phi( main::@2/print_char_cursor#7 ) print_char_cursor#16 = print_char_cursor#49 print_char::ch#2 = ' ' call print_char to:main::@5 main::@5: scope:[main] from main::@4 main::dw#16 = phi( main::@4/main::dw#17 ) print_line_cursor#34 = phi( main::@4/print_line_cursor#35 ) main::dw2#3 = phi( main::@4/main::dw2#9 ) print_char_cursor#50 = phi( main::@4/print_char_cursor#12 ) print_char_cursor#17 = print_char_cursor#50 main::$10 = word1 main::dw2#3 print_uint::w#2 = main::$10 call print_uint to:main::@6 main::@6: scope:[main] from main::@5 main::dw#15 = phi( main::@5/main::dw#16 ) print_line_cursor#33 = phi( main::@5/print_line_cursor#34 ) main::dw2#10 = phi( main::@5/main::dw2#3 ) print_char_cursor#51 = phi( main::@5/print_char_cursor#4 ) print_char_cursor#18 = print_char_cursor#51 print_char::ch#3 = ' ' call print_char to:main::@7 main::@7: scope:[main] from main::@6 main::dw#14 = phi( main::@6/main::dw#15 ) print_line_cursor#32 = phi( main::@6/print_line_cursor#33 ) main::dw2#4 = phi( main::@6/main::dw2#10 ) print_char_cursor#52 = phi( main::@6/print_char_cursor#12 ) print_char_cursor#19 = print_char_cursor#52 main::$13 = word0 main::dw2#4 print_uint::w#3 = main::$13 call print_uint to:main::@8 main::@8: scope:[main] from main::@7 main::dw#13 = phi( main::@7/main::dw#14 ) print_line_cursor#31 = phi( main::@7/print_line_cursor#32 ) main::dw2#11 = phi( main::@7/main::dw2#4 ) print_char_cursor#53 = phi( main::@7/print_char_cursor#4 ) print_char_cursor#20 = print_char_cursor#53 print_char::ch#4 = ' ' call print_char to:main::@9 main::@9: scope:[main] from main::@8 main::dw#12 = phi( main::@8/main::dw#13 ) print_line_cursor#30 = phi( main::@8/print_line_cursor#31 ) main::dw2#5 = phi( main::@8/main::dw2#11 ) print_char_cursor#54 = phi( main::@8/print_char_cursor#12 ) print_char_cursor#21 = print_char_cursor#54 main::$16 = byte3 main::dw2#5 print_uchar::b#2 = main::$16 call print_uchar to:main::@10 main::@10: scope:[main] from main::@9 main::dw#11 = phi( main::@9/main::dw#12 ) print_line_cursor#29 = phi( main::@9/print_line_cursor#30 ) main::dw2#12 = phi( main::@9/main::dw2#5 ) print_char_cursor#55 = phi( main::@9/print_char_cursor#10 ) print_char_cursor#22 = print_char_cursor#55 print_char::ch#5 = ' ' call print_char to:main::@11 main::@11: scope:[main] from main::@10 main::dw#10 = phi( main::@10/main::dw#11 ) print_line_cursor#28 = phi( main::@10/print_line_cursor#29 ) main::dw2#6 = phi( main::@10/main::dw2#12 ) print_char_cursor#56 = phi( main::@10/print_char_cursor#12 ) print_char_cursor#23 = print_char_cursor#56 main::$19 = byte2 main::dw2#6 print_uchar::b#3 = main::$19 call print_uchar to:main::@12 main::@12: scope:[main] from main::@11 main::dw#9 = phi( main::@11/main::dw#10 ) print_line_cursor#27 = phi( main::@11/print_line_cursor#28 ) main::dw2#13 = phi( main::@11/main::dw2#6 ) print_char_cursor#57 = phi( main::@11/print_char_cursor#10 ) print_char_cursor#24 = print_char_cursor#57 print_char::ch#6 = ' ' call print_char to:main::@13 main::@13: scope:[main] from main::@12 main::dw#8 = phi( main::@12/main::dw#9 ) print_line_cursor#26 = phi( main::@12/print_line_cursor#27 ) main::dw2#7 = phi( main::@12/main::dw2#13 ) print_char_cursor#58 = phi( main::@12/print_char_cursor#12 ) print_char_cursor#25 = print_char_cursor#58 main::$22 = byte1 main::dw2#7 print_uchar::b#4 = main::$22 call print_uchar to:main::@14 main::@14: scope:[main] from main::@13 main::dw#7 = phi( main::@13/main::dw#8 ) print_line_cursor#25 = phi( main::@13/print_line_cursor#26 ) main::dw2#14 = phi( main::@13/main::dw2#7 ) print_char_cursor#59 = phi( main::@13/print_char_cursor#10 ) print_char_cursor#26 = print_char_cursor#59 print_char::ch#7 = ' ' call print_char to:main::@15 main::@15: scope:[main] from main::@14 main::dw#6 = phi( main::@14/main::dw#7 ) print_line_cursor#24 = phi( main::@14/print_line_cursor#25 ) main::dw2#8 = phi( main::@14/main::dw2#14 ) print_char_cursor#60 = phi( main::@14/print_char_cursor#12 ) print_char_cursor#27 = print_char_cursor#60 main::$25 = byte0 main::dw2#8 print_uchar::b#5 = main::$25 call print_uchar to:main::@16 main::@16: scope:[main] from main::@15 main::dw#5 = phi( main::@15/main::dw#6 ) print_line_cursor#21 = phi( main::@15/print_line_cursor#24 ) print_char_cursor#61 = phi( main::@15/print_char_cursor#10 ) print_char_cursor#28 = print_char_cursor#61 call print_ln to:main::@17 main::@17: scope:[main] from main::@16 main::dw#4 = phi( main::@16/main::dw#5 ) print_char_cursor#62 = phi( main::@16/print_char_cursor#1 ) print_line_cursor#15 = phi( main::@16/print_line_cursor#1 ) print_line_cursor#5 = print_line_cursor#15 print_char_cursor#29 = print_char_cursor#62 main::dw#1 = ++ main::dw#4 to:main::@1 main::@return: scope:[main] from main::@1 print_char_cursor#63 = phi( main::@1/print_char_cursor#72 ) print_line_cursor#16 = phi( main::@1/print_line_cursor#22 ) print_line_cursor#6 = print_line_cursor#16 print_char_cursor#30 = print_char_cursor#63 return to:@return void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start print_screen#0 = (char *)$400 print_line_cursor#7 = print_screen#0 print_char_cursor#31 = print_line_cursor#7 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 print_screen#7 = phi( __start::__init1/print_screen#0 ) print_char_cursor#73 = phi( __start::__init1/print_char_cursor#31 ) print_line_cursor#23 = phi( __start::__init1/print_line_cursor#7 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 print_screen#6 = phi( __start::@1/print_screen#7 ) print_char_cursor#64 = phi( __start::@1/print_char_cursor#30 ) print_line_cursor#17 = phi( __start::@1/print_line_cursor#6 ) print_line_cursor#8 = print_line_cursor#17 print_char_cursor#32 = print_char_cursor#64 to:__start::@return __start::@return: scope:[__start] from __start::@2 print_char_cursor#65 = phi( __start::@2/print_char_cursor#32 ) print_line_cursor#18 = phi( __start::@2/print_line_cursor#8 ) print_screen#4 = phi( __start::@2/print_screen#6 ) print_screen#1 = print_screen#4 print_line_cursor#9 = print_line_cursor#18 print_char_cursor#33 = print_char_cursor#65 return to:@return SYMBOL TABLE SSA __constant char RADIX::BINARY = 2 __constant char RADIX::DECIMAL = $a __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 void __start() void main() bool main::$1 unsigned int main::$10 unsigned int main::$13 char main::$16 char main::$19 char main::$22 char main::$25 unsigned int main::$28 unsigned int main::$29 unsigned int main::$3 number main::$4 unsigned int main::$6 number main::$7 unsigned long main::dw unsigned long main::dw#0 unsigned long main::dw#1 unsigned long main::dw#10 unsigned long main::dw#11 unsigned long main::dw#12 unsigned long main::dw#13 unsigned long main::dw#14 unsigned long main::dw#15 unsigned long main::dw#16 unsigned long main::dw#17 unsigned long main::dw#2 unsigned long main::dw#3 unsigned long main::dw#4 unsigned long main::dw#5 unsigned long main::dw#6 unsigned long main::dw#7 unsigned long main::dw#8 unsigned long main::dw#9 unsigned long main::dw2 unsigned long main::dw2#0 unsigned long main::dw2#1 unsigned long main::dw2#10 unsigned long main::dw2#11 unsigned long main::dw2#12 unsigned long main::dw2#13 unsigned long main::dw2#14 unsigned long main::dw2#2 unsigned long main::dw2#3 unsigned long main::dw2#4 unsigned long main::dw2#5 unsigned long main::dw2#6 unsigned long main::dw2#7 unsigned long main::dw2#8 unsigned long main::dw2#9 void * memset(void *str , char c , unsigned int num) bool memset::$0 bool memset::$1 bool memset::$3 char *memset::$4 char memset::c char memset::c#0 char memset::c#1 char memset::c#2 char memset::c#3 char memset::c#4 char *memset::dst char *memset::dst#0 char *memset::dst#1 char *memset::dst#2 char *memset::dst#3 char *memset::end char *memset::end#0 char *memset::end#1 char *memset::end#2 unsigned int memset::num unsigned int memset::num#0 unsigned int memset::num#1 unsigned int memset::num#2 void *memset::return void *memset::return#0 void *memset::return#1 void *memset::return#2 void *memset::return#3 void *memset::str void *memset::str#0 void *memset::str#1 void *memset::str#2 void *memset::str#3 void *memset::str#4 void *memset::str#5 void print_char(char ch) char print_char::ch char print_char::ch#0 char print_char::ch#1 char print_char::ch#2 char print_char::ch#3 char print_char::ch#4 char print_char::ch#5 char print_char::ch#6 char print_char::ch#7 char print_char::ch#8 char *print_char_cursor char *print_char_cursor#0 char *print_char_cursor#1 char *print_char_cursor#10 char *print_char_cursor#11 char *print_char_cursor#12 char *print_char_cursor#13 char *print_char_cursor#14 char *print_char_cursor#15 char *print_char_cursor#16 char *print_char_cursor#17 char *print_char_cursor#18 char *print_char_cursor#19 char *print_char_cursor#2 char *print_char_cursor#20 char *print_char_cursor#21 char *print_char_cursor#22 char *print_char_cursor#23 char *print_char_cursor#24 char *print_char_cursor#25 char *print_char_cursor#26 char *print_char_cursor#27 char *print_char_cursor#28 char *print_char_cursor#29 char *print_char_cursor#3 char *print_char_cursor#30 char *print_char_cursor#31 char *print_char_cursor#32 char *print_char_cursor#33 char *print_char_cursor#34 char *print_char_cursor#35 char *print_char_cursor#36 char *print_char_cursor#37 char *print_char_cursor#38 char *print_char_cursor#39 char *print_char_cursor#4 char *print_char_cursor#40 char *print_char_cursor#41 char *print_char_cursor#42 char *print_char_cursor#43 char *print_char_cursor#44 char *print_char_cursor#45 char *print_char_cursor#46 char *print_char_cursor#47 char *print_char_cursor#48 char *print_char_cursor#49 char *print_char_cursor#5 char *print_char_cursor#50 char *print_char_cursor#51 char *print_char_cursor#52 char *print_char_cursor#53 char *print_char_cursor#54 char *print_char_cursor#55 char *print_char_cursor#56 char *print_char_cursor#57 char *print_char_cursor#58 char *print_char_cursor#59 char *print_char_cursor#6 char *print_char_cursor#60 char *print_char_cursor#61 char *print_char_cursor#62 char *print_char_cursor#63 char *print_char_cursor#64 char *print_char_cursor#65 char *print_char_cursor#66 char *print_char_cursor#67 char *print_char_cursor#68 char *print_char_cursor#69 char *print_char_cursor#7 char *print_char_cursor#70 char *print_char_cursor#71 char *print_char_cursor#72 char *print_char_cursor#73 char *print_char_cursor#8 char *print_char_cursor#9 void print_cls() __constant const char print_hextab[] = "0123456789abcdef"z char *print_line_cursor char *print_line_cursor#0 char *print_line_cursor#1 char *print_line_cursor#10 char *print_line_cursor#11 char *print_line_cursor#12 char *print_line_cursor#13 char *print_line_cursor#14 char *print_line_cursor#15 char *print_line_cursor#16 char *print_line_cursor#17 char *print_line_cursor#18 char *print_line_cursor#19 char *print_line_cursor#2 char *print_line_cursor#20 char *print_line_cursor#21 char *print_line_cursor#22 char *print_line_cursor#23 char *print_line_cursor#24 char *print_line_cursor#25 char *print_line_cursor#26 char *print_line_cursor#27 char *print_line_cursor#28 char *print_line_cursor#29 char *print_line_cursor#3 char *print_line_cursor#30 char *print_line_cursor#31 char *print_line_cursor#32 char *print_line_cursor#33 char *print_line_cursor#34 char *print_line_cursor#35 char *print_line_cursor#36 char *print_line_cursor#4 char *print_line_cursor#5 char *print_line_cursor#6 char *print_line_cursor#7 char *print_line_cursor#8 char *print_line_cursor#9 void print_ln() char *print_ln::$0 bool print_ln::$1 char *print_screen char *print_screen#0 char *print_screen#1 char *print_screen#2 char *print_screen#3 char *print_screen#4 char *print_screen#5 char *print_screen#6 char *print_screen#7 void print_uchar(char b) char print_uchar::$0 number print_uchar::$2 char print_uchar::b char print_uchar::b#0 char print_uchar::b#1 char print_uchar::b#2 char print_uchar::b#3 char print_uchar::b#4 char print_uchar::b#5 char print_uchar::b#6 char print_uchar::b#7 void print_uint(unsigned int w) char print_uint::$0 char print_uint::$2 unsigned int print_uint::w unsigned int print_uint::w#0 unsigned int print_uint::w#1 unsigned int print_uint::w#2 unsigned int print_uint::w#3 unsigned int print_uint::w#4 unsigned int print_uint::w#5 void print_ulong(unsigned long dw) unsigned int print_ulong::$0 unsigned int print_ulong::$2 unsigned long print_ulong::dw unsigned long print_ulong::dw#0 unsigned long print_ulong::dw#1 unsigned long print_ulong::dw#2 Adding number conversion cast (unumber) $28 in print_ln::$0 = print_line_cursor#10 + $28 Adding number conversion cast (unumber) 4 in print_uchar::$0 = print_uchar::b#6 >> 4 Adding number conversion cast (unumber) $f in print_uchar::$2 = print_uchar::b#7 & $f Adding number conversion cast (unumber) print_uchar::$2 in print_uchar::$2 = print_uchar::b#7 & (unumber)$f Adding number conversion cast (unumber) $3e8 in memset::num#0 = $3e8 Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#1 > 0 Adding number conversion cast (unumber) $12345690 in main::$1 = main::dw#2 != $12345690 Adding number conversion cast (unumber) $1111 in main::$4 = main::$3 + $1111 Adding number conversion cast (unumber) main::$4 in main::$4 = main::$3 + (unumber)$1111 Adding number conversion cast (unumber) $1111 in main::$7 = main::$6 + $1111 Adding number conversion cast (unumber) main::$7 in main::$7 = main::$6 + (unumber)$1111 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast memset::num#0 = (unumber)$3e8 Inlining cast memset::dst#0 = (char *)memset::str#2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Simplifying constant integer cast $12345690 Simplifying constant integer cast $1111 Simplifying constant integer cast $1111 Simplifying constant pointer cast (char *) 1024 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) $28 Finalized unsigned number type (char) 4 Finalized unsigned number type (char) $f Finalized unsigned number type (unsigned int) $3e8 Finalized unsigned number type (char) 0 Finalized unsigned number type (unsigned long) $12345690 Finalized unsigned number type (unsigned int) $1111 Finalized unsigned number type (unsigned int) $1111 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to char in print_uchar::$2 = print_uchar::b#7 & $f Inferred type updated to unsigned int in main::$4 = main::$3 + $1111 Inferred type updated to unsigned int in main::$7 = main::$6 + $1111 Inversing boolean not [75] memset::$1 = memset::num#1 <= 0 from [74] memset::$0 = memset::num#1 > 0 Successful SSA optimization Pass2UnaryNotSimplification Alias print_line_cursor#0 = print_ln::$0 print_line_cursor#11 print_char_cursor#0 print_line_cursor#12 print_char_cursor#35 print_line_cursor#1 print_char_cursor#1 Alias print_uchar::b#0 = print_uint::$0 Alias print_uint::w#4 = print_uint::w#5 Alias print_char_cursor#2 = print_char_cursor#36 Alias print_uchar::b#1 = print_uint::$2 Alias print_char_cursor#3 = print_char_cursor#37 print_char_cursor#38 print_char_cursor#4 Alias print_uint::w#0 = print_ulong::$0 Alias print_ulong::dw#1 = print_ulong::dw#2 Alias print_char_cursor#39 = print_char_cursor#5 Alias print_uint::w#1 = print_ulong::$2 Alias print_char_cursor#40 = print_char_cursor#6 print_char_cursor#41 print_char_cursor#7 Alias print_uchar::b#6 = print_uchar::b#7 Alias print_char_cursor#42 = print_char_cursor#8 Alias print_char_cursor#10 = print_char_cursor#9 print_char_cursor#43 print_char_cursor#44 Alias print_char_cursor#11 = print_char_cursor#46 print_char_cursor#12 Alias print_line_cursor#13 = print_screen#3 print_screen#2 print_line_cursor#2 print_char_cursor#13 print_char_cursor#47 print_line_cursor#3 print_char_cursor#14 Alias memset::return#1 = memset::str#1 memset::return#3 memset::return#2 Alias memset::str#2 = memset::str#3 Alias memset::num#1 = memset::num#2 Alias memset::c#3 = memset::c#4 Alias memset::c#1 = memset::c#2 Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#4 = memset::str#5 Alias print_line_cursor#14 = print_line_cursor#4 Alias print_char_cursor#15 = print_char_cursor#48 Alias main::dw#10 = main::dw#3 main::dw#2 main::dw2#0 main::dw#17 main::dw#16 main::dw#15 main::dw#14 main::dw#13 main::dw#12 main::dw#11 main::dw#9 main::dw#8 main::dw#7 main::dw#6 main::dw#5 main::dw#4 Alias print_char_cursor#30 = print_char_cursor#71 print_char_cursor#72 print_char_cursor#63 Alias print_line_cursor#16 = print_line_cursor#36 print_line_cursor#22 print_line_cursor#35 print_line_cursor#34 print_line_cursor#33 print_line_cursor#32 print_line_cursor#31 print_line_cursor#30 print_line_cursor#29 print_line_cursor#28 print_line_cursor#27 print_line_cursor#26 print_line_cursor#25 print_line_cursor#24 print_line_cursor#21 print_line_cursor#6 Alias main::$28 = main::$4 Alias main::$29 = main::$7 Alias main::dw2#10 = main::dw2#9 main::dw2#2 main::dw2#3 main::dw2#4 main::dw2#11 main::dw2#5 main::dw2#12 main::dw2#6 main::dw2#13 main::dw2#7 main::dw2#14 main::dw2#8 Alias print_char_cursor#16 = print_char_cursor#49 Alias print_char_cursor#17 = print_char_cursor#50 Alias print_uint::w#2 = main::$10 Alias print_char_cursor#18 = print_char_cursor#51 Alias print_char_cursor#19 = print_char_cursor#52 Alias print_uint::w#3 = main::$13 Alias print_char_cursor#20 = print_char_cursor#53 Alias print_char_cursor#21 = print_char_cursor#54 Alias print_uchar::b#2 = main::$16 Alias print_char_cursor#22 = print_char_cursor#55 Alias print_char_cursor#23 = print_char_cursor#56 Alias print_uchar::b#3 = main::$19 Alias print_char_cursor#24 = print_char_cursor#57 Alias print_char_cursor#25 = print_char_cursor#58 Alias print_uchar::b#4 = main::$22 Alias print_char_cursor#26 = print_char_cursor#59 Alias print_char_cursor#27 = print_char_cursor#60 Alias print_uchar::b#5 = main::$25 Alias print_char_cursor#28 = print_char_cursor#61 Alias print_line_cursor#15 = print_line_cursor#5 Alias print_char_cursor#29 = print_char_cursor#62 Alias print_screen#0 = print_line_cursor#7 print_char_cursor#31 print_line_cursor#23 print_char_cursor#73 print_screen#7 print_screen#6 print_screen#4 print_screen#1 Alias print_line_cursor#17 = print_line_cursor#8 print_line_cursor#18 print_line_cursor#9 Alias print_char_cursor#32 = print_char_cursor#64 print_char_cursor#65 print_char_cursor#33 Successful SSA optimization Pass2AliasElimination Identical Phi Values print_line_cursor#19 print_line_cursor#16 Identical Phi Values print_char_cursor#66 print_char_cursor#28 Identical Phi Values print_char_cursor#34 print_char_cursor#66 Identical Phi Values print_char_cursor#2 print_char_cursor#10 Identical Phi Values print_char_cursor#3 print_char_cursor#10 Identical Phi Values print_ulong::dw#1 print_ulong::dw#0 Identical Phi Values print_char_cursor#68 print_char_cursor#30 Identical Phi Values print_char_cursor#39 print_char_cursor#3 Identical Phi Values print_char_cursor#40 print_char_cursor#3 Identical Phi Values print_char_cursor#42 print_char_cursor#11 Identical Phi Values print_char_cursor#10 print_char_cursor#11 Identical Phi Values print_line_cursor#13 print_screen#5 Identical Phi Values memset::num#1 memset::num#0 Identical Phi Values memset::str#2 memset::str#0 Identical Phi Values memset::c#3 memset::c#0 Identical Phi Values memset::end#1 memset::end#0 Identical Phi Values memset::str#4 memset::str#2 Identical Phi Values memset::c#1 memset::c#3 Identical Phi Values print_screen#5 print_screen#0 Identical Phi Values print_line_cursor#20 print_screen#0 Identical Phi Values print_char_cursor#70 print_screen#0 Identical Phi Values print_line_cursor#14 print_line_cursor#13 Identical Phi Values print_char_cursor#15 print_line_cursor#13 Identical Phi Values print_char_cursor#16 print_char_cursor#40 Identical Phi Values print_char_cursor#17 print_char_cursor#11 Identical Phi Values print_char_cursor#18 print_char_cursor#3 Identical Phi Values print_char_cursor#19 print_char_cursor#11 Identical Phi Values print_char_cursor#20 print_char_cursor#3 Identical Phi Values print_char_cursor#21 print_char_cursor#11 Identical Phi Values print_char_cursor#22 print_char_cursor#10 Identical Phi Values print_char_cursor#23 print_char_cursor#11 Identical Phi Values print_char_cursor#24 print_char_cursor#10 Identical Phi Values print_char_cursor#25 print_char_cursor#11 Identical Phi Values print_char_cursor#26 print_char_cursor#10 Identical Phi Values print_char_cursor#27 print_char_cursor#11 Identical Phi Values print_char_cursor#28 print_char_cursor#10 Identical Phi Values print_line_cursor#15 print_line_cursor#0 Identical Phi Values print_char_cursor#29 print_line_cursor#0 Identical Phi Values print_line_cursor#17 print_line_cursor#16 Identical Phi Values print_char_cursor#32 print_char_cursor#30 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values memset::return#1 memset::str#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition print_ln::$1 [4] if(print_line_cursor#0> 4 [62] print_char::ch#0 = print_hextab[print_uchar::$0] [63] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar [64] print_uchar::$2 = print_uchar::b#6 & $f [65] print_char::ch#1 = print_hextab[print_uchar::$2] [66] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 [67] return to:@return void print_ln() print_ln: scope:[print_ln] from main::@15 [68] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@2 [69] print_line_cursor#10 = phi( print_ln/print_line_cursor#16, print_ln::@2/print_line_cursor#38 ) [70] print_line_cursor#0 = print_line_cursor#10 + $28 [71] if(print_line_cursor#0> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Statement [64] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a Statement [70] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a Statement [71] if(print_line_cursor#0> 4 [ print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#45 = print_char_cursor#67 print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#0 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#69 print_uchar::b#6 print_uchar::$0 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#0 = print_char::ch#8 } } ) always clobbers reg byte a Statement [64] print_uchar::$2 = print_uchar::b#6 & $f [ print_char_cursor#11 print_uchar::$2 ] ( print_uchar:24 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:28 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#3 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:32 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#4 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uchar:36 [ main::dw#10 print_line_cursor#16 print_char_cursor#11 print_uchar::$2 ] { { print_uchar::b#5 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 print_char_cursor#69 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } { print_char_cursor#11 = print_char_cursor#45 } } print_ulong:12::print_uint:48::print_uchar:56 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_uint::w#4 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#0 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:16::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#2 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_uint:20::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_uint::w#3 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:46::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_ulong::dw#0 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#0 = print_uint::w#4 } { print_char_cursor#67 = print_char_cursor#76 } { print_uchar::b#1 = print_uchar::b#6 } { print_char_cursor#11 = print_char_cursor#69 print_char_cursor#45 } { print_char::ch#1 = print_char::ch#8 } } print_ulong:12::print_uint:48::print_uchar:58 [ main::dw#10 print_line_cursor#16 main::dw2#10 print_char_cursor#11 print_uchar::$2 ] { { print_ulong::dw#0 = main::dw2#10 } { print_uint::w#1 = print_uint::w#4 } { print_char_cursor#11 = print_char_cursor#67 print_char_cursor#69 print_char_cursor#45 } { print_uchar::b#1 = print_uchar::b#6 } { print_char::ch#1 = print_char::ch#8 } } ) always clobbers reg byte a Statement [70] print_line_cursor#0 = print_line_cursor#10 + $28 [ print_line_cursor#0 print_char_cursor#11 ] ( print_ln:38 [ main::dw#10 print_line_cursor#0 print_char_cursor#11 ] { } ) always clobbers reg byte a Statement [71] if(print_line_cursor#0print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor_1+1 // [2] phi print_line_cursor#16 = print_screen#0 [phi:main->main::@1#1] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor_1+1 // [2] phi main::dw#10 = $12345678 [phi:main->main::@1#2] -- vduz1=vduc1 lda #<$12345678 sta.z dw lda #>$12345678 sta.z dw+1 lda #<$12345678>>$10 sta.z dw+2 lda #>$12345678>>$10 sta.z dw+3 jmp __b1 // main::@1 __b1: // [3] if(main::dw#10!=$12345690) goto main::@2 -- vduz1_neq_vduc1_then_la1 lda.z dw+3 cmp #>$12345690>>$10 bne __b2 lda.z dw+2 cmp #<$12345690>>$10 bne __b2 lda.z dw+1 cmp #>$12345690 bne __b2 lda.z dw cmp #<$12345690 bne __b2 jmp __breturn // main::@return __breturn: // [4] return rts // main::@2 __b2: // [5] main::$3 = word1 main::dw#10 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z __3 lda.z dw+3 sta.z __3+1 // [6] main::$28 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 lda.z __28 clc adc #<$1111 sta.z __28 lda.z __28+1 adc #>$1111 sta.z __28+1 // [7] main::dw2#1 = main::dw#10 word1= main::$28 -- vduz1=vduz2_setword1_vwuz3 lda.z dw sta.z dw2 lda.z dw+1 sta.z dw2+1 lda.z __28 sta.z dw2+2 lda.z __28+1 sta.z dw2+3 // [8] main::$6 = word0 main::dw#10 -- vwuz1=_word0_vduz2 lda.z dw sta.z __6 lda.z dw+1 sta.z __6+1 // [9] main::$29 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 lda.z __29 clc adc #<$1111 sta.z __29 lda.z __29+1 adc #>$1111 sta.z __29+1 // [10] main::dw2#10 = main::dw2#1 word0= main::$29 -- vduz1=vduz1_setword0_vwuz2 lda.z __29 sta.z dw2 lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 // main::@4 __b4: // [15] print_uint::w#2 = word1 main::dw2#10 -- vwuz1=_word1_vduz2 lda.z dw2+2 sta.z print_uint.w lda.z dw2+3 sta.z print_uint.w+1 // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 // main::@5 __b5: // [18] call print_char // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b6 // main::@6 __b6: // [19] print_uint::w#3 = word0 main::dw2#10 -- vwuz1=_word0_vduz2 lda.z dw2 sta.z print_uint.w lda.z dw2+1 sta.z print_uint.w+1 // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: jmp __b7 // main::@7 __b7: // [22] call print_char // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b8 // main::@8 __b8: // [23] print_uchar::b#2 = byte3 main::dw2#10 -- vbuxx=_byte3_vduz1 ldx.z dw2+3 // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: jmp __b9 // main::@9 __b9: // [26] call print_char // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b10 // main::@10 __b10: // [27] print_uchar::b#3 = byte2 main::dw2#10 -- vbuxx=_byte2_vduz1 ldx.z dw2+2 // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: jmp __b11 // main::@11 __b11: // [30] call print_char // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b12 // main::@12 __b12: // [31] print_uchar::b#4 = byte1 main::dw2#10 -- vbuxx=_byte1_vduz1 ldx.z dw2+1 // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: jmp __b13 // main::@13 __b13: // [34] call print_char // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b14 // main::@14 __b14: // [35] print_uchar::b#5 = byte0 main::dw2#10 -- vbuxx=_byte0_vduz1 ldx.z dw2 // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: // [38] call print_ln // Test get low low byte of dword // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from___b15: jsr print_ln jmp __b16 // main::@16 __b16: // [39] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 inc.z dw bne !+ inc.z dw+1 bne !+ inc.z dw+2 bne !+ inc.z dw+3 !: // [40] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 sta.z print_line_cursor_1+1 // [2] phi from main::@16 to main::@1 [phi:main::@16->main::@1] __b1_from___b16: // [2] phi print_char_cursor#30 = print_line_cursor#0 [phi:main::@16->main::@1#0] -- register_copy // [2] phi print_line_cursor#16 = print_line_cursor#39 [phi:main::@16->main::@1#1] -- register_copy // [2] phi main::dw#10 = main::dw#1 [phi:main::@16->main::@1#2] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // [42] call memset // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: // [43] return rts } // print_ulong // Print a unsigned long as HEX // void print_ulong(__zp($a) unsigned long dw) print_ulong: { .label dw = $a // [44] print_uint::w#0 = word1 print_ulong::dw#0 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z print_uint.w lda.z dw+3 sta.z print_uint.w+1 // [45] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 lda.z print_char_cursor_1 sta.z print_char_cursor lda.z print_char_cursor_1+1 sta.z print_char_cursor+1 // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 __b1: // [47] print_uint::w#1 = word0 print_ulong::dw#0 -- vwuz1=_word0_vduz2 lda.z dw sta.z print_uint.w lda.z dw+1 sta.z print_uint.w+1 // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return __breturn: // [49] return rts } // print_char // Print a single char // void print_char(__register(A) char ch) print_char: { // [51] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // [52] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: jmp __breturn // print_char::@return __breturn: // [53] return rts } // print_uint // Print a unsigned int as HEX // void print_uint(__zp(8) unsigned int w) print_uint: { .label w = 8 // [55] print_uchar::b#0 = byte1 print_uint::w#4 -- vbuxx=_byte1_vwuz1 ldx.z w+1 // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 __b1: // [57] print_uchar::b#1 = byte0 print_uint::w#4 -- vbuxx=_byte0_vwuz1 ldx.z w // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return __breturn: // [59] return rts } // print_uchar // Print a char as HEX // void print_uchar(__register(X) char b) print_uchar: { // [61] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // [62] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [63] call print_char // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 __b1: // [64] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // [65] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return __breturn: // [67] return rts } // print_ln // Print a newline print_ln: { // [69] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] __b1_from_print_ln: __b1_from___b2: // [69] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy jmp __b1 // print_ln::@1 __b1: // [70] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z print_line_cursor_1 sta.z print_line_cursor lda #0 adc.z print_line_cursor_1+1 sta.z print_line_cursor+1 // [71] if(print_line_cursor#0memset::@1] __b1_from_memset: // [75] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str sta.z dst+1 jmp __b1 // memset::@1 __b1: // [76] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 lda.z dst cmp #memset::@1] __b1_from___b2: // [75] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data .segment Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b4 Removing instruction jmp __b5 Removing instruction jmp __b6 Removing instruction jmp __b7 Removing instruction jmp __b8 Removing instruction jmp __b9 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 Removing instruction jmp __b13 Removing instruction jmp __b14 Removing instruction jmp __b15 Removing instruction jmp __b16 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z print_line_cursor+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b1_from___b2 with __b1 Removing instruction __b3_from___b2: Removing instruction print_char_from___b3: Removing instruction __b5_from___b4: Removing instruction __b7_from___b6: Removing instruction __b9_from___b8: Removing instruction __b11_from___b10: Removing instruction __b13_from___b12: Removing instruction __b15_from___b14: Removing instruction __b1_from_print_ln: Removing instruction __b1_from___b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction print_cls_from_main: Removing instruction __b1_from_main: Removing instruction __breturn: Removing instruction __b3: Removing instruction __b4: Removing instruction print_uint_from___b4: Removing instruction __b5: Removing instruction print_char_from___b5: Removing instruction __b6: Removing instruction print_uint_from___b6: Removing instruction __b7: Removing instruction print_char_from___b7: Removing instruction __b8: Removing instruction print_uchar_from___b8: Removing instruction __b9: Removing instruction print_char_from___b9: Removing instruction __b10: Removing instruction print_uchar_from___b10: Removing instruction __b11: Removing instruction print_char_from___b11: Removing instruction __b12: Removing instruction print_uchar_from___b12: Removing instruction __b13: Removing instruction print_char_from___b13: Removing instruction __b14: Removing instruction print_uchar_from___b14: Removing instruction __b15: Removing instruction print_ln_from___b15: Removing instruction __b16: Removing instruction __b1_from___b16: Removing instruction memset_from_print_cls: Removing instruction __breturn: Removing instruction print_uint_from_print_ulong: Removing instruction __b1: Removing instruction print_uint_from___b1: Removing instruction __breturn: Removing instruction __breturn: Removing instruction print_uchar_from_print_uint: Removing instruction __b1: Removing instruction print_uchar_from___b1: Removing instruction __breturn: Removing instruction print_char_from_print_uchar: Removing instruction __b1: Removing instruction print_char_from___b1: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __b1_from_memset: Removing instruction __breturn: Removing instruction __b1_from___b2: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char RADIX::BINARY = 2 __constant char RADIX::DECIMAL = $a __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 void main() unsigned int main::$28 // zp[2]:8 22.0 unsigned int main::$29 // zp[2]:2 22.0 unsigned int main::$3 // zp[2]:8 22.0 unsigned int main::$6 // zp[2]:2 22.0 unsigned long main::dw unsigned long main::dw#1 // dw zp[4]:14 11.0 unsigned long main::dw#10 // dw zp[4]:14 1.8333333333333335 unsigned long main::dw2 unsigned long main::dw2#1 // dw2 zp[4]:10 7.333333333333333 unsigned long main::dw2#10 // dw2 zp[4]:10 3.52 void * memset(void *str , char c , unsigned int num) char memset::c __constant char memset::c#0 = ' ' // c char *memset::dst char *memset::dst#1 // dst zp[2]:6 2002.0 char *memset::dst#2 // dst zp[2]:6 1334.6666666666667 char *memset::end __constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end unsigned int memset::num __constant unsigned int memset::num#0 = $3e8 // num void *memset::return void *memset::str __constant void *memset::str#0 = (void *)print_screen#0 // str void print_char(char ch) char print_char::ch char print_char::ch#0 // reg byte a 20002.0 char print_char::ch#1 // reg byte a 20002.0 char print_char::ch#8 // reg byte a 120003.0 char *print_char_cursor char *print_char_cursor#11 // print_char_cursor zp[2]:2 2635.5869565217386 char *print_char_cursor#30 // print_char_cursor_1 zp[2]:6 11.2 char *print_char_cursor#45 // print_char_cursor zp[2]:2 110035.0 char *print_char_cursor#67 // print_char_cursor zp[2]:2 612.5 char *print_char_cursor#69 // print_char_cursor zp[2]:2 4015.6666666666656 char *print_char_cursor#76 // print_char_cursor zp[2]:2 202.0 void print_cls() __constant const char print_hextab[] = "0123456789abcdef"z char *print_line_cursor char *print_line_cursor#0 // print_line_cursor zp[2]:6 5004.166666666666 char *print_line_cursor#10 // print_line_cursor_1 zp[2]:4 20103.0 char *print_line_cursor#16 // print_line_cursor_1 zp[2]:4 3.1111111111111107 char *print_line_cursor#38 // print_line_cursor_1 zp[2]:4 20002.0 char *print_line_cursor#39 // print_line_cursor_1 zp[2]:4 22.0 void print_ln() char *print_screen __constant char *print_screen#0 = (char *) 1024 // print_screen void print_uchar(char b) char print_uchar::$0 // reg byte a 20002.0 char print_uchar::$2 // reg byte x 20002.0 char print_uchar::b char print_uchar::b#0 // reg byte x 2002.0 char print_uchar::b#1 // reg byte x 2002.0 char print_uchar::b#2 // reg byte x 22.0 char print_uchar::b#3 // reg byte x 22.0 char print_uchar::b#4 // reg byte x 22.0 char print_uchar::b#5 // reg byte x 22.0 char print_uchar::b#6 // reg byte x 5512.0 void print_uint(unsigned int w) unsigned int print_uint::w unsigned int print_uint::w#0 // w zp[2]:8 101.0 unsigned int print_uint::w#1 // w zp[2]:8 202.0 unsigned int print_uint::w#2 // w zp[2]:8 22.0 unsigned int print_uint::w#3 // w zp[2]:8 22.0 unsigned int print_uint::w#4 // w zp[2]:8 742.0 void print_ulong(unsigned long dw) unsigned long print_ulong::dw unsigned long print_ulong::dw#0 // dw zp[4]:10 53.25 zp[4]:14 [ main::dw#10 main::dw#1 ] reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ] reg byte x [ print_uchar::b#6 print_uchar::b#3 print_uchar::b#4 print_uchar::b#5 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] zp[2]:4 [ print_line_cursor#10 print_line_cursor#16 print_line_cursor#39 print_line_cursor#38 ] zp[2]:6 [ memset::dst#2 memset::dst#1 print_char_cursor#30 print_line_cursor#0 ] zp[2]:8 [ main::$3 main::$28 print_uint::w#4 print_uint::w#2 print_uint::w#3 print_uint::w#0 print_uint::w#1 ] zp[4]:10 [ main::dw2#1 main::dw2#10 print_ulong::dw#0 ] zp[2]:2 [ main::$6 main::$29 print_char_cursor#67 print_char_cursor#45 print_char_cursor#11 print_char_cursor#69 print_char_cursor#76 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] FINAL ASSEMBLER Score: 8232 // File Comments /// @file /// A lightweight library for printing on the C64. /// /// Printing with this library is done by calling print_ function for each element // Upstart // Commodore 64 PRG executable file .file [name="test-lowhigh.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) // Global Constants & labels .label print_screen = $400 .label print_line_cursor = 6 .label print_char_cursor = 2 .label print_char_cursor_1 = 6 .label print_line_cursor_1 = 4 .segment Code // main main: { .label __3 = 8 .label __6 = 2 .label __28 = 8 .label __29 = 2 .label dw2 = $a .label dw = $e // print_cls() // [1] call print_cls // [41] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor_1+1 // [2] phi print_line_cursor#16 = print_screen#0 [phi:main->main::@1#1] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor_1+1 // [2] phi main::dw#10 = $12345678 [phi:main->main::@1#2] -- vduz1=vduc1 lda #<$12345678 sta.z dw lda #>$12345678 sta.z dw+1 lda #<$12345678>>$10 sta.z dw+2 lda #>$12345678>>$10 sta.z dw+3 // main::@1 __b1: // for( dword dw = $12345678; dw != $12345690; dw++ ) // [3] if(main::dw#10!=$12345690) goto main::@2 -- vduz1_neq_vduc1_then_la1 lda.z dw+3 cmp #>$12345690>>$10 bne __b2 lda.z dw+2 cmp #<$12345690>>$10 bne __b2 lda.z dw+1 cmp #>$12345690 bne __b2 lda.z dw cmp #<$12345690 bne __b2 // main::@return // } // [4] return rts // main::@2 __b2: // WORD1(dw) // [5] main::$3 = word1 main::dw#10 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z __3 lda.z dw+3 sta.z __3+1 // WORD1(dw2) = WORD1(dw) + $1111 // [6] main::$28 = main::$3 + $1111 -- vwuz1=vwuz1_plus_vwuc1 lda.z __28 clc adc #<$1111 sta.z __28 lda.z __28+1 adc #>$1111 sta.z __28+1 // [7] main::dw2#1 = main::dw#10 word1= main::$28 -- vduz1=vduz2_setword1_vwuz3 lda.z dw sta.z dw2 lda.z dw+1 sta.z dw2+1 lda.z __28 sta.z dw2+2 lda.z __28+1 sta.z dw2+3 // WORD0(dw) // [8] main::$6 = word0 main::dw#10 -- vwuz1=_word0_vduz2 lda.z dw sta.z __6 lda.z dw+1 sta.z __6+1 // WORD0(dw2) = WORD0(dw) + $1111 // [9] main::$29 = main::$6 + $1111 -- vwuz1=vwuz1_plus_vwuc1 lda.z __29 clc adc #<$1111 sta.z __29 lda.z __29+1 adc #>$1111 sta.z __29+1 // [10] main::dw2#10 = main::dw2#1 word0= main::$29 -- vduz1=vduz1_setword0_vwuz2 lda.z __29 sta.z dw2 lda.z __29+1 sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_char(' ') // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@4 // print_uint(WORD1(dw2)) // [15] print_uint::w#2 = word1 main::dw2#10 -- vwuz1=_word1_vduz2 lda.z dw2+2 sta.z print_uint.w lda.z dw2+3 sta.z print_uint.w+1 // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_char(' ') // [18] call print_char // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@6 // print_uint(WORD0(dw2)) // [19] print_uint::w#3 = word0 main::dw2#10 -- vwuz1=_word0_vduz2 lda.z dw2 sta.z print_uint.w lda.z dw2+1 sta.z print_uint.w+1 // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // print_char(' ') // [22] call print_char // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@8 // print_uchar(BYTE3(dw2)) // [23] print_uchar::b#2 = byte3 main::dw2#10 -- vbuxx=_byte3_vduz1 ldx.z dw2+3 // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // print_char(' ') // [26] call print_char // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@10 // print_uchar(BYTE2(dw2)) // [27] print_uchar::b#3 = byte2 main::dw2#10 -- vbuxx=_byte2_vduz1 ldx.z dw2+2 // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // print_char(' ') // [30] call print_char // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@12 // print_uchar(BYTE1(dw2)) // [31] print_uchar::b#4 = byte1 main::dw2#10 -- vbuxx=_byte1_vduz1 ldx.z dw2+1 // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_char(' ') // [34] call print_char // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@14 // print_uchar(BYTE0(dw2)) // [35] print_uchar::b#5 = byte0 main::dw2#10 -- vbuxx=_byte0_vduz1 ldx.z dw2 // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() // [38] call print_ln // Test get low low byte of dword // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) // [39] main::dw#1 = ++ main::dw#10 -- vduz1=_inc_vduz1 inc.z dw bne !+ inc.z dw+1 bne !+ inc.z dw+2 bne !+ inc.z dw+3 !: // [40] print_line_cursor#39 = print_line_cursor#0 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_line_cursor_1 lda.z print_line_cursor+1 sta.z print_line_cursor_1+1 // [2] phi from main::@16 to main::@1 [phi:main::@16->main::@1] // [2] phi print_char_cursor#30 = print_line_cursor#0 [phi:main::@16->main::@1#0] -- register_copy // [2] phi print_line_cursor#16 = print_line_cursor#39 [phi:main::@16->main::@1#1] -- register_copy // [2] phi main::dw#10 = main::dw#1 [phi:main::@16->main::@1#2] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) // [42] call memset // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } // [43] return rts } // print_ulong // Print a unsigned long as HEX // void print_ulong(__zp($a) unsigned long dw) print_ulong: { .label dw = $a // print_uint(WORD1(dw)) // [44] print_uint::w#0 = word1 print_ulong::dw#0 -- vwuz1=_word1_vduz2 lda.z dw+2 sta.z print_uint.w lda.z dw+3 sta.z print_uint.w+1 // [45] print_char_cursor#76 = print_char_cursor#30 -- pbuz1=pbuz2 lda.z print_char_cursor_1 sta.z print_char_cursor lda.z print_char_cursor_1+1 sta.z print_char_cursor+1 // print_uint(WORD1(dw)) // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) // [47] print_uint::w#1 = word0 print_ulong::dw#0 -- vwuz1=_word0_vduz2 lda.z dw sta.z print_uint.w lda.z dw+1 sta.z print_uint.w+1 // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } // [49] return rts } // print_char // Print a single char // void print_char(__register(A) char ch) print_char: { // *(print_char_cursor++) = ch // [51] *print_char_cursor#45 = print_char::ch#8 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; // [52] print_char_cursor#11 = ++ print_char_cursor#45 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: // print_char::@return // } // [53] return rts } // print_uint // Print a unsigned int as HEX // void print_uint(__zp(8) unsigned int w) print_uint: { .label w = 8 // print_uchar(BYTE1(w)) // [55] print_uchar::b#0 = byte1 print_uint::w#4 -- vbuxx=_byte1_vwuz1 ldx.z w+1 // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) // [57] print_uchar::b#1 = byte0 print_uint::w#4 -- vbuxx=_byte0_vwuz1 ldx.z w // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } // [59] return rts } // print_uchar // Print a char as HEX // void print_uchar(__register(X) char b) print_uchar: { // b>>4 // [61] print_uchar::$0 = print_uchar::b#6 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) // [62] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [63] call print_char // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&0xf // [64] print_uchar::$2 = print_uchar::b#6 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&0xf]) // [65] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } // [67] return rts } // print_ln // Print a newline print_ln: { // [69] phi from print_ln print_ln::@2 to print_ln::@1 [phi:print_ln/print_ln::@2->print_ln::@1] // [69] phi print_line_cursor#10 = print_line_cursor#16 [phi:print_ln/print_ln::@2->print_ln::@1#0] -- register_copy // print_ln::@1 __b1: // print_line_cursor + 0x28 // [70] print_line_cursor#0 = print_line_cursor#10 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z print_line_cursor_1 sta.z print_line_cursor lda #0 adc.z print_line_cursor_1+1 sta.z print_line_cursor+1 // while (print_line_cursormemset::@1] // [75] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str sta.z dst+1 // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) // [76] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 lda.z dst cmp #memset::@1] // [75] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data .segment Data print_hextab: .text "0123456789abcdef"