kickc/src/test/ref/linegen.log

4573 lines
267 KiB
Plaintext

Inlined call call __init
Eliminating unused variable with no statement memset::$2
Eliminating unused variable with no statement lin16u_gen::$0
Eliminating unused variable with no statement lin16u_gen::$2
Eliminating unused variable with no statement lin16u_gen::$4
Eliminating unused variable with no statement lin16u_gen::$5
Eliminating unused variable with no statement lin16u_gen::$6
CONTROL FLOW GRAPH SSA
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3
divr16u::divisor#6 = phi( lin16u_gen/divr16u::divisor#0, lin16u_gen::@3/divr16u::divisor#1 )
divr16u::dividend#5 = phi( lin16u_gen/divr16u::dividend#1, lin16u_gen::@3/divr16u::dividend#2 )
divr16u::rem#10 = phi( lin16u_gen/divr16u::rem#3, lin16u_gen::@3/divr16u::rem#4 )
divr16u::quotient#0 = 0
divr16u::i#0 = 0
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
divr16u::i#5 = phi( divr16u/divr16u::i#0, divr16u::@3/divr16u::i#1 )
divr16u::divisor#4 = phi( divr16u/divr16u::divisor#6, divr16u::@3/divr16u::divisor#7 )
divr16u::quotient#6 = phi( divr16u/divr16u::quotient#0, divr16u::@3/divr16u::quotient#8 )
divr16u::dividend#3 = phi( divr16u/divr16u::dividend#5, divr16u::@3/divr16u::dividend#6 )
divr16u::rem#5 = phi( divr16u/divr16u::rem#10, divr16u::@3/divr16u::rem#11 )
divr16u::$0 = divr16u::rem#5 << 1
divr16u::rem#0 = divr16u::$0
divr16u::$1 = byte1 divr16u::dividend#3
divr16u::$2 = divr16u::$1 & $80
divr16u::$3 = divr16u::$2 != 0
divr16u::$4 = ! divr16u::$3
if(divr16u::$4) goto divr16u::@2
to:divr16u::@4
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
divr16u::i#3 = phi( divr16u::@1/divr16u::i#5, divr16u::@4/divr16u::i#6 )
divr16u::divisor#2 = phi( divr16u::@1/divr16u::divisor#4, divr16u::@4/divr16u::divisor#5 )
divr16u::rem#6 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 )
divr16u::quotient#3 = phi( divr16u::@1/divr16u::quotient#6, divr16u::@4/divr16u::quotient#7 )
divr16u::dividend#4 = phi( divr16u::@1/divr16u::dividend#3, divr16u::@4/divr16u::dividend#7 )
divr16u::$6 = divr16u::dividend#4 << 1
divr16u::dividend#0 = divr16u::$6
divr16u::$7 = divr16u::quotient#3 << 1
divr16u::quotient#1 = divr16u::$7
divr16u::$8 = divr16u::rem#6 >= divr16u::divisor#2
divr16u::$9 = ! divr16u::$8
if(divr16u::$9) goto divr16u::@3
to:divr16u::@5
divr16u::@4: scope:[divr16u] from divr16u::@1
divr16u::i#6 = phi( divr16u::@1/divr16u::i#5 )
divr16u::divisor#5 = phi( divr16u::@1/divr16u::divisor#4 )
divr16u::quotient#7 = phi( divr16u::@1/divr16u::quotient#6 )
divr16u::dividend#7 = phi( divr16u::@1/divr16u::dividend#3 )
divr16u::rem#7 = phi( divr16u::@1/divr16u::rem#0 )
divr16u::$5 = divr16u::rem#7 | 1
divr16u::rem#1 = divr16u::$5
to:divr16u::@2
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
divr16u::divisor#7 = phi( divr16u::@2/divr16u::divisor#2, divr16u::@5/divr16u::divisor#3 )
divr16u::quotient#8 = phi( divr16u::@2/divr16u::quotient#1, divr16u::@5/divr16u::quotient#2 )
divr16u::dividend#6 = phi( divr16u::@2/divr16u::dividend#0, divr16u::@5/divr16u::dividend#8 )
divr16u::rem#11 = phi( divr16u::@2/divr16u::rem#6, divr16u::@5/divr16u::rem#2 )
divr16u::i#2 = phi( divr16u::@2/divr16u::i#3, divr16u::@5/divr16u::i#4 )
divr16u::i#1 = divr16u::i#2 + rangenext(0,$f)
divr16u::$11 = divr16u::i#1 != rangelast(0,$f)
if(divr16u::$11) goto divr16u::@1
to:divr16u::@6
divr16u::@5: scope:[divr16u] from divr16u::@2
divr16u::dividend#8 = phi( divr16u::@2/divr16u::dividend#0 )
divr16u::i#4 = phi( divr16u::@2/divr16u::i#3 )
divr16u::divisor#3 = phi( divr16u::@2/divr16u::divisor#2 )
divr16u::rem#8 = phi( divr16u::@2/divr16u::rem#6 )
divr16u::quotient#4 = phi( divr16u::@2/divr16u::quotient#1 )
divr16u::quotient#2 = ++ divr16u::quotient#4
divr16u::$10 = divr16u::rem#8 - divr16u::divisor#3
divr16u::rem#2 = divr16u::$10
to:divr16u::@3
divr16u::@6: scope:[divr16u] from divr16u::@3
divr16u::quotient#5 = phi( divr16u::@3/divr16u::quotient#8 )
divr16u::rem#9 = phi( divr16u::@3/divr16u::rem#11 )
rem16u#0 = divr16u::rem#9
divr16u::return#0 = divr16u::quotient#5
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
rem16u#12 = phi( divr16u::@6/rem16u#0 )
divr16u::return#4 = phi( divr16u::@6/divr16u::return#0 )
divr16u::return#1 = divr16u::return#4
rem16u#1 = rem16u#12
return
to:@return
void print_str(char *str)
print_str: scope:[print_str] from main::@11 main::@15 main::@17 main::@19 main::@24 main::@26 main::@3 main::@7 main::@9
print_char_cursor#89 = phi( main::@11/print_char_cursor#18, main::@15/print_char_cursor#22, main::@17/print_char_cursor#24, main::@19/print_char_cursor#26, main::@24/print_char_cursor#31, main::@26/print_char_cursor#33, main::@3/print_char_cursor#87, main::@7/print_char_cursor#14, main::@9/print_char_cursor#16 )
print_str::str#13 = phi( main::@11/print_str::str#3, main::@15/print_str::str#4, main::@17/print_str::str#5, main::@19/print_str::str#6, main::@24/print_str::str#8, main::@26/print_str::str#9, main::@3/print_str::str#7, main::@7/print_str::str#1, main::@9/print_str::str#2 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@3
print_char_cursor#81 = phi( print_str/print_char_cursor#89, print_str::@3/print_char_cursor#0 )
print_str::str#10 = phi( print_str/print_str::str#13, print_str::@3/print_str::str#0 )
print_str::$1 = 0 != *print_str::str#10
if(print_str::$1) goto print_str::@2
to:print_str::@return
print_str::@2: scope:[print_str] from print_str::@1
print_char_cursor#80 = phi( print_str::@1/print_char_cursor#81 )
print_str::str#11 = phi( print_str::@1/print_str::str#10 )
print_char::ch#0 = *print_str::str#11
call print_char
to:print_str::@3
print_str::@3: scope:[print_str] from print_str::@2
print_str::str#12 = phi( print_str::@2/print_str::str#11 )
print_char_cursor#41 = phi( print_str::@2/print_char_cursor#11 )
print_char_cursor#0 = print_char_cursor#41
print_str::str#0 = ++ print_str::str#12
to:print_str::@1
print_str::@return: scope:[print_str] from print_str::@1
print_char_cursor#42 = phi( print_str::@1/print_char_cursor#81 )
print_char_cursor#1 = print_char_cursor#42
return
to:@return
void print_ln()
print_ln: scope:[print_ln] from main::@13 main::@21 main::@28
print_char_cursor#82 = phi( main::@13/print_char_cursor#20, main::@21/print_char_cursor#28, main::@28/print_char_cursor#35 )
print_line_cursor#23 = phi( main::@13/print_line_cursor#25, main::@21/print_line_cursor#26, main::@28/print_line_cursor#27 )
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
print_char_cursor#43 = phi( print_ln/print_char_cursor#82, print_ln::@1/print_char_cursor#43 )
print_line_cursor#12 = phi( print_ln/print_line_cursor#23, print_ln::@1/print_line_cursor#0 )
print_ln::$0 = print_line_cursor#12 + $28
print_line_cursor#0 = print_ln::$0
print_ln::$1 = print_line_cursor#0 < print_char_cursor#43
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#13 = phi( print_ln::@1/print_line_cursor#0 )
print_char_cursor#2 = print_line_cursor#13
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@2
print_char_cursor#44 = phi( print_ln::@2/print_char_cursor#2 )
print_line_cursor#14 = phi( print_ln::@2/print_line_cursor#13 )
print_line_cursor#1 = print_line_cursor#14
print_char_cursor#3 = print_char_cursor#44
return
to:@return
void print_uint(unsigned int w)
print_uint: scope:[print_uint] from main::@10 main::@12 main::@16 main::@18 main::@20 main::@23 main::@25 main::@27 main::@8
print_char_cursor#83 = phi( main::@10/print_char_cursor#17, main::@12/print_char_cursor#19, main::@16/print_char_cursor#23, main::@18/print_char_cursor#25, main::@20/print_char_cursor#27, main::@23/print_char_cursor#30, main::@25/print_char_cursor#32, main::@27/print_char_cursor#34, main::@8/print_char_cursor#15 )
print_uint::w#9 = phi( main::@10/print_uint::w#1, main::@12/print_uint::w#2, main::@16/print_uint::w#3, main::@18/print_uint::w#4, main::@20/print_uint::w#5, main::@23/print_uint::w#6, main::@25/print_uint::w#7, main::@27/print_uint::w#8, main::@8/print_uint::w#0 )
print_uint::$0 = byte1 print_uint::w#9
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#10 = phi( print_uint/print_uint::w#9 )
print_char_cursor#45 = phi( print_uint/print_char_cursor#9 )
print_char_cursor#4 = print_char_cursor#45
print_uint::$2 = byte0 print_uint::w#10
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#46 = phi( print_uint::@1/print_char_cursor#9 )
print_char_cursor#5 = print_char_cursor#46
to:print_uint::@return
print_uint::@return: scope:[print_uint] from print_uint::@2
print_char_cursor#47 = phi( print_uint::@2/print_char_cursor#5 )
print_char_cursor#6 = print_char_cursor#47
return
to:@return
void print_uchar(char b)
print_uchar: scope:[print_uchar] from main::@2 print_uint print_uint::@1
print_char_cursor#84 = phi( main::@2/print_char_cursor#86, print_uint/print_char_cursor#83, print_uint::@1/print_char_cursor#4 )
print_uchar::b#3 = phi( main::@2/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 )
print_uchar::$0 = print_uchar::b#3 >> 4
print_char::ch#1 = print_hextab[print_uchar::$0]
call print_char
to:print_uchar::@1
print_uchar::@1: scope:[print_uchar] from print_uchar
print_uchar::b#4 = phi( print_uchar/print_uchar::b#3 )
print_char_cursor#48 = phi( print_uchar/print_char_cursor#11 )
print_char_cursor#7 = print_char_cursor#48
print_uchar::$2 = print_uchar::b#4 & $f
print_char::ch#2 = 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#49 = phi( print_uchar::@1/print_char_cursor#11 )
print_char_cursor#8 = print_char_cursor#49
to:print_uchar::@return
print_uchar::@return: scope:[print_uchar] from print_uchar::@2
print_char_cursor#50 = phi( print_uchar::@2/print_char_cursor#8 )
print_char_cursor#9 = print_char_cursor#50
return
to:@return
void print_char(char ch)
print_char: scope:[print_char] from print_str::@2 print_uchar print_uchar::@1
print_char_cursor#51 = phi( print_str::@2/print_char_cursor#80, print_uchar/print_char_cursor#84, print_uchar::@1/print_char_cursor#7 )
print_char::ch#3 = phi( print_str::@2/print_char::ch#0, print_uchar/print_char::ch#1, print_uchar::@1/print_char::ch#2 )
*print_char_cursor#51 = print_char::ch#3
print_char_cursor#10 = ++ print_char_cursor#51
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
print_char_cursor#52 = phi( print_char/print_char_cursor#10 )
print_char_cursor#11 = print_char_cursor#52
return
to:@return
void print_cls()
print_cls: scope:[print_cls] from main::@6
print_screen#2 = phi( main::@6/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#12 = print_line_cursor#2
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
print_char_cursor#53 = phi( print_cls::@1/print_char_cursor#12 )
print_line_cursor#15 = phi( print_cls::@1/print_line_cursor#2 )
print_line_cursor#3 = print_line_cursor#15
print_char_cursor#13 = print_char_cursor#53
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#93 = phi( __start::@1/print_char_cursor#88 )
print_line_cursor#37 = phi( __start::@1/print_line_cursor#28 )
print_screen#10 = phi( __start::@1/print_screen#8 )
rem16u#22 = phi( __start::@1/rem16u#26 )
lin16u_gen::min#0 = $22d
lin16u_gen::max#0 = $7461
lin16u_gen::lintab#0 = main::lintab1
lin16u_gen::length#0 = $14
call lin16u_gen
to:main::@4
main::@4: scope:[main] from main
print_char_cursor#92 = phi( main/print_char_cursor#93 )
print_line_cursor#33 = phi( main/print_line_cursor#37 )
print_screen#9 = phi( main/print_screen#10 )
rem16u#13 = phi( main/rem16u#8 )
rem16u#2 = rem16u#13
lin16u_gen::min#1 = $79cb
lin16u_gen::max#1 = $f781
lin16u_gen::lintab#1 = main::lintab2
lin16u_gen::length#1 = $14
call lin16u_gen
to:main::@5
main::@5: scope:[main] from main::@4
print_char_cursor#90 = phi( main::@4/print_char_cursor#92 )
print_line_cursor#29 = phi( main::@4/print_line_cursor#33 )
print_screen#7 = phi( main::@4/print_screen#9 )
rem16u#14 = phi( main::@4/rem16u#8 )
rem16u#3 = rem16u#14
lin16u_gen::min#2 = 0
lin16u_gen::max#2 = $6488
lin16u_gen::lintab#2 = main::lintab3
lin16u_gen::length#2 = $14
call lin16u_gen
to:main::@6
main::@6: scope:[main] from main::@5
print_char_cursor#85 = phi( main::@5/print_char_cursor#90 )
print_line_cursor#24 = phi( main::@5/print_line_cursor#29 )
print_screen#5 = phi( main::@5/print_screen#7 )
rem16u#15 = phi( main::@5/rem16u#8 )
rem16u#4 = rem16u#15
call print_cls
to:main::@7
main::@7: scope:[main] from main::@6
rem16u#50 = phi( main::@6/rem16u#4 )
print_char_cursor#54 = phi( main::@6/print_char_cursor#13 )
print_line_cursor#16 = phi( main::@6/print_line_cursor#3 )
print_line_cursor#4 = print_line_cursor#16
print_char_cursor#14 = print_char_cursor#54
print_str::str#1 = main::str
call print_str
to:main::@8
main::@8: scope:[main] from main::@7
rem16u#48 = phi( main::@7/rem16u#50 )
print_line_cursor#44 = phi( main::@7/print_line_cursor#4 )
print_char_cursor#55 = phi( main::@7/print_char_cursor#1 )
print_char_cursor#15 = print_char_cursor#55
print_uint::w#0 = $22d
call print_uint
to:main::@9
main::@9: scope:[main] from main::@8
rem16u#46 = phi( main::@8/rem16u#48 )
print_line_cursor#41 = phi( main::@8/print_line_cursor#44 )
print_char_cursor#56 = phi( main::@8/print_char_cursor#6 )
print_char_cursor#16 = print_char_cursor#56
print_str::str#2 = main::str1
call print_str
to:main::@10
main::@10: scope:[main] from main::@9
rem16u#44 = phi( main::@9/rem16u#46 )
print_line_cursor#38 = phi( main::@9/print_line_cursor#41 )
print_char_cursor#57 = phi( main::@9/print_char_cursor#1 )
print_char_cursor#17 = print_char_cursor#57
print_uint::w#1 = $79cb
call print_uint
to:main::@11
main::@11: scope:[main] from main::@10
rem16u#42 = phi( main::@10/rem16u#44 )
print_line_cursor#34 = phi( main::@10/print_line_cursor#38 )
print_char_cursor#58 = phi( main::@10/print_char_cursor#6 )
print_char_cursor#18 = print_char_cursor#58
print_str::str#3 = main::str2
call print_str
to:main::@12
main::@12: scope:[main] from main::@11
rem16u#40 = phi( main::@11/rem16u#42 )
print_line_cursor#30 = phi( main::@11/print_line_cursor#34 )
print_char_cursor#59 = phi( main::@11/print_char_cursor#1 )
print_char_cursor#19 = print_char_cursor#59
print_uint::w#2 = 0
call print_uint
to:main::@13
main::@13: scope:[main] from main::@12
rem16u#38 = phi( main::@12/rem16u#40 )
print_line_cursor#25 = phi( main::@12/print_line_cursor#30 )
print_char_cursor#60 = phi( main::@12/print_char_cursor#6 )
print_char_cursor#20 = print_char_cursor#60
call print_ln
to:main::@14
main::@14: scope:[main] from main::@13
rem16u#36 = phi( main::@13/rem16u#38 )
print_char_cursor#61 = phi( main::@13/print_char_cursor#3 )
print_line_cursor#17 = phi( main::@13/print_line_cursor#1 )
print_line_cursor#5 = print_line_cursor#17
print_char_cursor#21 = print_char_cursor#61
main::i#0 = 0
to:main::@1
main::@1: scope:[main] from main::@14 main::@22
rem16u#35 = phi( main::@14/rem16u#36, main::@22/rem16u#37 )
print_line_cursor#50 = phi( main::@14/print_line_cursor#5, main::@22/print_line_cursor#6 )
print_char_cursor#91 = phi( main::@14/print_char_cursor#21, main::@22/print_char_cursor#29 )
main::i#2 = phi( main::@14/main::i#0, main::@22/main::i#1 )
main::$18 = main::i#2 < $14
if(main::$18) goto main::@2
to:main::@3
main::@2: scope:[main] from main::@1
rem16u#52 = phi( main::@1/rem16u#35 )
print_line_cursor#49 = phi( main::@1/print_line_cursor#50 )
print_char_cursor#86 = phi( main::@1/print_char_cursor#91 )
main::i#3 = phi( main::@1/main::i#2 )
print_uchar::b#2 = main::i#3
call print_uchar
to:main::@15
main::@15: scope:[main] from main::@2
rem16u#51 = phi( main::@2/rem16u#52 )
print_line_cursor#47 = phi( main::@2/print_line_cursor#49 )
main::i#8 = phi( main::@2/main::i#3 )
print_char_cursor#62 = phi( main::@2/print_char_cursor#9 )
print_char_cursor#22 = print_char_cursor#62
print_str::str#4 = main::str3
call print_str
to:main::@16
main::@16: scope:[main] from main::@15
rem16u#49 = phi( main::@15/rem16u#51 )
print_line_cursor#45 = phi( main::@15/print_line_cursor#47 )
main::i#4 = phi( main::@15/main::i#8 )
print_char_cursor#63 = phi( main::@15/print_char_cursor#1 )
print_char_cursor#23 = print_char_cursor#63
main::$27 = main::i#4 * SIZEOF_UNSIGNED_INT
print_uint::w#3 = main::lintab1[main::$27]
call print_uint
to:main::@17
main::@17: scope:[main] from main::@16
rem16u#47 = phi( main::@16/rem16u#49 )
print_line_cursor#42 = phi( main::@16/print_line_cursor#45 )
main::i#9 = phi( main::@16/main::i#4 )
print_char_cursor#64 = phi( main::@16/print_char_cursor#6 )
print_char_cursor#24 = print_char_cursor#64
print_str::str#5 = main::str4
call print_str
to:main::@18
main::@18: scope:[main] from main::@17
rem16u#45 = phi( main::@17/rem16u#47 )
print_line_cursor#39 = phi( main::@17/print_line_cursor#42 )
main::i#5 = phi( main::@17/main::i#9 )
print_char_cursor#65 = phi( main::@17/print_char_cursor#1 )
print_char_cursor#25 = print_char_cursor#65
main::$28 = main::i#5 * SIZEOF_UNSIGNED_INT
print_uint::w#4 = main::lintab2[main::$28]
call print_uint
to:main::@19
main::@19: scope:[main] from main::@18
rem16u#43 = phi( main::@18/rem16u#45 )
print_line_cursor#35 = phi( main::@18/print_line_cursor#39 )
main::i#10 = phi( main::@18/main::i#5 )
print_char_cursor#66 = phi( main::@18/print_char_cursor#6 )
print_char_cursor#26 = print_char_cursor#66
print_str::str#6 = main::str5
call print_str
to:main::@20
main::@20: scope:[main] from main::@19
rem16u#41 = phi( main::@19/rem16u#43 )
print_line_cursor#31 = phi( main::@19/print_line_cursor#35 )
main::i#6 = phi( main::@19/main::i#10 )
print_char_cursor#67 = phi( main::@19/print_char_cursor#1 )
print_char_cursor#27 = print_char_cursor#67
main::$29 = main::i#6 * SIZEOF_UNSIGNED_INT
print_uint::w#5 = main::lintab3[main::$29]
call print_uint
to:main::@21
main::@21: scope:[main] from main::@20
rem16u#39 = phi( main::@20/rem16u#41 )
main::i#11 = phi( main::@20/main::i#6 )
print_line_cursor#26 = phi( main::@20/print_line_cursor#31 )
print_char_cursor#68 = phi( main::@20/print_char_cursor#6 )
print_char_cursor#28 = print_char_cursor#68
call print_ln
to:main::@22
main::@22: scope:[main] from main::@21
rem16u#37 = phi( main::@21/rem16u#39 )
main::i#7 = phi( main::@21/main::i#11 )
print_char_cursor#69 = phi( main::@21/print_char_cursor#3 )
print_line_cursor#18 = phi( main::@21/print_line_cursor#1 )
print_line_cursor#6 = print_line_cursor#18
print_char_cursor#29 = print_char_cursor#69
main::i#1 = ++ main::i#7
to:main::@1
main::@3: scope:[main] from main::@1
rem16u#34 = phi( main::@1/rem16u#35 )
print_line_cursor#48 = phi( main::@1/print_line_cursor#50 )
print_char_cursor#87 = phi( main::@1/print_char_cursor#91 )
print_str::str#7 = main::str6
call print_str
to:main::@23
main::@23: scope:[main] from main::@3
rem16u#33 = phi( main::@3/rem16u#34 )
print_line_cursor#46 = phi( main::@3/print_line_cursor#48 )
print_char_cursor#70 = phi( main::@3/print_char_cursor#1 )
print_char_cursor#30 = print_char_cursor#70
print_uint::w#6 = $7461
call print_uint
to:main::@24
main::@24: scope:[main] from main::@23
rem16u#32 = phi( main::@23/rem16u#33 )
print_line_cursor#43 = phi( main::@23/print_line_cursor#46 )
print_char_cursor#71 = phi( main::@23/print_char_cursor#6 )
print_char_cursor#31 = print_char_cursor#71
print_str::str#8 = main::str7
call print_str
to:main::@25
main::@25: scope:[main] from main::@24
rem16u#31 = phi( main::@24/rem16u#32 )
print_line_cursor#40 = phi( main::@24/print_line_cursor#43 )
print_char_cursor#72 = phi( main::@24/print_char_cursor#1 )
print_char_cursor#32 = print_char_cursor#72
print_uint::w#7 = $f781
call print_uint
to:main::@26
main::@26: scope:[main] from main::@25
rem16u#30 = phi( main::@25/rem16u#31 )
print_line_cursor#36 = phi( main::@25/print_line_cursor#40 )
print_char_cursor#73 = phi( main::@25/print_char_cursor#6 )
print_char_cursor#33 = print_char_cursor#73
print_str::str#9 = main::str8
call print_str
to:main::@27
main::@27: scope:[main] from main::@26
rem16u#29 = phi( main::@26/rem16u#30 )
print_line_cursor#32 = phi( main::@26/print_line_cursor#36 )
print_char_cursor#74 = phi( main::@26/print_char_cursor#1 )
print_char_cursor#34 = print_char_cursor#74
print_uint::w#8 = $6488
call print_uint
to:main::@28
main::@28: scope:[main] from main::@27
rem16u#27 = phi( main::@27/rem16u#29 )
print_line_cursor#27 = phi( main::@27/print_line_cursor#32 )
print_char_cursor#75 = phi( main::@27/print_char_cursor#6 )
print_char_cursor#35 = print_char_cursor#75
call print_ln
to:main::@29
main::@29: scope:[main] from main::@28
rem16u#23 = phi( main::@28/rem16u#27 )
print_char_cursor#76 = phi( main::@28/print_char_cursor#3 )
print_line_cursor#19 = phi( main::@28/print_line_cursor#1 )
print_line_cursor#7 = print_line_cursor#19
print_char_cursor#36 = print_char_cursor#76
to:main::@return
main::@return: scope:[main] from main::@29
print_char_cursor#77 = phi( main::@29/print_char_cursor#36 )
print_line_cursor#20 = phi( main::@29/print_line_cursor#7 )
rem16u#16 = phi( main::@29/rem16u#23 )
rem16u#5 = rem16u#16
print_line_cursor#8 = print_line_cursor#20
print_char_cursor#37 = print_char_cursor#77
return
to:@return
void lin16u_gen(unsigned int min , unsigned int max , unsigned int *lintab , unsigned int length)
lin16u_gen: scope:[lin16u_gen] from main main::@4 main::@5
lin16u_gen::lintab#8 = phi( main/lin16u_gen::lintab#0, main::@4/lin16u_gen::lintab#1, main::@5/lin16u_gen::lintab#2 )
rem16u#24 = phi( main/rem16u#22, main::@4/rem16u#2, main::@5/rem16u#3 )
lin16u_gen::length#3 = phi( main/lin16u_gen::length#0, main::@4/lin16u_gen::length#1, main::@5/lin16u_gen::length#2 )
lin16u_gen::min#3 = phi( main/lin16u_gen::min#0, main::@4/lin16u_gen::min#1, main::@5/lin16u_gen::min#2 )
lin16u_gen::max#3 = phi( main/lin16u_gen::max#0, main::@4/lin16u_gen::max#1, main::@5/lin16u_gen::max#2 )
lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3
lin16u_gen::$1 = lin16u_gen::length#3 - 1
divr16u::dividend#1 = lin16u_gen::ampl#0
divr16u::divisor#0 = lin16u_gen::$1
divr16u::rem#3 = 0
call divr16u
divr16u::return#2 = divr16u::return#1
to:lin16u_gen::@3
lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen
lin16u_gen::lintab#7 = phi( lin16u_gen/lin16u_gen::lintab#8 )
lin16u_gen::min#5 = phi( lin16u_gen/lin16u_gen::min#3 )
lin16u_gen::length#4 = phi( lin16u_gen/lin16u_gen::length#3 )
rem16u#17 = phi( lin16u_gen/rem16u#1 )
divr16u::return#5 = phi( lin16u_gen/divr16u::return#2 )
lin16u_gen::stepi#0 = divr16u::return#5
rem16u#6 = rem16u#17
lin16u_gen::$3 = lin16u_gen::length#4 - 1
divr16u::dividend#2 = 0
divr16u::divisor#1 = lin16u_gen::$3
divr16u::rem#4 = rem16u#6
call divr16u
divr16u::return#3 = divr16u::return#1
to:lin16u_gen::@4
lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3
lin16u_gen::lintab#6 = phi( lin16u_gen::@3/lin16u_gen::lintab#7 )
lin16u_gen::length#7 = phi( lin16u_gen::@3/lin16u_gen::length#4 )
lin16u_gen::min#4 = phi( lin16u_gen::@3/lin16u_gen::min#5 )
lin16u_gen::stepi#1 = phi( lin16u_gen::@3/lin16u_gen::stepi#0 )
rem16u#18 = phi( lin16u_gen::@3/rem16u#1 )
divr16u::return#6 = phi( lin16u_gen::@3/divr16u::return#3 )
lin16u_gen::stepf#0 = divr16u::return#6
rem16u#7 = rem16u#18
lin16u_gen::step#0 = lin16u_gen::stepi#1 dw= lin16u_gen::stepf#0
lin16u_gen::val#0 = lin16u_gen::min#4 dw= 0
lin16u_gen::i#0 = 0
to:lin16u_gen::@1
lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4
rem16u#25 = phi( lin16u_gen::@2/rem16u#28, lin16u_gen::@4/rem16u#7 )
lin16u_gen::step#2 = phi( lin16u_gen::@2/lin16u_gen::step#1, lin16u_gen::@4/lin16u_gen::step#0 )
lin16u_gen::lintab#5 = phi( lin16u_gen::@2/lin16u_gen::lintab#3, lin16u_gen::@4/lin16u_gen::lintab#6 )
lin16u_gen::val#3 = phi( lin16u_gen::@2/lin16u_gen::val#1, lin16u_gen::@4/lin16u_gen::val#0 )
lin16u_gen::length#5 = phi( lin16u_gen::@2/lin16u_gen::length#6, lin16u_gen::@4/lin16u_gen::length#7 )
lin16u_gen::i#2 = phi( lin16u_gen::@2/lin16u_gen::i#1, lin16u_gen::@4/lin16u_gen::i#0 )
lin16u_gen::$7 = lin16u_gen::i#2 < lin16u_gen::length#5
if(lin16u_gen::$7) goto lin16u_gen::@2
to:lin16u_gen::@return
lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1
rem16u#28 = phi( lin16u_gen::@1/rem16u#25 )
lin16u_gen::length#6 = phi( lin16u_gen::@1/lin16u_gen::length#5 )
lin16u_gen::i#3 = phi( lin16u_gen::@1/lin16u_gen::i#2 )
lin16u_gen::step#1 = phi( lin16u_gen::@1/lin16u_gen::step#2 )
lin16u_gen::lintab#4 = phi( lin16u_gen::@1/lin16u_gen::lintab#5 )
lin16u_gen::val#2 = phi( lin16u_gen::@1/lin16u_gen::val#3 )
lin16u_gen::$8 = word1 lin16u_gen::val#2
*lin16u_gen::lintab#4 = lin16u_gen::$8
lin16u_gen::$9 = lin16u_gen::val#2 + lin16u_gen::step#1
lin16u_gen::val#1 = lin16u_gen::$9
lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT
lin16u_gen::i#1 = ++ lin16u_gen::i#3
to:lin16u_gen::@1
lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1
rem16u#19 = phi( lin16u_gen::@1/rem16u#25 )
rem16u#8 = rem16u#19
return
to:@return
void __start()
__start: scope:[__start] from
to:__start::__init1
__start::__init1: scope:[__start] from __start
rem16u#9 = 0
print_screen#0 = (char *)$400
print_line_cursor#9 = print_screen#0
print_char_cursor#38 = print_line_cursor#9
to:__start::@1
__start::@1: scope:[__start] from __start::__init1
print_screen#8 = phi( __start::__init1/print_screen#0 )
print_char_cursor#88 = phi( __start::__init1/print_char_cursor#38 )
print_line_cursor#28 = phi( __start::__init1/print_line_cursor#9 )
rem16u#26 = phi( __start::__init1/rem16u#9 )
call main
to:__start::@2
__start::@2: scope:[__start] from __start::@1
print_screen#6 = phi( __start::@1/print_screen#8 )
print_char_cursor#78 = phi( __start::@1/print_char_cursor#37 )
print_line_cursor#21 = phi( __start::@1/print_line_cursor#8 )
rem16u#20 = phi( __start::@1/rem16u#5 )
rem16u#10 = rem16u#20
print_line_cursor#10 = print_line_cursor#21
print_char_cursor#39 = print_char_cursor#78
to:__start::@return
__start::@return: scope:[__start] from __start::@2
print_char_cursor#79 = phi( __start::@2/print_char_cursor#39 )
print_line_cursor#22 = phi( __start::@2/print_line_cursor#10 )
print_screen#4 = phi( __start::@2/print_screen#6 )
rem16u#21 = phi( __start::@2/rem16u#10 )
rem16u#11 = rem16u#21
print_screen#1 = print_screen#4
print_line_cursor#11 = print_line_cursor#22
print_char_cursor#40 = print_char_cursor#79
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
__constant char SIZEOF_UNSIGNED_INT = 2
void __start()
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
unsigned int divr16u::$0
char divr16u::$1
unsigned int divr16u::$10
bool divr16u::$11
number divr16u::$2
bool divr16u::$3
bool divr16u::$4
number divr16u::$5
unsigned int divr16u::$6
unsigned int divr16u::$7
bool divr16u::$8
bool divr16u::$9
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0
unsigned int divr16u::dividend#1
unsigned int divr16u::dividend#2
unsigned int divr16u::dividend#3
unsigned int divr16u::dividend#4
unsigned int divr16u::dividend#5
unsigned int divr16u::dividend#6
unsigned int divr16u::dividend#7
unsigned int divr16u::dividend#8
unsigned int divr16u::divisor
unsigned int divr16u::divisor#0
unsigned int divr16u::divisor#1
unsigned int divr16u::divisor#2
unsigned int divr16u::divisor#3
unsigned int divr16u::divisor#4
unsigned int divr16u::divisor#5
unsigned int divr16u::divisor#6
unsigned int divr16u::divisor#7
char divr16u::i
char divr16u::i#0
char divr16u::i#1
char divr16u::i#2
char divr16u::i#3
char divr16u::i#4
char divr16u::i#5
char divr16u::i#6
unsigned int divr16u::quotient
unsigned int divr16u::quotient#0
unsigned int divr16u::quotient#1
unsigned int divr16u::quotient#2
unsigned int divr16u::quotient#3
unsigned int divr16u::quotient#4
unsigned int divr16u::quotient#5
unsigned int divr16u::quotient#6
unsigned int divr16u::quotient#7
unsigned int divr16u::quotient#8
unsigned int divr16u::rem
unsigned int divr16u::rem#0
unsigned int divr16u::rem#1
unsigned int divr16u::rem#10
unsigned int divr16u::rem#11
unsigned int divr16u::rem#2
unsigned int divr16u::rem#3
unsigned int divr16u::rem#4
unsigned int divr16u::rem#5
unsigned int divr16u::rem#6
unsigned int divr16u::rem#7
unsigned int divr16u::rem#8
unsigned int divr16u::rem#9
unsigned int divr16u::return
unsigned int divr16u::return#0
unsigned int divr16u::return#1
unsigned int divr16u::return#2
unsigned int divr16u::return#3
unsigned int divr16u::return#4
unsigned int divr16u::return#5
unsigned int divr16u::return#6
void lin16u_gen(unsigned int min , unsigned int max , unsigned int *lintab , unsigned int length)
number lin16u_gen::$1
number lin16u_gen::$3
bool lin16u_gen::$7
unsigned int lin16u_gen::$8
unsigned long lin16u_gen::$9
unsigned int lin16u_gen::ampl
unsigned int lin16u_gen::ampl#0
unsigned int lin16u_gen::i
unsigned int lin16u_gen::i#0
unsigned int lin16u_gen::i#1
unsigned int lin16u_gen::i#2
unsigned int lin16u_gen::i#3
unsigned int lin16u_gen::length
unsigned int lin16u_gen::length#0
unsigned int lin16u_gen::length#1
unsigned int lin16u_gen::length#2
unsigned int lin16u_gen::length#3
unsigned int lin16u_gen::length#4
unsigned int lin16u_gen::length#5
unsigned int lin16u_gen::length#6
unsigned int lin16u_gen::length#7
unsigned int *lin16u_gen::lintab
unsigned int *lin16u_gen::lintab#0
unsigned int *lin16u_gen::lintab#1
unsigned int *lin16u_gen::lintab#2
unsigned int *lin16u_gen::lintab#3
unsigned int *lin16u_gen::lintab#4
unsigned int *lin16u_gen::lintab#5
unsigned int *lin16u_gen::lintab#6
unsigned int *lin16u_gen::lintab#7
unsigned int *lin16u_gen::lintab#8
unsigned int lin16u_gen::max
unsigned int lin16u_gen::max#0
unsigned int lin16u_gen::max#1
unsigned int lin16u_gen::max#2
unsigned int lin16u_gen::max#3
unsigned int lin16u_gen::min
unsigned int lin16u_gen::min#0
unsigned int lin16u_gen::min#1
unsigned int lin16u_gen::min#2
unsigned int lin16u_gen::min#3
unsigned int lin16u_gen::min#4
unsigned int lin16u_gen::min#5
unsigned long lin16u_gen::step
unsigned long lin16u_gen::step#0
unsigned long lin16u_gen::step#1
unsigned long lin16u_gen::step#2
unsigned int lin16u_gen::stepf
unsigned int lin16u_gen::stepf#0
unsigned int lin16u_gen::stepi
unsigned int lin16u_gen::stepi#0
unsigned int lin16u_gen::stepi#1
unsigned long lin16u_gen::val
unsigned long lin16u_gen::val#0
unsigned long lin16u_gen::val#1
unsigned long lin16u_gen::val#2
unsigned long lin16u_gen::val#3
void main()
bool main::$18
char main::$27
char main::$28
char main::$29
char main::i
char main::i#0
char main::i#1
char main::i#10
char main::i#11
char main::i#2
char main::i#3
char main::i#4
char main::i#5
char main::i#6
char main::i#7
char main::i#8
char main::i#9
__constant unsigned int main::lintab1[$14] = { fill( $14, 0) }
__constant unsigned int main::lintab2[$14] = { fill( $14, 0) }
__constant unsigned int main::lintab3[$14] = { fill( $14, 0) }
__constant char main::str[4] = " "
__constant char main::str1[2] = " "
__constant char main::str2[2] = " "
__constant char main::str3[2] = " "
__constant char main::str4[2] = " "
__constant char main::str5[2] = " "
__constant char main::str6[4] = " "
__constant char main::str7[2] = " "
__constant char main::str8[2] = " "
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_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#74
char *print_char_cursor#75
char *print_char_cursor#76
char *print_char_cursor#77
char *print_char_cursor#78
char *print_char_cursor#79
char *print_char_cursor#8
char *print_char_cursor#80
char *print_char_cursor#81
char *print_char_cursor#82
char *print_char_cursor#83
char *print_char_cursor#84
char *print_char_cursor#85
char *print_char_cursor#86
char *print_char_cursor#87
char *print_char_cursor#88
char *print_char_cursor#89
char *print_char_cursor#9
char *print_char_cursor#90
char *print_char_cursor#91
char *print_char_cursor#92
char *print_char_cursor#93
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#37
char *print_line_cursor#38
char *print_line_cursor#39
char *print_line_cursor#4
char *print_line_cursor#40
char *print_line_cursor#41
char *print_line_cursor#42
char *print_line_cursor#43
char *print_line_cursor#44
char *print_line_cursor#45
char *print_line_cursor#46
char *print_line_cursor#47
char *print_line_cursor#48
char *print_line_cursor#49
char *print_line_cursor#5
char *print_line_cursor#50
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#10
char *print_screen#2
char *print_screen#3
char *print_screen#4
char *print_screen#5
char *print_screen#6
char *print_screen#7
char *print_screen#8
char *print_screen#9
void print_str(char *str)
bool print_str::$1
char *print_str::str
char *print_str::str#0
char *print_str::str#1
char *print_str::str#10
char *print_str::str#11
char *print_str::str#12
char *print_str::str#13
char *print_str::str#2
char *print_str::str#3
char *print_str::str#4
char *print_str::str#5
char *print_str::str#6
char *print_str::str#7
char *print_str::str#8
char *print_str::str#9
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
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#10
unsigned int print_uint::w#2
unsigned int print_uint::w#3
unsigned int print_uint::w#4
unsigned int print_uint::w#5
unsigned int print_uint::w#6
unsigned int print_uint::w#7
unsigned int print_uint::w#8
unsigned int print_uint::w#9
unsigned int rem16u
unsigned int rem16u#0
unsigned int rem16u#1
unsigned int rem16u#10
unsigned int rem16u#11
unsigned int rem16u#12
unsigned int rem16u#13
unsigned int rem16u#14
unsigned int rem16u#15
unsigned int rem16u#16
unsigned int rem16u#17
unsigned int rem16u#18
unsigned int rem16u#19
unsigned int rem16u#2
unsigned int rem16u#20
unsigned int rem16u#21
unsigned int rem16u#22
unsigned int rem16u#23
unsigned int rem16u#24
unsigned int rem16u#25
unsigned int rem16u#26
unsigned int rem16u#27
unsigned int rem16u#28
unsigned int rem16u#29
unsigned int rem16u#3
unsigned int rem16u#30
unsigned int rem16u#31
unsigned int rem16u#32
unsigned int rem16u#33
unsigned int rem16u#34
unsigned int rem16u#35
unsigned int rem16u#36
unsigned int rem16u#37
unsigned int rem16u#38
unsigned int rem16u#39
unsigned int rem16u#4
unsigned int rem16u#40
unsigned int rem16u#41
unsigned int rem16u#42
unsigned int rem16u#43
unsigned int rem16u#44
unsigned int rem16u#45
unsigned int rem16u#46
unsigned int rem16u#47
unsigned int rem16u#48
unsigned int rem16u#49
unsigned int rem16u#5
unsigned int rem16u#50
unsigned int rem16u#51
unsigned int rem16u#52
unsigned int rem16u#6
unsigned int rem16u#7
unsigned int rem16u#8
unsigned int rem16u#9
Adding number conversion cast (unumber) 1 in divr16u::$0 = divr16u::rem#5 << 1
Adding number conversion cast (unumber) $80 in divr16u::$2 = divr16u::$1 & $80
Adding number conversion cast (unumber) divr16u::$2 in divr16u::$2 = divr16u::$1 & (unumber)$80
Adding number conversion cast (unumber) 0 in divr16u::$3 = divr16u::$2 != 0
Adding number conversion cast (unumber) 1 in divr16u::$6 = divr16u::dividend#4 << 1
Adding number conversion cast (unumber) 1 in divr16u::$7 = divr16u::quotient#3 << 1
Adding number conversion cast (unumber) 1 in divr16u::$5 = divr16u::rem#7 | 1
Adding number conversion cast (unumber) divr16u::$5 in divr16u::$5 = divr16u::rem#7 | (unumber)1
Adding number conversion cast (unumber) 0 in print_str::$1 = 0 != *print_str::str#10
Adding number conversion cast (unumber) $28 in print_ln::$0 = print_line_cursor#12 + $28
Adding number conversion cast (unumber) 4 in print_uchar::$0 = print_uchar::b#3 >> 4
Adding number conversion cast (unumber) $f in print_uchar::$2 = print_uchar::b#4 & $f
Adding number conversion cast (unumber) print_uchar::$2 in print_uchar::$2 = print_uchar::b#4 & (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) $22d in lin16u_gen::min#0 = $22d
Adding number conversion cast (unumber) $7461 in lin16u_gen::max#0 = $7461
Adding number conversion cast (unumber) $14 in lin16u_gen::length#0 = $14
Adding number conversion cast (unumber) $79cb in lin16u_gen::min#1 = $79cb
Adding number conversion cast (unumber) $f781 in lin16u_gen::max#1 = $f781
Adding number conversion cast (unumber) $14 in lin16u_gen::length#1 = $14
Adding number conversion cast (unumber) 0 in lin16u_gen::min#2 = 0
Adding number conversion cast (unumber) $6488 in lin16u_gen::max#2 = $6488
Adding number conversion cast (unumber) $14 in lin16u_gen::length#2 = $14
Adding number conversion cast (unumber) $22d in print_uint::w#0 = $22d
Adding number conversion cast (unumber) $79cb in print_uint::w#1 = $79cb
Adding number conversion cast (unumber) 0 in print_uint::w#2 = 0
Adding number conversion cast (unumber) $14 in main::$18 = main::i#2 < $14
Adding number conversion cast (unumber) $7461 in print_uint::w#6 = $7461
Adding number conversion cast (unumber) $f781 in print_uint::w#7 = $f781
Adding number conversion cast (unumber) $6488 in print_uint::w#8 = $6488
Adding number conversion cast (unumber) 1 in lin16u_gen::$1 = lin16u_gen::length#3 - 1
Adding number conversion cast (unumber) lin16u_gen::$1 in lin16u_gen::$1 = lin16u_gen::length#3 - (unumber)1
Adding number conversion cast (unumber) 0 in divr16u::rem#3 = 0
Adding number conversion cast (unumber) 1 in lin16u_gen::$3 = lin16u_gen::length#4 - 1
Adding number conversion cast (unumber) lin16u_gen::$3 in lin16u_gen::$3 = lin16u_gen::length#4 - (unumber)1
Adding number conversion cast (unumber) 0 in divr16u::dividend#2 = 0
Adding number conversion cast (unumber) 0 in lin16u_gen::val#0 = lin16u_gen::min#4 dw= 0
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast memset::num#0 = (unumber)$3e8
Inlining cast memset::dst#0 = (char *)memset::str#2
Inlining cast lin16u_gen::min#0 = (unumber)$22d
Inlining cast lin16u_gen::max#0 = (unumber)$7461
Inlining cast lin16u_gen::length#0 = (unumber)$14
Inlining cast lin16u_gen::min#1 = (unumber)$79cb
Inlining cast lin16u_gen::max#1 = (unumber)$f781
Inlining cast lin16u_gen::length#1 = (unumber)$14
Inlining cast lin16u_gen::min#2 = (unumber)0
Inlining cast lin16u_gen::max#2 = (unumber)$6488
Inlining cast lin16u_gen::length#2 = (unumber)$14
Inlining cast print_uint::w#0 = (unumber)$22d
Inlining cast print_uint::w#1 = (unumber)$79cb
Inlining cast print_uint::w#2 = (unumber)0
Inlining cast print_uint::w#6 = (unumber)$7461
Inlining cast print_uint::w#7 = (unumber)$f781
Inlining cast print_uint::w#8 = (unumber)$6488
Inlining cast divr16u::rem#3 = (unumber)0
Inlining cast divr16u::dividend#2 = (unumber)0
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 1
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
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 $22d
Simplifying constant integer cast $7461
Simplifying constant integer cast $14
Simplifying constant integer cast $79cb
Simplifying constant integer cast $f781
Simplifying constant integer cast $14
Simplifying constant integer cast 0
Simplifying constant integer cast $6488
Simplifying constant integer cast $14
Simplifying constant integer cast $22d
Simplifying constant integer cast $79cb
Simplifying constant integer cast 0
Simplifying constant integer cast $14
Simplifying constant integer cast $7461
Simplifying constant integer cast $f781
Simplifying constant integer cast $6488
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant pointer cast (char *) 1024
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
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 int) $22d
Finalized unsigned number type (unsigned int) $7461
Finalized unsigned number type (char) $14
Finalized unsigned number type (unsigned int) $79cb
Finalized unsigned number type (unsigned int) $f781
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) 0
Finalized unsigned number type (unsigned int) $6488
Finalized unsigned number type (char) $14
Finalized unsigned number type (unsigned int) $22d
Finalized unsigned number type (unsigned int) $79cb
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $14
Finalized unsigned number type (unsigned int) $7461
Finalized unsigned number type (unsigned int) $f781
Finalized unsigned number type (unsigned int) $6488
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to char in divr16u::$2 = divr16u::$1 & $80
Inferred type updated to unsigned int in divr16u::$5 = divr16u::rem#7 | 1
Inferred type updated to char in print_uchar::$2 = print_uchar::b#4 & $f
Inferred type updated to unsigned int in lin16u_gen::$1 = lin16u_gen::length#3 - 1
Inferred type updated to unsigned int in lin16u_gen::$3 = lin16u_gen::length#4 - 1
Inversing boolean not [9] divr16u::$4 = divr16u::$2 == 0 from [8] divr16u::$3 = divr16u::$2 != 0
Inversing boolean not [17] divr16u::$9 = divr16u::rem#6 < divr16u::divisor#2 from [16] divr16u::$8 = divr16u::rem#6 >= divr16u::divisor#2
Inversing boolean not [111] memset::$1 = memset::num#1 <= 0 from [110] memset::$0 = memset::num#1 > 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias divr16u::rem#0 = divr16u::$0 divr16u::rem#7
Alias divr16u::dividend#0 = divr16u::$6 divr16u::dividend#8
Alias divr16u::quotient#1 = divr16u::$7 divr16u::quotient#4
Alias divr16u::dividend#3 = divr16u::dividend#7
Alias divr16u::quotient#6 = divr16u::quotient#7
Alias divr16u::divisor#4 = divr16u::divisor#5
Alias divr16u::i#5 = divr16u::i#6
Alias divr16u::rem#1 = divr16u::$5
Alias divr16u::rem#6 = divr16u::rem#8
Alias divr16u::divisor#2 = divr16u::divisor#3
Alias divr16u::i#3 = divr16u::i#4
Alias divr16u::rem#2 = divr16u::$10
Alias divr16u::rem#11 = divr16u::rem#9
Alias divr16u::return#0 = divr16u::quotient#5 divr16u::quotient#8 divr16u::return#4 divr16u::return#1
Alias rem16u#0 = rem16u#12 rem16u#1
Alias print_str::str#10 = print_str::str#11 print_str::str#12
Alias print_char_cursor#1 = print_char_cursor#80 print_char_cursor#81 print_char_cursor#42
Alias print_char_cursor#0 = print_char_cursor#41
Alias print_line_cursor#0 = print_ln::$0 print_line_cursor#13 print_char_cursor#2 print_line_cursor#14 print_char_cursor#44 print_line_cursor#1 print_char_cursor#3
Alias print_uchar::b#0 = print_uint::$0
Alias print_uint::w#10 = print_uint::w#9
Alias print_char_cursor#4 = print_char_cursor#45
Alias print_uchar::b#1 = print_uint::$2
Alias print_char_cursor#46 = print_char_cursor#5 print_char_cursor#47 print_char_cursor#6
Alias print_uchar::b#3 = print_uchar::b#4
Alias print_char_cursor#48 = print_char_cursor#7
Alias print_char_cursor#49 = print_char_cursor#8 print_char_cursor#50 print_char_cursor#9
Alias print_char_cursor#10 = print_char_cursor#52 print_char_cursor#11
Alias print_line_cursor#15 = print_screen#3 print_screen#2 print_line_cursor#2 print_char_cursor#12 print_char_cursor#53 print_line_cursor#3 print_char_cursor#13
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_screen#10 = print_screen#9 print_screen#7 print_screen#5
Alias print_line_cursor#24 = print_line_cursor#33 print_line_cursor#37 print_line_cursor#29
Alias print_char_cursor#85 = print_char_cursor#92 print_char_cursor#93 print_char_cursor#90
Alias rem16u#13 = rem16u#2
Alias rem16u#14 = rem16u#3
Alias rem16u#15 = rem16u#4 rem16u#50 rem16u#48 rem16u#46 rem16u#44 rem16u#42 rem16u#40 rem16u#38 rem16u#36
Alias print_line_cursor#16 = print_line_cursor#4 print_line_cursor#44 print_line_cursor#41 print_line_cursor#38 print_line_cursor#34 print_line_cursor#30 print_line_cursor#25
Alias print_char_cursor#14 = print_char_cursor#54
Alias print_char_cursor#15 = print_char_cursor#55
Alias print_char_cursor#16 = print_char_cursor#56
Alias print_char_cursor#17 = print_char_cursor#57
Alias print_char_cursor#18 = print_char_cursor#58
Alias print_char_cursor#19 = print_char_cursor#59
Alias print_char_cursor#20 = print_char_cursor#60
Alias print_line_cursor#17 = print_line_cursor#5
Alias print_char_cursor#21 = print_char_cursor#61
Alias main::i#10 = main::i#3 main::i#2 main::i#8 main::i#4 main::i#9 main::i#5 main::i#6 main::i#11 main::i#7
Alias print_char_cursor#86 = print_char_cursor#91 print_char_cursor#87
Alias print_line_cursor#26 = print_line_cursor#49 print_line_cursor#50 print_line_cursor#47 print_line_cursor#45 print_line_cursor#42 print_line_cursor#39 print_line_cursor#35 print_line_cursor#31 print_line_cursor#48 print_line_cursor#46 print_line_cursor#43 print_line_cursor#40 print_line_cursor#36 print_line_cursor#32 print_line_cursor#27
Alias rem16u#16 = rem16u#52 rem16u#35 rem16u#51 rem16u#49 rem16u#47 rem16u#45 rem16u#43 rem16u#41 rem16u#39 rem16u#37 rem16u#34 rem16u#33 rem16u#32 rem16u#31 rem16u#30 rem16u#29 rem16u#27 rem16u#23 rem16u#5
Alias print_char_cursor#22 = print_char_cursor#62
Alias print_char_cursor#23 = print_char_cursor#63
Alias print_char_cursor#24 = print_char_cursor#64
Alias print_char_cursor#25 = print_char_cursor#65
Alias print_char_cursor#26 = print_char_cursor#66
Alias print_char_cursor#27 = print_char_cursor#67
Alias print_char_cursor#28 = print_char_cursor#68
Alias print_line_cursor#18 = print_line_cursor#6
Alias print_char_cursor#29 = print_char_cursor#69
Alias print_char_cursor#30 = print_char_cursor#70
Alias print_char_cursor#31 = print_char_cursor#71
Alias print_char_cursor#32 = print_char_cursor#72
Alias print_char_cursor#33 = print_char_cursor#73
Alias print_char_cursor#34 = print_char_cursor#74
Alias print_char_cursor#35 = print_char_cursor#75
Alias print_line_cursor#19 = print_line_cursor#7 print_line_cursor#20 print_line_cursor#8
Alias print_char_cursor#36 = print_char_cursor#76 print_char_cursor#77 print_char_cursor#37
Alias divr16u::divisor#0 = lin16u_gen::$1
Alias divr16u::return#2 = divr16u::return#5
Alias lin16u_gen::length#3 = lin16u_gen::length#4 lin16u_gen::length#7
Alias lin16u_gen::min#3 = lin16u_gen::min#5 lin16u_gen::min#4
Alias lin16u_gen::lintab#6 = lin16u_gen::lintab#7 lin16u_gen::lintab#8
Alias rem16u#17 = rem16u#6
Alias divr16u::divisor#1 = lin16u_gen::$3
Alias divr16u::return#3 = divr16u::return#6
Alias lin16u_gen::stepi#0 = lin16u_gen::stepi#1
Alias rem16u#18 = rem16u#7
Alias lin16u_gen::val#2 = lin16u_gen::val#3
Alias lin16u_gen::lintab#4 = lin16u_gen::lintab#5
Alias lin16u_gen::step#1 = lin16u_gen::step#2
Alias lin16u_gen::i#2 = lin16u_gen::i#3
Alias lin16u_gen::length#5 = lin16u_gen::length#6
Alias rem16u#19 = rem16u#28 rem16u#25 rem16u#8
Alias lin16u_gen::val#1 = lin16u_gen::$9
Alias print_screen#0 = print_line_cursor#9 print_char_cursor#38 print_line_cursor#28 print_char_cursor#88 print_screen#8 print_screen#6 print_screen#4 print_screen#1
Alias rem16u#26 = rem16u#9
Alias rem16u#10 = rem16u#20 rem16u#21 rem16u#11
Alias print_line_cursor#10 = print_line_cursor#21 print_line_cursor#22 print_line_cursor#11
Alias print_char_cursor#39 = print_char_cursor#78 print_char_cursor#79 print_char_cursor#40
Successful SSA optimization Pass2AliasElimination
Alias divr16u::dividend#3 = divr16u::dividend#4
Alias divr16u::quotient#3 = divr16u::quotient#6
Alias divr16u::divisor#2 = divr16u::divisor#4 divr16u::divisor#7
Alias divr16u::i#2 = divr16u::i#3 divr16u::i#5
Alias divr16u::dividend#0 = divr16u::dividend#6
Successful SSA optimization Pass2AliasElimination
Identical Phi Values divr16u::divisor#2 divr16u::divisor#6
Identical Phi Values print_char_cursor#0 print_char_cursor#10
Identical Phi Values print_char_cursor#43 print_char_cursor#82
Identical Phi Values print_char_cursor#4 print_char_cursor#49
Identical Phi Values print_char_cursor#46 print_char_cursor#49
Identical Phi Values print_char_cursor#48 print_char_cursor#10
Identical Phi Values print_char_cursor#49 print_char_cursor#10
Identical Phi Values print_line_cursor#15 print_screen#10
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 rem16u#22 rem16u#26
Identical Phi Values print_screen#10 print_screen#0
Identical Phi Values print_line_cursor#24 print_screen#0
Identical Phi Values print_char_cursor#85 print_screen#0
Identical Phi Values rem16u#13 rem16u#19
Identical Phi Values rem16u#14 rem16u#19
Identical Phi Values rem16u#15 rem16u#19
Identical Phi Values print_line_cursor#16 print_line_cursor#15
Identical Phi Values print_char_cursor#14 print_line_cursor#15
Identical Phi Values print_char_cursor#15 print_char_cursor#1
Identical Phi Values print_char_cursor#16 print_char_cursor#46
Identical Phi Values print_char_cursor#17 print_char_cursor#1
Identical Phi Values print_char_cursor#18 print_char_cursor#46
Identical Phi Values print_char_cursor#19 print_char_cursor#1
Identical Phi Values print_char_cursor#20 print_char_cursor#46
Identical Phi Values print_line_cursor#17 print_line_cursor#0
Identical Phi Values print_char_cursor#21 print_line_cursor#0
Identical Phi Values rem16u#16 rem16u#15
Identical Phi Values print_char_cursor#22 print_char_cursor#49
Identical Phi Values print_char_cursor#23 print_char_cursor#1
Identical Phi Values print_char_cursor#24 print_char_cursor#46
Identical Phi Values print_char_cursor#25 print_char_cursor#1
Identical Phi Values print_char_cursor#26 print_char_cursor#46
Identical Phi Values print_char_cursor#27 print_char_cursor#1
Identical Phi Values print_char_cursor#28 print_char_cursor#46
Identical Phi Values print_line_cursor#18 print_line_cursor#0
Identical Phi Values print_char_cursor#29 print_line_cursor#0
Identical Phi Values print_char_cursor#30 print_char_cursor#1
Identical Phi Values print_char_cursor#31 print_char_cursor#46
Identical Phi Values print_char_cursor#32 print_char_cursor#1
Identical Phi Values print_char_cursor#33 print_char_cursor#46
Identical Phi Values print_char_cursor#34 print_char_cursor#1
Identical Phi Values print_char_cursor#35 print_char_cursor#46
Identical Phi Values print_line_cursor#19 print_line_cursor#0
Identical Phi Values print_char_cursor#36 print_line_cursor#0
Identical Phi Values rem16u#17 rem16u#0
Identical Phi Values rem16u#18 rem16u#0
Identical Phi Values lin16u_gen::length#5 lin16u_gen::length#3
Identical Phi Values lin16u_gen::step#1 lin16u_gen::step#0
Identical Phi Values rem16u#19 rem16u#18
Identical Phi Values rem16u#10 rem16u#16
Identical Phi Values print_line_cursor#10 print_line_cursor#19
Identical Phi Values print_char_cursor#39 print_char_cursor#36
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values print_char_cursor#82 print_char_cursor#10
Identical Phi Values print_char_cursor#83 print_char_cursor#1
Identical Phi Values memset::return#1 memset::str#0
Identical Phi Values print_char_cursor#86 print_line_cursor#0
Identical Phi Values print_line_cursor#26 print_line_cursor#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition divr16u::$4 [8] if(divr16u::$2==0) goto divr16u::@2
Simple Condition divr16u::$9 [13] if(divr16u::rem#6<divr16u::divisor#6) goto divr16u::@3
Simple Condition divr16u::$11 [18] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1
Simple Condition print_str::$1 [26] if(0!=*print_str::str#10) goto print_str::@2
Simple Condition print_ln::$1 [36] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1
Simple Condition memset::$1 [69] if(memset::num#0<=0) goto memset::@1
Simple Condition memset::$3 [76] if(memset::dst#2!=memset::end#0) goto memset::@4
Simple Condition main::$18 [124] if(main::i#10<$14) goto main::@2
Simple Condition lin16u_gen::$7 [194] if(lin16u_gen::i#2<lin16u_gen::length#3) goto lin16u_gen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant divr16u::quotient#0 = 0
Constant divr16u::i#0 = 0
Constant memset::c#0 = ' '
Constant memset::num#0 = $3e8
Constant lin16u_gen::min#0 = $22d
Constant lin16u_gen::max#0 = $7461
Constant lin16u_gen::lintab#0 = main::lintab1
Constant lin16u_gen::length#0 = $14
Constant lin16u_gen::min#1 = $79cb
Constant lin16u_gen::max#1 = $f781
Constant lin16u_gen::lintab#1 = main::lintab2
Constant lin16u_gen::length#1 = $14
Constant lin16u_gen::min#2 = 0
Constant lin16u_gen::max#2 = $6488
Constant lin16u_gen::lintab#2 = main::lintab3
Constant lin16u_gen::length#2 = $14
Constant print_str::str#1 = main::str
Constant print_uint::w#0 = $22d
Constant print_str::str#2 = main::str1
Constant print_uint::w#1 = $79cb
Constant print_str::str#3 = main::str2
Constant print_uint::w#2 = 0
Constant main::i#0 = 0
Constant print_str::str#4 = main::str3
Constant print_str::str#5 = main::str4
Constant print_str::str#6 = main::str5
Constant print_str::str#7 = main::str6
Constant print_uint::w#6 = $7461
Constant print_str::str#8 = main::str7
Constant print_uint::w#7 = $f781
Constant print_str::str#9 = main::str8
Constant print_uint::w#8 = $6488
Constant divr16u::rem#3 = 0
Constant divr16u::dividend#2 = 0
Constant lin16u_gen::i#0 = 0
Constant rem16u#26 = 0
Constant print_screen#0 = (char *) 1024
Successful SSA optimization Pass2ConstantIdentification
Constant memset::str#0 = (void *)print_screen#0
Successful SSA optimization Pass2ConstantIdentification
Constant memset::return#0 = memset::str#0
Constant memset::$4 = (char *)memset::str#0
Constant memset::dst#0 = (char *)memset::str#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [69] if(memset::num#0<=0) goto memset::@1
Successful SSA optimization Pass2ConstantIfs
Consolidated constant strings into main::str
Consolidated constant strings into main::str1
Successful SSA optimization Pass2ConstantStringConsolidation
Resolved ranged next value [16] divr16u::i#1 = ++ divr16u::i#2 to ++
Resolved ranged comparison value [18] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to $10
Eliminating unused variable - keeping the phi block rem16u#24
Eliminating unused constant memset::return#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant rem16u#26
Successful SSA optimization PassNEliminateUnusedVars
Removing unused procedure __start
Removing unused procedure block __start
Removing unused procedure block __start::__init1
Removing unused procedure block __start::@1
Removing unused procedure block __start::@2
Removing unused procedure block __start::@return
Successful SSA optimization PassNEliminateEmptyStart
Adding number conversion cast (unumber) $10 in [13] if(divr16u::i#1!=$10) goto divr16u::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $10
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) $10
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [50] memset::end#0 = memset::$4 + memset::num#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant memset::end#0 = memset::$4+memset::num#0
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift [71] main::$27 = main::i#10 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [75] main::$28 = main::i#10 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [79] main::$29 = main::i#10 * SIZEOF_UNSIGNED_INT
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings divr16u::quotient#0
Inlining constant with var siblings divr16u::i#0
Inlining constant with var siblings divr16u::rem#3
Inlining constant with var siblings divr16u::dividend#2
Inlining constant with var siblings print_str::str#1
Inlining constant with var siblings print_str::str#2
Inlining constant with var siblings print_str::str#3
Inlining constant with var siblings print_str::str#4
Inlining constant with var siblings print_str::str#5
Inlining constant with var siblings print_str::str#6
Inlining constant with var siblings print_str::str#7
Inlining constant with var siblings print_str::str#8
Inlining constant with var siblings print_str::str#9
Inlining constant with var siblings print_uint::w#0
Inlining constant with var siblings print_uint::w#1
Inlining constant with var siblings print_uint::w#2
Inlining constant with var siblings print_uint::w#6
Inlining constant with var siblings print_uint::w#7
Inlining constant with var siblings print_uint::w#8
Inlining constant with var siblings memset::dst#0
Inlining constant with var siblings main::i#0
Inlining constant with var siblings lin16u_gen::min#0
Inlining constant with var siblings lin16u_gen::max#0
Inlining constant with var siblings lin16u_gen::lintab#0
Inlining constant with var siblings lin16u_gen::length#0
Inlining constant with var siblings lin16u_gen::min#1
Inlining constant with var siblings lin16u_gen::max#1
Inlining constant with var siblings lin16u_gen::lintab#1
Inlining constant with var siblings lin16u_gen::length#1
Inlining constant with var siblings lin16u_gen::min#2
Inlining constant with var siblings lin16u_gen::max#2
Inlining constant with var siblings lin16u_gen::lintab#2
Inlining constant with var siblings lin16u_gen::length#2
Inlining constant with var siblings lin16u_gen::i#0
Constant inlined main::str4 = main::str1
Constant inlined main::str5 = main::str1
Constant inlined divr16u::rem#3 = 0
Constant inlined main::str6 = main::str
Constant inlined main::str7 = main::str1
Constant inlined divr16u::i#0 = 0
Constant inlined main::str2 = main::str1
Constant inlined print_uint::w#8 = $6488
Constant inlined main::str3 = main::str1
Constant inlined lin16u_gen::max#0 = $7461
Constant inlined lin16u_gen::max#2 = $6488
Constant inlined lin16u_gen::max#1 = $f781
Constant inlined divr16u::quotient#0 = 0
Constant inlined memset::$4 = (char *)memset::str#0
Constant inlined main::i#0 = 0
Constant inlined lin16u_gen::min#0 = $22d
Constant inlined divr16u::dividend#2 = 0
Constant inlined lin16u_gen::length#2 = $14
Constant inlined print_str::str#9 = main::str1
Constant inlined lin16u_gen::length#1 = $14
Constant inlined lin16u_gen::length#0 = $14
Constant inlined print_str::str#4 = main::str1
Constant inlined print_uint::w#6 = $7461
Constant inlined print_str::str#3 = main::str1
Constant inlined print_uint::w#7 = $f781
Constant inlined print_str::str#2 = main::str1
Constant inlined memset::dst#0 = (char *)memset::str#0
Constant inlined print_str::str#1 = main::str
Constant inlined print_str::str#8 = main::str1
Constant inlined main::str8 = main::str1
Constant inlined lin16u_gen::lintab#2 = main::lintab3
Constant inlined print_uint::w#2 = 0
Constant inlined lin16u_gen::min#1 = $79cb
Constant inlined lin16u_gen::i#0 = 0
Constant inlined print_str::str#7 = main::str
Constant inlined lin16u_gen::lintab#1 = main::lintab2
Constant inlined lin16u_gen::min#2 = 0
Constant inlined print_str::str#6 = main::str1
Constant inlined lin16u_gen::lintab#0 = main::lintab1
Constant inlined print_uint::w#0 = $22d
Constant inlined print_str::str#5 = main::str1
Constant inlined print_uint::w#1 = $79cb
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values lin16u_gen::length#3 $14
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [75] main::$28 = main::i#10 << 1
Identified duplicate assignment right side [79] main::$29 = main::i#10 << 1
Successful SSA optimization Pass2DuplicateRValueIdentification
Constant right-side identified [94] divr16u::divisor#0 = $14 - 1
Constant right-side identified [99] divr16u::divisor#1 = $14 - 1
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant divr16u::divisor#0 = $14-1
Constant divr16u::divisor#1 = $14-1
Successful SSA optimization Pass2ConstantIdentification
Inlining constant with var siblings divr16u::divisor#0
Inlining constant with var siblings divr16u::divisor#1
Constant inlined divr16u::divisor#1 = $14-1
Constant inlined divr16u::divisor#0 = $14-1
Successful SSA optimization Pass2ConstantInlining
Alias main::$28 = main::$27 main::$29
Successful SSA optimization Pass2AliasElimination
Identical Phi Values divr16u::divisor#6 $14-1
Successful SSA optimization Pass2IdenticalPhiElimination
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) 8
Finalized unsigned number type (char) $a
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) $14
Finalized unsigned number type (char) $14
Successful SSA optimization PassNFinalizeNumberTypeConversions
Added new block during phi lifting divr16u::@7(between divr16u::@3 and divr16u::@1)
Added new block during phi lifting divr16u::@8(between divr16u::@1 and divr16u::@2)
Added new block during phi lifting divr16u::@9(between divr16u::@2 and divr16u::@3)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@23
Adding NOP phi() at start of main::@25
Adding NOP phi() at start of main::@27
Adding NOP phi() at start of main::@29
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of print_cls::@1
Adding NOP phi() at start of print_uint::@2
Adding NOP phi() at start of print_ln::@2
Adding NOP phi() at start of print_uchar::@2
Adding NOP phi() at start of memset
Adding NOP phi() at start of memset::@2
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [main] to lin16u_gen:1 lin16u_gen:3 lin16u_gen:5 print_cls:7 print_str:9 print_uint:11 print_str:13 print_uint:15 print_str:17 print_uint:19 print_ln:21 print_str:26 print_uint:28 print_str:30 print_uint:32 print_str:34 print_uint:36 print_ln:38 print_uchar:44 print_str:46 print_uint:50 print_str:52 print_uint:55 print_str:57 print_uint:60 print_ln:62
Calls in [lin16u_gen] to divr16u:69 divr16u:74
Calls in [print_cls] to memset:93
Calls in [print_str] to print_char:105
Calls in [print_uint] to print_uchar:113 print_uchar:117
Calls in [print_uchar] to print_char:133 print_char:138
Created 28 initial phi equivalence classes
Coalesced [12] print_char_cursor#101 = print_char_cursor#10
Coalesced (already) [16] print_char_cursor#94 = print_char_cursor#10
Not coalescing [25] print_char_cursor#100 = print_line_cursor#0
Coalesced (already) [29] print_char_cursor#98 = print_char_cursor#10
Coalesced (already) [33] print_char_cursor#99 = print_char_cursor#10
Coalesced [37] print_line_cursor#52 = print_line_cursor#0
Coalesced [42] print_uchar::b#5 = print_uchar::b#2
Not coalescing [43] print_char_cursor#104 = print_line_cursor#0
Coalesced (already) [45] print_char_cursor#95 = print_char_cursor#10
Coalesced [49] print_uint::w#11 = print_uint::w#3
Coalesced (already) [51] print_char_cursor#96 = print_char_cursor#10
Coalesced [54] print_uint::w#12 = print_uint::w#4
Coalesced (already) [56] print_char_cursor#97 = print_char_cursor#10
Coalesced [59] print_uint::w#13 = print_uint::w#5
Coalesced (already) [61] print_line_cursor#51 = print_line_cursor#0
Coalesced [64] main::i#12 = main::i#1
Coalesced [68] divr16u::dividend#9 = divr16u::dividend#1
Coalesced [73] divr16u::rem#12 = divr16u::rem#4
Coalesced [79] lin16u_gen::val#5 = lin16u_gen::val#0
Coalesced [80] lin16u_gen::lintab#10 = lin16u_gen::lintab#6
Coalesced [89] lin16u_gen::i#4 = lin16u_gen::i#1
Coalesced [90] lin16u_gen::val#4 = lin16u_gen::val#1
Coalesced [91] lin16u_gen::lintab#9 = lin16u_gen::lintab#3
Coalesced [97] print_str::str#14 = print_str::str#13
Coalesced [98] print_char_cursor#102 = print_char_cursor#89
Coalesced [103] print_char::ch#4 = print_char::ch#0
Coalesced [104] print_char_cursor#107 = print_char_cursor#1
Coalesced [107] print_str::str#15 = print_str::str#0
Coalesced (already) [108] print_char_cursor#103 = print_char_cursor#10
Coalesced [111] print_uchar::b#6 = print_uchar::b#0
Coalesced [112] print_char_cursor#105 = print_char_cursor#1
Coalesced [115] print_uchar::b#7 = print_uchar::b#1
Coalesced (already) [116] print_char_cursor#106 = print_char_cursor#10
Coalesced [121] print_line_cursor#53 = print_line_cursor#23
Coalesced (already) [127] print_line_cursor#54 = print_line_cursor#0
Coalesced [131] print_char::ch#5 = print_char::ch#1
Coalesced (already) [132] print_char_cursor#108 = print_char_cursor#84
Coalesced [136] print_char::ch#6 = print_char::ch#2
Coalesced (already) [137] print_char_cursor#109 = print_char_cursor#10
Coalesced [142] divr16u::rem#13 = divr16u::rem#10
Coalesced [143] divr16u::dividend#10 = divr16u::dividend#5
Coalesced [150] divr16u::rem#16 = divr16u::rem#1
Coalesced [157] divr16u::rem#18 = divr16u::rem#2
Coalesced [158] divr16u::return#8 = divr16u::quotient#2
Coalesced [164] divr16u::rem#14 = divr16u::rem#11
Coalesced [165] divr16u::dividend#11 = divr16u::dividend#0
Coalesced [166] divr16u::quotient#9 = divr16u::return#0
Coalesced [167] divr16u::i#7 = divr16u::i#1
Coalesced [168] divr16u::rem#17 = divr16u::rem#6
Coalesced [169] divr16u::return#7 = divr16u::quotient#1
Coalesced [170] divr16u::rem#15 = divr16u::rem#0
Coalesced [179] memset::dst#4 = memset::dst#1
Coalesced down to 17 phi equivalence classes
Culled Empty Block label main::@14
Culled Empty Block label main::@29
Culled Empty Block label print_cls::@1
Culled Empty Block label print_uint::@2
Culled Empty Block label print_ln::@2
Culled Empty Block label print_ln::@3
Culled Empty Block label print_uchar::@2
Culled Empty Block label divr16u::@7
Culled Empty Block label divr16u::@9
Culled Empty Block label divr16u::@8
Culled Empty Block label memset::@2
Culled Empty Block label memset::@1
Renumbering block memset::@3 to memset::@1
Renumbering block memset::@4 to memset::@2
Renumbering block main::@15 to main::@14
Renumbering block main::@16 to main::@15
Renumbering block main::@17 to main::@16
Renumbering block main::@18 to main::@17
Renumbering block main::@19 to main::@18
Renumbering block main::@20 to main::@19
Renumbering block main::@21 to main::@20
Renumbering block main::@22 to main::@21
Renumbering block main::@23 to main::@22
Renumbering block main::@24 to main::@23
Renumbering block main::@25 to main::@24
Renumbering block main::@26 to main::@25
Renumbering block main::@27 to main::@26
Renumbering block main::@28 to main::@27
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@22
Adding NOP phi() at start of main::@23
Adding NOP phi() at start of main::@24
Adding NOP phi() at start of main::@25
Adding NOP phi() at start of main::@26
Adding NOP phi() at start of main::@27
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@16
Adding NOP phi() at start of main::@18
Adding NOP phi() at start of main::@20
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of memset
FINAL CONTROL FLOW GRAPH
void main()
main: scope:[main] from
[0] phi()
[1] call lin16u_gen
to:main::@4
main::@4: scope:[main] from main
[2] phi()
[3] call lin16u_gen
to:main::@5
main::@5: scope:[main] from main::@4
[4] phi()
[5] call lin16u_gen
to:main::@6
main::@6: scope:[main] from main::@5
[6] phi()
[7] call print_cls
to:main::@7
main::@7: scope:[main] from main::@6
[8] phi()
[9] call print_str
to:main::@8
main::@8: scope:[main] from main::@7
[10] phi()
[11] call print_uint
to:main::@9
main::@9: scope:[main] from main::@8
[12] phi()
[13] call print_str
to:main::@10
main::@10: scope:[main] from main::@9
[14] phi()
[15] call print_uint
to:main::@11
main::@11: scope:[main] from main::@10
[16] phi()
[17] call print_str
to:main::@12
main::@12: scope:[main] from main::@11
[18] phi()
[19] call print_uint
to:main::@13
main::@13: scope:[main] from main::@12
[20] phi()
[21] call print_ln
to:main::@1
main::@1: scope:[main] from main::@13 main::@21
[22] main::i#10 = phi( main::@13/0, main::@21/main::i#1 )
[23] if(main::i#10<$14) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1
[24] print_char_cursor#100 = print_line_cursor#0
[25] call print_str
to:main::@22
main::@22: scope:[main] from main::@3
[26] phi()
[27] call print_uint
to:main::@23
main::@23: scope:[main] from main::@22
[28] phi()
[29] call print_str
to:main::@24
main::@24: scope:[main] from main::@23
[30] phi()
[31] call print_uint
to:main::@25
main::@25: scope:[main] from main::@24
[32] phi()
[33] call print_str
to:main::@26
main::@26: scope:[main] from main::@25
[34] phi()
[35] call print_uint
to:main::@27
main::@27: scope:[main] from main::@26
[36] phi()
[37] call print_ln
to:main::@return
main::@return: scope:[main] from main::@27
[38] return
to:@return
main::@2: scope:[main] from main::@1
[39] print_uchar::b#2 = main::i#10
[40] print_char_cursor#104 = print_line_cursor#0
[41] call print_uchar
to:main::@14
main::@14: scope:[main] from main::@2
[42] phi()
[43] call print_str
to:main::@15
main::@15: scope:[main] from main::@14
[44] main::$28 = main::i#10 << 1
[45] print_uint::w#3 = main::lintab1[main::$28]
[46] call print_uint
to:main::@16
main::@16: scope:[main] from main::@15
[47] phi()
[48] call print_str
to:main::@17
main::@17: scope:[main] from main::@16
[49] print_uint::w#4 = main::lintab2[main::$28]
[50] call print_uint
to:main::@18
main::@18: scope:[main] from main::@17
[51] phi()
[52] call print_str
to:main::@19
main::@19: scope:[main] from main::@18
[53] print_uint::w#5 = main::lintab3[main::$28]
[54] call print_uint
to:main::@20
main::@20: scope:[main] from main::@19
[55] phi()
[56] call print_ln
to:main::@21
main::@21: scope:[main] from main::@20
[57] main::i#1 = ++ main::i#10
to:main::@1
void lin16u_gen(unsigned int min , unsigned int max , unsigned int *lintab , unsigned int length)
lin16u_gen: scope:[lin16u_gen] from main main::@4 main::@5
[58] lin16u_gen::lintab#6 = phi( main/main::lintab1, main::@4/main::lintab2, main::@5/main::lintab3 )
[58] lin16u_gen::min#3 = phi( main/$22d, main::@4/$79cb, main::@5/0 )
[58] lin16u_gen::max#3 = phi( main/$7461, main::@4/$f781, main::@5/$6488 )
[59] lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3
[60] divr16u::dividend#1 = lin16u_gen::ampl#0
[61] call divr16u
[62] divr16u::return#2 = divr16u::return#0
to:lin16u_gen::@3
lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen
[63] lin16u_gen::stepi#0 = divr16u::return#2
[64] divr16u::rem#4 = rem16u#0
[65] call divr16u
[66] divr16u::return#3 = divr16u::return#0
to:lin16u_gen::@4
lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3
[67] lin16u_gen::stepf#0 = divr16u::return#3
[68] lin16u_gen::step#0 = lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0
[69] lin16u_gen::val#0 = lin16u_gen::min#3 dw= 0
to:lin16u_gen::@1
lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4
[70] lin16u_gen::lintab#4 = phi( lin16u_gen::@2/lin16u_gen::lintab#3, lin16u_gen::@4/lin16u_gen::lintab#6 )
[70] lin16u_gen::val#2 = phi( lin16u_gen::@2/lin16u_gen::val#1, lin16u_gen::@4/lin16u_gen::val#0 )
[70] lin16u_gen::i#2 = phi( lin16u_gen::@2/lin16u_gen::i#1, lin16u_gen::@4/0 )
[71] if(lin16u_gen::i#2<$14) goto lin16u_gen::@2
to:lin16u_gen::@return
lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1
[72] return
to:@return
lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1
[73] lin16u_gen::$8 = word1 lin16u_gen::val#2
[74] *lin16u_gen::lintab#4 = lin16u_gen::$8
[75] lin16u_gen::val#1 = lin16u_gen::val#2 + lin16u_gen::step#0
[76] lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT
[77] lin16u_gen::i#1 = ++ lin16u_gen::i#2
to:lin16u_gen::@1
void print_cls()
print_cls: scope:[print_cls] from main::@6
[78] phi()
[79] call memset
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls
[80] return
to:@return
void print_str(char *str)
print_str: scope:[print_str] from main::@11 main::@14 main::@16 main::@18 main::@23 main::@25 main::@3 main::@7 main::@9
[81] print_char_cursor#89 = phi( main::@11/print_char_cursor#10, main::@14/print_char_cursor#10, main::@16/print_char_cursor#10, main::@18/print_char_cursor#10, main::@23/print_char_cursor#10, main::@25/print_char_cursor#10, main::@3/print_char_cursor#100, main::@7/print_screen#0, main::@9/print_char_cursor#10 )
[81] print_str::str#13 = phi( main::@11/main::str1, main::@14/main::str1, main::@16/main::str1, main::@18/main::str1, main::@23/main::str1, main::@25/main::str1, main::@3/main::str, main::@7/main::str, main::@9/main::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@3
[82] print_char_cursor#1 = phi( print_str/print_char_cursor#89, print_str::@3/print_char_cursor#10 )
[82] print_str::str#10 = phi( print_str/print_str::str#13, print_str::@3/print_str::str#0 )
[83] if(0!=*print_str::str#10) goto print_str::@2
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
[84] return
to:@return
print_str::@2: scope:[print_str] from print_str::@1
[85] print_char::ch#0 = *print_str::str#10
[86] call print_char
to:print_str::@3
print_str::@3: scope:[print_str] from print_str::@2
[87] print_str::str#0 = ++ print_str::str#10
to:print_str::@1
void print_uint(unsigned int w)
print_uint: scope:[print_uint] from main::@10 main::@12 main::@15 main::@17 main::@19 main::@22 main::@24 main::@26 main::@8
[88] print_uint::w#10 = phi( main::@10/$79cb, main::@12/0, main::@15/print_uint::w#3, main::@17/print_uint::w#4, main::@19/print_uint::w#5, main::@22/$7461, main::@24/$f781, main::@26/$6488, main::@8/$22d )
[89] print_uchar::b#0 = byte1 print_uint::w#10
[90] call print_uchar
to:print_uint::@1
print_uint::@1: scope:[print_uint] from print_uint
[91] print_uchar::b#1 = byte0 print_uint::w#10
[92] call print_uchar
to:print_uint::@return
print_uint::@return: scope:[print_uint] from print_uint::@1
[93] return
to:@return
void print_ln()
print_ln: scope:[print_ln] from main::@13 main::@20 main::@27
[94] print_line_cursor#23 = phi( main::@13/print_screen#0, main::@20/print_line_cursor#0, main::@27/print_line_cursor#0 )
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[95] print_line_cursor#12 = phi( print_ln/print_line_cursor#23, print_ln::@1/print_line_cursor#0 )
[96] print_line_cursor#0 = print_line_cursor#12 + $28
[97] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[98] return
to:@return
void print_uchar(char b)
print_uchar: scope:[print_uchar] from main::@2 print_uint print_uint::@1
[99] print_char_cursor#84 = phi( main::@2/print_char_cursor#104, print_uint/print_char_cursor#1, print_uint::@1/print_char_cursor#10 )
[99] print_uchar::b#3 = phi( main::@2/print_uchar::b#2, print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 )
[100] print_uchar::$0 = print_uchar::b#3 >> 4
[101] print_char::ch#1 = print_hextab[print_uchar::$0]
[102] call print_char
to:print_uchar::@1
print_uchar::@1: scope:[print_uchar] from print_uchar
[103] print_uchar::$2 = print_uchar::b#3 & $f
[104] print_char::ch#2 = print_hextab[print_uchar::$2]
[105] call print_char
to:print_uchar::@return
print_uchar::@return: scope:[print_uchar] from print_uchar::@1
[106] return
to:@return
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3
[107] divr16u::dividend#5 = phi( lin16u_gen/divr16u::dividend#1, lin16u_gen::@3/0 )
[107] divr16u::rem#10 = phi( lin16u_gen/0, lin16u_gen::@3/divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[108] divr16u::i#2 = phi( divr16u/0, divr16u::@3/divr16u::i#1 )
[108] divr16u::quotient#3 = phi( divr16u/0, divr16u::@3/divr16u::return#0 )
[108] divr16u::dividend#3 = phi( divr16u/divr16u::dividend#5, divr16u::@3/divr16u::dividend#0 )
[108] divr16u::rem#5 = phi( divr16u/divr16u::rem#10, divr16u::@3/divr16u::rem#11 )
[109] divr16u::rem#0 = divr16u::rem#5 << 1
[110] divr16u::$1 = byte1 divr16u::dividend#3
[111] divr16u::$2 = divr16u::$1 & $80
[112] if(divr16u::$2==0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[113] divr16u::rem#1 = divr16u::rem#0 | 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[114] divr16u::rem#6 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 )
[115] divr16u::dividend#0 = divr16u::dividend#3 << 1
[116] divr16u::quotient#1 = divr16u::quotient#3 << 1
[117] if(divr16u::rem#6<$14-1) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[118] divr16u::quotient#2 = ++ divr16u::quotient#1
[119] divr16u::rem#2 = divr16u::rem#6 - $14-1
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[120] divr16u::return#0 = phi( divr16u::@2/divr16u::quotient#1, divr16u::@5/divr16u::quotient#2 )
[120] divr16u::rem#11 = phi( divr16u::@2/divr16u::rem#6, divr16u::@5/divr16u::rem#2 )
[121] divr16u::i#1 = ++ divr16u::i#2
[122] if(divr16u::i#1!=$10) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[123] rem16u#0 = divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[124] return
to:@return
void * memset(void *str , char c , unsigned int num)
memset: scope:[memset] from print_cls
[125] phi()
to:memset::@1
memset::@1: scope:[memset] from memset memset::@2
[126] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 )
[127] if(memset::dst#2!=memset::end#0) goto memset::@2
to:memset::@return
memset::@return: scope:[memset] from memset::@1
[128] return
to:@return
memset::@2: scope:[memset] from memset::@1
[129] *memset::dst#2 = memset::c#0
[130] memset::dst#1 = ++ memset::dst#2
to:memset::@1
void print_char(char ch)
print_char: scope:[print_char] from print_str::@2 print_uchar print_uchar::@1
[131] print_char_cursor#51 = phi( print_str::@2/print_char_cursor#1, print_uchar/print_char_cursor#84, print_uchar::@1/print_char_cursor#10 )
[131] print_char::ch#3 = phi( print_str::@2/print_char::ch#0, print_uchar/print_char::ch#1, print_uchar::@1/print_char::ch#2 )
[132] *print_char_cursor#51 = print_char::ch#3
[133] print_char_cursor#10 = ++ print_char_cursor#51
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
[134] return
to:@return
VARIABLE REGISTER WEIGHTS
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
char divr16u::$1 // 2002.0
char divr16u::$2 // 2002.0
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0 // 250.25
unsigned int divr16u::dividend#1 // 22.0
unsigned int divr16u::dividend#3 // 443.42857142857144
unsigned int divr16u::dividend#5 // 112.0
unsigned int divr16u::divisor
char divr16u::i
char divr16u::i#1 // 1501.5
char divr16u::i#2 // 154.0
unsigned int divr16u::quotient
unsigned int divr16u::quotient#1 // 1501.5
unsigned int divr16u::quotient#2 // 1001.0
unsigned int divr16u::quotient#3 // 250.25
unsigned int divr16u::rem
unsigned int divr16u::rem#0 // 750.75
unsigned int divr16u::rem#1 // 2002.0
unsigned int divr16u::rem#10 // 112.0
unsigned int divr16u::rem#11 // 1034.6666666666667
unsigned int divr16u::rem#2 // 2002.0
unsigned int divr16u::rem#4 // 22.0
unsigned int divr16u::rem#5 // 2103.0
unsigned int divr16u::rem#6 // 1001.0
unsigned int divr16u::return
unsigned int divr16u::return#0 // 432.1428571428571
unsigned int divr16u::return#2 // 22.0
unsigned int divr16u::return#3 // 22.0
void lin16u_gen(unsigned int min , unsigned int max , unsigned int *lintab , unsigned int length)
unsigned int lin16u_gen::$8 // 202.0
unsigned int lin16u_gen::ampl
unsigned int lin16u_gen::ampl#0 // 22.0
unsigned int lin16u_gen::i
unsigned int lin16u_gen::i#1 // 202.0
unsigned int lin16u_gen::i#2 // 50.5
unsigned int lin16u_gen::length
unsigned int *lin16u_gen::lintab
unsigned int *lin16u_gen::lintab#3 // 101.0
unsigned int *lin16u_gen::lintab#4 // 62.8
unsigned int *lin16u_gen::lintab#6 // 0.9166666666666666
unsigned int lin16u_gen::max
unsigned int lin16u_gen::max#3 // 11.0
unsigned int lin16u_gen::min
unsigned int lin16u_gen::min#3 // 2.0
unsigned long lin16u_gen::step
unsigned long lin16u_gen::step#0 // 12.444444444444443
unsigned int lin16u_gen::stepf
unsigned int lin16u_gen::stepf#0 // 22.0
unsigned int lin16u_gen::stepi
unsigned int lin16u_gen::stepi#0 // 4.4
unsigned long lin16u_gen::val
unsigned long lin16u_gen::val#0 // 22.0
unsigned long lin16u_gen::val#1 // 67.33333333333333
unsigned long lin16u_gen::val#2 // 78.5
void main()
char main::$28 // 4.888888888888889
char main::i
char main::i#1 // 22.0
char main::i#10 // 2.75
void * memset(void *str , char c , unsigned int num)
char memset::c
char *memset::dst
char *memset::dst#1 // 2002.0
char *memset::dst#2 // 1334.6666666666667
char *memset::end
unsigned int memset::num
void *memset::return
void *memset::str
void print_char(char ch)
char print_char::ch
char print_char::ch#0 // 20002.0
char print_char::ch#1 // 2002.0
char print_char::ch#2 // 2002.0
char print_char::ch#3 // 112004.0
char *print_char_cursor
char *print_char_cursor#1 // 808.1600000000001
char *print_char_cursor#10 // 3274.216216216216
char *print_char_cursor#100 // 4.0
char *print_char_cursor#104 // 22.0
char *print_char_cursor#51 // 106002.5
char *print_char_cursor#84 // 404.6666666666667
char *print_char_cursor#89 // 144.0
void print_cls()
char *print_line_cursor
char *print_line_cursor#0 // 790.2368421052631
char *print_line_cursor#12 // 20103.0
char *print_line_cursor#23 // 114.0
void print_ln()
char *print_screen
void print_str(char *str)
char *print_str::str
char *print_str::str#0 // 20002.0
char *print_str::str#10 // 10026.25
char *print_str::str#13 // 101.0
void print_uchar(char b)
char print_uchar::$0 // 2002.0
char print_uchar::$2 // 2002.0
char print_uchar::b
char print_uchar::b#0 // 202.0
char print_uchar::b#1 // 202.0
char print_uchar::b#2 // 11.0
char print_uchar::b#3 // 553.75
void print_uint(unsigned int w)
unsigned int print_uint::w
unsigned int print_uint::w#10 // 78.33333333333333
unsigned int print_uint::w#3 // 22.0
unsigned int print_uint::w#4 // 22.0
unsigned int print_uint::w#5 // 22.0
unsigned int rem16u
unsigned int rem16u#0 // 22.4
Initial phi equivalence classes
[ main::i#10 main::i#1 ]
[ lin16u_gen::max#3 ]
[ lin16u_gen::min#3 ]
[ lin16u_gen::i#2 lin16u_gen::i#1 ]
[ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ]
[ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ]
[ print_str::str#10 print_str::str#13 print_str::str#0 ]
[ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ]
[ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ]
[ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ]
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ memset::dst#2 memset::dst#1 ]
[ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
[ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ]
Added variable main::$28 to live range equivalence class [ main::$28 ]
Added variable lin16u_gen::ampl#0 to live range equivalence class [ lin16u_gen::ampl#0 ]
Added variable divr16u::return#2 to live range equivalence class [ divr16u::return#2 ]
Added variable lin16u_gen::stepi#0 to live range equivalence class [ lin16u_gen::stepi#0 ]
Added variable divr16u::return#3 to live range equivalence class [ divr16u::return#3 ]
Added variable lin16u_gen::stepf#0 to live range equivalence class [ lin16u_gen::stepf#0 ]
Added variable lin16u_gen::step#0 to live range equivalence class [ lin16u_gen::step#0 ]
Added variable lin16u_gen::$8 to live range equivalence class [ lin16u_gen::$8 ]
Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ]
Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$2 ]
Added variable divr16u::$1 to live range equivalence class [ divr16u::$1 ]
Added variable divr16u::$2 to live range equivalence class [ divr16u::$2 ]
Added variable rem16u#0 to live range equivalence class [ rem16u#0 ]
Complete equivalence classes
[ main::i#10 main::i#1 ]
[ lin16u_gen::max#3 ]
[ lin16u_gen::min#3 ]
[ lin16u_gen::i#2 lin16u_gen::i#1 ]
[ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ]
[ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ]
[ print_str::str#10 print_str::str#13 print_str::str#0 ]
[ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ]
[ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ]
[ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ]
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ memset::dst#2 memset::dst#1 ]
[ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
[ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ]
[ main::$28 ]
[ lin16u_gen::ampl#0 ]
[ divr16u::return#2 ]
[ lin16u_gen::stepi#0 ]
[ divr16u::return#3 ]
[ lin16u_gen::stepf#0 ]
[ lin16u_gen::step#0 ]
[ lin16u_gen::$8 ]
[ print_uchar::$0 ]
[ print_uchar::$2 ]
[ divr16u::$1 ]
[ divr16u::$2 ]
[ rem16u#0 ]
Allocated zp[1]:2 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
Allocated zp[2]:3 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ]
Allocated zp[2]:5 [ print_str::str#10 print_str::str#13 print_str::str#0 ]
Allocated zp[2]:7 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ]
Allocated zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
Allocated zp[2]:11 [ memset::dst#2 memset::dst#1 ]
Allocated zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp[1]:15 [ print_uchar::$0 ]
Allocated zp[1]:16 [ print_uchar::$2 ]
Allocated zp[1]:17 [ divr16u::$1 ]
Allocated zp[1]:18 [ divr16u::$2 ]
Allocated zp[1]:19 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp[1]:20 [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Allocated zp[2]:21 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ]
Allocated zp[2]:23 [ lin16u_gen::i#2 lin16u_gen::i#1 ]
Allocated zp[2]:25 [ lin16u_gen::$8 ]
Allocated zp[4]:27 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ]
Allocated zp[2]:31 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ]
Allocated zp[2]:33 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ]
Allocated zp[1]:35 [ main::i#10 main::i#1 ]
Allocated zp[2]:36 [ rem16u#0 ]
Allocated zp[2]:38 [ lin16u_gen::ampl#0 ]
Allocated zp[2]:40 [ divr16u::return#2 ]
Allocated zp[2]:42 [ divr16u::return#3 ]
Allocated zp[2]:44 [ lin16u_gen::stepf#0 ]
Allocated zp[4]:46 [ lin16u_gen::step#0 ]
Allocated zp[2]:50 [ lin16u_gen::max#3 ]
Allocated zp[1]:52 [ main::$28 ]
Allocated zp[2]:53 [ lin16u_gen::stepi#0 ]
Allocated zp[2]:55 [ lin16u_gen::min#3 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [24] print_char_cursor#100 = print_line_cursor#0 [ print_char_cursor#100 print_line_cursor#0 ] ( [ print_char_cursor#100 print_line_cursor#0 ] { { print_char_cursor#100 = print_char_cursor#89 } } ) always clobbers reg byte a
Statement [40] print_char_cursor#104 = print_line_cursor#0 [ main::i#10 print_line_cursor#0 print_uchar::b#2 print_char_cursor#104 ] ( [ main::i#10 print_line_cursor#0 print_uchar::b#2 print_char_cursor#104 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:35 [ main::i#10 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Statement [44] main::$28 = main::i#10 << 1 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#3 } } ) always clobbers reg byte a
Statement [45] print_uint::w#3 = main::lintab1[main::$28] [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#3 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#3 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#3 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:52 [ main::$28 ]
Statement [49] print_uint::w#4 = main::lintab2[main::$28] [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#4 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#4 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#4 } } ) always clobbers reg byte a
Statement [53] print_uint::w#5 = main::lintab3[main::$28] [ main::i#10 print_line_cursor#0 print_uint::w#5 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 print_uint::w#5 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#5 } } ) always clobbers reg byte a
Statement [59] lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [60] divr16u::dividend#1 = lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [62] divr16u::return#2 = divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [63] lin16u_gen::stepi#0 = divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [64] divr16u::rem#4 = rem16u#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [66] divr16u::return#3 = divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [67] lin16u_gen::stepf#0 = divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } ) always clobbers reg byte a
Statement [68] lin16u_gen::step#0 = lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } ) always clobbers reg byte a
Statement [69] lin16u_gen::val#0 = lin16u_gen::min#3 dw= 0 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ( lin16u_gen:1 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } lin16u_gen:3 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } lin16u_gen:5 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } ) always clobbers reg byte a
Statement [71] if(lin16u_gen::i#2<$14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } ) always clobbers reg byte a
Statement [73] lin16u_gen::$8 = word1 lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } ) always clobbers reg byte a
Statement [74] *lin16u_gen::lintab#4 = lin16u_gen::$8 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } ) always clobbers reg byte a reg byte y
Statement [75] lin16u_gen::val#1 = lin16u_gen::val#2 + lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } ) always clobbers reg byte a
Statement [76] lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } ) always clobbers reg byte a
Statement [83] if(0!=*print_str::str#10) goto print_str::@2 [ print_str::str#10 print_char_cursor#1 ] ( print_str:9 [ print_str::str#10 print_char_cursor#1 ] { } print_str:13 [ print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:17 [ print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:25 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#100 = print_char_cursor#89 } } print_str:29 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:33 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:43 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:48 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:52 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:35 [ main::i#10 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:52 [ main::$28 ]
Statement [85] print_char::ch#0 = *print_str::str#10 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] ( print_str:9 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:13 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:17 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:25 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#100 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:29 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:33 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:43 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:48 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:52 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } ) always clobbers reg byte a reg byte y
Statement [96] print_line_cursor#0 = print_line_cursor#12 + $28 [ print_line_cursor#0 print_char_cursor#10 ] ( print_ln:21 [ print_line_cursor#0 print_char_cursor#10 ] { } print_ln:37 [ print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } print_ln:56 [ main::i#10 print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } ) always clobbers reg byte a
Statement [97] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#0 print_char_cursor#10 ] ( print_ln:21 [ print_line_cursor#0 print_char_cursor#10 ] { } print_ln:37 [ print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } print_ln:56 [ main::i#10 print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } ) always clobbers reg byte a
Statement [100] print_uchar::$0 = print_uchar::b#3 >> 4 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] ( print_uchar:41 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:90 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:92 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } ) always clobbers reg byte a
Statement [103] print_uchar::$2 = print_uchar::b#3 & $f [ print_char_cursor#10 print_uchar::$2 ] ( print_uchar:41 [ main::i#10 print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:15::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:19::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:27::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:31::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:35::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:46::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:50::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:54::print_uchar:90 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:15::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:19::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:27::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:31::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:35::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:46::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:50::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:54::print_uchar:92 [ main::i#10 print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte a
Statement [113] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:19 [ divr16u::i#2 divr16u::i#1 ]
Statement [117] if(divr16u::rem#6<$14-1) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [119] divr16u::rem#2 = divr16u::rem#6 - $14-1 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [123] rem16u#0 = divr16u::rem#11 [ divr16u::return#0 rem16u#0 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [127] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:7::memset:79 [ memset::dst#2 ] { } ) always clobbers reg byte a
Statement [129] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:7::memset:79 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Statement [132] *print_char_cursor#51 = print_char::ch#3 [ print_char_cursor#51 ] ( print_str:9::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:13::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:17::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:25::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#100 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:29::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:33::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:43::print_char:86 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:48::print_char:86 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:52::print_char:86 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_uchar:41::print_char:102 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uchar:41::print_char:105 [ main::i#10 print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:15::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:19::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:27::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:31::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:35::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:46::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:50::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:54::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:15::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:19::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:27::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:31::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:35::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:46::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:50::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:54::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:20 [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Statement [24] print_char_cursor#100 = print_line_cursor#0 [ print_char_cursor#100 print_line_cursor#0 ] ( [ print_char_cursor#100 print_line_cursor#0 ] { { print_char_cursor#100 = print_char_cursor#89 } } ) always clobbers reg byte a
Statement [40] print_char_cursor#104 = print_line_cursor#0 [ main::i#10 print_line_cursor#0 print_uchar::b#2 print_char_cursor#104 ] ( [ main::i#10 print_line_cursor#0 print_uchar::b#2 print_char_cursor#104 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } } ) always clobbers reg byte a
Statement [44] main::$28 = main::i#10 << 1 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#3 } } ) always clobbers reg byte a
Statement [45] print_uint::w#3 = main::lintab1[main::$28] [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#3 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#3 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#3 } } ) always clobbers reg byte a
Statement [49] print_uint::w#4 = main::lintab2[main::$28] [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#4 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#4 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#4 } } ) always clobbers reg byte a
Statement [53] print_uint::w#5 = main::lintab3[main::$28] [ main::i#10 print_line_cursor#0 print_uint::w#5 print_char_cursor#1 ] ( [ main::i#10 print_line_cursor#0 print_uint::w#5 print_char_cursor#1 ] { { print_uint::w#10 = print_uint::w#5 } } ) always clobbers reg byte a
Statement [59] lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::ampl#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [60] divr16u::dividend#1 = lin16u_gen::ampl#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [62] divr16u::return#2 = divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#2 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a
Statement [63] lin16u_gen::stepi#0 = divr16u::return#2 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [64] divr16u::rem#4 = rem16u#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::rem#4 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [66] divr16u::return#3 = divr16u::return#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#3 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [67] lin16u_gen::stepf#0 = divr16u::return#3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] { } ) always clobbers reg byte a
Statement [68] lin16u_gen::step#0 = lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] ( lin16u_gen:1 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } lin16u_gen:3 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } lin16u_gen:5 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::step#0 ] { } ) always clobbers reg byte a
Statement [69] lin16u_gen::val#0 = lin16u_gen::min#3 dw= 0 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] ( lin16u_gen:1 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } lin16u_gen:3 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } lin16u_gen:5 [ lin16u_gen::lintab#6 lin16u_gen::step#0 lin16u_gen::val#0 ] { } ) always clobbers reg byte a
Statement [71] if(lin16u_gen::i#2<$14) goto lin16u_gen::@2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } ) always clobbers reg byte a
Statement [73] lin16u_gen::$8 = word1 lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 lin16u_gen::$8 ] { } ) always clobbers reg byte a
Statement [74] *lin16u_gen::lintab#4 = lin16u_gen::$8 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#2 lin16u_gen::lintab#4 ] { } ) always clobbers reg byte a reg byte y
Statement [75] lin16u_gen::val#1 = lin16u_gen::val#2 + lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::lintab#4 lin16u_gen::val#1 ] { } ) always clobbers reg byte a
Statement [76] lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] ( lin16u_gen:1 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } lin16u_gen:3 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#3 ] { } ) always clobbers reg byte a
Statement [83] if(0!=*print_str::str#10) goto print_str::@2 [ print_str::str#10 print_char_cursor#1 ] ( print_str:9 [ print_str::str#10 print_char_cursor#1 ] { } print_str:13 [ print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:17 [ print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:25 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#100 = print_char_cursor#89 } } print_str:29 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:33 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:43 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:48 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } print_str:52 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 ] { { print_char_cursor#10 = print_char_cursor#89 } } ) always clobbers reg byte a reg byte y
Statement [85] print_char::ch#0 = *print_str::str#10 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] ( print_str:9 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:13 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:17 [ print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:25 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#100 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:29 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:33 [ print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:43 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:48 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:52 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#1 print_char::ch#0 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } ) always clobbers reg byte a reg byte y
Statement [96] print_line_cursor#0 = print_line_cursor#12 + $28 [ print_line_cursor#0 print_char_cursor#10 ] ( print_ln:21 [ print_line_cursor#0 print_char_cursor#10 ] { } print_ln:37 [ print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } print_ln:56 [ main::i#10 print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } ) always clobbers reg byte a
Statement [97] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#0 print_char_cursor#10 ] ( print_ln:21 [ print_line_cursor#0 print_char_cursor#10 ] { } print_ln:37 [ print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } print_ln:56 [ main::i#10 print_line_cursor#0 print_char_cursor#10 ] { { print_line_cursor#0 = print_line_cursor#23 } } ) always clobbers reg byte a
Statement [100] print_uchar::$0 = print_uchar::b#3 >> 4 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] ( print_uchar:41 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:90 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:90 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:92 [ print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:92 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:92 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#84 print_uchar::$0 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } ) always clobbers reg byte a
Statement [103] print_uchar::$2 = print_uchar::b#3 & $f [ print_char_cursor#10 print_uchar::$2 ] ( print_uchar:41 [ main::i#10 print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:15::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:19::print_uchar:90 [ print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:27::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:31::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:35::print_uchar:90 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:46::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:50::print_uchar:90 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:54::print_uchar:90 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:15::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:19::print_uchar:92 [ print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:27::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:31::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:35::print_uchar:92 [ print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:46::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:50::print_uchar:92 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:54::print_uchar:92 [ main::i#10 print_line_cursor#0 print_char_cursor#10 print_uchar::$2 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte a
Statement [113] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [117] if(divr16u::rem#6<$14-1) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [119] divr16u::rem#2 = divr16u::rem#6 - $14-1 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [123] rem16u#0 = divr16u::rem#11 [ divr16u::return#0 rem16u#0 ] ( lin16u_gen:1::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:3::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:5::divr16u:61 [ lin16u_gen::min#3 lin16u_gen::lintab#6 divr16u::return#0 rem16u#0 ] { { divr16u::dividend#1 = divr16u::dividend#5 lin16u_gen::ampl#0 } { divr16u::return#0 = divr16u::return#2 } } lin16u_gen:1::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:3::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } lin16u_gen:5::divr16u:65 [ lin16u_gen::min#3 lin16u_gen::lintab#6 lin16u_gen::stepi#0 divr16u::return#0 rem16u#0 ] { { divr16u::rem#10 = divr16u::rem#4 rem16u#0 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a
Statement [127] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( print_cls:7::memset:79 [ memset::dst#2 ] { } ) always clobbers reg byte a
Statement [129] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( print_cls:7::memset:79 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Statement [132] *print_char_cursor#51 = print_char::ch#3 [ print_char_cursor#51 ] ( print_str:9::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:13::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:17::print_char:86 [ print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:25::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#100 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:29::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:33::print_char:86 [ print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:43::print_char:86 [ main::i#10 print_line_cursor#0 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:48::print_char:86 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_str:52::print_char:86 [ main::i#10 print_line_cursor#0 main::$28 print_str::str#10 print_char_cursor#51 ] { { print_char_cursor#10 = print_char_cursor#89 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#1 = print_char_cursor#51 } } print_uchar:41::print_char:102 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:90::print_char:102 [ print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:90::print_char:102 [ print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:90::print_char:102 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:11::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:15::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:19::print_uchar:92::print_char:102 [ print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:27::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:31::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:35::print_uchar:92::print_char:102 [ print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:46::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:50::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 main::$28 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uint:54::print_uchar:92::print_char:102 [ main::i#10 print_line_cursor#0 print_uchar::b#3 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#1 = print_char::ch#3 } } print_uchar:41::print_char:105 [ main::i#10 print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#2 = print_uchar::b#3 main::i#10 } { print_char_cursor#104 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:15::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:19::print_uchar:90::print_char:105 [ print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:27::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:31::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:35::print_uchar:90::print_char:105 [ print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:46::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:50::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:54::print_uchar:90::print_char:105 [ main::i#10 print_line_cursor#0 print_uint::w#10 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#3 } { print_char_cursor#1 = print_char_cursor#84 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#10 = print_char_cursor#51 } } print_uint:11::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:15::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:19::print_uchar:92::print_char:105 [ print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:27::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:31::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:35::print_uchar:92::print_char:105 [ print_line_cursor#0 print_char_cursor#51 ] { { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:46::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#3 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:50::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 main::$28 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#4 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } print_uint:54::print_uchar:92::print_char:105 [ main::i#10 print_line_cursor#0 print_char_cursor#51 ] { { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#3 } { print_char_cursor#10 = print_char_cursor#84 print_char_cursor#51 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte y
Potential registers zp[1]:35 [ main::i#10 main::i#1 ] : zp[1]:35 , reg byte x ,
Potential registers zp[2]:50 [ lin16u_gen::max#3 ] : zp[2]:50 ,
Potential registers zp[2]:55 [ lin16u_gen::min#3 ] : zp[2]:55 ,
Potential registers zp[2]:23 [ lin16u_gen::i#2 lin16u_gen::i#1 ] : zp[2]:23 ,
Potential registers zp[4]:27 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] : zp[4]:27 ,
Potential registers zp[2]:31 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] : zp[2]:31 ,
Potential registers zp[2]:5 [ print_str::str#10 print_str::str#13 print_str::str#0 ] : zp[2]:5 ,
Potential registers zp[2]:33 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ] : zp[2]:33 ,
Potential registers zp[2]:7 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ] : zp[2]:7 ,
Potential registers zp[1]:20 [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:20 , reg byte x ,
Potential registers zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:9 ,
Potential registers zp[2]:21 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] : zp[2]:21 ,
Potential registers zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:13 ,
Potential registers zp[1]:19 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:19 , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ memset::dst#2 memset::dst#1 ] : zp[2]:11 ,
Potential registers zp[1]:2 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ] : zp[2]:3 ,
Potential registers zp[1]:52 [ main::$28 ] : zp[1]:52 , reg byte x ,
Potential registers zp[2]:38 [ lin16u_gen::ampl#0 ] : zp[2]:38 ,
Potential registers zp[2]:40 [ divr16u::return#2 ] : zp[2]:40 ,
Potential registers zp[2]:53 [ lin16u_gen::stepi#0 ] : zp[2]:53 ,
Potential registers zp[2]:42 [ divr16u::return#3 ] : zp[2]:42 ,
Potential registers zp[2]:44 [ lin16u_gen::stepf#0 ] : zp[2]:44 ,
Potential registers zp[4]:46 [ lin16u_gen::step#0 ] : zp[4]:46 ,
Potential registers zp[2]:25 [ lin16u_gen::$8 ] : zp[2]:25 ,
Potential registers zp[1]:15 [ print_uchar::$0 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:16 [ print_uchar::$2 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:17 [ divr16u::$1 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:18 [ divr16u::$2 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:36 [ rem16u#0 ] : zp[2]:36 ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_char] 136,010: zp[1]:2 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
Uplift Scope [] 110,659.54: zp[2]:3 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ] 21,007.24: zp[2]:7 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ] 22.4: zp[2]:36 [ rem16u#0 ]
Uplift Scope [print_str] 30,129.25: zp[2]:5 [ print_str::str#10 print_str::str#13 print_str::str#0 ]
Uplift Scope [divr16u] 9,027.42: zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 3,184.89: zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 2,002: zp[1]:17 [ divr16u::$1 ] 2,002: zp[1]:18 [ divr16u::$2 ] 1,655.5: zp[1]:19 [ divr16u::i#2 divr16u::i#1 ] 827.68: zp[2]:21 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] 22: zp[2]:40 [ divr16u::return#2 ] 22: zp[2]:42 [ divr16u::return#3 ]
Uplift Scope [print_uchar] 2,002: zp[1]:15 [ print_uchar::$0 ] 2,002: zp[1]:16 [ print_uchar::$2 ] 968.75: zp[1]:20 [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Uplift Scope [memset] 3,336.67: zp[2]:11 [ memset::dst#2 memset::dst#1 ]
Uplift Scope [lin16u_gen] 252.5: zp[2]:23 [ lin16u_gen::i#2 lin16u_gen::i#1 ] 202: zp[2]:25 [ lin16u_gen::$8 ] 167.83: zp[4]:27 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] 164.72: zp[2]:31 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] 22: zp[2]:38 [ lin16u_gen::ampl#0 ] 22: zp[2]:44 [ lin16u_gen::stepf#0 ] 12.44: zp[4]:46 [ lin16u_gen::step#0 ] 11: zp[2]:50 [ lin16u_gen::max#3 ] 4.4: zp[2]:53 [ lin16u_gen::stepi#0 ] 2: zp[2]:55 [ lin16u_gen::min#3 ]
Uplift Scope [print_uint] 144.33: zp[2]:33 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ]
Uplift Scope [main] 24.75: zp[1]:35 [ main::i#10 main::i#1 ] 4.89: zp[1]:52 [ main::$28 ]
Uplift Scope [print_ln]
Uplift Scope [print_cls]
Uplift Scope [RADIX]
Uplifting [print_char] best 13852 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
Uplifting [] best 13852 combination zp[2]:3 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ] zp[2]:7 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ] zp[2]:36 [ rem16u#0 ]
Uplifting [print_str] best 13852 combination zp[2]:5 [ print_str::str#10 print_str::str#13 print_str::str#0 ]
Uplifting [divr16u] best 13662 combination zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:21 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] zp[2]:40 [ divr16u::return#2 ] zp[2]:42 [ divr16u::return#3 ]
Uplifting [print_uchar] best 13614 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Uplifting [memset] best 13614 combination zp[2]:11 [ memset::dst#2 memset::dst#1 ]
Uplifting [lin16u_gen] best 13614 combination zp[2]:23 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp[2]:25 [ lin16u_gen::$8 ] zp[4]:27 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ] zp[2]:31 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] zp[2]:38 [ lin16u_gen::ampl#0 ] zp[2]:44 [ lin16u_gen::stepf#0 ] zp[4]:46 [ lin16u_gen::step#0 ] zp[2]:50 [ lin16u_gen::max#3 ] zp[2]:53 [ lin16u_gen::stepi#0 ] zp[2]:55 [ lin16u_gen::min#3 ]
Uplifting [print_uint] best 13614 combination zp[2]:33 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ]
Uplifting [main] best 13614 combination zp[1]:35 [ main::i#10 main::i#1 ] zp[1]:52 [ main::$28 ]
Uplifting [print_ln] best 13614 combination
Uplifting [print_cls] best 13614 combination
Uplifting [RADIX] best 13614 combination
Attempting to uplift remaining variables inzp[1]:35 [ main::i#10 main::i#1 ]
Uplifting [main] best 13614 combination zp[1]:35 [ main::i#10 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:52 [ main::$28 ]
Uplifting [main] best 13614 combination zp[1]:52 [ main::$28 ]
Coalescing zero page register [ zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:36 [ rem16u#0 ] ] - score: 2
Coalescing zero page register [ zp[2]:50 [ lin16u_gen::max#3 ] ] with [ zp[2]:38 [ lin16u_gen::ampl#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:40 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:42 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:50 [ lin16u_gen::max#3 lin16u_gen::ampl#0 ] ] with [ zp[2]:21 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:44 [ lin16u_gen::stepf#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:5 [ print_str::str#10 print_str::str#13 print_str::str#0 ] ] with [ zp[2]:50 [ lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ] ]
Coalescing zero page register [ zp[2]:33 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 ] ] with [ zp[2]:55 [ lin16u_gen::min#3 ] ]
Coalescing zero page register [ zp[2]:7 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 ] ] with [ zp[2]:23 [ lin16u_gen::i#2 lin16u_gen::i#1 ] ]
Coalescing zero page register [ zp[2]:11 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:31 [ lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ] ]
Coalescing zero page register [ zp[2]:3 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 ] ] with [ zp[2]:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] ]
Coalescing zero page register [ zp[2]:25 [ lin16u_gen::$8 ] ] with [ zp[2]:9 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#0 ] ]
Allocated (was zp[2]:3) zp[2]:2 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ]
Allocated (was zp[2]:5) zp[2]:4 [ print_str::str#10 print_str::str#13 print_str::str#0 lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ]
Allocated (was zp[2]:7) zp[2]:6 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 lin16u_gen::i#2 lin16u_gen::i#1 ]
Allocated (was zp[2]:25) zp[2]:8 [ lin16u_gen::$8 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#0 ]
Allocated (was zp[2]:11) zp[2]:10 [ memset::dst#2 memset::dst#1 lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ]
Allocated (was zp[4]:27) zp[4]:12 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ]
Allocated (was zp[2]:33) zp[2]:16 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 lin16u_gen::min#3 ]
Allocated (was zp[1]:35) zp[1]:18 [ main::i#10 main::i#1 ]
Allocated (was zp[4]:46) zp[4]:19 [ lin16u_gen::step#0 ]
Allocated (was zp[1]:52) zp[1]:23 [ main::$28 ]
Allocated (was zp[2]:53) zp[2]:24 [ lin16u_gen::stepi#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Linear table generator
// Work in progress towards a sine generator
/// @file
/// Simple binary division implementation
///
/// Follows the C99 standard by truncating toward zero on negative results.
/// See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5
// Upstart
// Commodore 64 PRG executable file
.file [name="linegen.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
.const SIZEOF_UNSIGNED_INT = 2
.label print_screen = $400
// Remainder after unsigned 16-bit division
.label rem16u = 8
.label print_char_cursor = 2
.label print_line_cursor = 6
.segment Code
// main
main: {
.label __28 = $17
.label i = $12
// [1] call lin16u_gen
// [58] phi from main to lin16u_gen [phi:main->lin16u_gen]
lin16u_gen_from_main:
// [58] phi lin16u_gen::lintab#6 = main::lintab1 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab1
sta.z lin16u_gen.lintab
lda #>lintab1
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = $22d [phi:main->lin16u_gen#1] -- vwuz1=vwuc1
lda #<$22d
sta.z lin16u_gen.min
lda #>$22d
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$7461
sta.z lin16u_gen.max
lda #>$7461
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [2] phi from main to main::@4 [phi:main->main::@4]
__b4_from_main:
jmp __b4
// main::@4
__b4:
// [3] call lin16u_gen
// [58] phi from main::@4 to lin16u_gen [phi:main::@4->lin16u_gen]
lin16u_gen_from___b4:
// [58] phi lin16u_gen::lintab#6 = main::lintab2 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab2
sta.z lin16u_gen.lintab
lda #>lintab2
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = $79cb [phi:main::@4->lin16u_gen#1] -- vwuz1=vwuc1
lda #<$79cb
sta.z lin16u_gen.min
lda #>$79cb
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$f781
sta.z lin16u_gen.max
lda #>$f781
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [4] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
__b5_from___b4:
jmp __b5
// main::@5
__b5:
// [5] call lin16u_gen
// [58] phi from main::@5 to lin16u_gen [phi:main::@5->lin16u_gen]
lin16u_gen_from___b5:
// [58] phi lin16u_gen::lintab#6 = main::lintab3 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab3
sta.z lin16u_gen.lintab
lda #>lintab3
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = 0 [phi:main::@5->lin16u_gen#1] -- vwuz1=vbuc1
lda #<0
sta.z lin16u_gen.min
lda #>0
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$6488
sta.z lin16u_gen.max
lda #>$6488
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
__b6_from___b5:
jmp __b6
// main::@6
__b6:
// [7] call print_cls
// [78] phi from main::@6 to print_cls [phi:main::@6->print_cls]
print_cls_from___b6:
jsr print_cls
// [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
__b7_from___b6:
jmp __b7
// main::@7
__b7:
// [9] call print_str
// [81] phi from main::@7 to print_str [phi:main::@7->print_str]
print_str_from___b7:
// [81] phi print_char_cursor#89 = print_screen#0 [phi:main::@7->print_str#0] -- pbuz1=pbuc1
lda #<print_screen
sta.z print_char_cursor
lda #>print_screen
sta.z print_char_cursor+1
// [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1
lda #<str
sta.z print_str.str
lda #>str
sta.z print_str.str+1
jsr print_str
// [10] phi from main::@7 to main::@8 [phi:main::@7->main::@8]
__b8_from___b7:
jmp __b8
// main::@8
__b8:
// [11] call print_uint
// [88] phi from main::@8 to print_uint [phi:main::@8->print_uint]
print_uint_from___b8:
// [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1
lda #<$22d
sta.z print_uint.w
lda #>$22d
sta.z print_uint.w+1
jsr print_uint
// [12] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
__b9_from___b8:
jmp __b9
// main::@9
__b9:
// [13] call print_str
// [81] phi from main::@9 to print_str [phi:main::@9->print_str]
print_str_from___b9:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [14] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
__b10_from___b9:
jmp __b10
// main::@10
__b10:
// [15] call print_uint
// [88] phi from main::@10 to print_uint [phi:main::@10->print_uint]
print_uint_from___b10:
// [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1
lda #<$79cb
sta.z print_uint.w
lda #>$79cb
sta.z print_uint.w+1
jsr print_uint
// [16] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
__b11_from___b10:
jmp __b11
// main::@11
__b11:
// [17] call print_str
// [81] phi from main::@11 to print_str [phi:main::@11->print_str]
print_str_from___b11:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [18] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
__b12_from___b11:
jmp __b12
// main::@12
__b12:
// [19] call print_uint
// [88] phi from main::@12 to print_uint [phi:main::@12->print_uint]
print_uint_from___b12:
// [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1
lda #<0
sta.z print_uint.w
lda #>0
sta.z print_uint.w+1
jsr print_uint
// [20] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
__b13_from___b12:
jmp __b13
// main::@13
__b13:
// [21] call print_ln
// [94] phi from main::@13 to print_ln [phi:main::@13->print_ln]
print_ln_from___b13:
// [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1
lda #<print_screen
sta.z print_line_cursor
lda #>print_screen
sta.z print_line_cursor+1
jsr print_ln
// [22] phi from main::@13 to main::@1 [phi:main::@13->main::@1]
__b1_from___b13:
// [22] phi main::i#10 = 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b1
// main::@1
__b1:
// [23] if(main::i#10<$14) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$14
bcc __b2
jmp __b3
// main::@3
__b3:
// [24] print_char_cursor#100 = print_line_cursor#0 -- pbuz1=pbuz2
lda.z print_line_cursor
sta.z print_char_cursor
lda.z print_line_cursor+1
sta.z print_char_cursor+1
// [25] call print_str
// [81] phi from main::@3 to print_str [phi:main::@3->print_str]
print_str_from___b3:
// [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1
lda #<str
sta.z print_str.str
lda #>str
sta.z print_str.str+1
jsr print_str
// [26] phi from main::@3 to main::@22 [phi:main::@3->main::@22]
__b22_from___b3:
jmp __b22
// main::@22
__b22:
// [27] call print_uint
// [88] phi from main::@22 to print_uint [phi:main::@22->print_uint]
print_uint_from___b22:
// [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1
lda #<$7461
sta.z print_uint.w
lda #>$7461
sta.z print_uint.w+1
jsr print_uint
// [28] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
__b23_from___b22:
jmp __b23
// main::@23
__b23:
// [29] call print_str
// [81] phi from main::@23 to print_str [phi:main::@23->print_str]
print_str_from___b23:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [30] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
__b24_from___b23:
jmp __b24
// main::@24
__b24:
// [31] call print_uint
// [88] phi from main::@24 to print_uint [phi:main::@24->print_uint]
print_uint_from___b24:
// [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1
lda #<$f781
sta.z print_uint.w
lda #>$f781
sta.z print_uint.w+1
jsr print_uint
// [32] phi from main::@24 to main::@25 [phi:main::@24->main::@25]
__b25_from___b24:
jmp __b25
// main::@25
__b25:
// [33] call print_str
// [81] phi from main::@25 to print_str [phi:main::@25->print_str]
print_str_from___b25:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [34] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
__b26_from___b25:
jmp __b26
// main::@26
__b26:
// [35] call print_uint
// [88] phi from main::@26 to print_uint [phi:main::@26->print_uint]
print_uint_from___b26:
// [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1
lda #<$6488
sta.z print_uint.w
lda #>$6488
sta.z print_uint.w+1
jsr print_uint
// [36] phi from main::@26 to main::@27 [phi:main::@26->main::@27]
__b27_from___b26:
jmp __b27
// main::@27
__b27:
// [37] call print_ln
// [94] phi from main::@27 to print_ln [phi:main::@27->print_ln]
print_ln_from___b27:
// [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy
jsr print_ln
jmp __breturn
// main::@return
__breturn:
// [38] return
rts
// main::@2
__b2:
// [39] print_uchar::b#2 = main::i#10 -- vbuxx=vbuz1
ldx.z i
// [40] print_char_cursor#104 = print_line_cursor#0 -- pbuz1=pbuz2
lda.z print_line_cursor
sta.z print_char_cursor
lda.z print_line_cursor+1
sta.z print_char_cursor+1
// [41] call print_uchar
// [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar]
print_uchar_from___b2:
// [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy
jsr print_uchar
// [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14]
__b14_from___b2:
jmp __b14
// main::@14
__b14:
// [43] call print_str
// [81] phi from main::@14 to print_str [phi:main::@14->print_str]
print_str_from___b14:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
jmp __b15
// main::@15
__b15:
// [44] main::$28 = main::i#10 << 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __28
// [45] print_uint::w#3 = main::lintab1[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z __28
lda lintab1,y
sta.z print_uint.w
lda lintab1+1,y
sta.z print_uint.w+1
// [46] call print_uint
// [88] phi from main::@15 to print_uint [phi:main::@15->print_uint]
print_uint_from___b15:
// [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy
jsr print_uint
// [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16]
__b16_from___b15:
jmp __b16
// main::@16
__b16:
// [48] call print_str
// [81] phi from main::@16 to print_str [phi:main::@16->print_str]
print_str_from___b16:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
jmp __b17
// main::@17
__b17:
// [49] print_uint::w#4 = main::lintab2[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z __28
lda lintab2,y
sta.z print_uint.w
lda lintab2+1,y
sta.z print_uint.w+1
// [50] call print_uint
// [88] phi from main::@17 to print_uint [phi:main::@17->print_uint]
print_uint_from___b17:
// [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy
jsr print_uint
// [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
__b18_from___b17:
jmp __b18
// main::@18
__b18:
// [52] call print_str
// [81] phi from main::@18 to print_str [phi:main::@18->print_str]
print_str_from___b18:
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
jmp __b19
// main::@19
__b19:
// [53] print_uint::w#5 = main::lintab3[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z __28
lda lintab3,y
sta.z print_uint.w
lda lintab3+1,y
sta.z print_uint.w+1
// [54] call print_uint
// [88] phi from main::@19 to print_uint [phi:main::@19->print_uint]
print_uint_from___b19:
// [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy
jsr print_uint
// [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20]
__b20_from___b19:
jmp __b20
// main::@20
__b20:
// [56] call print_ln
// [94] phi from main::@20 to print_ln [phi:main::@20->print_ln]
print_ln_from___b20:
// [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy
jsr print_ln
jmp __b21
// main::@21
__b21:
// [57] main::i#1 = ++ main::i#10 -- vbuz1=_inc_vbuz1
inc.z i
// [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1]
__b1_from___b21:
// [22] phi main::i#10 = main::i#1 [phi:main::@21->main::@1#0] -- register_copy
jmp __b1
.segment Data
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
str: .text " "
.byte 0
str1: .text " "
.byte 0
}
.segment Code
// lin16u_gen
// Generate word linear table
// lintab - the table to generate into
// length - the number of points in a total sine wavelength (the size of the table)
// void lin16u_gen(__zp($10) unsigned int min, __zp(4) unsigned int max, __zp($a) unsigned int *lintab, unsigned int length)
lin16u_gen: {
.label __8 = 8
.label ampl = 4
.label stepi = $18
.label stepf = 2
.label step = $13
.label val = $c
.label lintab = $a
.label i = 6
.label max = 4
.label min = $10
// [59] lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3 -- vwuz1=vwuz1_minus_vwuz2
lda.z ampl
sec
sbc.z min
sta.z ampl
lda.z ampl+1
sbc.z min+1
sta.z ampl+1
// [60] divr16u::dividend#1 = lin16u_gen::ampl#0
// [61] call divr16u
// [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u]
divr16u_from_lin16u_gen:
// [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy
// [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1
lda #<0
sta.z divr16u.rem
lda #>0
sta.z divr16u.rem+1
jsr divr16u
// [62] divr16u::return#2 = divr16u::return#0
jmp __b3
// lin16u_gen::@3
__b3:
// [63] lin16u_gen::stepi#0 = divr16u::return#2 -- vwuz1=vwuz2
lda.z divr16u.return
sta.z stepi
lda.z divr16u.return+1
sta.z stepi+1
// [64] divr16u::rem#4 = rem16u#0
// [65] call divr16u
// [107] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u]
divr16u_from___b3:
// [107] phi divr16u::dividend#5 = 0 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1
lda #<0
sta.z divr16u.dividend
lda #>0
sta.z divr16u.dividend+1
// [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy
jsr divr16u
// [66] divr16u::return#3 = divr16u::return#0
jmp __b4
// lin16u_gen::@4
__b4:
// [67] lin16u_gen::stepf#0 = divr16u::return#3
// [68] lin16u_gen::step#0 = lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 -- vduz1=vwuz2_dword_vwuz3
lda.z stepi
sta.z step+2
lda.z stepi+1
sta.z step+3
lda.z stepf
sta.z step
lda.z stepf+1
sta.z step+1
// [69] lin16u_gen::val#0 = lin16u_gen::min#3 dw= 0 -- vduz1=vwuz2_dword_vbuc1
lda.z min
sta.z val+2
lda.z min+1
sta.z val+3
lda #0
sta.z val
lda #0
sta.z val+1
// [70] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1]
__b1_from___b4:
// [70] phi lin16u_gen::lintab#4 = lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy
// [70] phi lin16u_gen::val#2 = lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy
// [70] phi lin16u_gen::i#2 = 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vwuc1
lda #<0
sta.z i
lda #>0
sta.z i+1
jmp __b1
// lin16u_gen::@1
__b1:
// [71] if(lin16u_gen::i#2<$14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1
lda.z i+1
bne !+
lda.z i
cmp #$14
bcc __b2
!:
jmp __breturn
// lin16u_gen::@return
__breturn:
// [72] return
rts
// lin16u_gen::@2
__b2:
// [73] lin16u_gen::$8 = word1 lin16u_gen::val#2 -- vwuz1=_word1_vduz2
lda.z val+2
sta.z __8
lda.z val+3
sta.z __8+1
// [74] *lin16u_gen::lintab#4 = lin16u_gen::$8 -- _deref_pwuz1=vwuz2
ldy #0
lda.z __8
sta (lintab),y
iny
lda.z __8+1
sta (lintab),y
// [75] lin16u_gen::val#1 = lin16u_gen::val#2 + lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2
clc
lda.z val
adc.z step
sta.z val
lda.z val+1
adc.z step+1
sta.z val+1
lda.z val+2
adc.z step+2
sta.z val+2
lda.z val+3
adc.z step+3
sta.z val+3
// [76] lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT -- pwuz1=pwuz1_plus_vbuc1
lda #SIZEOF_UNSIGNED_INT
clc
adc.z lintab
sta.z lintab
bcc !+
inc.z lintab+1
!:
// [77] lin16u_gen::i#1 = ++ lin16u_gen::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [70] phi from lin16u_gen::@2 to lin16u_gen::@1 [phi:lin16u_gen::@2->lin16u_gen::@1]
__b1_from___b2:
// [70] phi lin16u_gen::lintab#4 = lin16u_gen::lintab#3 [phi:lin16u_gen::@2->lin16u_gen::@1#0] -- register_copy
// [70] phi lin16u_gen::val#2 = lin16u_gen::val#1 [phi:lin16u_gen::@2->lin16u_gen::@1#1] -- register_copy
// [70] phi lin16u_gen::i#2 = lin16u_gen::i#1 [phi:lin16u_gen::@2->lin16u_gen::@1#2] -- register_copy
jmp __b1
}
// print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
// [79] call memset
// [125] phi from print_cls to memset [phi:print_cls->memset]
memset_from_print_cls:
jsr memset
jmp __breturn
// print_cls::@return
__breturn:
// [80] return
rts
}
// print_str
// Print a zero-terminated string
// void print_str(__zp(4) char *str)
print_str: {
.label str = 4
// [82] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1]
__b1_from_print_str:
__b1_from___b3:
// [82] phi print_char_cursor#1 = print_char_cursor#89 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy
// [82] phi print_str::str#10 = print_str::str#13 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy
jmp __b1
// print_str::@1
__b1:
// [83] if(0!=*print_str::str#10) goto print_str::@2 -- 0_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #0
bne __b2
jmp __breturn
// print_str::@return
__breturn:
// [84] return
rts
// print_str::@2
__b2:
// [85] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1
ldy #0
lda (str),y
// [86] call print_char
// [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char]
print_char_from___b2:
// [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy
jsr print_char
jmp __b3
// print_str::@3
__b3:
// [87] print_str::str#0 = ++ print_str::str#10 -- pbuz1=_inc_pbuz1
inc.z str
bne !+
inc.z str+1
!:
jmp __b1_from___b3
}
// print_uint
// Print a unsigned int as HEX
// void print_uint(__zp($10) unsigned int w)
print_uint: {
.label w = $10
// [89] print_uchar::b#0 = byte1 print_uint::w#10 -- vbuxx=_byte1_vwuz1
ldx.z w+1
// [90] call print_uchar
// [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
print_uchar_from_print_uint:
// [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
jsr print_uchar
jmp __b1
// print_uint::@1
__b1:
// [91] print_uchar::b#1 = byte0 print_uint::w#10 -- vbuxx=_byte0_vwuz1
ldx.z w
// [92] call print_uchar
// [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
print_uchar_from___b1:
// [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
jsr print_uchar
jmp __breturn
// print_uint::@return
__breturn:
// [93] return
rts
}
// print_ln
// Print a newline
print_ln: {
// [95] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
__b1_from_print_ln:
__b1_from___b1:
// [95] phi print_line_cursor#12 = print_line_cursor#23 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy
jmp __b1
// print_ln::@1
__b1:
// [96] print_line_cursor#0 = print_line_cursor#12 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z print_line_cursor
sta.z print_line_cursor
bcc !+
inc.z print_line_cursor+1
!:
// [97] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1
lda.z print_line_cursor+1
cmp.z print_char_cursor+1
bcc __b1_from___b1
bne !+
lda.z print_line_cursor
cmp.z print_char_cursor
bcc __b1_from___b1
!:
jmp __breturn
// print_ln::@return
__breturn:
// [98] return
rts
}
// print_uchar
// Print a char as HEX
// void print_uchar(__register(X) char b)
print_uchar: {
// [100] print_uchar::$0 = print_uchar::b#3 >> 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
// [101] print_char::ch#1 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [102] call print_char
// Table of hexadecimal digits
// [131] phi from print_uchar to print_char [phi:print_uchar->print_char]
print_char_from_print_uchar:
// [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy
jsr print_char
jmp __b1
// print_uchar::@1
__b1:
// [103] print_uchar::$2 = print_uchar::b#3 & $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
// [104] print_char::ch#2 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [105] call print_char
// [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
print_char_from___b1:
// [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy
jsr print_char
jmp __breturn
// print_uchar::@return
__breturn:
// [106] return
rts
}
// divr16u
// Performs division on two 16 bit unsigned ints and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// __zp(2) unsigned int divr16u(__zp(4) unsigned int dividend, unsigned int divisor, __zp(8) unsigned int rem)
divr16u: {
.label rem = 8
.label dividend = 4
.label quotient = 2
.label return = 2
// [108] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
__b1_from_divr16u:
// [108] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1
ldx #0
// [108] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z quotient
lda #>0
sta.z quotient+1
// [108] phi divr16u::dividend#3 = divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy
// [108] phi divr16u::rem#5 = divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy
jmp __b1
// [108] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
__b1_from___b3:
// [108] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy
// [108] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy
// [108] phi divr16u::dividend#3 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy
// [108] phi divr16u::rem#5 = divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy
jmp __b1
// divr16u::@1
__b1:
// [109] divr16u::rem#0 = divr16u::rem#5 << 1 -- vwuz1=vwuz1_rol_1
asl.z rem
rol.z rem+1
// [110] divr16u::$1 = byte1 divr16u::dividend#3 -- vbuaa=_byte1_vwuz1
lda.z dividend+1
// [111] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1
and #$80
// [112] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1
cmp #0
beq __b2_from___b1
jmp __b4
// divr16u::@4
__b4:
// [113] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1
lda #1
ora.z rem
sta.z rem
// [114] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
__b2_from___b1:
__b2_from___b4:
// [114] phi divr16u::rem#6 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy
jmp __b2
// divr16u::@2
__b2:
// [115] divr16u::dividend#0 = divr16u::dividend#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z dividend
rol.z dividend+1
// [116] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z quotient
rol.z quotient+1
// [117] if(divr16u::rem#6<$14-1) goto divr16u::@3 -- vwuz1_lt_vbuc1_then_la1
lda.z rem+1
bne !+
lda.z rem
cmp #$14-1
bcc __b3_from___b2
!:
jmp __b5
// divr16u::@5
__b5:
// [118] divr16u::quotient#2 = ++ divr16u::quotient#1 -- vwuz1=_inc_vwuz1
inc.z quotient
bne !+
inc.z quotient+1
!:
// [119] divr16u::rem#2 = divr16u::rem#6 - $14-1 -- vwuz1=vwuz1_minus_vbuc1
sec
lda.z rem
sbc #$14-1
sta.z rem
lda.z rem+1
sbc #0
sta.z rem+1
// [120] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
__b3_from___b2:
__b3_from___b5:
// [120] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy
// [120] phi divr16u::rem#11 = divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy
jmp __b3
// divr16u::@3
__b3:
// [121] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx
inx
// [122] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #$10
bne __b1_from___b3
jmp __b6
// divr16u::@6
__b6:
// [123] rem16u#0 = divr16u::rem#11
jmp __breturn
// divr16u::@return
__breturn:
// [124] return
rts
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(void *str, char c, unsigned int num)
memset: {
.const c = ' '
.const num = $3e8
.label str = print_screen
.label end = str+num
.label dst = $a
// [126] phi from memset to memset::@1 [phi:memset->memset::@1]
__b1_from_memset:
// [126] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
lda #<str
sta.z dst
lda #>str
sta.z dst+1
jmp __b1
// memset::@1
__b1:
// [127] 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 #<end
bne __b2
jmp __breturn
// memset::@return
__breturn:
// [128] return
rts
// memset::@2
__b2:
// [129] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// [130] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [126] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
__b1_from___b2:
// [126] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
jmp __b1
}
// print_char
// Print a single char
// void print_char(__register(A) char ch)
print_char: {
// [132] *print_char_cursor#51 = print_char::ch#3 -- _deref_pbuz1=vbuaa
ldy #0
sta (print_char_cursor),y
// [133] print_char_cursor#10 = ++ print_char_cursor#51 -- pbuz1=_inc_pbuz1
inc.z print_char_cursor
bne !+
inc.z print_char_cursor+1
!:
jmp __breturn
// print_char::@return
__breturn:
// [134] return
rts
}
// File Data
.segment Data
print_hextab: .text "0123456789abcdef"
ASSEMBLER OPTIMIZATIONS
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 __b1
Removing instruction jmp __b3
Removing instruction jmp __b22
Removing instruction jmp __b23
Removing instruction jmp __b24
Removing instruction jmp __b25
Removing instruction jmp __b26
Removing instruction jmp __b27
Removing instruction jmp __breturn
Removing instruction jmp __b14
Removing instruction jmp __b15
Removing instruction jmp __b16
Removing instruction jmp __b17
Removing instruction jmp __b18
Removing instruction jmp __b19
Removing instruction jmp __b20
Removing instruction jmp __b21
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
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 __b4
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b6
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Removing instruction lda #>0
Replacing instruction ldy.z __28 with TAY
Removing instruction lda #>0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction lda #>0
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b1_from___b3 with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b2_from___b1 with __b2
Replacing label __b3_from___b2 with __b3
Replacing label __b1_from___b3 with __b1
Removing instruction __b4_from_main:
Removing instruction lin16u_gen_from___b4:
Removing instruction __b5_from___b4:
Removing instruction lin16u_gen_from___b5:
Removing instruction __b6_from___b5:
Removing instruction print_cls_from___b6:
Removing instruction __b7_from___b6:
Removing instruction print_str_from___b7:
Removing instruction __b8_from___b7:
Removing instruction print_uint_from___b8:
Removing instruction __b9_from___b8:
Removing instruction print_str_from___b9:
Removing instruction __b10_from___b9:
Removing instruction print_uint_from___b10:
Removing instruction __b11_from___b10:
Removing instruction print_str_from___b11:
Removing instruction __b12_from___b11:
Removing instruction print_uint_from___b12:
Removing instruction __b13_from___b12:
Removing instruction print_ln_from___b13:
Removing instruction __b22_from___b3:
Removing instruction print_uint_from___b22:
Removing instruction __b23_from___b22:
Removing instruction print_str_from___b23:
Removing instruction __b24_from___b23:
Removing instruction print_uint_from___b24:
Removing instruction __b25_from___b24:
Removing instruction print_str_from___b25:
Removing instruction __b26_from___b25:
Removing instruction print_uint_from___b26:
Removing instruction __b27_from___b26:
Removing instruction print_ln_from___b27:
Removing instruction __b14_from___b2:
Removing instruction print_str_from___b14:
Removing instruction __b16_from___b15:
Removing instruction print_str_from___b16:
Removing instruction __b18_from___b17:
Removing instruction print_str_from___b18:
Removing instruction __b20_from___b19:
Removing instruction print_ln_from___b20:
Removing instruction __b1_from_print_str:
Removing instruction __b1_from___b3:
Removing instruction __b1_from_print_ln:
Removing instruction __b1_from___b1:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b4:
Removing instruction __b3_from___b2:
Removing instruction __b3_from___b5:
Removing instruction __breturn:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction lin16u_gen_from_main:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction __b8:
Removing instruction __b9:
Removing instruction __b10:
Removing instruction __b11:
Removing instruction __b12:
Removing instruction __b13:
Removing instruction __b1_from___b13:
Removing instruction __b3:
Removing instruction print_str_from___b3:
Removing instruction __b22:
Removing instruction __b23:
Removing instruction __b24:
Removing instruction __b25:
Removing instruction __b26:
Removing instruction __b27:
Removing instruction __breturn:
Removing instruction print_uchar_from___b2:
Removing instruction __b14:
Removing instruction __b15:
Removing instruction print_uint_from___b15:
Removing instruction __b16:
Removing instruction __b17:
Removing instruction print_uint_from___b17:
Removing instruction __b18:
Removing instruction __b19:
Removing instruction print_uint_from___b19:
Removing instruction __b20:
Removing instruction __b21:
Removing instruction __b1_from___b21:
Removing instruction divr16u_from_lin16u_gen:
Removing instruction __b3:
Removing instruction divr16u_from___b3:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction memset_from_print_cls:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction print_char_from___b2:
Removing instruction __b3:
Removing instruction print_uchar_from_print_uint:
Removing instruction __b1:
Removing instruction print_uchar_from___b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction print_char_from_print_uchar:
Removing instruction __b1:
Removing instruction print_char_from___b1:
Removing instruction __breturn:
Removing instruction __b1_from_divr16u:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b1_from_memset:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #<0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
FINAL SYMBOL TABLE
__constant char RADIX::BINARY = 2
__constant char RADIX::DECIMAL = $a
__constant char RADIX::HEXADECIMAL = $10
__constant char RADIX::OCTAL = 8
__constant char SIZEOF_UNSIGNED_INT = 2
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
char divr16u::$1 // reg byte a 2002.0
char divr16u::$2 // reg byte a 2002.0
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0 // dividend zp[2]:4 250.25
unsigned int divr16u::dividend#1 // dividend zp[2]:4 22.0
unsigned int divr16u::dividend#3 // dividend zp[2]:4 443.42857142857144
unsigned int divr16u::dividend#5 // dividend zp[2]:4 112.0
unsigned int divr16u::divisor
char divr16u::i
char divr16u::i#1 // reg byte x 1501.5
char divr16u::i#2 // reg byte x 154.0
unsigned int divr16u::quotient
unsigned int divr16u::quotient#1 // quotient zp[2]:2 1501.5
unsigned int divr16u::quotient#2 // quotient zp[2]:2 1001.0
unsigned int divr16u::quotient#3 // quotient zp[2]:2 250.25
unsigned int divr16u::rem
unsigned int divr16u::rem#0 // rem zp[2]:8 750.75
unsigned int divr16u::rem#1 // rem zp[2]:8 2002.0
unsigned int divr16u::rem#10 // rem zp[2]:8 112.0
unsigned int divr16u::rem#11 // rem zp[2]:8 1034.6666666666667
unsigned int divr16u::rem#2 // rem zp[2]:8 2002.0
unsigned int divr16u::rem#4 // rem zp[2]:8 22.0
unsigned int divr16u::rem#5 // rem zp[2]:8 2103.0
unsigned int divr16u::rem#6 // rem zp[2]:8 1001.0
unsigned int divr16u::return
unsigned int divr16u::return#0 // return zp[2]:2 432.1428571428571
unsigned int divr16u::return#2 // return zp[2]:2 22.0
unsigned int divr16u::return#3 // return zp[2]:2 22.0
void lin16u_gen(unsigned int min , unsigned int max , unsigned int *lintab , unsigned int length)
unsigned int lin16u_gen::$8 // zp[2]:8 202.0
unsigned int lin16u_gen::ampl
unsigned int lin16u_gen::ampl#0 // ampl zp[2]:4 22.0
unsigned int lin16u_gen::i
unsigned int lin16u_gen::i#1 // i zp[2]:6 202.0
unsigned int lin16u_gen::i#2 // i zp[2]:6 50.5
unsigned int lin16u_gen::length
unsigned int *lin16u_gen::lintab
unsigned int *lin16u_gen::lintab#3 // lintab zp[2]:10 101.0
unsigned int *lin16u_gen::lintab#4 // lintab zp[2]:10 62.8
unsigned int *lin16u_gen::lintab#6 // lintab zp[2]:10 0.9166666666666666
unsigned int lin16u_gen::max
unsigned int lin16u_gen::max#3 // max zp[2]:4 11.0
unsigned int lin16u_gen::min
unsigned int lin16u_gen::min#3 // min zp[2]:16 2.0
unsigned long lin16u_gen::step
unsigned long lin16u_gen::step#0 // step zp[4]:19 12.444444444444443
unsigned int lin16u_gen::stepf
unsigned int lin16u_gen::stepf#0 // stepf zp[2]:2 22.0
unsigned int lin16u_gen::stepi
unsigned int lin16u_gen::stepi#0 // stepi zp[2]:24 4.4
unsigned long lin16u_gen::val
unsigned long lin16u_gen::val#0 // val zp[4]:12 22.0
unsigned long lin16u_gen::val#1 // val zp[4]:12 67.33333333333333
unsigned long lin16u_gen::val#2 // val zp[4]:12 78.5
void main()
char main::$28 // zp[1]:23 4.888888888888889
char main::i
char main::i#1 // i zp[1]:18 22.0
char main::i#10 // i zp[1]:18 2.75
__constant unsigned int main::lintab1[$14] = { fill( $14, 0) }
__constant unsigned int main::lintab2[$14] = { fill( $14, 0) }
__constant unsigned int main::lintab3[$14] = { fill( $14, 0) }
__constant char main::str[4] = " "
__constant char main::str1[2] = " "
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]:10 2002.0
char *memset::dst#2 // dst zp[2]:10 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 2002.0
char print_char::ch#2 // reg byte a 2002.0
char print_char::ch#3 // reg byte a 112004.0
char *print_char_cursor
char *print_char_cursor#1 // print_char_cursor zp[2]:2 808.1600000000001
char *print_char_cursor#10 // print_char_cursor zp[2]:2 3274.216216216216
char *print_char_cursor#100 // print_char_cursor zp[2]:2 4.0
char *print_char_cursor#104 // print_char_cursor zp[2]:2 22.0
char *print_char_cursor#51 // print_char_cursor zp[2]:2 106002.5
char *print_char_cursor#84 // print_char_cursor zp[2]:2 404.6666666666667
char *print_char_cursor#89 // print_char_cursor zp[2]:2 144.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 790.2368421052631
char *print_line_cursor#12 // print_line_cursor zp[2]:6 20103.0
char *print_line_cursor#23 // print_line_cursor zp[2]:6 114.0
void print_ln()
char *print_screen
__constant char *print_screen#0 = (char *) 1024 // print_screen
void print_str(char *str)
char *print_str::str
char *print_str::str#0 // str zp[2]:4 20002.0
char *print_str::str#10 // str zp[2]:4 10026.25
char *print_str::str#13 // str zp[2]:4 101.0
void print_uchar(char b)
char print_uchar::$0 // reg byte a 2002.0
char print_uchar::$2 // reg byte x 2002.0
char print_uchar::b
char print_uchar::b#0 // reg byte x 202.0
char print_uchar::b#1 // reg byte x 202.0
char print_uchar::b#2 // reg byte x 11.0
char print_uchar::b#3 // reg byte x 553.75
void print_uint(unsigned int w)
unsigned int print_uint::w
unsigned int print_uint::w#10 // w zp[2]:16 78.33333333333333
unsigned int print_uint::w#3 // w zp[2]:16 22.0
unsigned int print_uint::w#4 // w zp[2]:16 22.0
unsigned int print_uint::w#5 // w zp[2]:16 22.0
unsigned int rem16u
unsigned int rem16u#0 // rem16u zp[2]:8 22.4
zp[1]:18 [ main::i#10 main::i#1 ]
zp[4]:12 [ lin16u_gen::val#2 lin16u_gen::val#1 lin16u_gen::val#0 ]
zp[2]:4 [ print_str::str#10 print_str::str#13 print_str::str#0 lin16u_gen::max#3 lin16u_gen::ampl#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#0 ]
zp[2]:16 [ print_uint::w#10 print_uint::w#3 print_uint::w#4 print_uint::w#5 lin16u_gen::min#3 ]
zp[2]:6 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#0 lin16u_gen::i#2 lin16u_gen::i#1 ]
reg byte x [ print_uchar::b#3 print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[2]:10 [ memset::dst#2 memset::dst#1 lin16u_gen::lintab#4 lin16u_gen::lintab#3 lin16u_gen::lintab#6 ]
reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ]
zp[2]:2 [ print_char_cursor#51 print_char_cursor#84 print_char_cursor#104 print_char_cursor#1 print_char_cursor#89 print_char_cursor#10 print_char_cursor#100 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ]
zp[1]:23 [ main::$28 ]
zp[2]:24 [ lin16u_gen::stepi#0 ]
zp[4]:19 [ lin16u_gen::step#0 ]
zp[2]:8 [ lin16u_gen::$8 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#0 ]
reg byte a [ print_uchar::$0 ]
reg byte x [ print_uchar::$2 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER
Score: 11659
// File Comments
// Linear table generator
// Work in progress towards a sine generator
/// @file
/// Simple binary division implementation
///
/// Follows the C99 standard by truncating toward zero on negative results.
/// See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5
// Upstart
// Commodore 64 PRG executable file
.file [name="linegen.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
.const SIZEOF_UNSIGNED_INT = 2
.label print_screen = $400
// Remainder after unsigned 16-bit division
.label rem16u = 8
.label print_char_cursor = 2
.label print_line_cursor = 6
.segment Code
// main
main: {
.label __28 = $17
.label i = $12
// lin16u_gen(557, 29793, lintab1, 20)
// [1] call lin16u_gen
// [58] phi from main to lin16u_gen [phi:main->lin16u_gen]
// [58] phi lin16u_gen::lintab#6 = main::lintab1 [phi:main->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab1
sta.z lin16u_gen.lintab
lda #>lintab1
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = $22d [phi:main->lin16u_gen#1] -- vwuz1=vwuc1
lda #<$22d
sta.z lin16u_gen.min
lda #>$22d
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$7461
sta.z lin16u_gen.max
lda #>$7461
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [2] phi from main to main::@4 [phi:main->main::@4]
// main::@4
// lin16u_gen(31179, 63361, lintab2, 20)
// [3] call lin16u_gen
// [58] phi from main::@4 to lin16u_gen [phi:main::@4->lin16u_gen]
// [58] phi lin16u_gen::lintab#6 = main::lintab2 [phi:main::@4->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab2
sta.z lin16u_gen.lintab
lda #>lintab2
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = $79cb [phi:main::@4->lin16u_gen#1] -- vwuz1=vwuc1
lda #<$79cb
sta.z lin16u_gen.min
lda #>$79cb
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$f781
sta.z lin16u_gen.max
lda #>$f781
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [4] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
// main::@5
// lin16u_gen(0, $6488, lintab3, 20)
// [5] call lin16u_gen
// [58] phi from main::@5 to lin16u_gen [phi:main::@5->lin16u_gen]
// [58] phi lin16u_gen::lintab#6 = main::lintab3 [phi:main::@5->lin16u_gen#0] -- pwuz1=pwuc1
lda #<lintab3
sta.z lin16u_gen.lintab
lda #>lintab3
sta.z lin16u_gen.lintab+1
// [58] phi lin16u_gen::min#3 = 0 [phi:main::@5->lin16u_gen#1] -- vwuz1=vbuc1
lda #<0
sta.z lin16u_gen.min
sta.z lin16u_gen.min+1
// [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1
lda #<$6488
sta.z lin16u_gen.max
lda #>$6488
sta.z lin16u_gen.max+1
jsr lin16u_gen
// [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
// main::@6
// print_cls()
// [7] call print_cls
// [78] phi from main::@6 to print_cls [phi:main::@6->print_cls]
jsr print_cls
// [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
// main::@7
// print_str(" ")
// [9] call print_str
// [81] phi from main::@7 to print_str [phi:main::@7->print_str]
// [81] phi print_char_cursor#89 = print_screen#0 [phi:main::@7->print_str#0] -- pbuz1=pbuc1
lda #<print_screen
sta.z print_char_cursor
lda #>print_screen
sta.z print_char_cursor+1
// [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1
lda #<str
sta.z print_str.str
lda #>str
sta.z print_str.str+1
jsr print_str
// [10] phi from main::@7 to main::@8 [phi:main::@7->main::@8]
// main::@8
// print_uint(557)
// [11] call print_uint
// [88] phi from main::@8 to print_uint [phi:main::@8->print_uint]
// [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1
lda #<$22d
sta.z print_uint.w
lda #>$22d
sta.z print_uint.w+1
jsr print_uint
// [12] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
// main::@9
// print_str(" ")
// [13] call print_str
// [81] phi from main::@9 to print_str [phi:main::@9->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [14] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
// main::@10
// print_uint(31179)
// [15] call print_uint
// [88] phi from main::@10 to print_uint [phi:main::@10->print_uint]
// [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1
lda #<$79cb
sta.z print_uint.w
lda #>$79cb
sta.z print_uint.w+1
jsr print_uint
// [16] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
// main::@11
// print_str(" ")
// [17] call print_str
// [81] phi from main::@11 to print_str [phi:main::@11->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [18] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
// main::@12
// print_uint(0)
// [19] call print_uint
// [88] phi from main::@12 to print_uint [phi:main::@12->print_uint]
// [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1
lda #<0
sta.z print_uint.w
sta.z print_uint.w+1
jsr print_uint
// [20] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
// main::@13
// print_ln()
// [21] call print_ln
// [94] phi from main::@13 to print_ln [phi:main::@13->print_ln]
// [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1
lda #<print_screen
sta.z print_line_cursor
lda #>print_screen
sta.z print_line_cursor+1
jsr print_ln
// [22] phi from main::@13 to main::@1 [phi:main::@13->main::@1]
// [22] phi main::i#10 = 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z i
// main::@1
__b1:
// for(byte i=0; i<20; i++)
// [23] if(main::i#10<$14) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$14
bcc __b2
// main::@3
// [24] print_char_cursor#100 = print_line_cursor#0 -- pbuz1=pbuz2
lda.z print_line_cursor
sta.z print_char_cursor
lda.z print_line_cursor+1
sta.z print_char_cursor+1
// print_str(" ")
// [25] call print_str
// [81] phi from main::@3 to print_str [phi:main::@3->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1
lda #<str
sta.z print_str.str
lda #>str
sta.z print_str.str+1
jsr print_str
// [26] phi from main::@3 to main::@22 [phi:main::@3->main::@22]
// main::@22
// print_uint(29793)
// [27] call print_uint
// [88] phi from main::@22 to print_uint [phi:main::@22->print_uint]
// [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1
lda #<$7461
sta.z print_uint.w
lda #>$7461
sta.z print_uint.w+1
jsr print_uint
// [28] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
// main::@23
// print_str(" ")
// [29] call print_str
// [81] phi from main::@23 to print_str [phi:main::@23->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [30] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
// main::@24
// print_uint(63361)
// [31] call print_uint
// [88] phi from main::@24 to print_uint [phi:main::@24->print_uint]
// [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1
lda #<$f781
sta.z print_uint.w
lda #>$f781
sta.z print_uint.w+1
jsr print_uint
// [32] phi from main::@24 to main::@25 [phi:main::@24->main::@25]
// main::@25
// print_str(" ")
// [33] call print_str
// [81] phi from main::@25 to print_str [phi:main::@25->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// [34] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
// main::@26
// print_uint($6488)
// [35] call print_uint
// [88] phi from main::@26 to print_uint [phi:main::@26->print_uint]
// [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1
lda #<$6488
sta.z print_uint.w
lda #>$6488
sta.z print_uint.w+1
jsr print_uint
// [36] phi from main::@26 to main::@27 [phi:main::@26->main::@27]
// main::@27
// print_ln()
// [37] call print_ln
// [94] phi from main::@27 to print_ln [phi:main::@27->print_ln]
// [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy
jsr print_ln
// main::@return
// }
// [38] return
rts
// main::@2
__b2:
// print_uchar(i)
// [39] print_uchar::b#2 = main::i#10 -- vbuxx=vbuz1
ldx.z i
// [40] print_char_cursor#104 = print_line_cursor#0 -- pbuz1=pbuz2
lda.z print_line_cursor
sta.z print_char_cursor
lda.z print_line_cursor+1
sta.z print_char_cursor+1
// print_uchar(i)
// [41] call print_uchar
// [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar]
// [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy
jsr print_uchar
// [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14]
// main::@14
// print_str(" ")
// [43] call print_str
// [81] phi from main::@14 to print_str [phi:main::@14->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// main::@15
// print_uint(lintab1[i])
// [44] main::$28 = main::i#10 << 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __28
// [45] print_uint::w#3 = main::lintab1[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
tay
lda lintab1,y
sta.z print_uint.w
lda lintab1+1,y
sta.z print_uint.w+1
// [46] call print_uint
// [88] phi from main::@15 to print_uint [phi:main::@15->print_uint]
// [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy
jsr print_uint
// [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16]
// main::@16
// print_str(" ")
// [48] call print_str
// [81] phi from main::@16 to print_str [phi:main::@16->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// main::@17
// print_uint(lintab2[i])
// [49] print_uint::w#4 = main::lintab2[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z __28
lda lintab2,y
sta.z print_uint.w
lda lintab2+1,y
sta.z print_uint.w+1
// [50] call print_uint
// [88] phi from main::@17 to print_uint [phi:main::@17->print_uint]
// [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy
jsr print_uint
// [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
// main::@18
// print_str(" ")
// [52] call print_str
// [81] phi from main::@18 to print_str [phi:main::@18->print_str]
// [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy
// [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta.z print_str.str
lda #>str1
sta.z print_str.str+1
jsr print_str
// main::@19
// print_uint(lintab3[i])
// [53] print_uint::w#5 = main::lintab3[main::$28] -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z __28
lda lintab3,y
sta.z print_uint.w
lda lintab3+1,y
sta.z print_uint.w+1
// [54] call print_uint
// [88] phi from main::@19 to print_uint [phi:main::@19->print_uint]
// [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy
jsr print_uint
// [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20]
// main::@20
// print_ln()
// [56] call print_ln
// [94] phi from main::@20 to print_ln [phi:main::@20->print_ln]
// [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy
jsr print_ln
// main::@21
// for(byte i=0; i<20; i++)
// [57] main::i#1 = ++ main::i#10 -- vbuz1=_inc_vbuz1
inc.z i
// [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1]
// [22] phi main::i#10 = main::i#1 [phi:main::@21->main::@1#0] -- register_copy
jmp __b1
.segment Data
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
str: .text " "
.byte 0
str1: .text " "
.byte 0
}
.segment Code
// lin16u_gen
// Generate word linear table
// lintab - the table to generate into
// length - the number of points in a total sine wavelength (the size of the table)
// void lin16u_gen(__zp($10) unsigned int min, __zp(4) unsigned int max, __zp($a) unsigned int *lintab, unsigned int length)
lin16u_gen: {
.label __8 = 8
.label ampl = 4
.label stepi = $18
.label stepf = 2
.label step = $13
.label val = $c
.label lintab = $a
.label i = 6
.label max = 4
.label min = $10
// word ampl = max-min
// [59] lin16u_gen::ampl#0 = lin16u_gen::max#3 - lin16u_gen::min#3 -- vwuz1=vwuz1_minus_vwuz2
lda.z ampl
sec
sbc.z min
sta.z ampl
lda.z ampl+1
sbc.z min+1
sta.z ampl+1
// word stepi = divr16u(ampl, length-1, 0)
// [60] divr16u::dividend#1 = lin16u_gen::ampl#0
// [61] call divr16u
// [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u]
// [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy
// [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1
lda #<0
sta.z divr16u.rem
sta.z divr16u.rem+1
jsr divr16u
// word stepi = divr16u(ampl, length-1, 0)
// [62] divr16u::return#2 = divr16u::return#0
// lin16u_gen::@3
// [63] lin16u_gen::stepi#0 = divr16u::return#2 -- vwuz1=vwuz2
lda.z divr16u.return
sta.z stepi
lda.z divr16u.return+1
sta.z stepi+1
// word stepf = divr16u(0, length-1, rem16u)
// [64] divr16u::rem#4 = rem16u#0
// [65] call divr16u
// [107] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u]
// [107] phi divr16u::dividend#5 = 0 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1
lda #<0
sta.z divr16u.dividend
sta.z divr16u.dividend+1
// [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy
jsr divr16u
// word stepf = divr16u(0, length-1, rem16u)
// [66] divr16u::return#3 = divr16u::return#0
// lin16u_gen::@4
// [67] lin16u_gen::stepf#0 = divr16u::return#3
// dword step = MAKELONG( stepi, stepf )
// [68] lin16u_gen::step#0 = lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 -- vduz1=vwuz2_dword_vwuz3
lda.z stepi
sta.z step+2
lda.z stepi+1
sta.z step+3
lda.z stepf
sta.z step
lda.z stepf+1
sta.z step+1
// dword val = MAKELONG( min, 0 )
// [69] lin16u_gen::val#0 = lin16u_gen::min#3 dw= 0 -- vduz1=vwuz2_dword_vbuc1
lda.z min
sta.z val+2
lda.z min+1
sta.z val+3
lda #0
sta.z val
sta.z val+1
// [70] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1]
// [70] phi lin16u_gen::lintab#4 = lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy
// [70] phi lin16u_gen::val#2 = lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy
// [70] phi lin16u_gen::i#2 = 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vwuc1
sta.z i
sta.z i+1
// lin16u_gen::@1
__b1:
// for(word i=0; i<length; i++)
// [71] if(lin16u_gen::i#2<$14) goto lin16u_gen::@2 -- vwuz1_lt_vbuc1_then_la1
lda.z i+1
bne !+
lda.z i
cmp #$14
bcc __b2
!:
// lin16u_gen::@return
// }
// [72] return
rts
// lin16u_gen::@2
__b2:
// WORD1(val)
// [73] lin16u_gen::$8 = word1 lin16u_gen::val#2 -- vwuz1=_word1_vduz2
lda.z val+2
sta.z __8
lda.z val+3
sta.z __8+1
// *lintab = WORD1(val)
// [74] *lin16u_gen::lintab#4 = lin16u_gen::$8 -- _deref_pwuz1=vwuz2
ldy #0
lda.z __8
sta (lintab),y
iny
lda.z __8+1
sta (lintab),y
// val = val + step
// [75] lin16u_gen::val#1 = lin16u_gen::val#2 + lin16u_gen::step#0 -- vduz1=vduz1_plus_vduz2
clc
lda.z val
adc.z step
sta.z val
lda.z val+1
adc.z step+1
sta.z val+1
lda.z val+2
adc.z step+2
sta.z val+2
lda.z val+3
adc.z step+3
sta.z val+3
// lintab++;
// [76] lin16u_gen::lintab#3 = lin16u_gen::lintab#4 + SIZEOF_UNSIGNED_INT -- pwuz1=pwuz1_plus_vbuc1
lda #SIZEOF_UNSIGNED_INT
clc
adc.z lintab
sta.z lintab
bcc !+
inc.z lintab+1
!:
// for(word i=0; i<length; i++)
// [77] lin16u_gen::i#1 = ++ lin16u_gen::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [70] phi from lin16u_gen::@2 to lin16u_gen::@1 [phi:lin16u_gen::@2->lin16u_gen::@1]
// [70] phi lin16u_gen::lintab#4 = lin16u_gen::lintab#3 [phi:lin16u_gen::@2->lin16u_gen::@1#0] -- register_copy
// [70] phi lin16u_gen::val#2 = lin16u_gen::val#1 [phi:lin16u_gen::@2->lin16u_gen::@1#1] -- register_copy
// [70] phi lin16u_gen::i#2 = lin16u_gen::i#1 [phi:lin16u_gen::@2->lin16u_gen::@1#2] -- register_copy
jmp __b1
}
// print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
// memset(print_screen, ' ', 1000)
// [79] call memset
// [125] phi from print_cls to memset [phi:print_cls->memset]
jsr memset
// print_cls::@return
// }
// [80] return
rts
}
// print_str
// Print a zero-terminated string
// void print_str(__zp(4) char *str)
print_str: {
.label str = 4
// [82] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1]
// [82] phi print_char_cursor#1 = print_char_cursor#89 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy
// [82] phi print_str::str#10 = print_str::str#13 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy
// print_str::@1
__b1:
// while(*str)
// [83] if(0!=*print_str::str#10) goto print_str::@2 -- 0_neq__deref_pbuz1_then_la1
ldy #0
lda (str),y
cmp #0
bne __b2
// print_str::@return
// }
// [84] return
rts
// print_str::@2
__b2:
// print_char(*(str++))
// [85] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1
ldy #0
lda (str),y
// [86] call print_char
// [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char]
// [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy
jsr print_char
// print_str::@3
// print_char(*(str++));
// [87] print_str::str#0 = ++ print_str::str#10 -- pbuz1=_inc_pbuz1
inc.z str
bne !+
inc.z str+1
!:
jmp __b1
}
// print_uint
// Print a unsigned int as HEX
// void print_uint(__zp($10) unsigned int w)
print_uint: {
.label w = $10
// print_uchar(BYTE1(w))
// [89] print_uchar::b#0 = byte1 print_uint::w#10 -- vbuxx=_byte1_vwuz1
ldx.z w+1
// [90] call print_uchar
// [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
// [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
jsr print_uchar
// print_uint::@1
// print_uchar(BYTE0(w))
// [91] print_uchar::b#1 = byte0 print_uint::w#10 -- vbuxx=_byte0_vwuz1
ldx.z w
// [92] call print_uchar
// [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
// [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy
// [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
jsr print_uchar
// print_uint::@return
// }
// [93] return
rts
}
// print_ln
// Print a newline
print_ln: {
// [95] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
// [95] phi print_line_cursor#12 = print_line_cursor#23 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy
// print_ln::@1
__b1:
// print_line_cursor + 0x28
// [96] print_line_cursor#0 = print_line_cursor#12 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z print_line_cursor
sta.z print_line_cursor
bcc !+
inc.z print_line_cursor+1
!:
// while (print_line_cursor<print_char_cursor)
// [97] if(print_line_cursor#0<print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1
lda.z print_line_cursor+1
cmp.z print_char_cursor+1
bcc __b1
bne !+
lda.z print_line_cursor
cmp.z print_char_cursor
bcc __b1
!:
// print_ln::@return
// }
// [98] return
rts
}
// print_uchar
// Print a char as HEX
// void print_uchar(__register(X) char b)
print_uchar: {
// b>>4
// [100] print_uchar::$0 = print_uchar::b#3 >> 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
// print_char(print_hextab[b>>4])
// [101] print_char::ch#1 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [102] call print_char
// Table of hexadecimal digits
// [131] phi from print_uchar to print_char [phi:print_uchar->print_char]
// [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy
jsr print_char
// print_uchar::@1
// b&0xf
// [103] print_uchar::$2 = print_uchar::b#3 & $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
// print_char(print_hextab[b&0xf])
// [104] print_char::ch#2 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [105] call print_char
// [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
// [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy
// [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy
jsr print_char
// print_uchar::@return
// }
// [106] return
rts
}
// divr16u
// Performs division on two 16 bit unsigned ints and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// __zp(2) unsigned int divr16u(__zp(4) unsigned int dividend, unsigned int divisor, __zp(8) unsigned int rem)
divr16u: {
.label rem = 8
.label dividend = 4
.label quotient = 2
.label return = 2
// [108] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
// [108] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1
ldx #0
// [108] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1
txa
sta.z quotient
sta.z quotient+1
// [108] phi divr16u::dividend#3 = divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy
// [108] phi divr16u::rem#5 = divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy
// [108] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
// [108] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy
// [108] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy
// [108] phi divr16u::dividend#3 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy
// [108] phi divr16u::rem#5 = divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy
// divr16u::@1
__b1:
// rem = rem << 1
// [109] divr16u::rem#0 = divr16u::rem#5 << 1 -- vwuz1=vwuz1_rol_1
asl.z rem
rol.z rem+1
// BYTE1(dividend)
// [110] divr16u::$1 = byte1 divr16u::dividend#3 -- vbuaa=_byte1_vwuz1
lda.z dividend+1
// BYTE1(dividend) & 0x80
// [111] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1
and #$80
// if( (BYTE1(dividend) & 0x80) != 0 )
// [112] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1
cmp #0
beq __b2
// divr16u::@4
// rem = rem | 1
// [113] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1
lda #1
ora.z rem
sta.z rem
// [114] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
// [114] phi divr16u::rem#6 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy
// divr16u::@2
__b2:
// dividend = dividend << 1
// [115] divr16u::dividend#0 = divr16u::dividend#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z dividend
rol.z dividend+1
// quotient = quotient << 1
// [116] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z quotient
rol.z quotient+1
// if(rem>=divisor)
// [117] if(divr16u::rem#6<$14-1) goto divr16u::@3 -- vwuz1_lt_vbuc1_then_la1
lda.z rem+1
bne !+
lda.z rem
cmp #$14-1
bcc __b3
!:
// divr16u::@5
// quotient++;
// [118] divr16u::quotient#2 = ++ divr16u::quotient#1 -- vwuz1=_inc_vwuz1
inc.z quotient
bne !+
inc.z quotient+1
!:
// rem = rem - divisor
// [119] divr16u::rem#2 = divr16u::rem#6 - $14-1 -- vwuz1=vwuz1_minus_vbuc1
sec
lda.z rem
sbc #$14-1
sta.z rem
lda.z rem+1
sbc #0
sta.z rem+1
// [120] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
// [120] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy
// [120] phi divr16u::rem#11 = divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy
// divr16u::@3
__b3:
// for( char i : 0..15)
// [121] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx
inx
// [122] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #$10
bne __b1
// divr16u::@6
// rem16u = rem
// [123] rem16u#0 = divr16u::rem#11
// divr16u::@return
// }
// [124] return
rts
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(void *str, char c, unsigned int num)
memset: {
.const c = ' '
.const num = $3e8
.label str = print_screen
.label end = str+num
.label dst = $a
// [126] phi from memset to memset::@1 [phi:memset->memset::@1]
// [126] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
lda #<str
sta.z dst
lda #>str
sta.z dst+1
// memset::@1
__b1:
// for(char* dst = str; dst!=end; dst++)
// [127] 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 #<end
bne __b2
// memset::@return
// }
// [128] return
rts
// memset::@2
__b2:
// *dst = c
// [129] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// for(char* dst = str; dst!=end; dst++)
// [130] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [126] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
// [126] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
jmp __b1
}
// print_char
// Print a single char
// void print_char(__register(A) char ch)
print_char: {
// *(print_char_cursor++) = ch
// [132] *print_char_cursor#51 = print_char::ch#3 -- _deref_pbuz1=vbuaa
ldy #0
sta (print_char_cursor),y
// *(print_char_cursor++) = ch;
// [133] print_char_cursor#10 = ++ print_char_cursor#51 -- pbuz1=_inc_pbuz1
inc.z print_char_cursor
bne !+
inc.z print_char_cursor+1
!:
// print_char::@return
// }
// [134] return
rts
}
// File Data
.segment Data
print_hextab: .text "0123456789abcdef"