Fixing struct type size struct printf_buffer_number to 12 Fixing struct type size struct printf_buffer_number to 12 Fixing struct type size struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Added struct type cast to parameter value list call printf_sint test_casting::signed_short_value (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL } Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call call __init Eliminating unused variable with no statement test_casting::$0 CONTROL FLOW GRAPH SSA void clrscr() clrscr: scope:[clrscr] from main clrscr::line_text#0 = CONIO_SCREEN_TEXT clrscr::line_cols#0 = CONIO_SCREEN_COLORS clrscr::l#0 = 0 to:clrscr::@1 clrscr::@1: scope:[clrscr] from clrscr clrscr::@6 clrscr::line_cols#6 = phi( clrscr/clrscr::line_cols#0, clrscr::@6/clrscr::line_cols#1 ) clrscr::line_text#6 = phi( clrscr/clrscr::line_text#0, clrscr::@6/clrscr::line_text#1 ) clrscr::l#2 = phi( clrscr/clrscr::l#0, clrscr::@6/clrscr::l#1 ) clrscr::$0 = clrscr::l#2 < $19 if(clrscr::$0) goto clrscr::@2 to:clrscr::@3 clrscr::@2: scope:[clrscr] from clrscr::@1 clrscr::l#5 = phi( clrscr::@1/clrscr::l#2 ) clrscr::line_cols#5 = phi( clrscr::@1/clrscr::line_cols#6 ) clrscr::line_text#5 = phi( clrscr::@1/clrscr::line_text#6 ) clrscr::c#0 = 0 to:clrscr::@4 clrscr::@3: scope:[clrscr] from clrscr::@1 conio_cursor_x = 0 conio_cursor_y = 0 conio_line_text = CONIO_SCREEN_TEXT conio_line_color = CONIO_SCREEN_COLORS to:clrscr::@return clrscr::@4: scope:[clrscr] from clrscr::@2 clrscr::@5 clrscr::l#4 = phi( clrscr::@2/clrscr::l#5, clrscr::@5/clrscr::l#6 ) clrscr::line_cols#4 = phi( clrscr::@2/clrscr::line_cols#5, clrscr::@5/clrscr::line_cols#2 ) clrscr::line_text#4 = phi( clrscr::@2/clrscr::line_text#5, clrscr::@5/clrscr::line_text#2 ) clrscr::c#2 = phi( clrscr::@2/clrscr::c#0, clrscr::@5/clrscr::c#1 ) clrscr::$1 = clrscr::c#2 < $28 if(clrscr::$1) goto clrscr::@5 to:clrscr::@6 clrscr::@5: scope:[clrscr] from clrscr::@4 clrscr::l#6 = phi( clrscr::@4/clrscr::l#4 ) clrscr::line_cols#2 = phi( clrscr::@4/clrscr::line_cols#4 ) clrscr::c#3 = phi( clrscr::@4/clrscr::c#2 ) clrscr::line_text#2 = phi( clrscr::@4/clrscr::line_text#4 ) clrscr::line_text#2[clrscr::c#3] = ' ' clrscr::line_cols#2[clrscr::c#3] = conio_textcolor clrscr::c#1 = ++ clrscr::c#3 to:clrscr::@4 clrscr::@6: scope:[clrscr] from clrscr::@4 clrscr::l#3 = phi( clrscr::@4/clrscr::l#4 ) clrscr::line_cols#3 = phi( clrscr::@4/clrscr::line_cols#4 ) clrscr::line_text#3 = phi( clrscr::@4/clrscr::line_text#4 ) clrscr::line_text#1 = clrscr::line_text#3 + $28 clrscr::line_cols#1 = clrscr::line_cols#3 + $28 clrscr::l#1 = ++ clrscr::l#3 to:clrscr::@1 clrscr::@return: scope:[clrscr] from clrscr::@3 return to:@return void gotoxy(byte gotoxy::x , byte gotoxy::y) gotoxy: scope:[gotoxy] from conio_c64_init::@1 cscroll::@2 gotoxy::x#5 = phi( conio_c64_init::@1/gotoxy::x#2, cscroll::@2/gotoxy::x#1 ) gotoxy::y#3 = phi( conio_c64_init::@1/gotoxy::y#2, cscroll::@2/gotoxy::y#1 ) gotoxy::$0 = gotoxy::y#3 > $19 gotoxy::$1 = ! gotoxy::$0 if(gotoxy::$1) goto gotoxy::@1 to:gotoxy::@3 gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 gotoxy::y#5 = phi( gotoxy/gotoxy::y#3, gotoxy::@3/gotoxy::y#0 ) gotoxy::x#3 = phi( gotoxy/gotoxy::x#5, gotoxy::@3/gotoxy::x#6 ) gotoxy::$2 = gotoxy::x#3 >= $28 gotoxy::$3 = ! gotoxy::$2 if(gotoxy::$3) goto gotoxy::@2 to:gotoxy::@4 gotoxy::@3: scope:[gotoxy] from gotoxy gotoxy::x#6 = phi( gotoxy/gotoxy::x#5 ) gotoxy::y#0 = 0 to:gotoxy::@1 gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 gotoxy::y#4 = phi( gotoxy::@1/gotoxy::y#5, gotoxy::@4/gotoxy::y#6 ) gotoxy::x#4 = phi( gotoxy::@1/gotoxy::x#3, gotoxy::@4/gotoxy::x#0 ) conio_cursor_x = gotoxy::x#4 conio_cursor_y = gotoxy::y#4 gotoxy::$7 = (word)gotoxy::y#4 gotoxy::$4 = gotoxy::$7 * $28 gotoxy::line_offset#0 = gotoxy::$4 gotoxy::$5 = CONIO_SCREEN_TEXT + gotoxy::line_offset#0 conio_line_text = gotoxy::$5 gotoxy::$6 = CONIO_SCREEN_COLORS + gotoxy::line_offset#0 conio_line_color = gotoxy::$6 to:gotoxy::@return gotoxy::@4: scope:[gotoxy] from gotoxy::@1 gotoxy::y#6 = phi( gotoxy::@1/gotoxy::y#5 ) gotoxy::x#0 = 0 to:gotoxy::@2 gotoxy::@return: scope:[gotoxy] from gotoxy::@2 return to:@return void cputc(byte cputc::c) cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@9 printf_padding::@2 cputc::c#3 = phi( cputs::@2/cputc::c#0, printf_number_buffer::@9/cputc::c#2, printf_padding::@2/cputc::c#1 ) cputc::$0 = cputc::c#3 == ' ' if(cputc::$0) goto cputc::@1 to:cputc::@2 cputc::@1: scope:[cputc] from cputc call cputln to:cputc::@4 cputc::@4: scope:[cputc] from cputc::@1 to:cputc::@return cputc::@2: scope:[cputc] from cputc cputc::c#4 = phi( cputc/cputc::c#3 ) conio_line_text[conio_cursor_x] = cputc::c#4 conio_line_color[conio_cursor_x] = conio_textcolor conio_cursor_x = ++ conio_cursor_x cputc::$1 = conio_cursor_x == $28 cputc::$2 = ! cputc::$1 if(cputc::$2) goto cputc::@return to:cputc::@3 cputc::@3: scope:[cputc] from cputc::@2 call cputln to:cputc::@5 cputc::@5: scope:[cputc] from cputc::@3 to:cputc::@return cputc::@return: scope:[cputc] from cputc::@2 cputc::@4 cputc::@5 return to:@return void cputln() cputln: scope:[cputln] from cputc::@1 cputc::@3 conio_line_text = conio_line_text + $28 conio_line_color = conio_line_color + $28 conio_cursor_x = 0 conio_cursor_y = ++ conio_cursor_y call cscroll to:cputln::@1 cputln::@1: scope:[cputln] from cputln to:cputln::@return cputln::@return: scope:[cputln] from cputln::@1 return to:@return void cputs(const byte* cputs::s) cputs: scope:[cputs] from printf_number_buffer::@5 test_casting::@1 cputs::s#4 = phi( printf_number_buffer::@5/cputs::s#1, test_casting::@1/cputs::s#2 ) cputs::c#0 = 0 to:cputs::@1 cputs::@1: scope:[cputs] from cputs cputs::@3 cputs::s#3 = phi( cputs/cputs::s#4, cputs::@3/cputs::s#5 ) cputs::c#1 = *cputs::s#3 cputs::$0 = cputs::c#1 cputs::s#0 = ++ cputs::s#3 cputs::$2 = 0 != cputs::$0 if(cputs::$2) goto cputs::@2 to:cputs::@return cputs::@2: scope:[cputs] from cputs::@1 cputs::s#6 = phi( cputs::@1/cputs::s#0 ) cputs::c#2 = phi( cputs::@1/cputs::c#1 ) cputc::c#0 = cputs::c#2 call cputc to:cputs::@3 cputs::@3: scope:[cputs] from cputs::@2 cputs::s#5 = phi( cputs::@2/cputs::s#6 ) to:cputs::@1 cputs::@return: scope:[cputs] from cputs::@1 return to:@return void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) memcpy: scope:[memcpy] from cscroll::@3 cscroll::@4 memcpy::num#2 = phi( cscroll::@3/memcpy::num#0, cscroll::@4/memcpy::num#1 ) memcpy::destination#2 = phi( cscroll::@3/memcpy::destination#0, cscroll::@4/memcpy::destination#1 ) memcpy::source#2 = phi( cscroll::@3/memcpy::source#0, cscroll::@4/memcpy::source#1 ) memcpy::src#0 = ((byte*)) memcpy::source#2 memcpy::dst#0 = ((byte*)) memcpy::destination#2 memcpy::$2 = (byte*)memcpy::source#2 memcpy::$0 = memcpy::$2 + memcpy::num#2 memcpy::src_end#0 = memcpy::$0 to:memcpy::@1 memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 memcpy::destination#4 = phi( memcpy/memcpy::destination#2, memcpy::@2/memcpy::destination#5 ) memcpy::dst#3 = phi( memcpy/memcpy::dst#0, memcpy::@2/memcpy::dst#1 ) memcpy::src_end#1 = phi( memcpy/memcpy::src_end#0, memcpy::@2/memcpy::src_end#2 ) memcpy::src#2 = phi( memcpy/memcpy::src#0, memcpy::@2/memcpy::src#1 ) memcpy::$1 = memcpy::src#2 != memcpy::src_end#1 if(memcpy::$1) goto memcpy::@2 to:memcpy::@3 memcpy::@2: scope:[memcpy] from memcpy::@1 memcpy::destination#5 = phi( memcpy::@1/memcpy::destination#4 ) memcpy::src_end#2 = phi( memcpy::@1/memcpy::src_end#1 ) memcpy::dst#2 = phi( memcpy::@1/memcpy::dst#3 ) memcpy::src#3 = phi( memcpy::@1/memcpy::src#2 ) *memcpy::dst#2 = *memcpy::src#3 memcpy::dst#1 = ++ memcpy::dst#2 memcpy::src#1 = ++ memcpy::src#3 to:memcpy::@1 memcpy::@3: scope:[memcpy] from memcpy::@1 memcpy::destination#3 = phi( memcpy::@1/memcpy::destination#4 ) memcpy::return#0 = memcpy::destination#3 to:memcpy::@return memcpy::@return: scope:[memcpy] from memcpy::@3 memcpy::return#4 = phi( memcpy::@3/memcpy::return#0 ) memcpy::return#1 = memcpy::return#4 return to:@return void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from cscroll::@5 cscroll::@6 memset::c#5 = phi( cscroll::@5/memset::c#0, cscroll::@6/memset::c#1 ) memset::str#4 = phi( cscroll::@5/memset::str#0, cscroll::@6/memset::str#1 ) memset::num#2 = phi( cscroll::@5/memset::num#0, cscroll::@6/memset::num#1 ) memset::$0 = memset::num#2 > 0 memset::$1 = ! memset::$0 if(memset::$1) goto memset::@1 to:memset::@2 memset::@1: scope:[memset] from memset memset::@3 memset::str#2 = phi( memset/memset::str#4, memset::@3/memset::str#5 ) memset::return#0 = memset::str#2 to:memset::@return memset::@2: scope:[memset] from memset memset::c#4 = phi( memset/memset::c#5 ) memset::num#3 = phi( memset/memset::num#2 ) memset::str#3 = phi( memset/memset::str#4 ) memset::$4 = (byte*)memset::str#3 memset::$2 = memset::$4 + memset::num#3 memset::end#0 = memset::$2 memset::dst#0 = ((byte*)) memset::str#3 to:memset::@3 memset::@3: scope:[memset] from memset::@2 memset::@4 memset::c#3 = phi( memset::@2/memset::c#4, memset::@4/memset::c#2 ) memset::str#5 = phi( memset::@2/memset::str#3, memset::@4/memset::str#6 ) 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#6 = phi( memset::@3/memset::str#5 ) memset::end#2 = phi( memset::@3/memset::end#1 ) memset::dst#3 = phi( memset::@3/memset::dst#2 ) memset::c#2 = phi( memset::@3/memset::c#3 ) *memset::dst#3 = memset::c#2 memset::dst#1 = ++ memset::dst#3 to:memset::@3 memset::@return: scope:[memset] from memset::@1 memset::return#4 = phi( memset::@1/memset::return#0 ) memset::return#1 = memset::return#4 return to:@return word strlen(byte* strlen::str) strlen: scope:[strlen] from printf_number_buffer::@6 strlen::str#4 = phi( printf_number_buffer::@6/strlen::str#1 ) strlen::len#0 = 0 to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 strlen::len#4 = phi( strlen/strlen::len#0, strlen::@2/strlen::len#1 ) strlen::str#2 = phi( strlen/strlen::str#4, strlen::@2/strlen::str#0 ) strlen::$0 = 0 != *strlen::str#2 if(strlen::$0) goto strlen::@2 to:strlen::@3 strlen::@2: scope:[strlen] from strlen::@1 strlen::str#3 = phi( strlen::@1/strlen::str#2 ) strlen::len#2 = phi( strlen::@1/strlen::len#4 ) strlen::len#1 = ++ strlen::len#2 strlen::str#0 = ++ strlen::str#3 to:strlen::@1 strlen::@3: scope:[strlen] from strlen::@1 strlen::len#3 = phi( strlen::@1/strlen::len#4 ) strlen::return#0 = strlen::len#3 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@3 strlen::return#3 = phi( strlen::@3/strlen::return#0 ) strlen::return#1 = strlen::return#3 return to:@return byte toupper(byte toupper::ch) toupper: scope:[toupper] from strupr::@2 toupper::ch#1 = phi( strupr::@2/toupper::ch#0 ) toupper::$0 = toupper::ch#1 >= 'a' toupper::$1 = toupper::ch#1 <= 'z' toupper::$2 = toupper::$0 && toupper::$1 if(toupper::$2) goto toupper::@1 to:toupper::@2 toupper::@1: scope:[toupper] from toupper toupper::ch#2 = phi( toupper/toupper::ch#1 ) toupper::$3 = toupper::ch#2 + 'A'-'a' toupper::return#0 = toupper::$3 to:toupper::@return toupper::@2: scope:[toupper] from toupper toupper::ch#3 = phi( toupper/toupper::ch#1 ) toupper::return#1 = toupper::ch#3 to:toupper::@return toupper::@return: scope:[toupper] from toupper::@1 toupper::@2 toupper::return#4 = phi( toupper::@1/toupper::return#0, toupper::@2/toupper::return#1 ) toupper::return#2 = toupper::return#4 return to:@return byte* strupr(byte* strupr::str) strupr: scope:[strupr] from printf_number_buffer::@11 strupr::str#1 = phi( printf_number_buffer::@11/strupr::str#0 ) strupr::src#0 = strupr::str#1 to:strupr::@1 strupr::@1: scope:[strupr] from strupr strupr::@4 strupr::str#3 = phi( strupr/strupr::str#1, strupr::@4/strupr::str#4 ) strupr::src#2 = phi( strupr/strupr::src#0, strupr::@4/strupr::src#1 ) strupr::$1 = 0 != *strupr::src#2 if(strupr::$1) goto strupr::@2 to:strupr::@3 strupr::@2: scope:[strupr] from strupr::@1 strupr::str#5 = phi( strupr::@1/strupr::str#3 ) strupr::src#3 = phi( strupr::@1/strupr::src#2 ) toupper::ch#0 = *strupr::src#3 call toupper toupper::return#3 = toupper::return#2 to:strupr::@4 strupr::@4: scope:[strupr] from strupr::@2 strupr::str#4 = phi( strupr::@2/strupr::str#5 ) strupr::src#4 = phi( strupr::@2/strupr::src#3 ) toupper::return#5 = phi( strupr::@2/toupper::return#3 ) strupr::$0 = toupper::return#5 *strupr::src#4 = strupr::$0 strupr::src#1 = ++ strupr::src#4 to:strupr::@1 strupr::@3: scope:[strupr] from strupr::@1 strupr::str#2 = phi( strupr::@1/strupr::str#3 ) strupr::return#0 = strupr::str#2 to:strupr::@return strupr::@return: scope:[strupr] from strupr::@3 strupr::return#3 = phi( strupr::@3/strupr::return#0 ) strupr::return#1 = strupr::return#3 return to:@return void cscroll() cscroll: scope:[cscroll] from cputln cscroll::$0 = conio_cursor_y == $19 cscroll::$1 = ! cscroll::$0 if(cscroll::$1) goto cscroll::@return to:cscroll::@1 cscroll::@1: scope:[cscroll] from cscroll cscroll::$7 = 0 != conio_scroll_enable if(cscroll::$7) goto cscroll::@3 to:cscroll::@2 cscroll::@3: scope:[cscroll] from cscroll::@1 memcpy::destination#0 = (void*)CONIO_SCREEN_TEXT memcpy::source#0 = (void*)CONIO_SCREEN_TEXT+$28 memcpy::num#0 = $19*$28-$28 call memcpy memcpy::return#2 = memcpy::return#1 to:cscroll::@4 cscroll::@4: scope:[cscroll] from cscroll::@3 memcpy::destination#1 = (void*)CONIO_SCREEN_COLORS memcpy::source#1 = (void*)CONIO_SCREEN_COLORS+$28 memcpy::num#1 = $19*$28-$28 call memcpy memcpy::return#3 = memcpy::return#1 to:cscroll::@5 cscroll::@5: scope:[cscroll] from cscroll::@4 memset::str#0 = (void*)CONIO_SCREEN_TEXT+$19*$28-$28 memset::c#0 = ' ' memset::num#0 = $28 call memset memset::return#2 = memset::return#1 to:cscroll::@6 cscroll::@6: scope:[cscroll] from cscroll::@5 memset::str#1 = (void*)CONIO_SCREEN_COLORS+$19*$28-$28 memset::c#1 = conio_textcolor memset::num#1 = $28 call memset memset::return#3 = memset::return#1 to:cscroll::@7 cscroll::@7: scope:[cscroll] from cscroll::@6 conio_line_text = conio_line_text - $28 conio_line_color = conio_line_color - $28 conio_cursor_y = -- conio_cursor_y to:cscroll::@return cscroll::@2: scope:[cscroll] from cscroll::@1 gotoxy::x#1 = 0 gotoxy::y#1 = 0 call gotoxy to:cscroll::@8 cscroll::@8: scope:[cscroll] from cscroll::@2 to:cscroll::@return cscroll::@return: scope:[cscroll] from cscroll cscroll::@7 cscroll::@8 return to:@return void conio_c64_init() conio_c64_init: scope:[conio_c64_init] from __start::__init1 conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE conio_c64_init::$0 = conio_c64_init::line#0 >= $19 conio_c64_init::$1 = ! conio_c64_init::$0 if(conio_c64_init::$1) goto conio_c64_init::@1 to:conio_c64_init::@2 conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 conio_c64_init::line#2 = phi( conio_c64_init/conio_c64_init::line#0, conio_c64_init::@2/conio_c64_init::line#1 ) gotoxy::x#2 = 0 gotoxy::y#2 = conio_c64_init::line#2 call gotoxy to:conio_c64_init::@3 conio_c64_init::@3: scope:[conio_c64_init] from conio_c64_init::@1 to:conio_c64_init::@return conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init conio_c64_init::line#1 = $19-1 to:conio_c64_init::@1 conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@3 return to:@return void utoa(word utoa::value , byte* utoa::buffer , byte utoa::radix) utoa: scope:[utoa] from printf_sint::@2 utoa::buffer#21 = phi( printf_sint::@2/utoa::buffer#5 ) utoa::value#12 = phi( printf_sint::@2/utoa::value#1 ) utoa::radix#1 = phi( printf_sint::@2/utoa::radix#0 ) utoa::max_digits#0 = 0 utoa::digit_values#0 = (word*) 0 utoa::$0 = utoa::radix#1 == DECIMAL if(utoa::$0) goto utoa::@1 to:utoa::@6 utoa::@1: scope:[utoa] from utoa utoa::buffer#17 = phi( utoa/utoa::buffer#21 ) utoa::value#8 = phi( utoa/utoa::value#12 ) utoa::max_digits#1 = 5 utoa::digit_values#1 = RADIX_DECIMAL_VALUES to:utoa::@5 utoa::@6: scope:[utoa] from utoa utoa::value#13 = phi( utoa/utoa::value#12 ) utoa::buffer#16 = phi( utoa/utoa::buffer#21 ) utoa::radix#2 = phi( utoa/utoa::radix#1 ) utoa::$1 = utoa::radix#2 == HEXADECIMAL if(utoa::$1) goto utoa::@2 to:utoa::@7 utoa::@2: scope:[utoa] from utoa::@6 utoa::buffer#18 = phi( utoa::@6/utoa::buffer#16 ) utoa::value#9 = phi( utoa::@6/utoa::value#13 ) utoa::max_digits#2 = 4 utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES to:utoa::@5 utoa::@7: scope:[utoa] from utoa::@6 utoa::value#14 = phi( utoa::@6/utoa::value#13 ) utoa::buffer#13 = phi( utoa::@6/utoa::buffer#16 ) utoa::radix#3 = phi( utoa::@6/utoa::radix#2 ) utoa::$2 = utoa::radix#3 == OCTAL if(utoa::$2) goto utoa::@3 to:utoa::@8 utoa::@3: scope:[utoa] from utoa::@7 utoa::buffer#19 = phi( utoa::@7/utoa::buffer#13 ) utoa::value#10 = phi( utoa::@7/utoa::value#14 ) utoa::max_digits#3 = 6 utoa::digit_values#3 = RADIX_OCTAL_VALUES to:utoa::@5 utoa::@8: scope:[utoa] from utoa::@7 utoa::value#15 = phi( utoa::@7/utoa::value#14 ) utoa::buffer#10 = phi( utoa::@7/utoa::buffer#13 ) utoa::radix#4 = phi( utoa::@7/utoa::radix#3 ) utoa::$3 = utoa::radix#4 == BINARY if(utoa::$3) goto utoa::@4 to:utoa::@9 utoa::@4: scope:[utoa] from utoa::@8 utoa::buffer#20 = phi( utoa::@8/utoa::buffer#10 ) utoa::value#11 = phi( utoa::@8/utoa::value#15 ) utoa::max_digits#4 = $10 utoa::digit_values#4 = RADIX_BINARY_VALUES to:utoa::@5 utoa::@9: scope:[utoa] from utoa::@8 utoa::buffer#6 = phi( utoa::@8/utoa::buffer#10 ) *utoa::buffer#6 = 'e' utoa::buffer#0 = ++ utoa::buffer#6 *utoa::buffer#0 = 'r' utoa::buffer#1 = ++ utoa::buffer#0 *utoa::buffer#1 = 'r' utoa::buffer#2 = ++ utoa::buffer#1 *utoa::buffer#2 = 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@12 utoa::@9 return to:@return utoa::@5: scope:[utoa] from utoa::@1 utoa::@2 utoa::@3 utoa::@4 utoa::buffer#15 = phi( utoa::@1/utoa::buffer#17, utoa::@2/utoa::buffer#18, utoa::@3/utoa::buffer#19, utoa::@4/utoa::buffer#20 ) utoa::value#7 = phi( utoa::@1/utoa::value#8, utoa::@2/utoa::value#9, utoa::@3/utoa::value#10, utoa::@4/utoa::value#11 ) utoa::digit_values#8 = phi( utoa::@1/utoa::digit_values#1, utoa::@2/utoa::digit_values#2, utoa::@3/utoa::digit_values#3, utoa::@4/utoa::digit_values#4 ) utoa::max_digits#7 = phi( utoa::@1/utoa::max_digits#1, utoa::@2/utoa::max_digits#2, utoa::@3/utoa::max_digits#3, utoa::@4/utoa::max_digits#4 ) utoa::started#0 = 0 utoa::digit#0 = 0 to:utoa::@10 utoa::@10: scope:[utoa] from utoa::@13 utoa::@5 utoa::buffer#11 = phi( utoa::@13/utoa::buffer#14, utoa::@5/utoa::buffer#15 ) utoa::started#3 = phi( utoa::@13/utoa::started#4, utoa::@5/utoa::started#0 ) utoa::value#5 = phi( utoa::@13/utoa::value#6, utoa::@5/utoa::value#7 ) utoa::digit_values#6 = phi( utoa::@13/utoa::digit_values#7, utoa::@5/utoa::digit_values#8 ) utoa::digit#2 = phi( utoa::@13/utoa::digit#1, utoa::@5/utoa::digit#0 ) utoa::max_digits#5 = phi( utoa::@13/utoa::max_digits#6, utoa::@5/utoa::max_digits#7 ) utoa::$4 = utoa::max_digits#5 - 1 utoa::$5 = utoa::digit#2 < utoa::$4 if(utoa::$5) goto utoa::@11 to:utoa::@12 utoa::@11: scope:[utoa] from utoa::@10 utoa::max_digits#8 = phi( utoa::@10/utoa::max_digits#5 ) utoa::buffer#12 = phi( utoa::@10/utoa::buffer#11 ) utoa::started#2 = phi( utoa::@10/utoa::started#3 ) utoa::value#2 = phi( utoa::@10/utoa::value#5 ) utoa::digit_values#5 = phi( utoa::@10/utoa::digit_values#6 ) utoa::digit#3 = phi( utoa::@10/utoa::digit#2 ) utoa::$10 = utoa::digit#3 * SIZEOF_WORD utoa::digit_value#0 = utoa::digit_values#5[utoa::$10] utoa::$6 = utoa::value#2 >= utoa::digit_value#0 utoa::$7 = utoa::started#2 || utoa::$6 utoa::$8 = ! utoa::$7 if(utoa::$8) goto utoa::@13 to:utoa::@14 utoa::@12: scope:[utoa] from utoa::@10 utoa::buffer#7 = phi( utoa::@10/utoa::buffer#11 ) utoa::value#3 = phi( utoa::@10/utoa::value#5 ) utoa::$11 = (byte)utoa::value#3 *utoa::buffer#7 = DIGITS[utoa::$11] utoa::buffer#3 = ++ utoa::buffer#7 *utoa::buffer#3 = 0 to:utoa::@return utoa::@13: scope:[utoa] from utoa::@11 utoa::@15 utoa::buffer#14 = phi( utoa::@11/utoa::buffer#12, utoa::@15/utoa::buffer#4 ) utoa::started#4 = phi( utoa::@11/utoa::started#2, utoa::@15/utoa::started#1 ) utoa::value#6 = phi( utoa::@11/utoa::value#2, utoa::@15/utoa::value#0 ) utoa::digit_values#7 = phi( utoa::@11/utoa::digit_values#5, utoa::@15/utoa::digit_values#9 ) utoa::max_digits#6 = phi( utoa::@11/utoa::max_digits#8, utoa::@15/utoa::max_digits#9 ) utoa::digit#4 = phi( utoa::@11/utoa::digit#3, utoa::@15/utoa::digit#5 ) utoa::digit#1 = ++ utoa::digit#4 to:utoa::@10 utoa::@14: scope:[utoa] from utoa::@11 utoa::digit_values#10 = phi( utoa::@11/utoa::digit_values#5 ) utoa::max_digits#10 = phi( utoa::@11/utoa::max_digits#8 ) utoa::digit#6 = phi( utoa::@11/utoa::digit#3 ) utoa::digit_value#1 = phi( utoa::@11/utoa::digit_value#0 ) utoa::value#4 = phi( utoa::@11/utoa::value#2 ) utoa::buffer#8 = phi( utoa::@11/utoa::buffer#12 ) utoa_append::buffer#0 = utoa::buffer#8 utoa_append::value#0 = utoa::value#4 utoa_append::sub#0 = utoa::digit_value#1 call utoa_append utoa_append::return#0 = utoa_append::return#2 to:utoa::@15 utoa::@15: scope:[utoa] from utoa::@14 utoa::digit_values#9 = phi( utoa::@14/utoa::digit_values#10 ) utoa::max_digits#9 = phi( utoa::@14/utoa::max_digits#10 ) utoa::digit#5 = phi( utoa::@14/utoa::digit#6 ) utoa::buffer#9 = phi( utoa::@14/utoa::buffer#8 ) utoa_append::return#3 = phi( utoa::@14/utoa_append::return#0 ) utoa::$9 = utoa_append::return#3 utoa::value#0 = utoa::$9 utoa::buffer#4 = ++ utoa::buffer#9 utoa::started#1 = 1 to:utoa::@13 word utoa_append(byte* utoa_append::buffer , word utoa_append::value , word utoa_append::sub) utoa_append: scope:[utoa_append] from utoa::@14 utoa_append::buffer#3 = phi( utoa::@14/utoa_append::buffer#0 ) utoa_append::sub#3 = phi( utoa::@14/utoa_append::sub#0 ) utoa_append::value#5 = phi( utoa::@14/utoa_append::value#0 ) utoa_append::digit#0 = 0 to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 utoa_append::buffer#2 = phi( utoa_append/utoa_append::buffer#3, utoa_append::@2/utoa_append::buffer#4 ) utoa_append::digit#4 = phi( utoa_append/utoa_append::digit#0, utoa_append::@2/utoa_append::digit#1 ) utoa_append::sub#1 = phi( utoa_append/utoa_append::sub#3, utoa_append::@2/utoa_append::sub#2 ) utoa_append::value#2 = phi( utoa_append/utoa_append::value#5, utoa_append::@2/utoa_append::value#1 ) utoa_append::$0 = utoa_append::value#2 >= utoa_append::sub#1 if(utoa_append::$0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@2: scope:[utoa_append] from utoa_append::@1 utoa_append::buffer#4 = phi( utoa_append::@1/utoa_append::buffer#2 ) utoa_append::sub#2 = phi( utoa_append::@1/utoa_append::sub#1 ) utoa_append::value#3 = phi( utoa_append::@1/utoa_append::value#2 ) utoa_append::digit#2 = phi( utoa_append::@1/utoa_append::digit#4 ) utoa_append::digit#1 = ++ utoa_append::digit#2 utoa_append::value#1 = utoa_append::value#3 - utoa_append::sub#2 to:utoa_append::@1 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 utoa_append::value#4 = phi( utoa_append::@1/utoa_append::value#2 ) utoa_append::buffer#1 = phi( utoa_append::@1/utoa_append::buffer#2 ) utoa_append::digit#3 = phi( utoa_append::@1/utoa_append::digit#4 ) *utoa_append::buffer#1 = DIGITS[utoa_append::digit#3] utoa_append::return#1 = utoa_append::value#4 to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 utoa_append::return#4 = phi( utoa_append::@3/utoa_append::return#1 ) utoa_append::return#2 = utoa_append::return#4 return to:@return void printf_padding(byte printf_padding::pad , byte printf_padding::length) printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 printf_padding::pad#5 = phi( printf_number_buffer::@10/printf_padding::pad#1, printf_number_buffer::@12/printf_padding::pad#2, printf_number_buffer::@8/printf_padding::pad#0 ) printf_padding::length#4 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) printf_padding::i#0 = 0 to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 printf_padding::pad#4 = phi( printf_padding/printf_padding::pad#5, printf_padding::@3/printf_padding::pad#6 ) printf_padding::length#3 = phi( printf_padding/printf_padding::length#4, printf_padding::@3/printf_padding::length#5 ) printf_padding::i#2 = phi( printf_padding/printf_padding::i#0, printf_padding::@3/printf_padding::i#1 ) printf_padding::$0 = printf_padding::i#2 < printf_padding::length#3 if(printf_padding::$0) goto printf_padding::@2 to:printf_padding::@return printf_padding::@2: scope:[printf_padding] from printf_padding::@1 printf_padding::length#6 = phi( printf_padding::@1/printf_padding::length#3 ) printf_padding::i#4 = phi( printf_padding::@1/printf_padding::i#2 ) printf_padding::pad#3 = phi( printf_padding::@1/printf_padding::pad#4 ) cputc::c#1 = printf_padding::pad#3 call cputc to:printf_padding::@3 printf_padding::@3: scope:[printf_padding] from printf_padding::@2 printf_padding::pad#6 = phi( printf_padding::@2/printf_padding::pad#3 ) printf_padding::length#5 = phi( printf_padding::@2/printf_padding::length#6 ) printf_padding::i#3 = phi( printf_padding::@2/printf_padding::i#4 ) printf_padding::i#1 = ++ printf_padding::i#3 to:printf_padding::@1 printf_padding::@return: scope:[printf_padding] from printf_padding::@1 return to:@return void printf_sint(signed word printf_sint::value , byte printf_sint::format_min_length , byte printf_sint::format_justify_left , byte printf_sint::format_sign_always , byte printf_sint::format_zero_padding , byte printf_sint::format_upper_case , byte printf_sint::format_radix) printf_sint: scope:[printf_sint] from test_casting printf_sint::format_upper_case#6 = phi( test_casting/printf_sint::format_upper_case#0 ) printf_sint::format_zero_padding#6 = phi( test_casting/printf_sint::format_zero_padding#0 ) printf_sint::format_justify_left#6 = phi( test_casting/printf_sint::format_justify_left#0 ) printf_sint::format_min_length#6 = phi( test_casting/printf_sint::format_min_length#0 ) printf_sint::format_radix#6 = phi( test_casting/printf_sint::format_radix#0 ) printf_sint::format_sign_always#3 = phi( test_casting/printf_sint::format_sign_always#0 ) printf_sint::value#2 = phi( test_casting/printf_sint::value#1 ) *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = 0 printf_sint::$0 = printf_sint::value#2 < 0 if(printf_sint::$0) goto printf_sint::@1 to:printf_sint::@3 printf_sint::@1: scope:[printf_sint] from printf_sint printf_sint::format_upper_case#3 = phi( printf_sint/printf_sint::format_upper_case#6 ) printf_sint::format_zero_padding#3 = phi( printf_sint/printf_sint::format_zero_padding#6 ) printf_sint::format_sign_always#5 = phi( printf_sint/printf_sint::format_sign_always#3 ) printf_sint::format_justify_left#3 = phi( printf_sint/printf_sint::format_justify_left#6 ) printf_sint::format_min_length#3 = phi( printf_sint/printf_sint::format_min_length#6 ) printf_sint::format_radix#3 = phi( printf_sint/printf_sint::format_radix#6 ) printf_sint::value#3 = phi( printf_sint/printf_sint::value#2 ) printf_sint::$4 = - printf_sint::value#3 printf_sint::value#0 = printf_sint::$4 *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = '-' to:printf_sint::@2 printf_sint::@3: scope:[printf_sint] from printf_sint printf_sint::format_upper_case#4 = phi( printf_sint/printf_sint::format_upper_case#6 ) printf_sint::format_zero_padding#4 = phi( printf_sint/printf_sint::format_zero_padding#6 ) printf_sint::format_justify_left#4 = phi( printf_sint/printf_sint::format_justify_left#6 ) printf_sint::format_min_length#4 = phi( printf_sint/printf_sint::format_min_length#6 ) printf_sint::format_radix#4 = phi( printf_sint/printf_sint::format_radix#6 ) printf_sint::value#5 = phi( printf_sint/printf_sint::value#2 ) printf_sint::format_sign_always#1 = phi( printf_sint/printf_sint::format_sign_always#3 ) printf_sint::$5 = 0 != printf_sint::format_sign_always#1 printf_sint::$3 = ! printf_sint::$5 if(printf_sint::$3) goto printf_sint::@2 to:printf_sint::@4 printf_sint::@4: scope:[printf_sint] from printf_sint::@3 printf_sint::format_upper_case#5 = phi( printf_sint::@3/printf_sint::format_upper_case#4 ) printf_sint::format_zero_padding#5 = phi( printf_sint::@3/printf_sint::format_zero_padding#4 ) printf_sint::format_sign_always#6 = phi( printf_sint::@3/printf_sint::format_sign_always#1 ) printf_sint::format_justify_left#5 = phi( printf_sint::@3/printf_sint::format_justify_left#4 ) printf_sint::format_min_length#5 = phi( printf_sint::@3/printf_sint::format_min_length#4 ) printf_sint::format_radix#5 = phi( printf_sint::@3/printf_sint::format_radix#4 ) printf_sint::value#6 = phi( printf_sint::@3/printf_sint::value#5 ) *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = '+' to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint::@1 printf_sint::@3 printf_sint::@4 printf_sint::format_upper_case#2 = phi( printf_sint::@1/printf_sint::format_upper_case#3, printf_sint::@3/printf_sint::format_upper_case#4, printf_sint::@4/printf_sint::format_upper_case#5 ) printf_sint::format_zero_padding#2 = phi( printf_sint::@1/printf_sint::format_zero_padding#3, printf_sint::@3/printf_sint::format_zero_padding#4, printf_sint::@4/printf_sint::format_zero_padding#5 ) printf_sint::format_sign_always#4 = phi( printf_sint::@1/printf_sint::format_sign_always#5, printf_sint::@3/printf_sint::format_sign_always#1, printf_sint::@4/printf_sint::format_sign_always#6 ) printf_sint::format_justify_left#2 = phi( printf_sint::@1/printf_sint::format_justify_left#3, printf_sint::@3/printf_sint::format_justify_left#4, printf_sint::@4/printf_sint::format_justify_left#5 ) printf_sint::format_min_length#2 = phi( printf_sint::@1/printf_sint::format_min_length#3, printf_sint::@3/printf_sint::format_min_length#4, printf_sint::@4/printf_sint::format_min_length#5 ) printf_sint::format_radix#1 = phi( printf_sint::@1/printf_sint::format_radix#3, printf_sint::@3/printf_sint::format_radix#4, printf_sint::@4/printf_sint::format_radix#5 ) printf_sint::value#4 = phi( printf_sint::@1/printf_sint::value#0, printf_sint::@3/printf_sint::value#5, printf_sint::@4/printf_sint::value#6 ) printf_sint::uvalue#0 = (word)printf_sint::value#4 utoa::value#1 = printf_sint::uvalue#0 utoa::buffer#5 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS utoa::radix#0 = printf_sint::format_radix#1 call utoa to:printf_sint::@5 printf_sint::@5: scope:[printf_sint] from printf_sint::@2 printf_sint::format_radix#2 = phi( printf_sint::@2/printf_sint::format_radix#1 ) printf_sint::format_upper_case#1 = phi( printf_sint::@2/printf_sint::format_upper_case#2 ) printf_sint::format_zero_padding#1 = phi( printf_sint::@2/printf_sint::format_zero_padding#2 ) printf_sint::format_sign_always#2 = phi( printf_sint::@2/printf_sint::format_sign_always#4 ) printf_sint::format_justify_left#1 = phi( printf_sint::@2/printf_sint::format_justify_left#2 ) printf_sint::format_min_length#1 = phi( printf_sint::@2/printf_sint::format_min_length#2 ) printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) printf_number_buffer::buffer_digits#0 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_number_buffer::format_min_length#0 = printf_sint::format_min_length#1 printf_number_buffer::format_justify_left#0 = printf_sint::format_justify_left#1 printf_number_buffer::format_sign_always#0 = printf_sint::format_sign_always#2 printf_number_buffer::format_zero_padding#0 = printf_sint::format_zero_padding#1 printf_number_buffer::format_upper_case#0 = printf_sint::format_upper_case#1 printf_number_buffer::format_radix#0 = printf_sint::format_radix#2 call printf_number_buffer to:printf_sint::@6 printf_sint::@6: scope:[printf_sint] from printf_sint::@5 to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@6 return to:@return void printf_number_buffer(byte printf_number_buffer::buffer_sign , byte* printf_number_buffer::buffer_digits , byte printf_number_buffer::format_min_length , byte printf_number_buffer::format_justify_left , byte printf_number_buffer::format_sign_always , byte printf_number_buffer::format_zero_padding , byte printf_number_buffer::format_upper_case , byte printf_number_buffer::format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@5 printf_number_buffer::format_upper_case#10 = phi( printf_sint::@5/printf_number_buffer::format_upper_case#0 ) printf_number_buffer::buffer_sign#7 = phi( printf_sint::@5/printf_number_buffer::buffer_sign#0 ) printf_number_buffer::buffer_digits#4 = phi( printf_sint::@5/printf_number_buffer::buffer_digits#0 ) printf_number_buffer::format_zero_padding#4 = phi( printf_sint::@5/printf_number_buffer::format_zero_padding#0 ) printf_number_buffer::format_justify_left#3 = phi( printf_sint::@5/printf_number_buffer::format_justify_left#0 ) printf_number_buffer::format_min_length#1 = phi( printf_sint::@5/printf_number_buffer::format_min_length#0 ) printf_number_buffer::padding#0 = 0 printf_number_buffer::$26 = 0 != printf_number_buffer::format_min_length#1 printf_number_buffer::$0 = ! printf_number_buffer::$26 if(printf_number_buffer::$0) goto printf_number_buffer::@1 to:printf_number_buffer::@6 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@14 printf_number_buffer::buffer_digits#12 = phi( printf_number_buffer/printf_number_buffer::buffer_digits#4, printf_number_buffer::@13/printf_number_buffer::buffer_digits#15, printf_number_buffer::@14/printf_number_buffer::buffer_digits#16 ) printf_number_buffer::format_upper_case#7 = phi( printf_number_buffer/printf_number_buffer::format_upper_case#10, printf_number_buffer::@13/printf_number_buffer::format_upper_case#11, printf_number_buffer::@14/printf_number_buffer::format_upper_case#12 ) printf_number_buffer::buffer_sign#5 = phi( printf_number_buffer/printf_number_buffer::buffer_sign#7, printf_number_buffer::@13/printf_number_buffer::buffer_sign#8, printf_number_buffer::@14/printf_number_buffer::buffer_sign#9 ) printf_number_buffer::padding#3 = phi( printf_number_buffer/printf_number_buffer::padding#0, printf_number_buffer::@13/printf_number_buffer::padding#1, printf_number_buffer::@14/printf_number_buffer::padding#2 ) printf_number_buffer::format_zero_padding#1 = phi( printf_number_buffer/printf_number_buffer::format_zero_padding#4, printf_number_buffer::@13/printf_number_buffer::format_zero_padding#5, printf_number_buffer::@14/printf_number_buffer::format_zero_padding#6 ) printf_number_buffer::format_justify_left#1 = phi( printf_number_buffer/printf_number_buffer::format_justify_left#3, printf_number_buffer::@13/printf_number_buffer::format_justify_left#4, printf_number_buffer::@14/printf_number_buffer::format_justify_left#5 ) printf_number_buffer::$27 = 0 != printf_number_buffer::format_justify_left#1 printf_number_buffer::$1 = ! printf_number_buffer::$27 printf_number_buffer::$28 = 0 != printf_number_buffer::format_zero_padding#1 printf_number_buffer::$2 = ! printf_number_buffer::$28 printf_number_buffer::$3 = printf_number_buffer::$1 && printf_number_buffer::$2 printf_number_buffer::$4 = printf_number_buffer::$3 && printf_number_buffer::padding#3 printf_number_buffer::$5 = ! printf_number_buffer::$4 if(printf_number_buffer::$5) goto printf_number_buffer::@2 to:printf_number_buffer::@8 printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::format_upper_case#16 = phi( printf_number_buffer/printf_number_buffer::format_upper_case#10 ) printf_number_buffer::format_zero_padding#16 = phi( printf_number_buffer/printf_number_buffer::format_zero_padding#4 ) printf_number_buffer::format_justify_left#11 = phi( printf_number_buffer/printf_number_buffer::format_justify_left#3 ) printf_number_buffer::format_min_length#5 = phi( printf_number_buffer/printf_number_buffer::format_min_length#1 ) printf_number_buffer::buffer_sign#4 = phi( printf_number_buffer/printf_number_buffer::buffer_sign#7 ) printf_number_buffer::buffer_digits#1 = phi( printf_number_buffer/printf_number_buffer::buffer_digits#4 ) strlen::str#1 = printf_number_buffer::buffer_digits#1 call strlen strlen::return#2 = strlen::return#1 to:printf_number_buffer::@15 printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@6 printf_number_buffer::buffer_digits#18 = phi( printf_number_buffer::@6/printf_number_buffer::buffer_digits#1 ) printf_number_buffer::format_upper_case#14 = phi( printf_number_buffer::@6/printf_number_buffer::format_upper_case#16 ) printf_number_buffer::format_zero_padding#10 = phi( printf_number_buffer::@6/printf_number_buffer::format_zero_padding#16 ) printf_number_buffer::format_justify_left#7 = phi( printf_number_buffer::@6/printf_number_buffer::format_justify_left#11 ) printf_number_buffer::format_min_length#3 = phi( printf_number_buffer::@6/printf_number_buffer::format_min_length#5 ) printf_number_buffer::buffer_sign#1 = phi( printf_number_buffer::@6/printf_number_buffer::buffer_sign#4 ) strlen::return#4 = phi( printf_number_buffer::@6/strlen::return#2 ) printf_number_buffer::$19 = strlen::return#4 printf_number_buffer::len#0 = (signed byte)printf_number_buffer::$19 printf_number_buffer::$29 = 0 != printf_number_buffer::buffer_sign#1 printf_number_buffer::$20 = ! printf_number_buffer::$29 if(printf_number_buffer::$20) goto printf_number_buffer::@13 to:printf_number_buffer::@7 printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@15 printf_number_buffer::@7 printf_number_buffer::buffer_digits#15 = phi( printf_number_buffer::@15/printf_number_buffer::buffer_digits#18, printf_number_buffer::@7/printf_number_buffer::buffer_digits#19 ) printf_number_buffer::format_upper_case#11 = phi( printf_number_buffer::@15/printf_number_buffer::format_upper_case#14, printf_number_buffer::@7/printf_number_buffer::format_upper_case#15 ) printf_number_buffer::buffer_sign#8 = phi( printf_number_buffer::@15/printf_number_buffer::buffer_sign#1, printf_number_buffer::@7/printf_number_buffer::buffer_sign#11 ) printf_number_buffer::format_zero_padding#5 = phi( printf_number_buffer::@15/printf_number_buffer::format_zero_padding#10, printf_number_buffer::@7/printf_number_buffer::format_zero_padding#11 ) printf_number_buffer::format_justify_left#4 = phi( printf_number_buffer::@15/printf_number_buffer::format_justify_left#7, printf_number_buffer::@7/printf_number_buffer::format_justify_left#8 ) printf_number_buffer::len#2 = phi( printf_number_buffer::@15/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) printf_number_buffer::format_min_length#2 = phi( printf_number_buffer::@15/printf_number_buffer::format_min_length#3, printf_number_buffer::@7/printf_number_buffer::format_min_length#4 ) printf_number_buffer::$25 = (signed byte)printf_number_buffer::format_min_length#2 printf_number_buffer::$21 = printf_number_buffer::$25 - printf_number_buffer::len#2 printf_number_buffer::padding#1 = printf_number_buffer::$21 printf_number_buffer::$22 = printf_number_buffer::padding#1 < 0 printf_number_buffer::$23 = ! printf_number_buffer::$22 if(printf_number_buffer::$23) goto printf_number_buffer::@1 to:printf_number_buffer::@14 printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@15 printf_number_buffer::buffer_digits#19 = phi( printf_number_buffer::@15/printf_number_buffer::buffer_digits#18 ) printf_number_buffer::format_upper_case#15 = phi( printf_number_buffer::@15/printf_number_buffer::format_upper_case#14 ) printf_number_buffer::buffer_sign#11 = phi( printf_number_buffer::@15/printf_number_buffer::buffer_sign#1 ) printf_number_buffer::format_zero_padding#11 = phi( printf_number_buffer::@15/printf_number_buffer::format_zero_padding#10 ) printf_number_buffer::format_justify_left#8 = phi( printf_number_buffer::@15/printf_number_buffer::format_justify_left#7 ) printf_number_buffer::format_min_length#4 = phi( printf_number_buffer::@15/printf_number_buffer::format_min_length#3 ) printf_number_buffer::len#3 = phi( printf_number_buffer::@15/printf_number_buffer::len#0 ) printf_number_buffer::len#1 = ++ printf_number_buffer::len#3 to:printf_number_buffer::@13 printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@13 printf_number_buffer::buffer_digits#16 = phi( printf_number_buffer::@13/printf_number_buffer::buffer_digits#15 ) printf_number_buffer::format_upper_case#12 = phi( printf_number_buffer::@13/printf_number_buffer::format_upper_case#11 ) printf_number_buffer::buffer_sign#9 = phi( printf_number_buffer::@13/printf_number_buffer::buffer_sign#8 ) printf_number_buffer::format_zero_padding#6 = phi( printf_number_buffer::@13/printf_number_buffer::format_zero_padding#5 ) printf_number_buffer::format_justify_left#5 = phi( printf_number_buffer::@13/printf_number_buffer::format_justify_left#4 ) printf_number_buffer::padding#2 = 0 to:printf_number_buffer::@1 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::format_justify_left#16 = phi( printf_number_buffer::@1/printf_number_buffer::format_justify_left#1, printf_number_buffer::@16/printf_number_buffer::format_justify_left#18 ) printf_number_buffer::buffer_digits#10 = phi( printf_number_buffer::@1/printf_number_buffer::buffer_digits#12, printf_number_buffer::@16/printf_number_buffer::buffer_digits#13 ) printf_number_buffer::format_upper_case#5 = phi( printf_number_buffer::@1/printf_number_buffer::format_upper_case#7, printf_number_buffer::@16/printf_number_buffer::format_upper_case#8 ) printf_number_buffer::padding#10 = phi( printf_number_buffer::@1/printf_number_buffer::padding#3, printf_number_buffer::@16/printf_number_buffer::padding#12 ) printf_number_buffer::format_zero_padding#8 = phi( printf_number_buffer::@1/printf_number_buffer::format_zero_padding#1, printf_number_buffer::@16/printf_number_buffer::format_zero_padding#12 ) printf_number_buffer::buffer_sign#2 = phi( printf_number_buffer::@1/printf_number_buffer::buffer_sign#5, printf_number_buffer::@16/printf_number_buffer::buffer_sign#6 ) printf_number_buffer::$30 = 0 != printf_number_buffer::buffer_sign#2 printf_number_buffer::$7 = ! printf_number_buffer::$30 if(printf_number_buffer::$7) goto printf_number_buffer::@3 to:printf_number_buffer::@9 printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::format_justify_left#20 = phi( printf_number_buffer::@1/printf_number_buffer::format_justify_left#1 ) printf_number_buffer::buffer_digits#17 = phi( printf_number_buffer::@1/printf_number_buffer::buffer_digits#12 ) printf_number_buffer::format_upper_case#13 = phi( printf_number_buffer::@1/printf_number_buffer::format_upper_case#7 ) printf_number_buffer::format_zero_padding#17 = phi( printf_number_buffer::@1/printf_number_buffer::format_zero_padding#1 ) printf_number_buffer::buffer_sign#10 = phi( printf_number_buffer::@1/printf_number_buffer::buffer_sign#5 ) printf_number_buffer::padding#4 = phi( printf_number_buffer::@1/printf_number_buffer::padding#3 ) printf_padding::pad#0 = ' ' printf_padding::length#0 = (byte)printf_number_buffer::padding#4 call printf_padding to:printf_number_buffer::@16 printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@8 printf_number_buffer::format_justify_left#18 = phi( printf_number_buffer::@8/printf_number_buffer::format_justify_left#20 ) printf_number_buffer::buffer_digits#13 = phi( printf_number_buffer::@8/printf_number_buffer::buffer_digits#17 ) printf_number_buffer::format_upper_case#8 = phi( printf_number_buffer::@8/printf_number_buffer::format_upper_case#13 ) printf_number_buffer::padding#12 = phi( printf_number_buffer::@8/printf_number_buffer::padding#4 ) printf_number_buffer::format_zero_padding#12 = phi( printf_number_buffer::@8/printf_number_buffer::format_zero_padding#17 ) printf_number_buffer::buffer_sign#6 = phi( printf_number_buffer::@8/printf_number_buffer::buffer_sign#10 ) to:printf_number_buffer::@2 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@17 printf_number_buffer::@2 printf_number_buffer::format_justify_left#13 = phi( printf_number_buffer::@17/printf_number_buffer::format_justify_left#15, printf_number_buffer::@2/printf_number_buffer::format_justify_left#16 ) printf_number_buffer::buffer_digits#8 = phi( printf_number_buffer::@17/printf_number_buffer::buffer_digits#9, printf_number_buffer::@2/printf_number_buffer::buffer_digits#10 ) printf_number_buffer::format_upper_case#3 = phi( printf_number_buffer::@17/printf_number_buffer::format_upper_case#4, printf_number_buffer::@2/printf_number_buffer::format_upper_case#5 ) printf_number_buffer::padding#5 = phi( printf_number_buffer::@17/printf_number_buffer::padding#9, printf_number_buffer::@2/printf_number_buffer::padding#10 ) printf_number_buffer::format_zero_padding#2 = phi( printf_number_buffer::@17/printf_number_buffer::format_zero_padding#7, printf_number_buffer::@2/printf_number_buffer::format_zero_padding#8 ) printf_number_buffer::$9 = printf_number_buffer::format_zero_padding#2 && printf_number_buffer::padding#5 printf_number_buffer::$10 = ! printf_number_buffer::$9 if(printf_number_buffer::$10) goto printf_number_buffer::@4 to:printf_number_buffer::@10 printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::format_justify_left#19 = phi( printf_number_buffer::@2/printf_number_buffer::format_justify_left#16 ) printf_number_buffer::buffer_digits#14 = phi( printf_number_buffer::@2/printf_number_buffer::buffer_digits#10 ) printf_number_buffer::format_upper_case#9 = phi( printf_number_buffer::@2/printf_number_buffer::format_upper_case#5 ) printf_number_buffer::padding#13 = phi( printf_number_buffer::@2/printf_number_buffer::padding#10 ) printf_number_buffer::format_zero_padding#13 = phi( printf_number_buffer::@2/printf_number_buffer::format_zero_padding#8 ) printf_number_buffer::buffer_sign#3 = phi( printf_number_buffer::@2/printf_number_buffer::buffer_sign#2 ) cputc::c#2 = printf_number_buffer::buffer_sign#3 call cputc to:printf_number_buffer::@17 printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@9 printf_number_buffer::format_justify_left#15 = phi( printf_number_buffer::@9/printf_number_buffer::format_justify_left#19 ) printf_number_buffer::buffer_digits#9 = phi( printf_number_buffer::@9/printf_number_buffer::buffer_digits#14 ) printf_number_buffer::format_upper_case#4 = phi( printf_number_buffer::@9/printf_number_buffer::format_upper_case#9 ) printf_number_buffer::padding#9 = phi( printf_number_buffer::@9/printf_number_buffer::padding#13 ) printf_number_buffer::format_zero_padding#7 = phi( printf_number_buffer::@9/printf_number_buffer::format_zero_padding#13 ) to:printf_number_buffer::@3 printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@18 printf_number_buffer::@3 printf_number_buffer::padding#15 = phi( printf_number_buffer::@18/printf_number_buffer::padding#16, printf_number_buffer::@3/printf_number_buffer::padding#5 ) printf_number_buffer::format_justify_left#10 = phi( printf_number_buffer::@18/printf_number_buffer::format_justify_left#12, printf_number_buffer::@3/printf_number_buffer::format_justify_left#13 ) printf_number_buffer::format_zero_padding#15 = phi( printf_number_buffer::@18/printf_number_buffer::format_zero_padding#18, printf_number_buffer::@3/printf_number_buffer::format_zero_padding#2 ) printf_number_buffer::buffer_digits#6 = phi( printf_number_buffer::@18/printf_number_buffer::buffer_digits#7, printf_number_buffer::@3/printf_number_buffer::buffer_digits#8 ) printf_number_buffer::format_upper_case#1 = phi( printf_number_buffer::@18/printf_number_buffer::format_upper_case#2, printf_number_buffer::@3/printf_number_buffer::format_upper_case#3 ) printf_number_buffer::$31 = 0 != printf_number_buffer::format_upper_case#1 printf_number_buffer::$12 = ! printf_number_buffer::$31 if(printf_number_buffer::$12) goto printf_number_buffer::@5 to:printf_number_buffer::@11 printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@3 printf_number_buffer::format_justify_left#17 = phi( printf_number_buffer::@3/printf_number_buffer::format_justify_left#13 ) printf_number_buffer::format_zero_padding#20 = phi( printf_number_buffer::@3/printf_number_buffer::format_zero_padding#2 ) printf_number_buffer::buffer_digits#11 = phi( printf_number_buffer::@3/printf_number_buffer::buffer_digits#8 ) printf_number_buffer::format_upper_case#6 = phi( printf_number_buffer::@3/printf_number_buffer::format_upper_case#3 ) printf_number_buffer::padding#6 = phi( printf_number_buffer::@3/printf_number_buffer::padding#5 ) printf_padding::pad#1 = '0' printf_padding::length#1 = (byte)printf_number_buffer::padding#6 call printf_padding to:printf_number_buffer::@18 printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::padding#16 = phi( printf_number_buffer::@10/printf_number_buffer::padding#6 ) printf_number_buffer::format_justify_left#12 = phi( printf_number_buffer::@10/printf_number_buffer::format_justify_left#17 ) printf_number_buffer::format_zero_padding#18 = phi( printf_number_buffer::@10/printf_number_buffer::format_zero_padding#20 ) printf_number_buffer::buffer_digits#7 = phi( printf_number_buffer::@10/printf_number_buffer::buffer_digits#11 ) printf_number_buffer::format_upper_case#2 = phi( printf_number_buffer::@10/printf_number_buffer::format_upper_case#6 ) to:printf_number_buffer::@4 printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@20 printf_number_buffer::@4 printf_number_buffer::padding#11 = phi( printf_number_buffer::@20/printf_number_buffer::padding#14, printf_number_buffer::@4/printf_number_buffer::padding#15 ) printf_number_buffer::format_justify_left#6 = phi( printf_number_buffer::@20/printf_number_buffer::format_justify_left#9, printf_number_buffer::@4/printf_number_buffer::format_justify_left#10 ) printf_number_buffer::format_zero_padding#9 = phi( printf_number_buffer::@20/printf_number_buffer::format_zero_padding#14, printf_number_buffer::@4/printf_number_buffer::format_zero_padding#15 ) printf_number_buffer::buffer_digits#2 = phi( printf_number_buffer::@20/printf_number_buffer::buffer_digits#5, printf_number_buffer::@4/printf_number_buffer::buffer_digits#6 ) cputs::s#1 = printf_number_buffer::buffer_digits#2 call cputs to:printf_number_buffer::@19 printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@5 printf_number_buffer::padding#7 = phi( printf_number_buffer::@5/printf_number_buffer::padding#11 ) printf_number_buffer::format_justify_left#2 = phi( printf_number_buffer::@5/printf_number_buffer::format_justify_left#6 ) printf_number_buffer::format_zero_padding#3 = phi( printf_number_buffer::@5/printf_number_buffer::format_zero_padding#9 ) printf_number_buffer::$32 = 0 != printf_number_buffer::format_zero_padding#3 printf_number_buffer::$14 = ! printf_number_buffer::$32 printf_number_buffer::$15 = printf_number_buffer::format_justify_left#2 && printf_number_buffer::$14 printf_number_buffer::$16 = printf_number_buffer::$15 && printf_number_buffer::padding#7 printf_number_buffer::$17 = ! printf_number_buffer::$16 if(printf_number_buffer::$17) goto printf_number_buffer::@return to:printf_number_buffer::@12 printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 printf_number_buffer::padding#17 = phi( printf_number_buffer::@4/printf_number_buffer::padding#15 ) printf_number_buffer::format_justify_left#14 = phi( printf_number_buffer::@4/printf_number_buffer::format_justify_left#10 ) printf_number_buffer::format_zero_padding#19 = phi( printf_number_buffer::@4/printf_number_buffer::format_zero_padding#15 ) printf_number_buffer::buffer_digits#3 = phi( printf_number_buffer::@4/printf_number_buffer::buffer_digits#6 ) strupr::str#0 = printf_number_buffer::buffer_digits#3 call strupr strupr::return#2 = strupr::return#1 to:printf_number_buffer::@20 printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::padding#14 = phi( printf_number_buffer::@11/printf_number_buffer::padding#17 ) printf_number_buffer::format_justify_left#9 = phi( printf_number_buffer::@11/printf_number_buffer::format_justify_left#14 ) printf_number_buffer::format_zero_padding#14 = phi( printf_number_buffer::@11/printf_number_buffer::format_zero_padding#19 ) printf_number_buffer::buffer_digits#5 = phi( printf_number_buffer::@11/printf_number_buffer::buffer_digits#3 ) to:printf_number_buffer::@5 printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 printf_number_buffer::padding#8 = phi( printf_number_buffer::@19/printf_number_buffer::padding#7 ) printf_padding::pad#2 = ' ' printf_padding::length#2 = (byte)printf_number_buffer::padding#8 call printf_padding to:printf_number_buffer::@21 printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@12 to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@19 printf_number_buffer::@21 return to:@return void test_casting(signed word test_casting::signed_short_value) test_casting: scope:[test_casting] from main::@2 test_casting::signed_short_value#1 = phi( main::@2/test_casting::signed_short_value#0 ) printf_sint::value#1 = test_casting::signed_short_value#1 printf_sint::format_min_length#0 = 0 printf_sint::format_justify_left#0 = 0 printf_sint::format_sign_always#0 = 0 printf_sint::format_zero_padding#0 = 0 printf_sint::format_upper_case#0 = 0 printf_sint::format_radix#0 = DECIMAL call printf_sint to:test_casting::@1 test_casting::@1: scope:[test_casting] from test_casting cputs::s#2 = test_casting::s call cputs to:test_casting::@2 test_casting::@2: scope:[test_casting] from test_casting::@1 to:test_casting::@return test_casting::@return: scope:[test_casting] from test_casting::@2 return to:@return void main() main: scope:[main] from __start::@1 call clrscr to:main::@3 main::@3: scope:[main] from main main::signed_char_value#0 = -5 to:main::@1 main::@1: scope:[main] from main::@3 main::@4 main::signed_char_value#2 = phi( main::@3/main::signed_char_value#0, main::@4/main::signed_char_value#4 ) main::$1 = main::signed_char_value#2 != 0 if(main::$1) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 main::signed_char_value#3 = phi( main::@1/main::signed_char_value#2 ) main::signed_char_value#1 = ++ main::signed_char_value#3 test_casting::signed_short_value#0 = main::signed_char_value#1 call test_casting to:main::@4 main::@4: scope:[main] from main::@2 main::signed_char_value#4 = phi( main::@2/main::signed_char_value#1 ) to:main::@1 main::@return: scope:[main] from main::@1 return to:@return void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start conio_cursor_x = 0 conio_cursor_y = 0 conio_line_text = CONIO_SCREEN_TEXT conio_line_color = CONIO_SCREEN_COLORS conio_textcolor = CONIO_TEXTCOLOR_DEFAULT conio_scroll_enable = 1 call conio_c64_init to:__start::@2 __start::@2: scope:[__start] from __start::__init1 to:__start::@1 __start::@1: scope:[__start] from __start::@2 call main to:__start::@3 __start::@3: scope:[__start] from __start::@1 to:__start::@return __start::@return: scope:[__start] from __start::@3 return to:@return SYMBOL TABLE SSA constant byte BINARY = 2 constant byte* const COLORRAM = (byte*)$d800 constant byte* const CONIO_SCREEN_COLORS = COLORRAM constant byte* const CONIO_SCREEN_TEXT = DEFAULT_SCREEN constant const byte CONIO_TEXTCOLOR_DEFAULT = LIGHT_BLUE constant byte DECIMAL = $a constant byte* const DEFAULT_SCREEN = (byte*)$400 constant byte* DIGITS[] = "0123456789abcdef"z constant byte HEXADECIMAL = $10 constant const byte LIGHT_BLUE = $e constant byte OCTAL = 8 constant byte OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 constant byte OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN = 0 constant byte RADIX::BINARY = 2 constant byte RADIX::DECIMAL = $a constant byte RADIX::HEXADECIMAL = $10 constant byte RADIX::OCTAL = 8 constant word* RADIX_BINARY_VALUES[] = { $8000, $4000, $2000, $1000, $800, $400, $200, $100, $80, $40, $20, $10, 8, 4, 2 } constant word* RADIX_DECIMAL_VALUES[] = { $2710, $3e8, $64, $a } constant word* RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } constant word* RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } constant byte SIZEOF_WORD = 2 void __start() void clrscr() bool~ clrscr::$0 bool~ clrscr::$1 byte clrscr::c byte clrscr::c#0 byte clrscr::c#1 byte clrscr::c#2 byte clrscr::c#3 byte clrscr::l byte clrscr::l#0 byte clrscr::l#1 byte clrscr::l#2 byte clrscr::l#3 byte clrscr::l#4 byte clrscr::l#5 byte clrscr::l#6 byte* clrscr::line_cols byte* clrscr::line_cols#0 byte* clrscr::line_cols#1 byte* clrscr::line_cols#2 byte* clrscr::line_cols#3 byte* clrscr::line_cols#4 byte* clrscr::line_cols#5 byte* clrscr::line_cols#6 byte* clrscr::line_text byte* clrscr::line_text#0 byte* clrscr::line_text#1 byte* clrscr::line_text#2 byte* clrscr::line_text#3 byte* clrscr::line_text#4 byte* clrscr::line_text#5 byte* clrscr::line_text#6 void conio_c64_init() bool~ conio_c64_init::$0 bool~ conio_c64_init::$1 constant byte* const conio_c64_init::BASIC_CURSOR_LINE = (byte*)$d6 byte conio_c64_init::line byte conio_c64_init::line#0 byte conio_c64_init::line#1 byte conio_c64_init::line#2 byte conio_cursor_x loadstore byte conio_cursor_y loadstore byte* conio_line_color loadstore byte* conio_line_text loadstore byte conio_scroll_enable loadstore byte conio_textcolor loadstore void cputc(byte cputc::c) bool~ cputc::$0 bool~ cputc::$1 bool~ cputc::$2 byte cputc::c byte cputc::c#0 byte cputc::c#1 byte cputc::c#2 byte cputc::c#3 byte cputc::c#4 void cputln() void cputs(const byte* cputs::s) byte~ cputs::$0 bool~ cputs::$2 byte cputs::c byte cputs::c#0 byte cputs::c#1 byte cputs::c#2 const byte* cputs::s const byte* cputs::s#0 const byte* cputs::s#1 const byte* cputs::s#2 const byte* cputs::s#3 const byte* cputs::s#4 const byte* cputs::s#5 const byte* cputs::s#6 void cscroll() bool~ cscroll::$0 bool~ cscroll::$1 bool~ cscroll::$7 void gotoxy(byte gotoxy::x , byte gotoxy::y) bool~ gotoxy::$0 bool~ gotoxy::$1 bool~ gotoxy::$2 bool~ gotoxy::$3 number~ gotoxy::$4 byte*~ gotoxy::$5 byte*~ gotoxy::$6 word~ gotoxy::$7 word gotoxy::line_offset word gotoxy::line_offset#0 byte gotoxy::x byte gotoxy::x#0 byte gotoxy::x#1 byte gotoxy::x#2 byte gotoxy::x#3 byte gotoxy::x#4 byte gotoxy::x#5 byte gotoxy::x#6 byte gotoxy::y byte gotoxy::y#0 byte gotoxy::y#1 byte gotoxy::y#2 byte gotoxy::y#3 byte gotoxy::y#4 byte gotoxy::y#5 byte gotoxy::y#6 void main() bool~ main::$1 signed byte main::signed_char_value signed byte main::signed_char_value#0 signed byte main::signed_char_value#1 signed byte main::signed_char_value#2 signed byte main::signed_char_value#3 signed byte main::signed_char_value#4 void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) byte*~ memcpy::$0 bool~ memcpy::$1 byte*~ memcpy::$2 void* memcpy::destination void* memcpy::destination#0 void* memcpy::destination#1 void* memcpy::destination#2 void* memcpy::destination#3 void* memcpy::destination#4 void* memcpy::destination#5 byte* memcpy::dst byte* memcpy::dst#0 byte* memcpy::dst#1 byte* memcpy::dst#2 byte* memcpy::dst#3 word memcpy::num word memcpy::num#0 word memcpy::num#1 word memcpy::num#2 void* memcpy::return void* memcpy::return#0 void* memcpy::return#1 void* memcpy::return#2 void* memcpy::return#3 void* memcpy::return#4 void* memcpy::source void* memcpy::source#0 void* memcpy::source#1 void* memcpy::source#2 byte* memcpy::src byte* memcpy::src#0 byte* memcpy::src#1 byte* memcpy::src#2 byte* memcpy::src#3 byte* memcpy::src_end byte* memcpy::src_end#0 byte* memcpy::src_end#1 byte* memcpy::src_end#2 void* memset(void* memset::str , byte memset::c , word memset::num) bool~ memset::$0 bool~ memset::$1 byte*~ memset::$2 bool~ memset::$3 byte*~ memset::$4 byte memset::c byte memset::c#0 byte memset::c#1 byte memset::c#2 byte memset::c#3 byte memset::c#4 byte memset::c#5 byte* memset::dst byte* memset::dst#0 byte* memset::dst#1 byte* memset::dst#2 byte* memset::dst#3 byte* memset::end byte* memset::end#0 byte* memset::end#1 byte* memset::end#2 word memset::num word memset::num#0 word memset::num#1 word memset::num#2 word memset::num#3 void* memset::return void* memset::return#0 void* memset::return#1 void* memset::return#2 void* memset::return#3 void* memset::return#4 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* memset::str#6 struct printf_buffer_number printf_buffer loadstore = {} void printf_number_buffer(byte printf_number_buffer::buffer_sign , byte* printf_number_buffer::buffer_digits , byte printf_number_buffer::format_min_length , byte printf_number_buffer::format_justify_left , byte printf_number_buffer::format_sign_always , byte printf_number_buffer::format_zero_padding , byte printf_number_buffer::format_upper_case , byte printf_number_buffer::format_radix) bool~ printf_number_buffer::$0 bool~ printf_number_buffer::$1 bool~ printf_number_buffer::$10 bool~ printf_number_buffer::$12 bool~ printf_number_buffer::$14 bool~ printf_number_buffer::$15 bool~ printf_number_buffer::$16 bool~ printf_number_buffer::$17 word~ printf_number_buffer::$19 bool~ printf_number_buffer::$2 bool~ printf_number_buffer::$20 signed byte~ printf_number_buffer::$21 bool~ printf_number_buffer::$22 bool~ printf_number_buffer::$23 signed byte~ printf_number_buffer::$25 bool~ printf_number_buffer::$26 bool~ printf_number_buffer::$27 bool~ printf_number_buffer::$28 bool~ printf_number_buffer::$29 bool~ printf_number_buffer::$3 bool~ printf_number_buffer::$30 bool~ printf_number_buffer::$31 bool~ printf_number_buffer::$32 bool~ printf_number_buffer::$4 bool~ printf_number_buffer::$5 bool~ printf_number_buffer::$7 bool~ printf_number_buffer::$9 struct printf_buffer_number printf_number_buffer::buffer byte* printf_number_buffer::buffer_digits byte* printf_number_buffer::buffer_digits#0 byte* printf_number_buffer::buffer_digits#1 byte* printf_number_buffer::buffer_digits#10 byte* printf_number_buffer::buffer_digits#11 byte* printf_number_buffer::buffer_digits#12 byte* printf_number_buffer::buffer_digits#13 byte* printf_number_buffer::buffer_digits#14 byte* printf_number_buffer::buffer_digits#15 byte* printf_number_buffer::buffer_digits#16 byte* printf_number_buffer::buffer_digits#17 byte* printf_number_buffer::buffer_digits#18 byte* printf_number_buffer::buffer_digits#19 byte* printf_number_buffer::buffer_digits#2 byte* printf_number_buffer::buffer_digits#3 byte* printf_number_buffer::buffer_digits#4 byte* printf_number_buffer::buffer_digits#5 byte* printf_number_buffer::buffer_digits#6 byte* printf_number_buffer::buffer_digits#7 byte* printf_number_buffer::buffer_digits#8 byte* printf_number_buffer::buffer_digits#9 byte printf_number_buffer::buffer_sign byte printf_number_buffer::buffer_sign#0 byte printf_number_buffer::buffer_sign#1 byte printf_number_buffer::buffer_sign#10 byte printf_number_buffer::buffer_sign#11 byte printf_number_buffer::buffer_sign#2 byte printf_number_buffer::buffer_sign#3 byte printf_number_buffer::buffer_sign#4 byte printf_number_buffer::buffer_sign#5 byte printf_number_buffer::buffer_sign#6 byte printf_number_buffer::buffer_sign#7 byte printf_number_buffer::buffer_sign#8 byte printf_number_buffer::buffer_sign#9 struct printf_format_number printf_number_buffer::format byte printf_number_buffer::format_justify_left byte printf_number_buffer::format_justify_left#0 byte printf_number_buffer::format_justify_left#1 byte printf_number_buffer::format_justify_left#10 byte printf_number_buffer::format_justify_left#11 byte printf_number_buffer::format_justify_left#12 byte printf_number_buffer::format_justify_left#13 byte printf_number_buffer::format_justify_left#14 byte printf_number_buffer::format_justify_left#15 byte printf_number_buffer::format_justify_left#16 byte printf_number_buffer::format_justify_left#17 byte printf_number_buffer::format_justify_left#18 byte printf_number_buffer::format_justify_left#19 byte printf_number_buffer::format_justify_left#2 byte printf_number_buffer::format_justify_left#20 byte printf_number_buffer::format_justify_left#3 byte printf_number_buffer::format_justify_left#4 byte printf_number_buffer::format_justify_left#5 byte printf_number_buffer::format_justify_left#6 byte printf_number_buffer::format_justify_left#7 byte printf_number_buffer::format_justify_left#8 byte printf_number_buffer::format_justify_left#9 byte printf_number_buffer::format_min_length byte printf_number_buffer::format_min_length#0 byte printf_number_buffer::format_min_length#1 byte printf_number_buffer::format_min_length#2 byte printf_number_buffer::format_min_length#3 byte printf_number_buffer::format_min_length#4 byte printf_number_buffer::format_min_length#5 byte printf_number_buffer::format_radix byte printf_number_buffer::format_radix#0 byte printf_number_buffer::format_sign_always byte printf_number_buffer::format_sign_always#0 byte printf_number_buffer::format_upper_case byte printf_number_buffer::format_upper_case#0 byte printf_number_buffer::format_upper_case#1 byte printf_number_buffer::format_upper_case#10 byte printf_number_buffer::format_upper_case#11 byte printf_number_buffer::format_upper_case#12 byte printf_number_buffer::format_upper_case#13 byte printf_number_buffer::format_upper_case#14 byte printf_number_buffer::format_upper_case#15 byte printf_number_buffer::format_upper_case#16 byte printf_number_buffer::format_upper_case#2 byte printf_number_buffer::format_upper_case#3 byte printf_number_buffer::format_upper_case#4 byte printf_number_buffer::format_upper_case#5 byte printf_number_buffer::format_upper_case#6 byte printf_number_buffer::format_upper_case#7 byte printf_number_buffer::format_upper_case#8 byte printf_number_buffer::format_upper_case#9 byte printf_number_buffer::format_zero_padding byte printf_number_buffer::format_zero_padding#0 byte printf_number_buffer::format_zero_padding#1 byte printf_number_buffer::format_zero_padding#10 byte printf_number_buffer::format_zero_padding#11 byte printf_number_buffer::format_zero_padding#12 byte printf_number_buffer::format_zero_padding#13 byte printf_number_buffer::format_zero_padding#14 byte printf_number_buffer::format_zero_padding#15 byte printf_number_buffer::format_zero_padding#16 byte printf_number_buffer::format_zero_padding#17 byte printf_number_buffer::format_zero_padding#18 byte printf_number_buffer::format_zero_padding#19 byte printf_number_buffer::format_zero_padding#2 byte printf_number_buffer::format_zero_padding#20 byte printf_number_buffer::format_zero_padding#3 byte printf_number_buffer::format_zero_padding#4 byte printf_number_buffer::format_zero_padding#5 byte printf_number_buffer::format_zero_padding#6 byte printf_number_buffer::format_zero_padding#7 byte printf_number_buffer::format_zero_padding#8 byte printf_number_buffer::format_zero_padding#9 signed byte printf_number_buffer::len signed byte printf_number_buffer::len#0 signed byte printf_number_buffer::len#1 signed byte printf_number_buffer::len#2 signed byte printf_number_buffer::len#3 signed byte printf_number_buffer::padding signed byte printf_number_buffer::padding#0 signed byte printf_number_buffer::padding#1 signed byte printf_number_buffer::padding#10 signed byte printf_number_buffer::padding#11 signed byte printf_number_buffer::padding#12 signed byte printf_number_buffer::padding#13 signed byte printf_number_buffer::padding#14 signed byte printf_number_buffer::padding#15 signed byte printf_number_buffer::padding#16 signed byte printf_number_buffer::padding#17 signed byte printf_number_buffer::padding#2 signed byte printf_number_buffer::padding#3 signed byte printf_number_buffer::padding#4 signed byte printf_number_buffer::padding#5 signed byte printf_number_buffer::padding#6 signed byte printf_number_buffer::padding#7 signed byte printf_number_buffer::padding#8 signed byte printf_number_buffer::padding#9 void printf_padding(byte printf_padding::pad , byte printf_padding::length) bool~ printf_padding::$0 byte printf_padding::i byte printf_padding::i#0 byte printf_padding::i#1 byte printf_padding::i#2 byte printf_padding::i#3 byte printf_padding::i#4 byte printf_padding::length byte printf_padding::length#0 byte printf_padding::length#1 byte printf_padding::length#2 byte printf_padding::length#3 byte printf_padding::length#4 byte printf_padding::length#5 byte printf_padding::length#6 byte printf_padding::pad byte printf_padding::pad#0 byte printf_padding::pad#1 byte printf_padding::pad#2 byte printf_padding::pad#3 byte printf_padding::pad#4 byte printf_padding::pad#5 byte printf_padding::pad#6 void printf_sint(signed word printf_sint::value , byte printf_sint::format_min_length , byte printf_sint::format_justify_left , byte printf_sint::format_sign_always , byte printf_sint::format_zero_padding , byte printf_sint::format_upper_case , byte printf_sint::format_radix) bool~ printf_sint::$0 bool~ printf_sint::$3 signed word~ printf_sint::$4 bool~ printf_sint::$5 struct printf_format_number printf_sint::format byte printf_sint::format_justify_left byte printf_sint::format_justify_left#0 byte printf_sint::format_justify_left#1 byte printf_sint::format_justify_left#2 byte printf_sint::format_justify_left#3 byte printf_sint::format_justify_left#4 byte printf_sint::format_justify_left#5 byte printf_sint::format_justify_left#6 byte printf_sint::format_min_length byte printf_sint::format_min_length#0 byte printf_sint::format_min_length#1 byte printf_sint::format_min_length#2 byte printf_sint::format_min_length#3 byte printf_sint::format_min_length#4 byte printf_sint::format_min_length#5 byte printf_sint::format_min_length#6 byte printf_sint::format_radix byte printf_sint::format_radix#0 byte printf_sint::format_radix#1 byte printf_sint::format_radix#2 byte printf_sint::format_radix#3 byte printf_sint::format_radix#4 byte printf_sint::format_radix#5 byte printf_sint::format_radix#6 byte printf_sint::format_sign_always byte printf_sint::format_sign_always#0 byte printf_sint::format_sign_always#1 byte printf_sint::format_sign_always#2 byte printf_sint::format_sign_always#3 byte printf_sint::format_sign_always#4 byte printf_sint::format_sign_always#5 byte printf_sint::format_sign_always#6 byte printf_sint::format_upper_case byte printf_sint::format_upper_case#0 byte printf_sint::format_upper_case#1 byte printf_sint::format_upper_case#2 byte printf_sint::format_upper_case#3 byte printf_sint::format_upper_case#4 byte printf_sint::format_upper_case#5 byte printf_sint::format_upper_case#6 byte printf_sint::format_zero_padding byte printf_sint::format_zero_padding#0 byte printf_sint::format_zero_padding#1 byte printf_sint::format_zero_padding#2 byte printf_sint::format_zero_padding#3 byte printf_sint::format_zero_padding#4 byte printf_sint::format_zero_padding#5 byte printf_sint::format_zero_padding#6 word printf_sint::uvalue word printf_sint::uvalue#0 signed word printf_sint::value signed word printf_sint::value#0 signed word printf_sint::value#1 signed word printf_sint::value#2 signed word printf_sint::value#3 signed word printf_sint::value#4 signed word printf_sint::value#5 signed word printf_sint::value#6 word strlen(byte* strlen::str) bool~ strlen::$0 word strlen::len word strlen::len#0 word strlen::len#1 word strlen::len#2 word strlen::len#3 word strlen::len#4 word strlen::return word strlen::return#0 word strlen::return#1 word strlen::return#2 word strlen::return#3 word strlen::return#4 byte* strlen::str byte* strlen::str#0 byte* strlen::str#1 byte* strlen::str#2 byte* strlen::str#3 byte* strlen::str#4 byte* strupr(byte* strupr::str) byte~ strupr::$0 bool~ strupr::$1 byte* strupr::return byte* strupr::return#0 byte* strupr::return#1 byte* strupr::return#2 byte* strupr::return#3 byte* strupr::src byte* strupr::src#0 byte* strupr::src#1 byte* strupr::src#2 byte* strupr::src#3 byte* strupr::src#4 byte* strupr::str byte* strupr::str#0 byte* strupr::str#1 byte* strupr::str#2 byte* strupr::str#3 byte* strupr::str#4 byte* strupr::str#5 void test_casting(signed word test_casting::signed_short_value) constant byte* test_casting::s[2] = " " signed word test_casting::signed_short_value signed word test_casting::signed_short_value#0 signed word test_casting::signed_short_value#1 byte toupper(byte toupper::ch) bool~ toupper::$0 bool~ toupper::$1 bool~ toupper::$2 byte~ toupper::$3 byte toupper::ch byte toupper::ch#0 byte toupper::ch#1 byte toupper::ch#2 byte toupper::ch#3 byte toupper::return byte toupper::return#0 byte toupper::return#1 byte toupper::return#2 byte toupper::return#3 byte toupper::return#4 byte toupper::return#5 void utoa(word utoa::value , byte* utoa::buffer , byte utoa::radix) bool~ utoa::$0 bool~ utoa::$1 byte~ utoa::$10 byte~ utoa::$11 bool~ utoa::$2 bool~ utoa::$3 number~ utoa::$4 bool~ utoa::$5 bool~ utoa::$6 bool~ utoa::$7 bool~ utoa::$8 word~ utoa::$9 byte* utoa::buffer byte* utoa::buffer#0 byte* utoa::buffer#1 byte* utoa::buffer#10 byte* utoa::buffer#11 byte* utoa::buffer#12 byte* utoa::buffer#13 byte* utoa::buffer#14 byte* utoa::buffer#15 byte* utoa::buffer#16 byte* utoa::buffer#17 byte* utoa::buffer#18 byte* utoa::buffer#19 byte* utoa::buffer#2 byte* utoa::buffer#20 byte* utoa::buffer#21 byte* utoa::buffer#3 byte* utoa::buffer#4 byte* utoa::buffer#5 byte* utoa::buffer#6 byte* utoa::buffer#7 byte* utoa::buffer#8 byte* utoa::buffer#9 byte utoa::digit byte utoa::digit#0 byte utoa::digit#1 byte utoa::digit#2 byte utoa::digit#3 byte utoa::digit#4 byte utoa::digit#5 byte utoa::digit#6 word utoa::digit_value word utoa::digit_value#0 word utoa::digit_value#1 word* utoa::digit_values word* utoa::digit_values#0 word* utoa::digit_values#1 word* utoa::digit_values#10 word* utoa::digit_values#2 word* utoa::digit_values#3 word* utoa::digit_values#4 word* utoa::digit_values#5 word* utoa::digit_values#6 word* utoa::digit_values#7 word* utoa::digit_values#8 word* utoa::digit_values#9 byte utoa::max_digits byte utoa::max_digits#0 byte utoa::max_digits#1 byte utoa::max_digits#10 byte utoa::max_digits#2 byte utoa::max_digits#3 byte utoa::max_digits#4 byte utoa::max_digits#5 byte utoa::max_digits#6 byte utoa::max_digits#7 byte utoa::max_digits#8 byte utoa::max_digits#9 byte utoa::radix byte utoa::radix#0 byte utoa::radix#1 byte utoa::radix#2 byte utoa::radix#3 byte utoa::radix#4 byte utoa::started byte utoa::started#0 byte utoa::started#1 byte utoa::started#2 byte utoa::started#3 byte utoa::started#4 word utoa::value word utoa::value#0 word utoa::value#1 word utoa::value#10 word utoa::value#11 word utoa::value#12 word utoa::value#13 word utoa::value#14 word utoa::value#15 word utoa::value#2 word utoa::value#3 word utoa::value#4 word utoa::value#5 word utoa::value#6 word utoa::value#7 word utoa::value#8 word utoa::value#9 word utoa_append(byte* utoa_append::buffer , word utoa_append::value , word utoa_append::sub) bool~ utoa_append::$0 byte* utoa_append::buffer byte* utoa_append::buffer#0 byte* utoa_append::buffer#1 byte* utoa_append::buffer#2 byte* utoa_append::buffer#3 byte* utoa_append::buffer#4 byte utoa_append::digit byte utoa_append::digit#0 byte utoa_append::digit#1 byte utoa_append::digit#2 byte utoa_append::digit#3 byte utoa_append::digit#4 word utoa_append::return word utoa_append::return#0 word utoa_append::return#1 word utoa_append::return#2 word utoa_append::return#3 word utoa_append::return#4 word utoa_append::sub word utoa_append::sub#0 word utoa_append::sub#1 word utoa_append::sub#2 word utoa_append::sub#3 word utoa_append::value word utoa_append::value#0 word utoa_append::value#1 word utoa_append::value#2 word utoa_append::value#3 word utoa_append::value#4 word utoa_append::value#5 Adding number conversion cast (unumber) $19 in clrscr::$0 = clrscr::l#2 < $19 Adding number conversion cast (unumber) 0 in conio_cursor_x = 0 Adding number conversion cast (unumber) 0 in conio_cursor_y = 0 Adding number conversion cast (unumber) $28 in clrscr::$1 = clrscr::c#2 < $28 Adding number conversion cast (unumber) $28 in clrscr::line_text#1 = clrscr::line_text#3 + $28 Adding number conversion cast (unumber) $28 in clrscr::line_cols#1 = clrscr::line_cols#3 + $28 Adding number conversion cast (unumber) $19 in gotoxy::$0 = gotoxy::y#3 > $19 Adding number conversion cast (unumber) $28 in gotoxy::$2 = gotoxy::x#3 >= $28 Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 Adding number conversion cast (unumber) $28 in gotoxy::$4 = gotoxy::$7 * $28 Adding number conversion cast (unumber) gotoxy::$4 in gotoxy::$4 = gotoxy::$7 * (unumber)$28 Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 Adding number conversion cast (unumber) $28 in cputc::$1 = conio_cursor_x == $28 Adding number conversion cast (unumber) $28 in conio_line_text = conio_line_text + $28 Adding number conversion cast (unumber) $28 in conio_line_color = conio_line_color + $28 Adding number conversion cast (unumber) 0 in conio_cursor_x = 0 Adding number conversion cast (unumber) 0 in cputs::$2 = 0 != cputs::$0 Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#2 > 0 Adding number conversion cast (unumber) 0 in strlen::$0 = 0 != *strlen::str#2 Adding number conversion cast (unumber) 0 in strupr::$1 = 0 != *strupr::src#2 Adding number conversion cast (unumber) $19 in cscroll::$0 = conio_cursor_y == $19 Adding number conversion cast (unumber) 0 in cscroll::$7 = 0 != conio_scroll_enable Adding number conversion cast (unumber) $28 in memcpy::source#0 = (void*)CONIO_SCREEN_TEXT+$28 Adding number conversion cast (unumber) $19*$28-$28 in memcpy::num#0 = $19*$28-$28 Adding number conversion cast (unumber) $28 in memcpy::source#1 = (void*)CONIO_SCREEN_COLORS+$28 Adding number conversion cast (unumber) $19*$28-$28 in memcpy::num#1 = $19*$28-$28 Adding number conversion cast (unumber) $28 in memset::str#0 = (void*)CONIO_SCREEN_TEXT+$19*$28-$28 Adding number conversion cast (unumber) $19*$28 in memset::str#0 = (void*)CONIO_SCREEN_TEXT+$19*$28-(unumber)$28 Adding number conversion cast (unumber) $28 in memset::num#0 = $28 Adding number conversion cast (unumber) $28 in memset::str#1 = (void*)CONIO_SCREEN_COLORS+$19*$28-$28 Adding number conversion cast (unumber) $19*$28 in memset::str#1 = (void*)CONIO_SCREEN_COLORS+$19*$28-(unumber)$28 Adding number conversion cast (unumber) $28 in memset::num#1 = $28 Adding number conversion cast (unumber) $28 in conio_line_text = conio_line_text - $28 Adding number conversion cast (unumber) $28 in conio_line_color = conio_line_color - $28 Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 Adding number conversion cast (unumber) 0 in gotoxy::y#1 = 0 Adding number conversion cast (unumber) $19 in conio_c64_init::$0 = conio_c64_init::line#0 >= $19 Adding number conversion cast (unumber) 0 in gotoxy::x#2 = 0 Adding number conversion cast (unumber) $19-1 in conio_c64_init::line#1 = $19-1 Adding number conversion cast (unumber) 5 in utoa::max_digits#1 = 5 Adding number conversion cast (unumber) 4 in utoa::max_digits#2 = 4 Adding number conversion cast (unumber) 6 in utoa::max_digits#3 = 6 Adding number conversion cast (unumber) $10 in utoa::max_digits#4 = $10 Adding number conversion cast (unumber) 0 in *utoa::buffer#2 = 0 Adding number conversion cast (unumber) 1 in utoa::$4 = utoa::max_digits#5 - 1 Adding number conversion cast (unumber) utoa::$4 in utoa::$4 = utoa::max_digits#5 - (unumber)1 Adding number conversion cast (unumber) 0 in *utoa::buffer#3 = 0 Adding number conversion cast (unumber) 1 in utoa::started#1 = 1 Adding number conversion cast (unumber) 0 in *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = 0 Adding number conversion cast (snumber) 0 in printf_sint::$0 = printf_sint::value#2 < 0 Adding number conversion cast (unumber) 0 in printf_sint::$5 = 0 != printf_sint::format_sign_always#1 Adding number conversion cast (unumber) 0 in printf_number_buffer::$26 = 0 != printf_number_buffer::format_min_length#1 Adding number conversion cast (unumber) 0 in printf_number_buffer::$27 = 0 != printf_number_buffer::format_justify_left#1 Adding number conversion cast (unumber) 0 in printf_number_buffer::$28 = 0 != printf_number_buffer::format_zero_padding#1 Adding number conversion cast (unumber) 0 in printf_number_buffer::$29 = 0 != printf_number_buffer::buffer_sign#1 Adding number conversion cast (snumber) 0 in printf_number_buffer::$22 = printf_number_buffer::padding#1 < 0 Adding number conversion cast (snumber) 0 in printf_number_buffer::padding#2 = 0 Adding number conversion cast (unumber) 0 in printf_number_buffer::$30 = 0 != printf_number_buffer::buffer_sign#2 Adding number conversion cast (unumber) 0 in printf_number_buffer::$31 = 0 != printf_number_buffer::format_upper_case#1 Adding number conversion cast (unumber) 0 in printf_number_buffer::$32 = 0 != printf_number_buffer::format_zero_padding#3 Adding number conversion cast (snumber) 0 in main::$1 = main::signed_char_value#2 != 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast conio_cursor_x = (unumber)0 Inlining cast conio_cursor_y = (unumber)0 Inlining cast gotoxy::y#0 = (unumber)0 Inlining cast gotoxy::x#0 = (unumber)0 Inlining cast conio_cursor_x = (unumber)0 Inlining cast memcpy::src#0 = (byte*)memcpy::source#2 Inlining cast memcpy::dst#0 = (byte*)memcpy::destination#2 Inlining cast memset::dst#0 = (byte*)memset::str#3 Inlining cast memcpy::num#0 = (unumber)$19*$28-$28 Inlining cast memcpy::num#1 = (unumber)$19*$28-$28 Inlining cast memset::num#0 = (unumber)$28 Inlining cast memset::num#1 = (unumber)$28 Inlining cast gotoxy::x#1 = (unumber)0 Inlining cast gotoxy::y#1 = (unumber)0 Inlining cast gotoxy::x#2 = (unumber)0 Inlining cast conio_c64_init::line#1 = (unumber)$19-1 Inlining cast utoa::max_digits#1 = (unumber)5 Inlining cast utoa::max_digits#2 = (unumber)4 Inlining cast utoa::max_digits#3 = (unumber)6 Inlining cast utoa::max_digits#4 = (unumber)$10 Inlining cast *utoa::buffer#2 = (unumber)0 Inlining cast *utoa::buffer#3 = (unumber)0 Inlining cast utoa::started#1 = (unumber)1 Inlining cast *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = (unumber)0 Inlining cast printf_number_buffer::padding#2 = (snumber)0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 214 Simplifying constant integer cast $19 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $19 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 4 Simplifying constant integer cast 6 Simplifying constant integer cast $10 Simplifying constant integer cast 0 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 integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to word in gotoxy::$4 = gotoxy::$7 * $28 Inferred type updated to byte in utoa::$4 = utoa::max_digits#5 - 1 Inversing boolean not [26] gotoxy::$1 = gotoxy::y#3 <= $19 from [25] gotoxy::$0 = gotoxy::y#3 > $19 Inversing boolean not [30] gotoxy::$3 = gotoxy::x#3 < $28 from [29] gotoxy::$2 = gotoxy::x#3 >= $28 Inversing boolean not [56] cputc::$2 = conio_cursor_x != $28 from [55] cputc::$1 = conio_cursor_x == $28 Inversing boolean not [99] memset::$1 = memset::num#2 <= 0 from [98] memset::$0 = memset::num#2 > 0 Inversing boolean not [162] cscroll::$1 = conio_cursor_y != $19 from [161] cscroll::$0 = conio_cursor_y == $19 Inversing boolean not [195] conio_c64_init::$1 = conio_c64_init::line#0 < $19 from [194] conio_c64_init::$0 = conio_c64_init::line#0 >= $19 Inversing boolean not [305] printf_sint::$3 = 0 == printf_sint::format_sign_always#1 from [304] printf_sint::$5 = 0 != printf_sint::format_sign_always#1 Inversing boolean not [329] printf_number_buffer::$0 = 0 == printf_number_buffer::format_min_length#1 from [328] printf_number_buffer::$26 = 0 != printf_number_buffer::format_min_length#1 Inversing boolean not [333] printf_number_buffer::$1 = 0 == printf_number_buffer::format_justify_left#1 from [332] printf_number_buffer::$27 = 0 != printf_number_buffer::format_justify_left#1 Inversing boolean not [335] printf_number_buffer::$2 = 0 == printf_number_buffer::format_zero_padding#1 from [334] printf_number_buffer::$28 = 0 != printf_number_buffer::format_zero_padding#1 Inversing boolean not [348] printf_number_buffer::$20 = 0 == printf_number_buffer::buffer_sign#1 from [347] printf_number_buffer::$29 = 0 != printf_number_buffer::buffer_sign#1 Inversing boolean not [355] printf_number_buffer::$23 = printf_number_buffer::padding#1 >= 0 from [354] printf_number_buffer::$22 = printf_number_buffer::padding#1 < 0 Inversing boolean not [363] printf_number_buffer::$7 = 0 == printf_number_buffer::buffer_sign#2 from [362] printf_number_buffer::$30 = 0 != printf_number_buffer::buffer_sign#2 Inversing boolean not [380] printf_number_buffer::$12 = 0 == printf_number_buffer::format_upper_case#1 from [379] printf_number_buffer::$31 = 0 != printf_number_buffer::format_upper_case#1 Inversing boolean not [392] printf_number_buffer::$14 = 0 == printf_number_buffer::format_zero_padding#3 from [391] printf_number_buffer::$32 = 0 != printf_number_buffer::format_zero_padding#3 Successful SSA optimization Pass2UnaryNotSimplification Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Alias clrscr::line_text#5 = clrscr::line_text#6 Alias clrscr::line_cols#5 = clrscr::line_cols#6 Alias clrscr::l#2 = clrscr::l#5 Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::line_text#3 Alias clrscr::c#2 = clrscr::c#3 Alias clrscr::line_cols#2 = clrscr::line_cols#4 clrscr::line_cols#3 Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 Alias gotoxy::x#5 = gotoxy::x#6 Alias gotoxy::line_offset#0 = gotoxy::$4 Alias gotoxy::y#5 = gotoxy::y#6 Alias cputc::c#3 = cputc::c#4 Alias cputs::c#1 = cputs::$0 cputs::c#2 Alias cputs::s#0 = cputs::s#6 cputs::s#5 Alias memcpy::src_end#0 = memcpy::$0 Alias memcpy::src#2 = memcpy::src#3 Alias memcpy::dst#2 = memcpy::dst#3 Alias memcpy::src_end#1 = memcpy::src_end#2 Alias memcpy::destination#3 = memcpy::destination#5 memcpy::destination#4 memcpy::return#0 memcpy::return#4 memcpy::return#1 Alias memset::return#0 = memset::str#2 memset::return#4 memset::return#1 Alias memset::str#3 = memset::str#4 Alias memset::num#2 = memset::num#3 Alias memset::c#4 = memset::c#5 Alias memset::end#0 = memset::$2 Alias memset::c#2 = memset::c#3 Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#5 = memset::str#6 Alias strlen::len#2 = strlen::len#4 strlen::len#3 strlen::return#0 strlen::return#3 strlen::return#1 Alias strlen::str#2 = strlen::str#3 Alias toupper::ch#1 = toupper::ch#2 toupper::ch#3 toupper::return#1 Alias toupper::return#0 = toupper::$3 Alias toupper::return#2 = toupper::return#4 Alias strupr::src#0 = strupr::str#1 Alias strupr::src#2 = strupr::src#3 strupr::src#4 Alias strupr::str#2 = strupr::str#5 strupr::str#3 strupr::str#4 strupr::return#0 strupr::return#3 strupr::return#1 Alias toupper::return#3 = toupper::return#5 Alias utoa::value#10 = utoa::value#8 utoa::value#12 utoa::value#13 utoa::value#9 utoa::value#14 utoa::value#15 utoa::value#11 Alias utoa::buffer#10 = utoa::buffer#17 utoa::buffer#21 utoa::buffer#16 utoa::buffer#18 utoa::buffer#13 utoa::buffer#19 utoa::buffer#20 utoa::buffer#6 Alias utoa::radix#1 = utoa::radix#2 utoa::radix#3 utoa::radix#4 Alias utoa::digit#2 = utoa::digit#3 utoa::digit#6 utoa::digit#5 Alias utoa::digit_values#10 = utoa::digit_values#5 utoa::digit_values#6 utoa::digit_values#9 Alias utoa::value#2 = utoa::value#5 utoa::value#3 utoa::value#4 Alias utoa::started#2 = utoa::started#3 Alias utoa::buffer#11 = utoa::buffer#12 utoa::buffer#7 utoa::buffer#8 utoa::buffer#9 Alias utoa::max_digits#10 = utoa::max_digits#8 utoa::max_digits#5 utoa::max_digits#9 Alias utoa::digit_value#0 = utoa::digit_value#1 Alias utoa_append::return#0 = utoa_append::return#3 Alias utoa::value#0 = utoa::$9 Alias utoa_append::digit#2 = utoa_append::digit#4 utoa_append::digit#3 Alias utoa_append::value#2 = utoa_append::value#3 utoa_append::value#4 utoa_append::return#1 utoa_append::return#4 utoa_append::return#2 Alias utoa_append::sub#1 = utoa_append::sub#2 Alias utoa_append::buffer#1 = utoa_append::buffer#4 utoa_append::buffer#2 Alias printf_padding::pad#3 = printf_padding::pad#4 printf_padding::pad#6 Alias printf_padding::i#2 = printf_padding::i#4 printf_padding::i#3 Alias printf_padding::length#3 = printf_padding::length#6 printf_padding::length#5 Alias printf_sint::value#2 = printf_sint::value#3 printf_sint::value#5 printf_sint::value#6 Alias printf_sint::format_radix#3 = printf_sint::format_radix#6 printf_sint::format_radix#4 printf_sint::format_radix#5 Alias printf_sint::format_min_length#3 = printf_sint::format_min_length#6 printf_sint::format_min_length#4 printf_sint::format_min_length#5 Alias printf_sint::format_justify_left#3 = printf_sint::format_justify_left#6 printf_sint::format_justify_left#4 printf_sint::format_justify_left#5 Alias printf_sint::format_sign_always#1 = printf_sint::format_sign_always#5 printf_sint::format_sign_always#3 printf_sint::format_sign_always#6 Alias printf_sint::format_zero_padding#3 = printf_sint::format_zero_padding#6 printf_sint::format_zero_padding#4 printf_sint::format_zero_padding#5 Alias printf_sint::format_upper_case#3 = printf_sint::format_upper_case#6 printf_sint::format_upper_case#4 printf_sint::format_upper_case#5 Alias printf_sint::value#0 = printf_sint::$4 Alias printf_sint::format_min_length#1 = printf_sint::format_min_length#2 Alias printf_sint::format_justify_left#1 = printf_sint::format_justify_left#2 Alias printf_sint::format_sign_always#2 = printf_sint::format_sign_always#4 Alias printf_sint::format_zero_padding#1 = printf_sint::format_zero_padding#2 Alias printf_sint::format_upper_case#1 = printf_sint::format_upper_case#2 Alias printf_sint::format_radix#1 = printf_sint::format_radix#2 Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#4 printf_number_buffer::buffer_digits#18 printf_number_buffer::buffer_digits#19 Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#4 printf_number_buffer::buffer_sign#7 printf_number_buffer::buffer_sign#11 Alias printf_number_buffer::format_min_length#1 = printf_number_buffer::format_min_length#5 printf_number_buffer::format_min_length#3 printf_number_buffer::format_min_length#4 Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#3 printf_number_buffer::format_justify_left#7 printf_number_buffer::format_justify_left#8 Alias printf_number_buffer::format_zero_padding#10 = printf_number_buffer::format_zero_padding#16 printf_number_buffer::format_zero_padding#4 printf_number_buffer::format_zero_padding#11 Alias printf_number_buffer::format_upper_case#10 = printf_number_buffer::format_upper_case#16 printf_number_buffer::format_upper_case#14 printf_number_buffer::format_upper_case#15 Alias strlen::return#2 = strlen::return#4 Alias printf_number_buffer::padding#1 = printf_number_buffer::$21 Alias printf_number_buffer::len#0 = printf_number_buffer::len#3 Alias printf_number_buffer::format_justify_left#4 = printf_number_buffer::format_justify_left#5 Alias printf_number_buffer::format_zero_padding#5 = printf_number_buffer::format_zero_padding#6 Alias printf_number_buffer::buffer_sign#8 = printf_number_buffer::buffer_sign#9 Alias printf_number_buffer::format_upper_case#11 = printf_number_buffer::format_upper_case#12 Alias printf_number_buffer::buffer_digits#15 = printf_number_buffer::buffer_digits#16 Alias printf_number_buffer::padding#12 = printf_number_buffer::padding#4 printf_number_buffer::padding#3 Alias printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#5 printf_number_buffer::buffer_sign#6 Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#17 printf_number_buffer::format_zero_padding#12 Alias printf_number_buffer::format_upper_case#13 = printf_number_buffer::format_upper_case#7 printf_number_buffer::format_upper_case#8 Alias printf_number_buffer::buffer_digits#12 = printf_number_buffer::buffer_digits#17 printf_number_buffer::buffer_digits#13 Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#20 printf_number_buffer::format_justify_left#18 Alias printf_number_buffer::buffer_sign#2 = printf_number_buffer::buffer_sign#3 Alias printf_number_buffer::format_zero_padding#13 = printf_number_buffer::format_zero_padding#8 printf_number_buffer::format_zero_padding#7 Alias printf_number_buffer::padding#10 = printf_number_buffer::padding#13 printf_number_buffer::padding#9 Alias printf_number_buffer::format_upper_case#4 = printf_number_buffer::format_upper_case#9 printf_number_buffer::format_upper_case#5 Alias printf_number_buffer::buffer_digits#10 = printf_number_buffer::buffer_digits#14 printf_number_buffer::buffer_digits#9 Alias printf_number_buffer::format_justify_left#15 = printf_number_buffer::format_justify_left#19 printf_number_buffer::format_justify_left#16 Alias printf_number_buffer::padding#16 = printf_number_buffer::padding#6 printf_number_buffer::padding#5 Alias printf_number_buffer::format_upper_case#2 = printf_number_buffer::format_upper_case#6 printf_number_buffer::format_upper_case#3 Alias printf_number_buffer::buffer_digits#11 = printf_number_buffer::buffer_digits#8 printf_number_buffer::buffer_digits#7 Alias printf_number_buffer::format_zero_padding#18 = printf_number_buffer::format_zero_padding#20 printf_number_buffer::format_zero_padding#2 Alias printf_number_buffer::format_justify_left#12 = printf_number_buffer::format_justify_left#17 printf_number_buffer::format_justify_left#13 Alias printf_number_buffer::format_zero_padding#3 = printf_number_buffer::format_zero_padding#9 Alias printf_number_buffer::format_justify_left#2 = printf_number_buffer::format_justify_left#6 Alias printf_number_buffer::padding#11 = printf_number_buffer::padding#7 printf_number_buffer::padding#8 Alias printf_number_buffer::buffer_digits#3 = printf_number_buffer::buffer_digits#6 printf_number_buffer::buffer_digits#5 Alias printf_number_buffer::format_zero_padding#14 = printf_number_buffer::format_zero_padding#19 printf_number_buffer::format_zero_padding#15 Alias printf_number_buffer::format_justify_left#10 = printf_number_buffer::format_justify_left#14 printf_number_buffer::format_justify_left#9 Alias printf_number_buffer::padding#14 = printf_number_buffer::padding#17 printf_number_buffer::padding#15 Alias main::signed_char_value#2 = main::signed_char_value#3 Alias main::signed_char_value#1 = main::signed_char_value#4 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Alias gotoxy::x#3 = gotoxy::x#5 Alias gotoxy::y#4 = gotoxy::y#5 Alias utoa::value#10 = utoa::value#7 Alias utoa::buffer#10 = utoa::buffer#15 Alias utoa::digit#2 = utoa::digit#4 Alias utoa::max_digits#10 = utoa::max_digits#6 Alias utoa::digit_values#10 = utoa::digit_values#7 Alias printf_sint::format_radix#1 = printf_sint::format_radix#3 Alias printf_sint::format_min_length#1 = printf_sint::format_min_length#3 Alias printf_sint::format_justify_left#1 = printf_sint::format_justify_left#3 Alias printf_sint::format_sign_always#1 = printf_sint::format_sign_always#2 Alias printf_sint::format_zero_padding#1 = printf_sint::format_zero_padding#3 Alias printf_sint::format_upper_case#1 = printf_sint::format_upper_case#3 Alias printf_number_buffer::format_min_length#1 = printf_number_buffer::format_min_length#2 Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#4 Alias printf_number_buffer::format_zero_padding#10 = printf_number_buffer::format_zero_padding#5 Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#8 Alias printf_number_buffer::format_upper_case#10 = printf_number_buffer::format_upper_case#11 Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#15 Alias printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#13 printf_number_buffer::format_zero_padding#18 printf_number_buffer::format_zero_padding#14 printf_number_buffer::format_zero_padding#3 Alias printf_number_buffer::padding#10 = printf_number_buffer::padding#12 printf_number_buffer::padding#16 printf_number_buffer::padding#14 printf_number_buffer::padding#11 Alias printf_number_buffer::format_upper_case#1 = printf_number_buffer::format_upper_case#4 printf_number_buffer::format_upper_case#13 printf_number_buffer::format_upper_case#2 Alias printf_number_buffer::buffer_digits#10 = printf_number_buffer::buffer_digits#12 printf_number_buffer::buffer_digits#11 printf_number_buffer::buffer_digits#3 printf_number_buffer::buffer_digits#2 Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#15 printf_number_buffer::format_justify_left#12 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_justify_left#2 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Alias printf_number_buffer::format_justify_left#1 = printf_number_buffer::format_justify_left#11 Alias printf_number_buffer::format_zero_padding#1 = printf_number_buffer::format_zero_padding#10 Alias printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 Alias printf_number_buffer::format_upper_case#1 = printf_number_buffer::format_upper_case#10 Alias printf_number_buffer::buffer_digits#1 = printf_number_buffer::buffer_digits#10 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Identical Phi Values clrscr::line_text#2 clrscr::line_text#5 Identical Phi Values clrscr::line_cols#2 clrscr::line_cols#5 Identical Phi Values clrscr::l#3 clrscr::l#2 Identical Phi Values memcpy::src_end#1 memcpy::src_end#0 Identical Phi Values memcpy::destination#3 memcpy::destination#2 Identical Phi Values memset::end#1 memset::end#0 Identical Phi Values memset::str#5 memset::str#3 Identical Phi Values memset::c#2 memset::c#4 Identical Phi Values strlen::str#4 strlen::str#1 Identical Phi Values toupper::ch#1 toupper::ch#0 Identical Phi Values strupr::src#0 strupr::str#0 Identical Phi Values strupr::str#2 strupr::src#0 Identical Phi Values utoa::radix#1 utoa::radix#0 Identical Phi Values utoa::value#10 utoa::value#1 Identical Phi Values utoa::buffer#10 utoa::buffer#5 Identical Phi Values utoa::max_digits#10 utoa::max_digits#7 Identical Phi Values utoa::digit_values#10 utoa::digit_values#8 Identical Phi Values utoa_append::value#5 utoa_append::value#0 Identical Phi Values utoa_append::sub#3 utoa_append::sub#0 Identical Phi Values utoa_append::buffer#3 utoa_append::buffer#0 Identical Phi Values utoa_append::sub#1 utoa_append::sub#3 Identical Phi Values utoa_append::buffer#1 utoa_append::buffer#3 Identical Phi Values printf_padding::length#3 printf_padding::length#4 Identical Phi Values printf_padding::pad#3 printf_padding::pad#5 Identical Phi Values printf_sint::value#2 printf_sint::value#1 Identical Phi Values printf_sint::format_sign_always#1 printf_sint::format_sign_always#0 Identical Phi Values printf_sint::format_radix#1 printf_sint::format_radix#0 Identical Phi Values printf_sint::format_min_length#1 printf_sint::format_min_length#0 Identical Phi Values printf_sint::format_justify_left#1 printf_sint::format_justify_left#0 Identical Phi Values printf_sint::format_zero_padding#1 printf_sint::format_zero_padding#0 Identical Phi Values printf_sint::format_upper_case#1 printf_sint::format_upper_case#0 Identical Phi Values printf_number_buffer::format_min_length#1 printf_number_buffer::format_min_length#0 Identical Phi Values printf_number_buffer::format_justify_left#1 printf_number_buffer::format_justify_left#0 Identical Phi Values printf_number_buffer::format_zero_padding#1 printf_number_buffer::format_zero_padding#0 Identical Phi Values printf_number_buffer::buffer_digits#1 printf_number_buffer::buffer_digits#0 Identical Phi Values printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 Identical Phi Values printf_number_buffer::format_upper_case#1 printf_number_buffer::format_upper_case#0 Identical Phi Values test_casting::signed_short_value#1 test_casting::signed_short_value#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values memset::return#0 memset::str#3 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition clrscr::$0 [5] if(clrscr::l#2<$19) goto clrscr::@2 Simple Condition clrscr::$1 [13] if(clrscr::c#2<$28) goto clrscr::@5 Simple Condition gotoxy::$1 [23] if(gotoxy::y#3<=$19) goto gotoxy::@1 Simple Condition gotoxy::$3 [26] if(gotoxy::x#3<$28) goto gotoxy::@2 Simple Condition cputc::$0 [41] if(cputc::c#3==' ') goto cputc::@1 Simple Condition cputc::$2 [47] if(conio_cursor_x!=$28) goto cputc::@return Simple Condition cputs::$2 [62] if(0!=cputs::c#1) goto cputs::@2 Simple Condition memcpy::$1 [73] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 Simple Condition memset::$1 [80] if(memset::num#2<=0) goto memset::@1 Simple Condition memset::$3 [87] if(memset::dst#2!=memset::end#0) goto memset::@4 Simple Condition strlen::$0 [95] if(0!=*strlen::str#2) goto strlen::@2 Simple Condition strupr::$1 [110] if(0!=*strupr::src#2) goto strupr::@2 Simple Condition cscroll::$1 [119] if(conio_cursor_y!=$19) goto cscroll::@return Simple Condition cscroll::$7 [121] if(0!=conio_scroll_enable) goto cscroll::@3 Simple Condition conio_c64_init::$1 [151] if(conio_c64_init::line#0<$19) goto conio_c64_init::@1 Simple Condition utoa::$0 [162] if(utoa::radix#0==DECIMAL) goto utoa::@1 Simple Condition utoa::$1 [166] if(utoa::radix#0==HEXADECIMAL) goto utoa::@2 Simple Condition utoa::$2 [170] if(utoa::radix#0==OCTAL) goto utoa::@3 Simple Condition utoa::$3 [174] if(utoa::radix#0==BINARY) goto utoa::@4 Simple Condition utoa::$5 [191] if(utoa::digit#2=utoa_append::sub#0) goto utoa_append::@2 Simple Condition printf_padding::$0 [225] if(printf_padding::i#2=0) goto printf_number_buffer::@1 Simple Condition printf_number_buffer::$7 [281] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3 Simple Condition printf_number_buffer::$12 [291] if(0==printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5 Simple Condition main::$1 [325] if(main::signed_char_value#2!=0) goto main::@2 Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s [102] toupper::$2 = toupper::$0 && toupper::$1 Rewriting ! if()-condition to reversed if() [196] utoa::$8 = ! utoa::$7 Rewriting || if()-condition to two if()s [195] utoa::$7 = utoa::started#2 || utoa::$6 Rewriting ! if()-condition to reversed if() [264] printf_number_buffer::$5 = ! printf_number_buffer::$4 Rewriting && if()-condition to two if()s [263] printf_number_buffer::$4 = printf_number_buffer::$3 && printf_number_buffer::padding#10 Rewriting && if()-condition to two if()s [262] printf_number_buffer::$3 = printf_number_buffer::$1 && printf_number_buffer::$2 Rewriting ! if()-condition to reversed if() [286] printf_number_buffer::$10 = ! printf_number_buffer::$9 Rewriting && if()-condition to two if()s [285] printf_number_buffer::$9 = printf_number_buffer::format_zero_padding#0 && printf_number_buffer::padding#10 Rewriting ! if()-condition to reversed if() [300] printf_number_buffer::$17 = ! printf_number_buffer::$16 Rewriting && if()-condition to two if()s [299] printf_number_buffer::$16 = printf_number_buffer::$15 && printf_number_buffer::padding#10 Rewriting && if()-condition to two if()s [298] printf_number_buffer::$15 = printf_number_buffer::format_justify_left#0 && printf_number_buffer::$14 Successful SSA optimization Pass2ConditionalAndOrRewriting Warning! Adding boolean cast to non-boolean condition utoa::started#2 Warning! Adding boolean cast to non-boolean condition printf_number_buffer::format_zero_padding#0 Warning! Adding boolean cast to non-boolean condition printf_number_buffer::format_justify_left#0 Warning! Adding boolean cast to non-boolean condition printf_number_buffer::padding#10 Warning! Adding boolean cast to non-boolean condition printf_number_buffer::padding#10 Warning! Adding boolean cast to non-boolean condition printf_number_buffer::padding#10 Constant right-side identified [124] memcpy::num#0 = (unumber)$19*$28-$28 Constant right-side identified [129] memcpy::num#1 = (unumber)$19*$28-$28 Constant right-side identified [156] conio_c64_init::line#1 = (unumber)$19-1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant clrscr::line_text#0 = CONIO_SCREEN_TEXT Constant clrscr::line_cols#0 = CONIO_SCREEN_COLORS Constant clrscr::l#0 = 0 Constant clrscr::c#0 = 0 Constant gotoxy::y#0 = 0 Constant gotoxy::x#0 = 0 Constant cputs::c#0 = 0 Constant strlen::len#0 = 0 Constant memcpy::destination#0 = (void*)CONIO_SCREEN_TEXT Constant memcpy::source#0 = (void*)CONIO_SCREEN_TEXT+$28 Constant memcpy::num#0 = (unumber)$19*$28-$28 Constant memcpy::destination#1 = (void*)CONIO_SCREEN_COLORS Constant memcpy::source#1 = (void*)CONIO_SCREEN_COLORS+$28 Constant memcpy::num#1 = (unumber)$19*$28-$28 Constant memset::str#0 = (void*)CONIO_SCREEN_TEXT+(word)$19*$28-$28 Constant memset::c#0 = ' ' Constant memset::num#0 = $28 Constant memset::str#1 = (void*)CONIO_SCREEN_COLORS+(word)$19*$28-$28 Constant memset::num#1 = $28 Constant gotoxy::x#1 = 0 Constant gotoxy::y#1 = 0 Constant gotoxy::x#2 = 0 Constant conio_c64_init::line#1 = (unumber)$19-1 Constant utoa::max_digits#0 = 0 Constant utoa::digit_values#0 = (word*) 0 Constant utoa::max_digits#1 = 5 Constant utoa::digit_values#1 = RADIX_DECIMAL_VALUES Constant utoa::max_digits#2 = 4 Constant utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES Constant utoa::max_digits#3 = 6 Constant utoa::digit_values#3 = RADIX_OCTAL_VALUES Constant utoa::max_digits#4 = $10 Constant utoa::digit_values#4 = RADIX_BINARY_VALUES Constant utoa::started#0 = 0 Constant utoa::digit#0 = 0 Constant utoa::started#1 = 1 Constant utoa_append::digit#0 = 0 Constant printf_padding::i#0 = 0 Constant utoa::buffer#5 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Constant printf_number_buffer::buffer_digits#0 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Constant printf_number_buffer::padding#0 = 0 Constant printf_number_buffer::padding#2 = 0 Constant printf_padding::pad#0 = ' ' Constant printf_padding::pad#1 = '0' Constant printf_padding::pad#2 = ' ' Constant printf_sint::format_min_length#0 = 0 Constant printf_sint::format_justify_left#0 = 0 Constant printf_sint::format_sign_always#0 = 0 Constant printf_sint::format_zero_padding#0 = 0 Constant printf_sint::format_upper_case#0 = 0 Constant printf_sint::format_radix#0 = DECIMAL Constant cputs::s#2 = test_casting::s Constant main::signed_char_value#0 = -5 Constant conio_textcolor = CONIO_TEXTCOLOR_DEFAULT Constant conio_scroll_enable = 1 Successful SSA optimization Pass2ConstantIdentification Constant memset::c#1 = conio_textcolor Constant utoa::radix#0 = printf_sint::format_radix#0 Constant printf_number_buffer::format_min_length#0 = printf_sint::format_min_length#0 Constant printf_number_buffer::format_justify_left#0 = printf_sint::format_justify_left#0 Constant printf_number_buffer::format_sign_always#0 = printf_sint::format_sign_always#0 Constant printf_number_buffer::format_zero_padding#0 = printf_sint::format_zero_padding#0 Constant printf_number_buffer::format_upper_case#0 = printf_sint::format_upper_case#0 Constant printf_number_buffer::format_radix#0 = printf_sint::format_radix#0 Constant strlen::str#1 = printf_number_buffer::buffer_digits#0 Constant cputs::s#1 = printf_number_buffer::buffer_digits#0 Constant strupr::str#0 = printf_number_buffer::buffer_digits#0 Successful SSA optimization Pass2ConstantIdentification Constant printf_number_buffer::$25 = (signed byte)printf_number_buffer::format_min_length#0 Constant strupr::return#2 = strupr::str#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [121] if(0!=conio_scroll_enable) goto cscroll::@3 if() condition always true - replacing block destination [162] if(utoa::radix#0==DECIMAL) goto utoa::@1 if() condition always false - eliminating [166] if(utoa::radix#0==HEXADECIMAL) goto utoa::@2 if() condition always false - eliminating [170] if(utoa::radix#0==OCTAL) goto utoa::@3 if() condition always false - eliminating [174] if(utoa::radix#0==BINARY) goto utoa::@4 if() condition always true - replacing block destination [237] if(0==printf_sint::format_sign_always#0) goto printf_sint::@2 if() condition always true - replacing block destination [258] if(0==printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1 if() condition always true - replacing block destination [291] if(0==printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5 Successful SSA optimization Pass2ConstantIfs Rewriting conditional comparison [23] if(gotoxy::y#3<=$19) goto gotoxy::@1 Simplifying constant evaluating to zero (signed byte)printf_number_buffer::format_min_length#0 in Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero (byte*)&printf_buffer in [231] *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = 0 Simplifying expression containing zero (byte*)&printf_buffer in [235] *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = '-' Simplifying expression containing zero (byte*)&printf_buffer in [238] *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) = '+' Simplifying expression containing zero (byte*)&printf_buffer in [245] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) Simplifying expression containing zero printf_number_buffer::len#2 in [275] printf_number_buffer::padding#1 = printf_number_buffer::$25 - printf_number_buffer::len#2 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating variable strlen::str#2 from unused block strlen::@1 Eliminating variable strlen::len#2 from unused block strlen::@1 Eliminating variable strlen::len#1 from unused block strlen::@2 Eliminating variable strlen::str#0 from unused block strlen::@2 Eliminating variable toupper::$0 from unused block toupper Eliminating variable toupper::$1 from unused block toupper Eliminating variable toupper::return#0 from unused block toupper::@1 Eliminating variable toupper::return#2 from unused block toupper::@return Eliminating variable strupr::src#2 from unused block strupr::@1 Eliminating variable toupper::ch#0 from unused block strupr::@2 Eliminating variable toupper::return#3 from unused block strupr::@2 Eliminating variable strupr::$0 from unused block strupr::@4 Eliminating variable strupr::src#1 from unused block strupr::@4 Eliminating variable utoa::buffer#0 from unused block utoa::@9 Eliminating variable utoa::buffer#1 from unused block utoa::@9 Eliminating variable utoa::buffer#2 from unused block utoa::@9 Eliminating variable strlen::return#2 from unused block printf_number_buffer::@6 Eliminating variable printf_number_buffer::$19 from unused block printf_number_buffer::@15 Eliminating variable printf_number_buffer::len#0 from unused block printf_number_buffer::@15 Eliminating variable printf_number_buffer::len#2 from unused block printf_number_buffer::@13 Eliminating variable printf_number_buffer::padding#1 from unused block printf_number_buffer::@13 Eliminating variable printf_number_buffer::len#1 from unused block printf_number_buffer::@7 Removing unused procedure strlen Removing unused procedure block strlen Removing PHI-reference to removed block (strlen) in block strlen::@1 Removing PHI-reference to removed block (strlen) in block strlen::@1 Removing unused procedure block strlen::@1 Removing unused procedure block strlen::@2 Removing unused procedure block strlen::@3 Removing unused procedure block strlen::@return Removing unused procedure toupper Removing unused procedure block toupper Removing unused procedure block toupper::@1 Removing PHI-reference to removed block (toupper::@1) in block toupper::@return Removing unused procedure block toupper::@2 Removing PHI-reference to removed block (toupper::@2) in block toupper::@return Removing unused procedure block toupper::@return Removing unused procedure block toupper::@3 Removing unused procedure strupr Removing unused procedure block strupr Removing PHI-reference to removed block (strupr) in block strupr::@1 Removing unused procedure block strupr::@1 Removing unused procedure block strupr::@2 Removing unused procedure block strupr::@4 Removing unused procedure block strupr::@3 Removing unused procedure block strupr::@return Removing PHI-reference to removed block (cscroll::@2) in block gotoxy Removing PHI-reference to removed block (cscroll::@2) in block gotoxy Removing unused block cscroll::@2 Removing unused block cscroll::@8 Removing unused block utoa::@6 Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 Removing unused block utoa::@2 Removing unused block utoa::@7 Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 Removing unused block utoa::@3 Removing unused block utoa::@8 Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 Removing unused block utoa::@4 Removing unused block utoa::@9 Removing PHI-reference to removed block (printf_sint::@4) in block printf_sint::@2 Removing unused block printf_sint::@4 Removing unused block printf_number_buffer::@6 Removing PHI-reference to removed block (printf_number_buffer::@15) in block printf_number_buffer::@13 Removing unused block printf_number_buffer::@15 Removing PHI-reference to removed block (printf_number_buffer::@13) in block printf_number_buffer::@1 Removing unused block printf_number_buffer::@13 Removing unused block printf_number_buffer::@7 Removing PHI-reference to removed block (printf_number_buffer::@14) in block printf_number_buffer::@1 Removing unused block printf_number_buffer::@14 Removing unused block printf_number_buffer::@11 Removing unused block printf_number_buffer::@20 Successful SSA optimization Pass2EliminateUnusedBlocks Eliminating unused variable memcpy::return#2 and assignment [75] memcpy::return#2 = memcpy::destination#2 Eliminating unused variable memcpy::return#3 and assignment [77] memcpy::return#3 = memcpy::destination#2 Eliminating unused variable memset::return#2 and assignment [79] memset::return#2 = memset::str#3 Eliminating unused variable memset::return#3 and assignment [81] memset::return#3 = memset::str#3 Eliminating unused constant gotoxy::x#1 Eliminating unused constant gotoxy::y#1 Eliminating unused constant cputs::c#0 Eliminating unused constant BINARY Eliminating unused constant OCTAL Eliminating unused constant HEXADECIMAL Eliminating unused constant utoa::max_digits#0 Eliminating unused constant utoa::digit_values#0 Eliminating unused constant utoa::max_digits#2 Eliminating unused constant utoa::digit_values#2 Eliminating unused constant utoa::max_digits#3 Eliminating unused constant utoa::digit_values#3 Eliminating unused constant utoa::max_digits#4 Eliminating unused constant utoa::digit_values#4 Eliminating unused constant utoa::radix#0 Eliminating unused constant printf_number_buffer::padding#2 Eliminating unused constant printf_number_buffer::format_min_length#0 Eliminating unused constant printf_number_buffer::format_sign_always#0 Eliminating unused constant printf_number_buffer::format_upper_case#0 Eliminating unused constant printf_number_buffer::format_radix#0 Eliminating unused constant printf_number_buffer::$25 Eliminating unused constant OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN Eliminating unused constant conio_scroll_enable Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant RADIX_BINARY_VALUES Eliminating unused constant RADIX_OCTAL_VALUES Eliminating unused constant RADIX_HEXADECIMAL_VALUES Eliminating unused constant printf_sint::format_min_length#0 Eliminating unused constant printf_sint::format_sign_always#0 Eliminating unused constant printf_sint::format_upper_case#0 Eliminating unused constant printf_sint::format_radix#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant DECIMAL Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) $19+1 in if(gotoxy::y#3<$19+1) goto gotoxy::@1 Adding number conversion cast (unumber) 1 in if(gotoxy::y#3<(unumber)$19+1) goto gotoxy::@1 Adding number conversion cast (unumber) 0 in utoa::$12 = 0 != utoa::started#2 Adding number conversion cast (unumber) 0 in printf_number_buffer::$33 = 0 != printf_number_buffer::format_zero_padding#0 Adding number conversion cast (unumber) 0 in printf_number_buffer::$34 = 0 != printf_number_buffer::format_justify_left#0 Adding number conversion cast (snumber) 0 in printf_number_buffer::$35 = 0 != printf_number_buffer::padding#10 Adding number conversion cast (snumber) 0 in printf_number_buffer::$36 = 0 != printf_number_buffer::padding#10 Adding number conversion cast (snumber) 0 in printf_number_buffer::$37 = 0 != printf_number_buffer::padding#10 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $19+(unumber)1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Identical Phi Values gotoxy::y#3 gotoxy::y#2 Identical Phi Values gotoxy::x#3 gotoxy::x#2 Identical Phi Values utoa::max_digits#7 utoa::max_digits#1 Identical Phi Values utoa::digit_values#8 utoa::digit_values#1 Identical Phi Values printf_number_buffer::padding#10 printf_number_buffer::padding#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition utoa::$12 [97] if(0!=utoa::started#2) goto utoa::@14 Simple Condition printf_number_buffer::$1 [138] if(0==printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@23 Simple Condition printf_number_buffer::$33 [143] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@24 Simple Condition printf_number_buffer::$34 [151] if(0!=printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@26 Simple Condition utoa::$6 [173] if(utoa::value#2>=utoa::digit_value#0) goto utoa::@14 Simple Condition printf_number_buffer::$35 [175] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@8 Simple Condition printf_number_buffer::$2 [176] if(0==printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@22 Simple Condition printf_number_buffer::$36 [178] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@10 Simple Condition printf_number_buffer::$37 [180] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@12 Simple Condition printf_number_buffer::$14 [181] if(0==printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@25 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [138] if(0!=printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 Negating conditional jump and destination [143] if(0==printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 Negating conditional jump and destination [151] if(0==printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return Negating conditional jump and destination [176] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 Negating conditional jump and destination [181] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [91] utoa::$4 = utoa::max_digits#1 - 1 Constant right-side identified [140] printf_padding::length#0 = (byte)printf_number_buffer::padding#0 Constant right-side identified [146] printf_padding::length#1 = (byte)printf_number_buffer::padding#0 Constant right-side identified [152] printf_padding::length#2 = (byte)printf_number_buffer::padding#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant utoa::$4 = utoa::max_digits#1-1 Constant printf_padding::length#0 = (byte)printf_number_buffer::padding#0 Constant printf_padding::length#1 = (byte)printf_number_buffer::padding#0 Constant printf_padding::length#2 = (byte)printf_number_buffer::padding#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [18] if(gotoxy::x#2<$28) goto gotoxy::@2 if() condition always false - eliminating [138] if(0!=printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 if() condition always true - replacing block destination [143] if(0==printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 if() condition always true - replacing block destination [151] if(0==printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return if() condition always false - eliminating [175] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@8 if() condition always false - eliminating [176] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 if() condition always false - eliminating [178] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@10 if() condition always false - eliminating [180] if(0!=printf_number_buffer::padding#0) goto printf_number_buffer::@12 if() condition always false - eliminating [181] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (byte)printf_number_buffer::padding#0 in Simplifying constant evaluating to zero (byte)printf_number_buffer::padding#0 in Simplifying constant evaluating to zero (byte)printf_number_buffer::padding#0 in Successful SSA optimization PassNSimplifyConstantZero Eliminating variable printf_padding::length#4 from unused block printf_padding Eliminating variable printf_padding::pad#5 from unused block printf_padding Eliminating variable printf_padding::i#2 from unused block printf_padding::@1 Eliminating variable cputc::c#1 from unused block printf_padding::@2 Eliminating variable printf_padding::i#1 from unused block printf_padding::@3 Removing PHI-reference to removed block (gotoxy::@4) in block gotoxy::@2 Removing unused block gotoxy::@4 Removing unused procedure printf_padding Removing unused procedure block printf_padding Removing PHI-reference to removed block (printf_padding) in block printf_padding::@1 Removing unused procedure block printf_padding::@1 Removing unused procedure block printf_padding::@2 Removing PHI-reference to removed block (printf_padding::@2) in block cputc Removing unused procedure block printf_padding::@3 Removing unused procedure block printf_padding::@return Removing unused block printf_number_buffer::@8 Removing unused block printf_number_buffer::@16 Removing unused block printf_number_buffer::@10 Removing unused block printf_number_buffer::@18 Removing unused block printf_number_buffer::@12 Removing unused block printf_number_buffer::@21 Removing unused block printf_number_buffer::@24 Removing unused block printf_number_buffer::@25 Removing unused block printf_number_buffer::@26 Successful SSA optimization Pass2EliminateUnusedBlocks Eliminating unused constant gotoxy::x#0 Eliminating unused constant printf_number_buffer::padding#0 Eliminating unused constant printf_number_buffer::format_justify_left#0 Eliminating unused constant printf_number_buffer::format_zero_padding#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant printf_sint::format_justify_left#0 Eliminating unused constant printf_sint::format_zero_padding#0 Successful SSA optimization PassNEliminateUnusedVars Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Identical Phi Values gotoxy::x#4 gotoxy::x#2 Successful SSA optimization Pass2IdenticalPhiElimination Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Inlining Noop Cast [50] memcpy::src#0 = (byte*)memcpy::source#2 keeping memcpy::source#2 Inlining Noop Cast [51] memcpy::dst#0 = (byte*)memcpy::destination#2 keeping memcpy::destination#2 Inlining Noop Cast [52] memcpy::$2 = (byte*)memcpy::source#2 keeping memcpy::source#2 Inlining Noop Cast [62] memset::$4 = (byte*)memset::str#3 keeping memset::str#3 Inlining Noop Cast [64] memset::dst#0 = (byte*)memset::str#3 keeping memset::str#3 Inlining Noop Cast [115] printf_sint::uvalue#0 = (word)printf_sint::value#4 keeping printf_sint::value#4 Successful SSA optimization Pass2NopCastInlining Rewriting multiplication to use shift and addition[20] gotoxy::line_offset#0 = gotoxy::$7 * $28 Rewriting multiplication to use shift [88] utoa::$10 = utoa::digit#2 * SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings clrscr::line_text#0 Inlining constant with var siblings clrscr::line_cols#0 Inlining constant with var siblings clrscr::l#0 Inlining constant with var siblings clrscr::c#0 Inlining constant with var siblings gotoxy::y#0 Inlining constant with var siblings cputs::s#2 Inlining constant with var siblings cputs::s#1 Inlining constant with var siblings memcpy::destination#0 Inlining constant with var siblings memcpy::source#0 Inlining constant with var siblings memcpy::num#0 Inlining constant with var siblings memcpy::destination#1 Inlining constant with var siblings memcpy::source#1 Inlining constant with var siblings memcpy::num#1 Inlining constant with var siblings memset::str#0 Inlining constant with var siblings memset::c#0 Inlining constant with var siblings memset::num#0 Inlining constant with var siblings memset::str#1 Inlining constant with var siblings memset::num#1 Inlining constant with var siblings memset::c#1 Inlining constant with var siblings conio_c64_init::line#1 Inlining constant with var siblings utoa::started#0 Inlining constant with var siblings utoa::digit#0 Inlining constant with var siblings utoa::started#1 Inlining constant with var siblings utoa::buffer#5 Inlining constant with var siblings utoa_append::digit#0 Inlining constant with var siblings main::signed_char_value#0 Constant inlined utoa_append::digit#0 = 0 Constant inlined utoa::digit_values#1 = RADIX_DECIMAL_VALUES Constant inlined cputs::s#1 = printf_number_buffer::buffer_digits#0 Constant inlined cputs::s#2 = test_casting::s Constant inlined conio_textcolor = LIGHT_BLUE Constant inlined memcpy::destination#0 = (void*)DEFAULT_SCREEN Constant inlined memset::num#1 = $28 Constant inlined memcpy::destination#1 = (void*)COLORRAM Constant inlined memset::num#0 = $28 Constant inlined clrscr::l#0 = 0 Constant inlined conio_c64_init::line#1 = (byte)$19-1 Constant inlined memcpy::source#1 = (void*)COLORRAM+$28 Constant inlined utoa::digit#0 = 0 Constant inlined CONIO_SCREEN_TEXT = DEFAULT_SCREEN Constant inlined main::signed_char_value#0 = -5 Constant inlined utoa::$4 = utoa::max_digits#1-1 Constant inlined CONIO_TEXTCOLOR_DEFAULT = LIGHT_BLUE Constant inlined memset::str#1 = (void*)COLORRAM+(word)$19*$28-$28 Constant inlined memset::str#0 = (void*)DEFAULT_SCREEN+(word)$19*$28-$28 Constant inlined CONIO_SCREEN_COLORS = COLORRAM Constant inlined clrscr::line_text#0 = DEFAULT_SCREEN Constant inlined utoa::started#1 = 1 Constant inlined utoa::started#0 = 0 Constant inlined memcpy::source#0 = (void*)DEFAULT_SCREEN+$28 Constant inlined memcpy::num#1 = (word)$19*$28-$28 Constant inlined memcpy::num#0 = (word)$19*$28-$28 Constant inlined utoa::buffer#5 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Constant inlined gotoxy::y#0 = 0 Constant inlined memset::c#0 = ' ' Constant inlined memset::c#1 = LIGHT_BLUE Constant inlined clrscr::c#0 = 0 Constant inlined clrscr::line_cols#0 = COLORRAM Successful SSA optimization Pass2ConstantInlining Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Alias gotoxy::line_offset#0 = gotoxy::$10 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Identical Phi Values memcpy::num#2 (word)$19*$28-$28 Identical Phi Values memset::num#2 $28 Successful SSA optimization Pass2IdenticalPhiElimination if() condition always false - eliminating [60] if($28<=0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs Eliminating unused constant SIZEOF_WORD Successful SSA optimization PassNEliminateUnusedVars Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Simplifying constant integer cast $19-1 Successful SSA optimization PassNCastSimplification Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Alias candidate removed (volatile)conio_line_text = gotoxy::$5 Alias candidate removed (volatile)conio_line_color = gotoxy::$6 Added new block during phi lifting gotoxy::@5(between gotoxy and gotoxy::@1) Added new block during phi lifting conio_c64_init::@4(between conio_c64_init and conio_c64_init::@1) Added new block during phi lifting utoa::@17(between utoa::@16 and utoa::@13) Adding NOP phi() at start of __start Adding NOP phi() at start of __start::@2 Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of __start::@3 Adding NOP phi() at start of conio_c64_init::@2 Adding NOP phi() at start of conio_c64_init::@3 Adding NOP phi() at start of main Adding NOP phi() at start of main::@3 Adding NOP phi() at start of gotoxy::@3 Adding NOP phi() at start of clrscr Adding NOP phi() at start of clrscr::@2 Adding NOP phi() at start of test_casting::@1 Adding NOP phi() at start of test_casting::@2 Adding NOP phi() at start of printf_sint::@6 Adding NOP phi() at start of utoa Adding NOP phi() at start of utoa::@1 Adding NOP phi() at start of printf_number_buffer Adding NOP phi() at start of printf_number_buffer::@1 Adding NOP phi() at start of printf_number_buffer::@23 Adding NOP phi() at start of printf_number_buffer::@22 Adding NOP phi() at start of printf_number_buffer::@17 Adding NOP phi() at start of printf_number_buffer::@3 Adding NOP phi() at start of printf_number_buffer::@4 Adding NOP phi() at start of printf_number_buffer::@5 Adding NOP phi() at start of printf_number_buffer::@19 Adding NOP phi() at start of cputc::@3 Adding NOP phi() at start of cputc::@5 Adding NOP phi() at start of cputc::@1 Adding NOP phi() at start of cputc::@4 Adding NOP phi() at start of cputln::@1 Adding NOP phi() at start of cscroll::@1 Adding NOP phi() at start of cscroll::@3 Adding NOP phi() at start of cscroll::@4 Adding NOP phi() at start of cscroll::@5 Adding NOP phi() at start of cscroll::@6 Adding NOP phi() at start of memcpy::@3 Adding NOP phi() at start of memset::@1 CALL GRAPH Calls in [__start] to conio_c64_init:5 main:8 Calls in [conio_c64_init] to gotoxy:16 Calls in [main] to clrscr:21 test_casting:28 Calls in [test_casting] to printf_sint:67 cputs:69 Calls in [printf_sint] to utoa:77 printf_number_buffer:79 Calls in [cputs] to cputc:94 Calls in [utoa] to utoa_append:122 Calls in [printf_number_buffer] to cputc:135 cputs:140 Calls in [cputc] to cputln:150 cputln:154 Calls in [cputln] to cscroll:169 Calls in [cscroll] to memcpy:175 memcpy:177 memset:179 memset:181 Created 27 initial phi equivalence classes Coalesced [19] conio_c64_init::line#3 = conio_c64_init::line#0 Coalesced [29] main::signed_char_value#5 = main::signed_char_value#1 Coalesced [44] gotoxy::y#7 = gotoxy::y#2 Coalesced [59] clrscr::l#7 = clrscr::l#1 Coalesced [60] clrscr::line_text#7 = clrscr::line_text#1 Coalesced [61] clrscr::line_cols#7 = clrscr::line_cols#1 Coalesced [65] clrscr::c#4 = clrscr::c#1 Coalesced [74] printf_sint::value#8 = printf_sint::value#1 Coalesced [84] printf_sint::value#7 = printf_sint::value#0 Coalesced [86] cputs::s#7 = cputs::s#4 Coalesced [93] cputc::c#5 = cputc::c#0 Coalesced [95] cputs::s#8 = cputs::s#0 Coalesced [98] utoa::value#17 = utoa::value#1 Coalesced [110] utoa::value#18 = utoa::value#2 Coalesced [111] utoa::started#6 = utoa::started#2 Coalesced [112] utoa::buffer#23 = utoa::buffer#11 Coalesced [115] utoa::digit#7 = utoa::digit#1 Coalesced (already) [116] utoa::value#16 = utoa::value#6 Coalesced (already) [117] utoa::started#5 = utoa::started#4 Coalesced (already) [118] utoa::buffer#22 = utoa::buffer#14 Coalesced [126] utoa::value#19 = utoa::value#0 Coalesced [127] utoa::buffer#24 = utoa::buffer#4 Coalesced [134] cputc::c#6 = cputc::c#2 Coalesced [156] utoa_append::value#6 = utoa_append::value#0 Coalesced [163] utoa_append::value#7 = utoa_append::value#1 Coalesced [164] utoa_append::digit#5 = utoa_append::digit#1 Coalesced [197] memcpy::src#5 = memcpy::src#1 Coalesced [198] memcpy::dst#5 = memcpy::dst#1 Coalesced [208] memset::dst#5 = memset::dst#1 Coalesced down to 23 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label __start::@3 Culled Empty Block label conio_c64_init::@2 Culled Empty Block label conio_c64_init::@3 Culled Empty Block label main::@3 Culled Empty Block label main::@4 Culled Empty Block label gotoxy::@3 Culled Empty Block label clrscr::@2 Culled Empty Block label test_casting::@2 Culled Empty Block label printf_sint::@3 Culled Empty Block label printf_sint::@6 Culled Empty Block label cputs::@3 Culled Empty Block label utoa::@1 Culled Empty Block label utoa::@5 Culled Empty Block label utoa::@17 Culled Empty Block label printf_number_buffer::@1 Culled Empty Block label printf_number_buffer::@23 Culled Empty Block label printf_number_buffer::@22 Culled Empty Block label printf_number_buffer::@17 Culled Empty Block label printf_number_buffer::@3 Culled Empty Block label printf_number_buffer::@4 Culled Empty Block label printf_number_buffer::@19 Culled Empty Block label cputc::@5 Culled Empty Block label cputc::@4 Culled Empty Block label cputln::@1 Culled Empty Block label cscroll::@1 Culled Empty Block label memcpy::@3 Culled Empty Block label memset::@1 Renumbering block clrscr::@3 to clrscr::@2 Renumbering block clrscr::@4 to clrscr::@3 Renumbering block clrscr::@5 to clrscr::@4 Renumbering block clrscr::@6 to clrscr::@5 Renumbering block gotoxy::@5 to gotoxy::@3 Renumbering block memset::@2 to memset::@1 Renumbering block memset::@3 to memset::@2 Renumbering block memset::@4 to memset::@3 Renumbering block cscroll::@3 to cscroll::@1 Renumbering block cscroll::@4 to cscroll::@2 Renumbering block cscroll::@5 to cscroll::@3 Renumbering block cscroll::@6 to cscroll::@4 Renumbering block cscroll::@7 to cscroll::@5 Renumbering block conio_c64_init::@4 to conio_c64_init::@2 Renumbering block utoa::@10 to utoa::@1 Renumbering block utoa::@11 to utoa::@2 Renumbering block utoa::@12 to utoa::@3 Renumbering block utoa::@13 to utoa::@4 Renumbering block utoa::@14 to utoa::@5 Renumbering block utoa::@15 to utoa::@6 Renumbering block utoa::@16 to utoa::@7 Renumbering block printf_sint::@5 to printf_sint::@3 Renumbering block printf_number_buffer::@2 to printf_number_buffer::@1 Renumbering block printf_number_buffer::@5 to printf_number_buffer::@2 Renumbering block printf_number_buffer::@9 to printf_number_buffer::@3 Adding NOP phi() at start of __start Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of conio_c64_init::@2 Adding NOP phi() at start of main Adding NOP phi() at start of gotoxy::@3 Adding NOP phi() at start of clrscr Adding NOP phi() at start of test_casting::@1 Adding NOP phi() at start of utoa Adding NOP phi() at start of printf_number_buffer Adding NOP phi() at start of printf_number_buffer::@2 Adding NOP phi() at start of cputc::@3 Adding NOP phi() at start of cputc::@1 Adding NOP phi() at start of utoa_append Adding NOP phi() at start of cscroll::@1 Adding NOP phi() at start of cscroll::@2 Adding NOP phi() at start of cscroll::@3 Adding NOP phi() at start of cscroll::@4 FINAL CONTROL FLOW GRAPH void __start() __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start [1] conio_cursor_x = 0 [2] conio_cursor_y = 0 [3] conio_line_text = DEFAULT_SCREEN [4] conio_line_color = COLORRAM [5] call conio_c64_init to:__start::@1 __start::@1: scope:[__start] from __start::__init1 [6] phi() [7] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 [8] return to:@return void conio_c64_init() conio_c64_init: scope:[conio_c64_init] from __start::__init1 [9] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE [10] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 to:conio_c64_init::@1 conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init [11] phi() to:conio_c64_init::@1 conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 [12] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) [13] gotoxy::y#2 = conio_c64_init::line#2 [14] call gotoxy to:conio_c64_init::@return conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@1 [15] return to:@return void main() main: scope:[main] from __start::@1 [16] phi() [17] call clrscr to:main::@1 main::@1: scope:[main] from main main::@2 [18] main::signed_char_value#2 = phi( main/-5, main::@2/main::signed_char_value#1 ) [19] if(main::signed_char_value#2!=0) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 [20] return to:@return main::@2: scope:[main] from main::@1 [21] main::signed_char_value#1 = ++ main::signed_char_value#2 [22] test_casting::signed_short_value#0 = main::signed_char_value#1 [23] call test_casting to:main::@1 void gotoxy(byte gotoxy::x , byte gotoxy::y) gotoxy: scope:[gotoxy] from conio_c64_init::@1 [24] if(gotoxy::y#2<$19+1) goto gotoxy::@3 to:gotoxy::@1 gotoxy::@3: scope:[gotoxy] from gotoxy [25] phi() to:gotoxy::@1 gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 [26] gotoxy::y#4 = phi( gotoxy::@3/gotoxy::y#2, gotoxy/0 ) to:gotoxy::@2 gotoxy::@2: scope:[gotoxy] from gotoxy::@1 [27] conio_cursor_x = gotoxy::x#2 [28] conio_cursor_y = gotoxy::y#4 [29] gotoxy::$7 = (word)gotoxy::y#4 [30] gotoxy::$8 = gotoxy::$7 << 2 [31] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [32] gotoxy::line_offset#0 = gotoxy::$9 << 3 [33] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 [34] conio_line_text = gotoxy::$5 [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [36] conio_line_color = gotoxy::$6 to:gotoxy::@return gotoxy::@return: scope:[gotoxy] from gotoxy::@2 [37] return to:@return void clrscr() clrscr: scope:[clrscr] from main [38] phi() to:clrscr::@1 clrscr::@1: scope:[clrscr] from clrscr clrscr::@5 [39] clrscr::line_cols#5 = phi( clrscr/COLORRAM, clrscr::@5/clrscr::line_cols#1 ) [39] clrscr::line_text#5 = phi( clrscr/DEFAULT_SCREEN, clrscr::@5/clrscr::line_text#1 ) [39] clrscr::l#2 = phi( clrscr/0, clrscr::@5/clrscr::l#1 ) [40] if(clrscr::l#2<$19) goto clrscr::@3 to:clrscr::@2 clrscr::@2: scope:[clrscr] from clrscr::@1 [41] conio_cursor_x = 0 [42] conio_cursor_y = 0 [43] conio_line_text = DEFAULT_SCREEN [44] conio_line_color = COLORRAM to:clrscr::@return clrscr::@return: scope:[clrscr] from clrscr::@2 [45] return to:@return clrscr::@3: scope:[clrscr] from clrscr::@1 clrscr::@4 [46] clrscr::c#2 = phi( clrscr::@1/0, clrscr::@4/clrscr::c#1 ) [47] if(clrscr::c#2<$28) goto clrscr::@4 to:clrscr::@5 clrscr::@5: scope:[clrscr] from clrscr::@3 [48] clrscr::line_text#1 = clrscr::line_text#5 + $28 [49] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [50] clrscr::l#1 = ++ clrscr::l#2 to:clrscr::@1 clrscr::@4: scope:[clrscr] from clrscr::@3 [51] clrscr::line_text#5[clrscr::c#2] = ' ' [52] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [53] clrscr::c#1 = ++ clrscr::c#2 to:clrscr::@3 void test_casting(signed word test_casting::signed_short_value) test_casting: scope:[test_casting] from main::@2 [54] printf_sint::value#1 = test_casting::signed_short_value#0 [55] call printf_sint to:test_casting::@1 test_casting::@1: scope:[test_casting] from test_casting [56] phi() [57] call cputs to:test_casting::@return test_casting::@return: scope:[test_casting] from test_casting::@1 [58] return to:@return void printf_sint(signed word printf_sint::value , byte printf_sint::format_min_length , byte printf_sint::format_justify_left , byte printf_sint::format_sign_always , byte printf_sint::format_zero_padding , byte printf_sint::format_upper_case , byte printf_sint::format_radix) printf_sint: scope:[printf_sint] from test_casting [59] *((byte*)&printf_buffer) = 0 [60] if(printf_sint::value#1<0) goto printf_sint::@1 to:printf_sint::@2 printf_sint::@1: scope:[printf_sint] from printf_sint [61] printf_sint::value#0 = - printf_sint::value#1 [62] *((byte*)&printf_buffer) = '-' to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1 [63] printf_sint::value#4 = phi( printf_sint::@1/printf_sint::value#0, printf_sint/printf_sint::value#1 ) [64] utoa::value#1 = (word)printf_sint::value#4 [65] call utoa to:printf_sint::@3 printf_sint::@3: scope:[printf_sint] from printf_sint::@2 [66] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer) [67] call printf_number_buffer to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@3 [68] return to:@return void cputs(const byte* cputs::s) cputs: scope:[cputs] from printf_number_buffer::@2 test_casting::@1 [69] cputs::s#4 = phi( printf_number_buffer::@2/printf_number_buffer::buffer_digits#0, test_casting::@1/test_casting::s ) to:cputs::@1 cputs::@1: scope:[cputs] from cputs cputs::@2 [70] cputs::s#3 = phi( cputs/cputs::s#4, cputs::@2/cputs::s#0 ) [71] cputs::c#1 = *cputs::s#3 [72] cputs::s#0 = ++ cputs::s#3 [73] if(0!=cputs::c#1) goto cputs::@2 to:cputs::@return cputs::@return: scope:[cputs] from cputs::@1 [74] return to:@return cputs::@2: scope:[cputs] from cputs::@1 [75] cputc::c#0 = cputs::c#1 [76] call cputc to:cputs::@1 void utoa(word utoa::value , byte* utoa::buffer , byte utoa::radix) utoa: scope:[utoa] from printf_sint::@2 [77] phi() to:utoa::@1 utoa::@1: scope:[utoa] from utoa utoa::@4 [78] utoa::buffer#11 = phi( utoa::@4/utoa::buffer#14, utoa/(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) [78] utoa::started#2 = phi( utoa::@4/utoa::started#4, utoa/0 ) [78] utoa::value#2 = phi( utoa::@4/utoa::value#6, utoa/utoa::value#1 ) [78] utoa::digit#2 = phi( utoa::@4/utoa::digit#1, utoa/0 ) [79] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@5 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 [89] utoa::buffer#14 = phi( utoa::@7/utoa::buffer#11, utoa::@6/utoa::buffer#4 ) [89] utoa::started#4 = phi( utoa::@7/utoa::started#2, utoa::@6/1 ) [89] utoa::value#6 = phi( utoa::@7/utoa::value#2, utoa::@6/utoa::value#0 ) [90] utoa::digit#1 = ++ utoa::digit#2 to:utoa::@1 utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 [91] utoa_append::buffer#0 = utoa::buffer#11 [92] utoa_append::value#0 = utoa::value#2 [93] utoa_append::sub#0 = utoa::digit_value#0 [94] call utoa_append [95] utoa_append::return#0 = utoa_append::value#2 to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@5 [96] utoa::value#0 = utoa_append::return#0 [97] utoa::buffer#4 = ++ utoa::buffer#11 to:utoa::@4 void printf_number_buffer(byte printf_number_buffer::buffer_sign , byte* printf_number_buffer::buffer_digits , byte printf_number_buffer::format_min_length , byte printf_number_buffer::format_justify_left , byte printf_number_buffer::format_sign_always , byte printf_number_buffer::format_zero_padding , byte printf_number_buffer::format_upper_case , byte printf_number_buffer::format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3 [98] phi() to:printf_number_buffer::@1 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer [99] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 to:printf_number_buffer::@3 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1 [100] cputc::c#2 = printf_number_buffer::buffer_sign#0 [101] call cputc to:printf_number_buffer::@2 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3 [102] phi() [103] call cputs to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2 [104] return to:@return void cputc(byte cputc::c) cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@3 [105] cputc::c#3 = phi( cputs::@2/cputc::c#0, printf_number_buffer::@3/cputc::c#2 ) [106] if(cputc::c#3==' ') goto cputc::@1 to:cputc::@2 cputc::@2: scope:[cputc] from cputc [107] conio_line_text[conio_cursor_x] = cputc::c#3 [108] conio_line_color[conio_cursor_x] = LIGHT_BLUE [109] conio_cursor_x = ++ conio_cursor_x [110] if(conio_cursor_x!=$28) goto cputc::@return to:cputc::@3 cputc::@3: scope:[cputc] from cputc::@2 [111] phi() [112] call cputln to:cputc::@return cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 [113] return to:@return cputc::@1: scope:[cputc] from cputc [114] phi() [115] call cputln to:cputc::@return word utoa_append(byte* utoa_append::buffer , word utoa_append::value , word utoa_append::sub) utoa_append: scope:[utoa_append] from utoa::@5 [116] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 [117] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) [117] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) [118] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 [119] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 [120] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 [121] utoa_append::digit#1 = ++ utoa_append::digit#2 [122] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 to:utoa_append::@1 void cputln() cputln: scope:[cputln] from cputc::@1 cputc::@3 [123] conio_line_text = conio_line_text + $28 [124] conio_line_color = conio_line_color + $28 [125] conio_cursor_x = 0 [126] conio_cursor_y = ++ conio_cursor_y [127] call cscroll to:cputln::@return cputln::@return: scope:[cputln] from cputln [128] return to:@return void cscroll() cscroll: scope:[cscroll] from cputln [129] if(conio_cursor_y!=$19) goto cscroll::@return to:cscroll::@1 cscroll::@1: scope:[cscroll] from cscroll [130] phi() [131] call memcpy to:cscroll::@2 cscroll::@2: scope:[cscroll] from cscroll::@1 [132] phi() [133] call memcpy to:cscroll::@3 cscroll::@3: scope:[cscroll] from cscroll::@2 [134] phi() [135] call memset to:cscroll::@4 cscroll::@4: scope:[cscroll] from cscroll::@3 [136] phi() [137] call memset to:cscroll::@5 cscroll::@5: scope:[cscroll] from cscroll::@4 [138] conio_line_text = conio_line_text - $28 [139] conio_line_color = conio_line_color - $28 [140] conio_cursor_y = -- conio_cursor_y to:cscroll::@return cscroll::@return: scope:[cscroll] from cscroll cscroll::@5 [141] return to:@return void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) memcpy: scope:[memcpy] from cscroll::@1 cscroll::@2 [142] memcpy::destination#2 = phi( cscroll::@1/(void*)DEFAULT_SCREEN, cscroll::@2/(void*)COLORRAM ) [142] memcpy::source#2 = phi( cscroll::@1/(void*)DEFAULT_SCREEN+$28, cscroll::@2/(void*)COLORRAM+$28 ) [143] memcpy::src_end#0 = (byte*)memcpy::source#2 + (word)$19*$28-$28 [144] memcpy::src#4 = (byte*)memcpy::source#2 [145] memcpy::dst#4 = (byte*)memcpy::destination#2 to:memcpy::@1 memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 [146] memcpy::dst#2 = phi( memcpy/memcpy::dst#4, memcpy::@2/memcpy::dst#1 ) [146] memcpy::src#2 = phi( memcpy/memcpy::src#4, memcpy::@2/memcpy::src#1 ) [147] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 to:memcpy::@return memcpy::@return: scope:[memcpy] from memcpy::@1 [148] return to:@return memcpy::@2: scope:[memcpy] from memcpy::@1 [149] *memcpy::dst#2 = *memcpy::src#2 [150] memcpy::dst#1 = ++ memcpy::dst#2 [151] memcpy::src#1 = ++ memcpy::src#2 to:memcpy::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from cscroll::@3 cscroll::@4 [152] memset::c#4 = phi( cscroll::@3/' ', cscroll::@4/LIGHT_BLUE ) [152] memset::str#3 = phi( cscroll::@3/(void*)DEFAULT_SCREEN+(word)$19*$28-$28, cscroll::@4/(void*)COLORRAM+(word)$19*$28-$28 ) to:memset::@1 memset::@1: scope:[memset] from memset [153] memset::end#0 = (byte*)memset::str#3 + $28 [154] memset::dst#4 = (byte*)memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 [155] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) [156] if(memset::dst#2!=memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 [157] return to:@return memset::@3: scope:[memset] from memset::@2 [158] *memset::dst#2 = memset::c#4 [159] memset::dst#1 = ++ memset::dst#2 to:memset::@2 VARIABLE REGISTER WEIGHTS void __start() void clrscr() byte clrscr::c byte clrscr::c#1 20002.0 byte clrscr::c#2 12501.25 byte clrscr::l byte clrscr::l#1 2002.0 byte clrscr::l#2 333.6666666666667 byte* clrscr::line_cols byte* clrscr::line_cols#1 1001.0 byte* clrscr::line_cols#5 1500.375 byte* clrscr::line_text byte* clrscr::line_text#1 667.3333333333334 byte* clrscr::line_text#5 1714.7142857142858 void conio_c64_init() byte conio_c64_init::line byte conio_c64_init::line#0 11.0 byte conio_c64_init::line#2 22.0 byte conio_cursor_x loadstore 2.777777816666666E8 byte conio_cursor_y loadstore 4.571428574414286E9 byte* conio_line_color loadstore 3.2500000030735292E9 byte* conio_line_text loadstore 3.202898553753623E9 void cputc(byte cputc::c) byte cputc::c byte cputc::c#0 2.00000002E8 byte cputc::c#2 200002.0 byte cputc::c#3 1.050050002E9 void cputln() void cputs(const byte* cputs::s) byte cputs::c byte cputs::c#1 1.00000001E8 const byte* cputs::s const byte* cputs::s#0 5.00000005E7 const byte* cputs::s#3 1.50500002E8 const byte* cputs::s#4 1000001.0 void cscroll() void gotoxy(byte gotoxy::x , byte gotoxy::y) byte*~ gotoxy::$5 202.0 byte*~ gotoxy::$6 202.0 word~ gotoxy::$7 151.5 word~ gotoxy::$8 202.0 word~ gotoxy::$9 202.0 word gotoxy::line_offset word gotoxy::line_offset#0 101.0 byte gotoxy::x byte gotoxy::y byte gotoxy::y#2 71.0 byte gotoxy::y#4 67.33333333333333 void main() signed byte main::signed_char_value signed byte main::signed_char_value#1 101.0 signed byte main::signed_char_value#2 151.5 void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) void* memcpy::destination void* memcpy::destination#2 byte* memcpy::dst byte* memcpy::dst#1 1.000000000000001E15 byte* memcpy::dst#2 1.0003333333333348E15 byte* memcpy::dst#4 2.000000000002E12 word memcpy::num void* memcpy::return void* memcpy::source void* memcpy::source#2 byte* memcpy::src byte* memcpy::src#1 2.000000000000002E15 byte* memcpy::src#2 1.0002500000000012E15 byte* memcpy::src#4 1.000000000001E12 byte* memcpy::src_end byte* memcpy::src_end#0 1.2512500000000025E14 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c byte memset::c#4 1.42857142857143E14 byte* memset::dst byte* memset::dst#1 2.000000000000002E15 byte* memset::dst#2 1.3336666666666685E15 byte* memset::dst#4 2.000000000002E12 byte* memset::end byte* memset::end#0 1.668333333333337E14 word memset::num void* memset::return void* memset::str void* memset::str#3 struct printf_buffer_number printf_buffer loadstore = {} void printf_number_buffer(byte printf_number_buffer::buffer_sign , byte* printf_number_buffer::buffer_digits , byte printf_number_buffer::format_min_length , byte printf_number_buffer::format_justify_left , byte printf_number_buffer::format_sign_always , byte printf_number_buffer::format_zero_padding , byte printf_number_buffer::format_upper_case , byte printf_number_buffer::format_radix) struct printf_buffer_number printf_number_buffer::buffer byte* printf_number_buffer::buffer_digits byte printf_number_buffer::buffer_sign byte printf_number_buffer::buffer_sign#0 70001.0 struct printf_format_number printf_number_buffer::format byte printf_number_buffer::format_justify_left byte printf_number_buffer::format_min_length byte printf_number_buffer::format_radix byte printf_number_buffer::format_sign_always byte printf_number_buffer::format_upper_case byte printf_number_buffer::format_zero_padding signed byte printf_number_buffer::len signed byte printf_number_buffer::padding void printf_sint(signed word printf_sint::value , byte printf_sint::format_min_length , byte printf_sint::format_justify_left , byte printf_sint::format_sign_always , byte printf_sint::format_zero_padding , byte printf_sint::format_upper_case , byte printf_sint::format_radix) struct printf_format_number printf_sint::format byte printf_sint::format_justify_left byte printf_sint::format_min_length byte printf_sint::format_radix byte printf_sint::format_sign_always byte printf_sint::format_upper_case byte printf_sint::format_zero_padding word printf_sint::uvalue signed word printf_sint::value signed word printf_sint::value#0 10001.0 signed word printf_sint::value#1 10334.666666666666 signed word printf_sint::value#4 20002.0 void test_casting(signed word test_casting::signed_short_value) signed word test_casting::signed_short_value signed word test_casting::signed_short_value#0 1102.0 void utoa(word utoa::value , byte* utoa::buffer , byte utoa::radix) byte~ utoa::$10 2.0000002E7 byte~ utoa::$11 200002.0 byte* utoa::buffer byte* utoa::buffer#11 2871429.0 byte* utoa::buffer#14 1.50000015E7 byte* utoa::buffer#3 200002.0 byte* utoa::buffer#4 2.0000002E7 byte utoa::digit byte utoa::digit#1 2.0000002E7 byte utoa::digit#2 2857143.1428571427 word utoa::digit_value word utoa::digit_value#0 6000000.6 word* utoa::digit_values byte utoa::max_digits byte utoa::radix byte utoa::started byte utoa::started#2 5000000.5 byte utoa::started#4 1.0000001E7 word utoa::value word utoa::value#0 1.0000001E7 word utoa::value#1 55001.0 word utoa::value#2 5728572.142857142 word utoa::value#6 1.50000015E7 word utoa_append(byte* utoa_append::buffer , word utoa_append::value , word utoa_append::sub) byte* utoa_append::buffer byte* utoa_append::buffer#0 1.375000025E7 byte utoa_append::digit byte utoa_append::digit#1 1.00000000001E11 byte utoa_append::digit#2 1.000500000015E11 word utoa_append::return word utoa_append::return#0 2.0000002E7 word utoa_append::sub word utoa_append::sub#0 3.33350000005E10 word utoa_append::value word utoa_append::value#0 3.6666667333333336E7 word utoa_append::value#1 2.00000000002E11 word utoa_append::value#2 5.001833333416667E10 Initial phi equivalence classes [ conio_c64_init::line#2 conio_c64_init::line#0 ] [ main::signed_char_value#2 main::signed_char_value#1 ] [ gotoxy::y#4 gotoxy::y#2 ] [ clrscr::l#2 clrscr::l#1 ] [ clrscr::line_text#5 clrscr::line_text#1 ] [ clrscr::line_cols#5 clrscr::line_cols#1 ] [ clrscr::c#2 clrscr::c#1 ] [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] [ cputs::s#3 cputs::s#4 cputs::s#0 ] [ utoa::digit#2 utoa::digit#1 ] [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] [ utoa::started#2 utoa::started#4 ] [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] [ cputc::c#3 cputc::c#0 cputc::c#2 ] [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] [ utoa_append::digit#2 utoa_append::digit#1 ] [ memcpy::source#2 ] [ memcpy::destination#2 ] [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] [ memset::str#3 ] [ memset::c#4 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] Added variable conio_cursor_x to live range equivalence class [ conio_cursor_x ] Added variable conio_cursor_y to live range equivalence class [ conio_cursor_y ] Added variable conio_line_text to live range equivalence class [ conio_line_text ] Added variable conio_line_color to live range equivalence class [ conio_line_color ] Added variable test_casting::signed_short_value#0 to live range equivalence class [ test_casting::signed_short_value#0 ] Added variable gotoxy::$7 to live range equivalence class [ gotoxy::$7 ] Added variable gotoxy::$8 to live range equivalence class [ gotoxy::$8 ] Added variable gotoxy::$9 to live range equivalence class [ gotoxy::$9 ] Added variable gotoxy::line_offset#0 to live range equivalence class [ gotoxy::line_offset#0 ] Added variable gotoxy::$5 to live range equivalence class [ gotoxy::$5 ] Added variable gotoxy::$6 to live range equivalence class [ gotoxy::$6 ] Added variable printf_number_buffer::buffer_sign#0 to live range equivalence class [ printf_number_buffer::buffer_sign#0 ] Added variable cputs::c#1 to live range equivalence class [ cputs::c#1 ] Added variable utoa::$11 to live range equivalence class [ utoa::$11 ] Added variable utoa::buffer#3 to live range equivalence class [ utoa::buffer#3 ] Added variable utoa::$10 to live range equivalence class [ utoa::$10 ] Added variable utoa::digit_value#0 to live range equivalence class [ utoa::digit_value#0 ] Added variable utoa_append::buffer#0 to live range equivalence class [ utoa_append::buffer#0 ] Added variable utoa_append::sub#0 to live range equivalence class [ utoa_append::sub#0 ] Added variable utoa_append::return#0 to live range equivalence class [ utoa_append::return#0 ] Added variable memcpy::src_end#0 to live range equivalence class [ memcpy::src_end#0 ] Added variable memset::end#0 to live range equivalence class [ memset::end#0 ] Added variable printf_buffer to live range equivalence class [ printf_buffer ] Complete equivalence classes [ conio_c64_init::line#2 conio_c64_init::line#0 ] [ main::signed_char_value#2 main::signed_char_value#1 ] [ gotoxy::y#4 gotoxy::y#2 ] [ clrscr::l#2 clrscr::l#1 ] [ clrscr::line_text#5 clrscr::line_text#1 ] [ clrscr::line_cols#5 clrscr::line_cols#1 ] [ clrscr::c#2 clrscr::c#1 ] [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] [ cputs::s#3 cputs::s#4 cputs::s#0 ] [ utoa::digit#2 utoa::digit#1 ] [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] [ utoa::started#2 utoa::started#4 ] [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] [ cputc::c#3 cputc::c#0 cputc::c#2 ] [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] [ utoa_append::digit#2 utoa_append::digit#1 ] [ memcpy::source#2 ] [ memcpy::destination#2 ] [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] [ memset::str#3 ] [ memset::c#4 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] [ conio_cursor_x ] [ conio_cursor_y ] [ conio_line_text ] [ conio_line_color ] [ test_casting::signed_short_value#0 ] [ gotoxy::$7 ] [ gotoxy::$8 ] [ gotoxy::$9 ] [ gotoxy::line_offset#0 ] [ gotoxy::$5 ] [ gotoxy::$6 ] [ printf_number_buffer::buffer_sign#0 ] [ cputs::c#1 ] [ utoa::$11 ] [ utoa::buffer#3 ] [ utoa::$10 ] [ utoa::digit_value#0 ] [ utoa_append::buffer#0 ] [ utoa_append::sub#0 ] [ utoa_append::return#0 ] [ memcpy::src_end#0 ] [ memset::end#0 ] [ printf_buffer ] Allocated zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ] Allocated zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Allocated zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] Allocated zp[1]:5 [ clrscr::l#2 clrscr::l#1 ] Allocated zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] Allocated zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] Allocated zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] Allocated zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] Allocated zp[2]:13 [ cputs::s#3 cputs::s#4 cputs::s#0 ] Allocated zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] Allocated zp[2]:16 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] Allocated zp[1]:18 [ utoa::started#2 utoa::started#4 ] Allocated zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] Allocated zp[1]:21 [ cputc::c#3 cputc::c#0 cputc::c#2 ] Allocated zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] Allocated zp[1]:24 [ utoa_append::digit#2 utoa_append::digit#1 ] Allocated zp[2]:25 [ memcpy::source#2 ] Allocated zp[2]:27 [ memcpy::destination#2 ] Allocated zp[2]:29 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] Allocated zp[2]:31 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] Allocated zp[2]:33 [ memset::str#3 ] Allocated zp[1]:35 [ memset::c#4 ] Allocated zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated zp[1]:38 [ conio_cursor_x ] Allocated zp[1]:39 [ conio_cursor_y ] Allocated zp[2]:40 [ conio_line_text ] Allocated zp[2]:42 [ conio_line_color ] Allocated zp[2]:44 [ test_casting::signed_short_value#0 ] Allocated zp[2]:46 [ gotoxy::$7 ] Allocated zp[2]:48 [ gotoxy::$8 ] Allocated zp[2]:50 [ gotoxy::$9 ] Allocated zp[2]:52 [ gotoxy::line_offset#0 ] Allocated zp[2]:54 [ gotoxy::$5 ] Allocated zp[2]:56 [ gotoxy::$6 ] Allocated zp[1]:58 [ printf_number_buffer::buffer_sign#0 ] Allocated zp[1]:59 [ cputs::c#1 ] Allocated zp[1]:60 [ utoa::$11 ] Allocated zp[2]:61 [ utoa::buffer#3 ] Allocated zp[1]:63 [ utoa::$10 ] Allocated zp[2]:64 [ utoa::digit_value#0 ] Allocated zp[2]:66 [ utoa_append::buffer#0 ] Allocated zp[2]:68 [ utoa_append::sub#0 ] Allocated zp[2]:70 [ utoa_append::return#0 ] Allocated zp[2]:72 [ memcpy::src_end#0 ] Allocated zp[2]:74 [ memset::end#0 ] Allocated mem[12] [ printf_buffer ] REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] conio_cursor_x = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [2] conio_cursor_y = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [3] conio_line_text = DEFAULT_SCREEN [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [4] conio_line_color = COLORRAM [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [22] test_casting::signed_short_value#0 = main::signed_char_value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] ( main:7 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Statement [27] conio_cursor_x = gotoxy::x#2 [ gotoxy::y#4 ] ( gotoxy:14 [ gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] Statement [29] gotoxy::$7 = (word)gotoxy::y#4 [ gotoxy::$7 ] ( gotoxy:14 [ gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [30] gotoxy::$8 = gotoxy::$7 << 2 [ gotoxy::$7 gotoxy::$8 ] ( gotoxy:14 [ gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [31] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [ gotoxy::$9 ] ( gotoxy:14 [ gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [32] gotoxy::line_offset#0 = gotoxy::$9 << 3 [ gotoxy::line_offset#0 ] ( gotoxy:14 [ gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [33] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 [ gotoxy::line_offset#0 gotoxy::$5 ] ( gotoxy:14 [ gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [34] conio_line_text = gotoxy::$5 [ gotoxy::line_offset#0 ] ( gotoxy:14 [ gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ gotoxy::$6 ] ( gotoxy:14 [ gotoxy::$6 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$6 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [36] conio_line_color = gotoxy::$6 [ ] ( gotoxy:14 [ ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [41] conio_cursor_x = 0 [ conio_cursor_x ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a Statement [42] conio_cursor_y = 0 [ conio_cursor_x conio_cursor_y ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a Statement [43] conio_line_text = DEFAULT_SCREEN [ conio_cursor_x conio_cursor_y conio_line_text ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text ] { } ) always clobbers reg byte a Statement [44] conio_line_color = COLORRAM [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a Statement [48] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ clrscr::l#2 clrscr::l#1 ] Statement [49] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a Statement [51] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] Statement [52] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a Statement [54] printf_sint::value#1 = test_casting::signed_short_value#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [59] *((byte*)&printf_buffer) = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [60] if(printf_sint::value#1<0) goto printf_sint::@1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [61] printf_sint::value#0 = - printf_sint::value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [62] *((byte*)&printf_buffer) = '-' [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [64] utoa::value#1 = (word)printf_sint::value#4 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [71] cputs::c#1 = *cputs::s#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] ( main:7::test_casting:23::cputs:57 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Statement [81] *utoa::buffer#11 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#11 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Statement [82] utoa::buffer#3 = ++ utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#3 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [83] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Statement [85] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:18 [ utoa::started#2 utoa::started#4 ] Statement [86] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [88] if(utoa::value#2>=utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [91] utoa_append::buffer#0 = utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [92] utoa_append::value#0 = utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [93] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [95] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [96] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [107] conio_line_text[conio_cursor_x] = cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y Statement [108] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Statement [110] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [118] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ utoa_append::digit#2 utoa_append::digit#1 ] Statement [119] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] Statement [122] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [123] conio_line_text = conio_line_text + $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [124] conio_line_color = conio_line_color + $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [125] conio_cursor_x = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [129] if(conio_cursor_y!=$19) goto cscroll::@return [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [138] conio_line_text = conio_line_text - $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [139] conio_line_color = conio_line_color - $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [143] memcpy::src_end#0 = (byte*)memcpy::source#2 + (word)$19*$28-$28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [144] memcpy::src#4 = (byte*)memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [145] memcpy::dst#4 = (byte*)memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [147] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [149] *memcpy::dst#2 = *memcpy::src#2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Statement [153] memset::end#0 = (byte*)memset::str#3 + $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:35 [ memset::c#4 ] Statement [154] memset::dst#4 = (byte*)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [156] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [158] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:35 [ memset::c#4 ] Statement [1] conio_cursor_x = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [2] conio_cursor_y = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [3] conio_line_text = DEFAULT_SCREEN [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [4] conio_line_color = COLORRAM [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [22] test_casting::signed_short_value#0 = main::signed_char_value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] ( main:7 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color main::signed_char_value#1 test_casting::signed_short_value#0 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } ) always clobbers reg byte a Statement [27] conio_cursor_x = gotoxy::x#2 [ gotoxy::y#4 ] ( gotoxy:14 [ gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::y#4 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [29] gotoxy::$7 = (word)gotoxy::y#4 [ gotoxy::$7 ] ( gotoxy:14 [ gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [30] gotoxy::$8 = gotoxy::$7 << 2 [ gotoxy::$7 gotoxy::$8 ] ( gotoxy:14 [ gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [31] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [ gotoxy::$9 ] ( gotoxy:14 [ gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$9 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [32] gotoxy::line_offset#0 = gotoxy::$9 << 3 [ gotoxy::line_offset#0 ] ( gotoxy:14 [ gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [33] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 [ gotoxy::line_offset#0 gotoxy::$5 ] ( gotoxy:14 [ gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [34] conio_line_text = gotoxy::$5 [ gotoxy::line_offset#0 ] ( gotoxy:14 [ gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::line_offset#0 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ gotoxy::$6 ] ( gotoxy:14 [ gotoxy::$6 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer gotoxy::$6 ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [36] conio_line_color = gotoxy::$6 [ ] ( gotoxy:14 [ ] { { gotoxy::y#2 = conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ printf_buffer ] { { gotoxy::y#2 = conio_c64_init::line#2 } } ) always clobbers reg byte a Statement [41] conio_cursor_x = 0 [ conio_cursor_x ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a Statement [42] conio_cursor_y = 0 [ conio_cursor_x conio_cursor_y ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a Statement [43] conio_line_text = DEFAULT_SCREEN [ conio_cursor_x conio_cursor_y conio_line_text ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text ] { } ) always clobbers reg byte a Statement [44] conio_line_color = COLORRAM [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::clrscr:17 [ printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a Statement [48] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a Statement [49] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a Statement [51] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a Statement [52] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:7::clrscr:17 [ printf_buffer clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a Statement [54] printf_sint::value#1 = test_casting::signed_short_value#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [59] *((byte*)&printf_buffer) = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [60] if(printf_sint::value#1<0) goto printf_sint::@1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_sint::value#1 printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [61] printf_sint::value#0 = - printf_sint::value#1 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [62] *((byte*)&printf_buffer) = '-' [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_sint::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [64] utoa::value#1 = (word)printf_sint::value#4 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] ( main:7::test_casting:23::printf_sint:55 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::value#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [71] cputs::c#1 = *cputs::s#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] ( main:7::test_casting:23::cputs:57 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#3 cputs::c#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Statement [81] *utoa::buffer#11 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#11 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Statement [82] utoa::buffer#3 = ++ utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#3 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [83] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a reg byte y Statement [85] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [86] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [88] if(utoa::value#2>=utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [91] utoa_append::buffer#0 = utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [92] utoa_append::value#0 = utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [93] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [95] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [96] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:7::test_casting:23::printf_sint:55::utoa:65 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } } ) always clobbers reg byte a Statement [107] conio_line_text[conio_cursor_x] = cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y Statement [108] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Statement [110] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [118] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [119] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y Statement [122] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:7::test_casting:23::printf_sint:55::utoa:65::utoa_append:94 [ main::signed_char_value#1 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Statement [123] conio_line_text = conio_line_text + $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [124] conio_line_color = conio_line_color + $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [125] conio_cursor_x = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [129] if(conio_cursor_y!=$19) goto cscroll::@return [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [138] conio_line_text = conio_line_text - $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [139] conio_line_color = conio_line_color - $28 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [143] memcpy::src_end#0 = (byte*)memcpy::source#2 + (word)$19*$28-$28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [144] memcpy::src#4 = (byte*)memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [145] memcpy::dst#4 = (byte*)memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [147] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [149] *memcpy::dst#2 = *memcpy::src#2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:131 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memcpy:133 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Statement [153] memset::end#0 = (byte*)memset::str#3 + $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [154] memset::dst#4 = (byte*)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [156] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a Statement [158] *memset::dst#2 = memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:135 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:112::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:7::test_casting:23::cputs:57::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputs:103::cputc:76::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::test_casting:23::printf_sint:55::printf_number_buffer:67::cputc:101::cputln:115::cscroll:127::memset:137 [ main::signed_char_value#1 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#2 ] { { test_casting::signed_short_value#0 = main::signed_char_value#1 printf_sint::value#1 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] : zp[1]:3 , reg byte x , Potential registers zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:5 [ clrscr::l#2 clrscr::l#1 ] : zp[1]:5 , reg byte x , reg byte y , Potential registers zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]:6 , Potential registers zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:8 , Potential registers zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:10 , reg byte x , reg byte y , Potential registers zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] : zp[2]:11 , Potential registers zp[2]:13 [ cputs::s#3 cputs::s#4 cputs::s#0 ] : zp[2]:13 , Potential registers zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:15 , reg byte x , Potential registers zp[2]:16 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp[2]:16 , Potential registers zp[1]:18 [ utoa::started#2 utoa::started#4 ] : zp[1]:18 , reg byte x , reg byte y , Potential registers zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:19 , Potential registers zp[1]:21 [ cputc::c#3 cputc::c#0 cputc::c#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:22 , Potential registers zp[1]:24 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:24 , reg byte x , reg byte y , Potential registers zp[2]:25 [ memcpy::source#2 ] : zp[2]:25 , Potential registers zp[2]:27 [ memcpy::destination#2 ] : zp[2]:27 , Potential registers zp[2]:29 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] : zp[2]:29 , Potential registers zp[2]:31 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] : zp[2]:31 , Potential registers zp[2]:33 [ memset::str#3 ] : zp[2]:33 , Potential registers zp[1]:35 [ memset::c#4 ] : zp[1]:35 , reg byte x , Potential registers zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:36 , Potential registers zp[1]:38 [ conio_cursor_x ] : zp[1]:38 , Potential registers zp[1]:39 [ conio_cursor_y ] : zp[1]:39 , Potential registers zp[2]:40 [ conio_line_text ] : zp[2]:40 , Potential registers zp[2]:42 [ conio_line_color ] : zp[2]:42 , Potential registers zp[2]:44 [ test_casting::signed_short_value#0 ] : zp[2]:44 , Potential registers zp[2]:46 [ gotoxy::$7 ] : zp[2]:46 , Potential registers zp[2]:48 [ gotoxy::$8 ] : zp[2]:48 , Potential registers zp[2]:50 [ gotoxy::$9 ] : zp[2]:50 , Potential registers zp[2]:52 [ gotoxy::line_offset#0 ] : zp[2]:52 , Potential registers zp[2]:54 [ gotoxy::$5 ] : zp[2]:54 , Potential registers zp[2]:56 [ gotoxy::$6 ] : zp[2]:56 , Potential registers zp[1]:58 [ printf_number_buffer::buffer_sign#0 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:59 [ cputs::c#1 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:60 [ utoa::$11 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:61 [ utoa::buffer#3 ] : zp[2]:61 , Potential registers zp[1]:63 [ utoa::$10 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:64 [ utoa::digit_value#0 ] : zp[2]:64 , Potential registers zp[2]:66 [ utoa_append::buffer#0 ] : zp[2]:66 , Potential registers zp[2]:68 [ utoa_append::sub#0 ] : zp[2]:68 , Potential registers zp[2]:70 [ utoa_append::return#0 ] : zp[2]:70 , Potential registers zp[2]:72 [ memcpy::src_end#0 ] : zp[2]:72 , Potential registers zp[2]:74 [ memset::end#0 ] : zp[2]:74 , Potential registers mem[12] [ printf_buffer ] : mem[12] , REGISTER UPLIFT SCOPES Uplift Scope [memcpy] 3,001,250,000,000,004: zp[2]:29 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 2,002,333,333,333,337.8: zp[2]:31 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 125,125,000,000,000.25: zp[2]:72 [ memcpy::src_end#0 ] 0: zp[2]:25 [ memcpy::source#2 ] 0: zp[2]:27 [ memcpy::destination#2 ] Uplift Scope [memset] 3,335,666,666,666,672.5: zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 166,833,333,333,333.7: zp[2]:74 [ memset::end#0 ] 142,857,142,857,143: zp[1]:35 [ memset::c#4 ] 0: zp[2]:33 [ memset::str#3 ] Uplift Scope [utoa_append] 250,055,000,003.5: zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 200,050,000,002.5: zp[1]:24 [ utoa_append::digit#2 utoa_append::digit#1 ] 33,335,000,000.5: zp[2]:68 [ utoa_append::sub#0 ] 20,000,002: zp[2]:70 [ utoa_append::return#0 ] 13,750,000.25: zp[2]:66 [ utoa_append::buffer#0 ] Uplift Scope [] 4,571,428,574.41: zp[1]:39 [ conio_cursor_y ] 3,250,000,003.07: zp[2]:42 [ conio_line_color ] 3,202,898,553.75: zp[2]:40 [ conio_line_text ] 277,777,781.67: zp[1]:38 [ conio_cursor_x ] 0: mem[12] [ printf_buffer ] Uplift Scope [cputc] 1,250,250,006: zp[1]:21 [ cputc::c#3 cputc::c#0 cputc::c#2 ] Uplift Scope [cputs] 201,500,003.5: zp[2]:13 [ cputs::s#3 cputs::s#4 cputs::s#0 ] 100,000,001: zp[1]:59 [ cputs::c#1 ] Uplift Scope [utoa] 37,871,432.5: zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,783,575.64: zp[2]:16 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,857,145.14: zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] 20,000,002: zp[1]:63 [ utoa::$10 ] 15,000,001.5: zp[1]:18 [ utoa::started#2 utoa::started#4 ] 6,000,000.6: zp[2]:64 [ utoa::digit_value#0 ] 200,002: zp[1]:60 [ utoa::$11 ] 200,002: zp[2]:61 [ utoa::buffer#3 ] Uplift Scope [printf_number_buffer] 70,001: zp[1]:58 [ printf_number_buffer::buffer_sign#0 ] Uplift Scope [printf_sint] 40,337.67: zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] Uplift Scope [clrscr] 32,503.25: zp[1]:10 [ clrscr::c#2 clrscr::c#1 ] 2,501.38: zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] 2,382.05: zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] 2,335.67: zp[1]:5 [ clrscr::l#2 clrscr::l#1 ] Uplift Scope [gotoxy] 202: zp[2]:48 [ gotoxy::$8 ] 202: zp[2]:50 [ gotoxy::$9 ] 202: zp[2]:54 [ gotoxy::$5 ] 202: zp[2]:56 [ gotoxy::$6 ] 151.5: zp[2]:46 [ gotoxy::$7 ] 138.33: zp[1]:4 [ gotoxy::y#4 gotoxy::y#2 ] 101: zp[2]:52 [ gotoxy::line_offset#0 ] Uplift Scope [test_casting] 1,102: zp[2]:44 [ test_casting::signed_short_value#0 ] Uplift Scope [main] 252.5: zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Uplift Scope [conio_c64_init] 33: zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ] Uplift Scope [cputln] Uplift Scope [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] Uplift Scope [cscroll] Uplift Scope [RADIX] Uplift Scope [printf_format_number] Uplift Scope [printf_buffer_number] Uplift Scope [printf_format_string] Uplift Scope [__start] Uplifting [memcpy] best 204028 combination zp[2]:29 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:31 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:72 [ memcpy::src_end#0 ] zp[2]:25 [ memcpy::source#2 ] zp[2]:27 [ memcpy::destination#2 ] Uplifting [memset] best 203022 combination zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:74 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:33 [ memset::str#3 ] Uplifting [utoa_append] best 197019 combination zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:68 [ utoa_append::sub#0 ] zp[2]:70 [ utoa_append::return#0 ] zp[2]:66 [ utoa_append::buffer#0 ] Uplifting [] best 197019 combination zp[1]:39 [ conio_cursor_y ] zp[2]:42 [ conio_line_color ] zp[2]:40 [ conio_line_text ] zp[1]:38 [ conio_cursor_x ] mem[12] [ printf_buffer ] Uplifting [cputc] best 196710 combination reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] Uplifting [cputs] best 196010 combination zp[2]:13 [ cputs::s#3 cputs::s#4 cputs::s#0 ] reg byte a [ cputs::c#1 ] Uplifting [utoa] best 194904 combination zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:16 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:64 [ utoa::digit_value#0 ] reg byte x [ utoa::$11 ] zp[2]:61 [ utoa::buffer#3 ] Uplifting [printf_number_buffer] best 194897 combination reg byte a [ printf_number_buffer::buffer_sign#0 ] Uplifting [printf_sint] best 194897 combination zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] Uplifting [clrscr] best 193307 combination reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] reg byte x [ clrscr::l#2 clrscr::l#1 ] Uplifting [gotoxy] best 193294 combination zp[2]:48 [ gotoxy::$8 ] zp[2]:50 [ gotoxy::$9 ] zp[2]:54 [ gotoxy::$5 ] zp[2]:56 [ gotoxy::$6 ] zp[2]:46 [ gotoxy::$7 ] reg byte x [ gotoxy::y#4 gotoxy::y#2 ] zp[2]:52 [ gotoxy::line_offset#0 ] Uplifting [test_casting] best 193294 combination zp[2]:44 [ test_casting::signed_short_value#0 ] Uplifting [main] best 193294 combination zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Uplifting [conio_c64_init] best 193282 combination reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ] Uplifting [cputln] best 193282 combination Uplifting [MOS6526_CIA] best 193282 combination Uplifting [MOS6569_VICII] best 193282 combination Uplifting [MOS6581_SID] best 193282 combination Uplifting [cscroll] best 193282 combination Uplifting [RADIX] best 193282 combination Uplifting [printf_format_number] best 193282 combination Uplifting [printf_buffer_number] best 193282 combination Uplifting [printf_format_string] best 193282 combination Uplifting [__start] best 193282 combination Attempting to uplift remaining variables inzp[1]:39 [ conio_cursor_y ] Uplifting [] best 193282 combination zp[1]:39 [ conio_cursor_y ] Attempting to uplift remaining variables inzp[1]:38 [ conio_cursor_x ] Uplifting [] best 193282 combination zp[1]:38 [ conio_cursor_x ] Attempting to uplift remaining variables inzp[1]:15 [ utoa::digit#2 utoa::digit#1 ] Uplifting [utoa] best 193282 combination zp[1]:15 [ utoa::digit#2 utoa::digit#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Uplifting [main] best 193282 combination zp[1]:3 [ main::signed_char_value#2 main::signed_char_value#1 ] Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 ] ] with [ zp[2]:16 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp[2]:44 [ test_casting::signed_short_value#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:61 [ utoa::buffer#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:66 [ utoa_append::buffer#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:70 [ utoa_append::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:25 [ memcpy::source#2 ] ] with [ zp[2]:29 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:27 [ memcpy::destination#2 ] ] with [ zp[2]:31 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:33 [ memset::str#3 ] ] with [ zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:46 [ gotoxy::$7 ] ] with [ zp[2]:50 [ gotoxy::$9 ] ] - score: 1 Coalescing zero page register [ zp[2]:52 [ gotoxy::line_offset#0 ] ] with [ zp[2]:56 [ gotoxy::$6 ] ] - score: 1 Coalescing zero page register [ zp[2]:64 [ utoa::digit_value#0 ] ] with [ zp[2]:68 [ utoa_append::sub#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 ] ] with [ zp[2]:22 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:46 [ gotoxy::$7 gotoxy::$9 ] ] with [ zp[2]:52 [ gotoxy::line_offset#0 gotoxy::$6 ] ] - score: 1 Coalescing zero page register [ zp[2]:11 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:6 [ clrscr::line_text#5 clrscr::line_text#1 ] ] Coalescing zero page register [ zp[2]:13 [ cputs::s#3 cputs::s#4 cputs::s#0 ] ] with [ zp[2]:8 [ clrscr::line_cols#5 clrscr::line_cols#1 ] ] Coalescing zero page register [ zp[2]:25 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] with [ zp[2]:19 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] Coalescing zero page register [ zp[2]:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:27 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] Coalescing zero page register [ zp[2]:72 [ memcpy::src_end#0 ] ] with [ zp[2]:64 [ utoa::digit_value#0 utoa_append::sub#0 ] ] Coalescing zero page register [ zp[2]:74 [ memset::end#0 ] ] with [ zp[2]:25 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] Allocated (was zp[1]:3) zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] Allocated (was zp[2]:11) zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ] Allocated (was zp[2]:13) zp[2]:5 [ cputs::s#3 cputs::s#4 cputs::s#0 clrscr::line_cols#5 clrscr::line_cols#1 ] Allocated (was zp[1]:15) zp[1]:7 [ utoa::digit#2 utoa::digit#1 ] Allocated (was zp[2]:33) zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] Allocated (was zp[1]:38) zp[1]:10 [ conio_cursor_x ] Allocated (was zp[1]:39) zp[1]:11 [ conio_cursor_y ] Allocated (was zp[2]:40) zp[2]:12 [ conio_line_text ] Allocated (was zp[2]:42) zp[2]:14 [ conio_line_color ] Allocated (was zp[2]:46) zp[2]:16 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] Allocated (was zp[2]:48) zp[2]:18 [ gotoxy::$8 ] Allocated (was zp[2]:54) zp[2]:20 [ gotoxy::$5 ] Allocated (was zp[2]:72) zp[2]:22 [ memcpy::src_end#0 utoa::digit_value#0 utoa_append::sub#0 ] Allocated (was zp[2]:74) zp[2]:24 [ memset::end#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Demonstrates problem with Casting of negative signed values // https://gitlab.com/camelot/kickc/-/issues/496 // Upstart // Commodore 64 PRG executable file .file [name="casting-negative.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(__start) // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c /// Color Ram .label COLORRAM = $d800 /// Default address of screen character matrix .label DEFAULT_SCREEN = $400 // The number of bytes on the screen // The current cursor x-position .label conio_cursor_x = $a // The current cursor y-position .label conio_cursor_y = $b // The current text cursor line start .label conio_line_text = $c // The current color cursor line start .label conio_line_color = $e .segment Code // __start __start: { jmp __init1 // __start::__init1 __init1: // [1] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // [2] conio_cursor_y = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_y // [3] conio_line_text = DEFAULT_SCREEN -- pbuz1=pbuc1 lda #DEFAULT_SCREEN sta.z conio_line_text+1 // [4] conio_line_color = COLORRAM -- pbuz1=pbuc1 lda #COLORRAM sta.z conio_line_color+1 // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: // [7] call main // [16] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: // [8] return rts } // conio_c64_init // Set initial cursor position conio_c64_init: { // Position cursor at current line .label BASIC_CURSOR_LINE = $d6 // [9] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 ldx BASIC_CURSOR_LINE // [10] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b2_from_conio_c64_init // [12] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] __b1_from_conio_c64_init: // [12] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 ldx #$19-1 jmp __b1 // [11] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] __b2_from_conio_c64_init: jmp __b2 // conio_c64_init::@2 __b2: // [12] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] __b1_from___b2: // [12] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy jmp __b1 // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return __breturn: // [15] return rts } // main main: { .label signed_char_value = 2 // [17] call clrscr // [38] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [18] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 lda #-5 sta.z signed_char_value jmp __b1 // main::@1 __b1: // [19] if(main::signed_char_value#2!=0) goto main::@2 -- vbsz1_neq_0_then_la1 lda.z signed_char_value cmp #0 bne __b2 jmp __breturn // main::@return __breturn: // [20] return rts // main::@2 __b2: // [21] main::signed_char_value#1 = ++ main::signed_char_value#2 -- vbsz1=_inc_vbsz1 inc.z signed_char_value // [22] test_casting::signed_short_value#0 = main::signed_char_value#1 -- vwsz1=vbsz2 lda.z signed_char_value sta.z test_casting.signed_short_value and #$80 beq !+ lda #$ff !: sta.z test_casting.signed_short_value+1 // [23] call test_casting jsr test_casting // [18] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: // [18] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { .const x = 0 .label __5 = $14 .label __6 = $10 .label __7 = $10 .label line_offset = $10 .label __8 = $12 .label __9 = $10 // [24] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$19+1 bcc __b3_from_gotoxy // [26] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] __b1_from_gotoxy: // [26] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 // [25] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] __b3_from_gotoxy: jmp __b3 // gotoxy::@3 __b3: // [26] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] __b1_from___b3: // [26] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy jmp __b1 // gotoxy::@1 __b1: jmp __b2 // gotoxy::@2 __b2: // [27] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 lda #x sta.z conio_cursor_x // [28] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx stx.z conio_cursor_y // [29] gotoxy::$7 = (word)gotoxy::y#4 -- vwuz1=_word_vbuxx txa sta.z __7 lda #0 sta.z __7+1 // [30] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 lda.z __7 asl sta.z __8 lda.z __7+1 rol sta.z __8+1 asl.z __8 rol.z __8+1 // [31] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __9 adc.z __8 sta.z __9 lda.z __9+1 adc.z __8+1 sta.z __9+1 // [32] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 // [33] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z line_offset clc adc #DEFAULT_SCREEN sta.z __5+1 // [34] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 lda.z __5 sta.z conio_line_text lda.z __5+1 sta.z conio_line_text+1 // [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __6 clc adc #COLORRAM sta.z __6+1 // [36] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 lda.z __6 sta.z conio_line_color lda.z __6+1 sta.z conio_line_color+1 jmp __breturn // gotoxy::@return __breturn: // [37] return rts } // clrscr // clears the screen and moves the cursor to the upper left-hand corner of the screen. clrscr: { .label line_text = 3 .label line_cols = 5 // [39] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] __b1_from_clrscr: // [39] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 lda #COLORRAM sta.z line_cols+1 // [39] phi clrscr::line_text#5 = DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 lda #DEFAULT_SCREEN sta.z line_text+1 // [39] phi clrscr::l#2 = 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 ldx #0 jmp __b1 // clrscr::@1 __b1: // [40] if(clrscr::l#2<$19) goto clrscr::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b3_from___b1 jmp __b2 // clrscr::@2 __b2: // [41] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // [42] conio_cursor_y = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_y // [43] conio_line_text = DEFAULT_SCREEN -- pbuz1=pbuc1 lda #DEFAULT_SCREEN sta.z conio_line_text+1 // [44] conio_line_color = COLORRAM -- pbuz1=pbuc1 lda #COLORRAM sta.z conio_line_color+1 jmp __breturn // clrscr::@return __breturn: // [45] return rts // [46] phi from clrscr::@1 to clrscr::@3 [phi:clrscr::@1->clrscr::@3] __b3_from___b1: // [46] phi clrscr::c#2 = 0 [phi:clrscr::@1->clrscr::@3#0] -- vbuyy=vbuc1 ldy #0 jmp __b3 // clrscr::@3 __b3: // [47] if(clrscr::c#2<$28) goto clrscr::@4 -- vbuyy_lt_vbuc1_then_la1 cpy #$28 bcc __b4 jmp __b5 // clrscr::@5 __b5: // [48] clrscr::line_text#1 = clrscr::line_text#5 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z line_text sta.z line_text bcc !+ inc.z line_text+1 !: // [49] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z line_cols sta.z line_cols bcc !+ inc.z line_cols+1 !: // [50] clrscr::l#1 = ++ clrscr::l#2 -- vbuxx=_inc_vbuxx inx // [39] phi from clrscr::@5 to clrscr::@1 [phi:clrscr::@5->clrscr::@1] __b1_from___b5: // [39] phi clrscr::line_cols#5 = clrscr::line_cols#1 [phi:clrscr::@5->clrscr::@1#0] -- register_copy // [39] phi clrscr::line_text#5 = clrscr::line_text#1 [phi:clrscr::@5->clrscr::@1#1] -- register_copy // [39] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@5->clrscr::@1#2] -- register_copy jmp __b1 // clrscr::@4 __b4: // [51] clrscr::line_text#5[clrscr::c#2] = ' ' -- pbuz1_derefidx_vbuyy=vbuc1 lda #' ' sta (line_text),y // [52] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 lda #LIGHT_BLUE sta (line_cols),y // [53] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy iny // [46] phi from clrscr::@4 to clrscr::@3 [phi:clrscr::@4->clrscr::@3] __b3_from___b4: // [46] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@4->clrscr::@3#0] -- register_copy jmp __b3 } // test_casting // test_casting(signed word zp(3) signed_short_value) test_casting: { .label signed_short_value = 3 // [54] printf_sint::value#1 = test_casting::signed_short_value#0 // [55] call printf_sint jsr printf_sint // [56] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] __b1_from_test_casting: jmp __b1 // test_casting::@1 __b1: // [57] call cputs // [69] phi from test_casting::@1 to cputs [phi:test_casting::@1->cputs] cputs_from___b1: // [69] phi cputs::s#4 = test_casting::s [phi:test_casting::@1->cputs#0] -- pbuz1=pbuc1 lda #s sta.z cputs.s+1 jsr cputs jmp __breturn // test_casting::@return __breturn: // [58] return rts .segment Data s: .text @"\n" .byte 0 } .segment Code // printf_sint // Print a signed integer using a specific format // printf_sint(signed word zp(3) value) printf_sint: { .label value = 3 // [59] *((byte*)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // [60] if(printf_sint::value#1<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 lda.z value+1 bmi __b1 // [63] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] __b2_from_printf_sint: __b2_from___b1: // [63] phi printf_sint::value#4 = printf_sint::value#1 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy jmp __b2 // printf_sint::@1 __b1: // [61] printf_sint::value#0 = - printf_sint::value#1 -- vwsz1=_neg_vwsz1 lda #0 sec sbc.z value sta.z value lda #0 sbc.z value+1 sta.z value+1 // [62] *((byte*)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 lda #'-' sta printf_buffer jmp __b2_from___b1 // printf_sint::@2 __b2: // [64] utoa::value#1 = (word)printf_sint::value#4 // [65] call utoa // [77] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: jsr utoa jmp __b3 // printf_sint::@3 __b3: // [66] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer) -- vbuaa=_deref_pbuc1 lda printf_buffer // [67] call printf_number_buffer // Print using format // [98] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn // printf_sint::@return __breturn: // [68] return rts } // cputs // Output a NUL-terminated string at the current cursor position // cputs(const byte* zp(5) s) cputs: { .label s = 5 // [70] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] __b1_from_cputs: __b1_from___b2: // [70] phi cputs::s#3 = cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy jmp __b1 // cputs::@1 __b1: // [71] cputs::c#1 = *cputs::s#3 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y // [72] cputs::s#0 = ++ cputs::s#3 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: // [73] if(0!=cputs::c#1) goto cputs::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 jmp __breturn // cputs::@return __breturn: // [74] return rts // cputs::@2 __b2: // [75] cputc::c#0 = cputs::c#1 // [76] call cputc // [105] phi from cputs::@2 to cputc [phi:cputs::@2->cputc] cputc_from___b2: // [105] phi cputc::c#3 = cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy jsr cputc jmp __b1_from___b2 } // utoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) // utoa(word zp(3) value, byte* zp($18) buffer) utoa: { .const max_digits = 5 .label digit_value = $16 .label buffer = $18 .label digit = 7 .label value = 3 // [78] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b1_from_utoa: // [78] phi utoa::buffer#11 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 // [78] phi utoa::started#2 = 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 ldx #0 // [78] phi utoa::value#2 = utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy // [78] phi utoa::digit#2 = 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // utoa::@1 __b1: // [79] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 lda.z digit_value+1 cmp.z value+1 bne !+ lda.z digit_value cmp.z value beq __b5 !: bcc __b5 // [89] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] __b4_from___b7: // [89] phi utoa::buffer#14 = utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy // [89] phi utoa::started#4 = utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy // [89] phi utoa::value#6 = utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy jmp __b4 // utoa::@4 __b4: // [90] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit // [78] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b1_from___b4: // [78] phi utoa::buffer#11 = utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy // [78] phi utoa::started#2 = utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy // [78] phi utoa::value#2 = utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy // [78] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy jmp __b1 // utoa::@5 __b5: // [91] utoa_append::buffer#0 = utoa::buffer#11 // [92] utoa_append::value#0 = utoa::value#2 // [93] utoa_append::sub#0 = utoa::digit_value#0 // [94] call utoa_append // [116] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [95] utoa_append::return#0 = utoa_append::value#2 jmp __b6 // utoa::@6 __b6: // [96] utoa::value#0 = utoa_append::return#0 // [97] utoa::buffer#4 = ++ utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: // [89] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] __b4_from___b6: // [89] phi utoa::buffer#14 = utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy // [89] phi utoa::started#4 = 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 ldx #1 // [89] phi utoa::value#6 = utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy jmp __b4 } // printf_number_buffer // Print the contents of the number buffer using a specific format. // This handles minimum length, zero-filling, and left/right justification from the format // printf_number_buffer(byte register(A) buffer_sign) printf_number_buffer: { .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS jmp __b1 // printf_number_buffer::@1 __b1: // [99] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- 0_eq_vbuaa_then_la1 cmp #0 beq __b2_from___b1 jmp __b3 // printf_number_buffer::@3 __b3: // [100] cputc::c#2 = printf_number_buffer::buffer_sign#0 // [101] call cputc // [105] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc] cputc_from___b3: // [105] phi cputc::c#3 = cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy jsr cputc // [102] phi from printf_number_buffer::@1 printf_number_buffer::@3 to printf_number_buffer::@2 [phi:printf_number_buffer::@1/printf_number_buffer::@3->printf_number_buffer::@2] __b2_from___b1: __b2_from___b3: jmp __b2 // printf_number_buffer::@2 __b2: // [103] call cputs // [69] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs] cputs_from___b2: // [69] phi cputs::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->cputs#0] -- pbuz1=pbuc1 lda #buffer_digits sta.z cputs.s+1 jsr cputs jmp __breturn // printf_number_buffer::@return __breturn: // [104] return rts } // cputc // Output one character at the current cursor position // Moves the cursor forward. Scrolls the entire screen if needed // cputc(byte register(A) c) cputc: { // [106] if(cputc::c#3==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 cmp #'\n' beq __b1_from_cputc jmp __b2 // cputc::@2 __b2: // [107] conio_line_text[conio_cursor_x] = cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z conio_cursor_x sta (conio_line_text),y // [108] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE ldy.z conio_cursor_x sta (conio_line_color),y // [109] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x // [110] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z conio_cursor_x bne __breturn // [111] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] __b3_from___b2: jmp __b3 // cputc::@3 __b3: // [112] call cputln jsr cputln jmp __breturn // cputc::@return __breturn: // [113] return rts // [114] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] __b1_from_cputc: jmp __b1 // cputc::@1 __b1: // [115] call cputln jsr cputln jmp __breturn } // utoa_append // Used to convert a single digit of an unsigned number value to a string representation // Counts a single digit up from '0' as long as the value is larger than sub. // Each time the digit is increased sub is subtracted from value. // - buffer : pointer to the char that receives the digit // - value : The value where the digit will be derived from // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. // utoa_append(byte* zp($18) buffer, word zp(3) value, word zp($16) sub) utoa_append: { .label buffer = $18 .label value = 3 .label sub = $16 .label return = 3 // [117] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] __b1_from_utoa_append: // [117] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 // [117] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp __b1 // utoa_append::@1 __b1: // [118] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ lda.z sub cmp.z value beq __b2 !: bcc __b2 jmp __b3 // utoa_append::@3 __b3: // [119] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // utoa_append::@return __breturn: // [120] return rts // utoa_append::@2 __b2: // [121] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // [122] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub sta.z value lda.z value+1 sbc.z sub+1 sta.z value+1 // [117] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] __b1_from___b2: // [117] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy // [117] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // cputln // Print a newline cputln: { // [123] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_text sta.z conio_line_text bcc !+ inc.z conio_line_text+1 !: // [124] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_color sta.z conio_line_color bcc !+ inc.z conio_line_color+1 !: // [125] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // [126] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // [127] call cscroll jsr cscroll jmp __breturn // cputln::@return __breturn: // [128] return rts } // cscroll // Scroll the entire screen if the cursor is beyond the last line cscroll: { // [129] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z conio_cursor_y bne __breturn // [130] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] __b1_from_cscroll: jmp __b1 // cscroll::@1 __b1: // [131] call memcpy // [142] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] memcpy_from___b1: // [142] phi memcpy::destination#2 = (void*)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memcpy.destination+1 // [142] phi memcpy::source#2 = (void*)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 sta.z memcpy.source+1 jsr memcpy // [132] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] __b2_from___b1: jmp __b2 // cscroll::@2 __b2: // [133] call memcpy // [142] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] memcpy_from___b2: // [142] phi memcpy::destination#2 = (void*)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 lda #COLORRAM sta.z memcpy.destination+1 // [142] phi memcpy::source#2 = (void*)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 sta.z memcpy.source+1 jsr memcpy // [134] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] __b3_from___b2: jmp __b3 // cscroll::@3 __b3: // [135] call memset // [152] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] memset_from___b3: // [152] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' // [152] phi memset::str#3 = (void*)DEFAULT_SCREEN+(word)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 sta.z memset.str+1 jsr memset // [136] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] __b4_from___b3: jmp __b4 // cscroll::@4 __b4: // [137] call memset // [152] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [152] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE // [152] phi memset::str#3 = (void*)COLORRAM+(word)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 sta.z memset.str+1 jsr memset jmp __b5 // cscroll::@5 __b5: // [138] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_text sbc #$28 sta.z conio_line_text lda.z conio_line_text+1 sbc #0 sta.z conio_line_text+1 // [139] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_color sbc #$28 sta.z conio_line_color lda.z conio_line_color+1 sbc #0 sta.z conio_line_color+1 // [140] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 dec.z conio_cursor_y jmp __breturn // cscroll::@return __breturn: // [141] return rts } // memcpy // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. // memcpy(void* zp(8) destination, void* zp($18) source) memcpy: { .label src_end = $16 .label dst = 8 .label src = $18 .label source = $18 .label destination = 8 // [143] memcpy::src_end#0 = (byte*)memcpy::source#2 + (word)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 lda.z source clc adc #<$19*$28-$28 sta.z src_end lda.z source+1 adc #>$19*$28-$28 sta.z src_end+1 // [144] memcpy::src#4 = (byte*)memcpy::source#2 // [145] memcpy::dst#4 = (byte*)memcpy::destination#2 // [146] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] __b1_from_memcpy: __b1_from___b2: // [146] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy // [146] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy jmp __b1 // memcpy::@1 __b1: // [147] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 lda.z src+1 cmp.z src_end+1 bne __b2 lda.z src cmp.z src_end bne __b2 jmp __breturn // memcpy::@return __breturn: // [148] return rts // memcpy::@2 __b2: // [149] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y ldy #0 sta (dst),y // [150] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: // [151] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: jmp __b1_from___b2 } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zp(8) str, byte register(X) c) memset: { .label end = $18 .label dst = 8 .label str = 8 jmp __b1 // memset::@1 __b1: // [153] memset::end#0 = (byte*)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z str sta.z end lda #0 adc.z str+1 sta.z end+1 // [154] memset::dst#4 = (byte*)memset::str#3 // [155] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: // [155] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: // [156] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 lda.z dst cmp.z end bne __b3 jmp __breturn // memset::@return __breturn: // [157] return rts // memset::@3 __b3: // [158] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // [159] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: jmp __b2_from___b3 } // File Data .segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __init1 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b2 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b5 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __b7 Removing instruction jmp __b4 Removing instruction jmp __b6 Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b4 Removing instruction jmp __b5 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Removing instruction lda #0 Replacing instruction lda #0 with TXA Replacing instruction ldy #0 with TAY Removing instruction ldy.z conio_cursor_x Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b2_from_conio_c64_init with __b1 Replacing label __b3_from_gotoxy with __b2 Replacing label __b1 with __b2 Replacing label __b1_from___b2 with __b1 Replacing label __b2_from___b1 with __b2 Replacing label __b1_from_cputc with __b1 Replacing label __b1_from___b2 with __b1 Replacing label __b2_from___b3 with __b2 Removing instruction __b1_from___init1: Removing instruction main_from___b1: Removing instruction __b2_from_conio_c64_init: Removing instruction __b2: Removing instruction __b1_from___b2: Removing instruction __b3_from_gotoxy: Removing instruction __b3: Removing instruction __b1_from___b3: Removing instruction __b1: Removing instruction __b1_from_test_casting: Removing instruction cputs_from___b1: Removing instruction __b2_from_printf_sint: Removing instruction utoa_from___b2: Removing instruction __b1_from_cputs: Removing instruction __b1_from___b2: Removing instruction cputc_from___b2: Removing instruction __b4_from___b7: Removing instruction utoa_append_from___b5: Removing instruction cputc_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b3: Removing instruction cputs_from___b2: Removing instruction __b3_from___b2: Removing instruction __b1_from_cputc: Removing instruction __b1_from_cscroll: Removing instruction memcpy_from___b1: Removing instruction __b2_from___b1: Removing instruction memcpy_from___b2: Removing instruction __b3_from___b2: Removing instruction memset_from___b3: Removing instruction __b4_from___b3: Removing instruction memset_from___b4: Removing instruction __b1_from_memcpy: Removing instruction __b1_from___b2: Removing instruction __b2_from___b1: Removing instruction __b2_from___b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_conio_c64_init: Removing instruction __breturn: Removing instruction clrscr_from_main: Removing instruction __b1_from_main: Removing instruction __breturn: Removing instruction __b1_from___b2: Removing instruction __b1_from_gotoxy: Removing instruction __breturn: Removing instruction __b1_from_clrscr: Removing instruction __b2: Removing instruction __breturn: Removing instruction __b5: Removing instruction __b1_from___b5: Removing instruction __b3_from___b4: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b3: Removing instruction printf_number_buffer_from___b3: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __b1_from_utoa: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b7: Removing instruction __b1_from___b4: Removing instruction __b6: Removing instruction __b4_from___b6: Removing instruction __b1: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b2: Removing instruction __b3: Removing instruction __b1_from_utoa_append: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b1_from___b2: Removing instruction __breturn: Removing instruction __b1: Removing instruction __b2: Removing instruction __b3: Removing instruction __b4: Removing instruction __b5: Removing instruction __breturn: Removing instruction __b1: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Skipping double jump to __b2 in jmp __b2_from___b1 Replacing jump to rts with rts in jmp __breturn Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label __b3_from___b1 to __b2 Relabelling long label __b2_from___b1 to __b3 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z digit_value+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b3: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE constant byte* const COLORRAM = (byte*) 55296 constant byte* const DEFAULT_SCREEN = (byte*) 1024 constant byte* DIGITS[] = "0123456789abcdef"z constant const byte LIGHT_BLUE = $e constant byte OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 constant byte RADIX::BINARY = 2 constant byte RADIX::DECIMAL = $a constant byte RADIX::HEXADECIMAL = $10 constant byte RADIX::OCTAL = 8 constant word* RADIX_DECIMAL_VALUES[] = { $2710, $3e8, $64, $a } constant byte SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c void __start() void clrscr() byte clrscr::c byte clrscr::c#1 reg byte y 20002.0 byte clrscr::c#2 reg byte y 12501.25 byte clrscr::l byte clrscr::l#1 reg byte x 2002.0 byte clrscr::l#2 reg byte x 333.6666666666667 byte* clrscr::line_cols byte* clrscr::line_cols#1 line_cols zp[2]:5 1001.0 byte* clrscr::line_cols#5 line_cols zp[2]:5 1500.375 byte* clrscr::line_text byte* clrscr::line_text#1 line_text zp[2]:3 667.3333333333334 byte* clrscr::line_text#5 line_text zp[2]:3 1714.7142857142858 void conio_c64_init() constant byte* const conio_c64_init::BASIC_CURSOR_LINE = (byte*) 214 byte conio_c64_init::line byte conio_c64_init::line#0 reg byte x 11.0 byte conio_c64_init::line#2 reg byte x 22.0 byte conio_cursor_x loadstore zp[1]:10 2.777777816666666E8 byte conio_cursor_y loadstore zp[1]:11 4.571428574414286E9 byte* conio_line_color loadstore zp[2]:14 3.2500000030735292E9 byte* conio_line_text loadstore zp[2]:12 3.202898553753623E9 void cputc(byte cputc::c) byte cputc::c byte cputc::c#0 reg byte a 2.00000002E8 byte cputc::c#2 reg byte a 200002.0 byte cputc::c#3 reg byte a 1.050050002E9 void cputln() void cputs(const byte* cputs::s) byte cputs::c byte cputs::c#1 reg byte a 1.00000001E8 const byte* cputs::s const byte* cputs::s#0 s zp[2]:5 5.00000005E7 const byte* cputs::s#3 s zp[2]:5 1.50500002E8 const byte* cputs::s#4 s zp[2]:5 1000001.0 void cscroll() void gotoxy(byte gotoxy::x , byte gotoxy::y) byte*~ gotoxy::$5 zp[2]:20 202.0 byte*~ gotoxy::$6 zp[2]:16 202.0 word~ gotoxy::$7 zp[2]:16 151.5 word~ gotoxy::$8 zp[2]:18 202.0 word~ gotoxy::$9 zp[2]:16 202.0 word gotoxy::line_offset word gotoxy::line_offset#0 line_offset zp[2]:16 101.0 byte gotoxy::x constant byte gotoxy::x#2 x = 0 byte gotoxy::y byte gotoxy::y#2 reg byte x 71.0 byte gotoxy::y#4 reg byte x 67.33333333333333 void main() signed byte main::signed_char_value signed byte main::signed_char_value#1 signed_char_value zp[1]:2 101.0 signed byte main::signed_char_value#2 signed_char_value zp[1]:2 151.5 void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num) void* memcpy::destination void* memcpy::destination#2 destination zp[2]:8 byte* memcpy::dst byte* memcpy::dst#1 dst zp[2]:8 1.000000000000001E15 byte* memcpy::dst#2 dst zp[2]:8 1.0003333333333348E15 byte* memcpy::dst#4 dst zp[2]:8 2.000000000002E12 word memcpy::num void* memcpy::return void* memcpy::source void* memcpy::source#2 source zp[2]:24 byte* memcpy::src byte* memcpy::src#1 src zp[2]:24 2.000000000000002E15 byte* memcpy::src#2 src zp[2]:24 1.0002500000000012E15 byte* memcpy::src#4 src zp[2]:24 1.000000000001E12 byte* memcpy::src_end byte* memcpy::src_end#0 src_end zp[2]:22 1.2512500000000025E14 void* memset(void* memset::str , byte memset::c , word memset::num) byte memset::c byte memset::c#4 reg byte x 1.42857142857143E14 byte* memset::dst byte* memset::dst#1 dst zp[2]:8 2.000000000000002E15 byte* memset::dst#2 dst zp[2]:8 1.3336666666666685E15 byte* memset::dst#4 dst zp[2]:8 2.000000000002E12 byte* memset::end byte* memset::end#0 end zp[2]:24 1.668333333333337E14 word memset::num void* memset::return void* memset::str void* memset::str#3 str zp[2]:8 struct printf_buffer_number printf_buffer loadstore mem[12] = {} void printf_number_buffer(byte printf_number_buffer::buffer_sign , byte* printf_number_buffer::buffer_digits , byte printf_number_buffer::format_min_length , byte printf_number_buffer::format_justify_left , byte printf_number_buffer::format_sign_always , byte printf_number_buffer::format_zero_padding , byte printf_number_buffer::format_upper_case , byte printf_number_buffer::format_radix) struct printf_buffer_number printf_number_buffer::buffer byte* printf_number_buffer::buffer_digits constant byte* printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS byte printf_number_buffer::buffer_sign byte printf_number_buffer::buffer_sign#0 reg byte a 70001.0 struct printf_format_number printf_number_buffer::format byte printf_number_buffer::format_justify_left byte printf_number_buffer::format_min_length byte printf_number_buffer::format_radix byte printf_number_buffer::format_sign_always byte printf_number_buffer::format_upper_case byte printf_number_buffer::format_zero_padding signed byte printf_number_buffer::len signed byte printf_number_buffer::padding void printf_sint(signed word printf_sint::value , byte printf_sint::format_min_length , byte printf_sint::format_justify_left , byte printf_sint::format_sign_always , byte printf_sint::format_zero_padding , byte printf_sint::format_upper_case , byte printf_sint::format_radix) struct printf_format_number printf_sint::format byte printf_sint::format_justify_left byte printf_sint::format_min_length byte printf_sint::format_radix byte printf_sint::format_sign_always byte printf_sint::format_upper_case byte printf_sint::format_zero_padding word printf_sint::uvalue signed word printf_sint::value signed word printf_sint::value#0 value zp[2]:3 10001.0 signed word printf_sint::value#1 value zp[2]:3 10334.666666666666 signed word printf_sint::value#4 value zp[2]:3 20002.0 void test_casting(signed word test_casting::signed_short_value) constant byte* test_casting::s[2] = " " signed word test_casting::signed_short_value signed word test_casting::signed_short_value#0 signed_short_value zp[2]:3 1102.0 void utoa(word utoa::value , byte* utoa::buffer , byte utoa::radix) byte~ utoa::$10 reg byte a 2.0000002E7 byte~ utoa::$11 reg byte x 200002.0 byte* utoa::buffer byte* utoa::buffer#11 buffer zp[2]:24 2871429.0 byte* utoa::buffer#14 buffer zp[2]:24 1.50000015E7 byte* utoa::buffer#3 buffer zp[2]:24 200002.0 byte* utoa::buffer#4 buffer zp[2]:24 2.0000002E7 byte utoa::digit byte utoa::digit#1 digit zp[1]:7 2.0000002E7 byte utoa::digit#2 digit zp[1]:7 2857143.1428571427 word utoa::digit_value word utoa::digit_value#0 digit_value zp[2]:22 6000000.6 word* utoa::digit_values byte utoa::max_digits constant byte utoa::max_digits#1 max_digits = 5 byte utoa::radix byte utoa::started byte utoa::started#2 reg byte x 5000000.5 byte utoa::started#4 reg byte x 1.0000001E7 word utoa::value word utoa::value#0 value zp[2]:3 1.0000001E7 word utoa::value#1 value zp[2]:3 55001.0 word utoa::value#2 value zp[2]:3 5728572.142857142 word utoa::value#6 value zp[2]:3 1.50000015E7 word utoa_append(byte* utoa_append::buffer , word utoa_append::value , word utoa_append::sub) byte* utoa_append::buffer byte* utoa_append::buffer#0 buffer zp[2]:24 1.375000025E7 byte utoa_append::digit byte utoa_append::digit#1 reg byte x 1.00000000001E11 byte utoa_append::digit#2 reg byte x 1.000500000015E11 word utoa_append::return word utoa_append::return#0 return zp[2]:3 2.0000002E7 word utoa_append::sub word utoa_append::sub#0 sub zp[2]:22 3.33350000005E10 word utoa_append::value word utoa_append::value#0 value zp[2]:3 3.6666667333333336E7 word utoa_append::value#1 value zp[2]:3 2.00000000002E11 word utoa_append::value#2 value zp[2]:3 5.001833333416667E10 reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ] zp[1]:2 [ main::signed_char_value#2 main::signed_char_value#1 ] reg byte x [ gotoxy::y#4 gotoxy::y#2 ] reg byte x [ clrscr::l#2 clrscr::l#1 ] reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:3 [ printf_sint::value#4 printf_sint::value#0 printf_sint::value#1 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 test_casting::signed_short_value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 clrscr::line_text#5 clrscr::line_text#1 ] zp[2]:5 [ cputs::s#3 cputs::s#4 cputs::s#0 clrscr::line_cols#5 clrscr::line_cols#1 ] zp[1]:7 [ utoa::digit#2 utoa::digit#1 ] reg byte x [ utoa::started#2 utoa::started#4 ] reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:8 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] reg byte x [ memset::c#4 ] zp[1]:10 [ conio_cursor_x ] zp[1]:11 [ conio_cursor_y ] zp[2]:12 [ conio_line_text ] zp[2]:14 [ conio_line_color ] zp[2]:16 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] zp[2]:18 [ gotoxy::$8 ] zp[2]:20 [ gotoxy::$5 ] reg byte a [ printf_number_buffer::buffer_sign#0 ] reg byte a [ cputs::c#1 ] reg byte x [ utoa::$11 ] reg byte a [ utoa::$10 ] zp[2]:22 [ memcpy::src_end#0 utoa::digit_value#0 utoa_append::sub#0 ] zp[2]:24 [ memset::end#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] mem[12] [ printf_buffer ] FINAL ASSEMBLER Score: 163870 // File Comments // Demonstrates problem with Casting of negative signed values // https://gitlab.com/camelot/kickc/-/issues/496 // Upstart // Commodore 64 PRG executable file .file [name="casting-negative.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(__start) // Global Constants & labels .const LIGHT_BLUE = $e .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c /// Color Ram .label COLORRAM = $d800 /// Default address of screen character matrix .label DEFAULT_SCREEN = $400 // The number of bytes on the screen // The current cursor x-position .label conio_cursor_x = $a // The current cursor y-position .label conio_cursor_y = $b // The current text cursor line start .label conio_line_text = $c // The current color cursor line start .label conio_line_color = $e .segment Code // __start __start: { // __start::__init1 // __ma char conio_cursor_x = 0 // [1] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // __ma char conio_cursor_y = 0 // [2] conio_cursor_y = 0 -- vbuz1=vbuc1 sta.z conio_cursor_y // __ma char *conio_line_text = CONIO_SCREEN_TEXT // [3] conio_line_text = DEFAULT_SCREEN -- pbuz1=pbuc1 lda #DEFAULT_SCREEN sta.z conio_line_text+1 // __ma char *conio_line_color = CONIO_SCREEN_COLORS // [4] conio_line_color = COLORRAM -- pbuz1=pbuc1 lda #COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main // [16] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return rts } // conio_c64_init // Set initial cursor position conio_c64_init: { // Position cursor at current line .label BASIC_CURSOR_LINE = $d6 // char line = *BASIC_CURSOR_LINE // [9] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 ldx BASIC_CURSOR_LINE // if(line>=CONIO_HEIGHT) // [10] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b1 // [12] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] // [12] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 ldx #$19-1 // [11] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] // conio_c64_init::@2 // [12] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] // [12] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy // conio_c64_init::@1 __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } // [15] return rts } // main main: { .label signed_char_value = 2 // clrscr() // [17] call clrscr // [38] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] // [18] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 lda #-5 sta.z signed_char_value // main::@1 __b1: // while (signed_char_value != 0) // [19] if(main::signed_char_value#2!=0) goto main::@2 -- vbsz1_neq_0_then_la1 lda.z signed_char_value cmp #0 bne __b2 // main::@return // } // [20] return rts // main::@2 __b2: // ++signed_char_value; // [21] main::signed_char_value#1 = ++ main::signed_char_value#2 -- vbsz1=_inc_vbsz1 inc.z signed_char_value // test_casting(signed_char_value) // [22] test_casting::signed_short_value#0 = main::signed_char_value#1 -- vwsz1=vbsz2 lda.z signed_char_value sta.z test_casting.signed_short_value and #$80 beq !+ lda #$ff !: sta.z test_casting.signed_short_value+1 // [23] call test_casting jsr test_casting // [18] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [18] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy jmp __b1 } // gotoxy // Set the cursor to the specified position // gotoxy(byte register(X) y) gotoxy: { .const x = 0 .label __5 = $14 .label __6 = $10 .label __7 = $10 .label line_offset = $10 .label __8 = $12 .label __9 = $10 // if(y>CONIO_HEIGHT) // [24] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$19+1 bcc __b2 // [26] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] // [26] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 ldx #0 // [25] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] // gotoxy::@3 // [26] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] // [26] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy // gotoxy::@1 // gotoxy::@2 __b2: // conio_cursor_x = x // [27] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 lda #x sta.z conio_cursor_x // conio_cursor_y = y // [28] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx stx.z conio_cursor_y // (unsigned int)y*CONIO_WIDTH // [29] gotoxy::$7 = (word)gotoxy::y#4 -- vwuz1=_word_vbuxx txa sta.z __7 lda #0 sta.z __7+1 // unsigned int line_offset = (unsigned int)y*CONIO_WIDTH // [30] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 lda.z __7 asl sta.z __8 lda.z __7+1 rol sta.z __8+1 asl.z __8 rol.z __8+1 // [31] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __9 adc.z __8 sta.z __9 lda.z __9+1 adc.z __8+1 sta.z __9+1 // [32] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 // CONIO_SCREEN_TEXT + line_offset // [33] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z line_offset clc adc #DEFAULT_SCREEN sta.z __5+1 // conio_line_text = CONIO_SCREEN_TEXT + line_offset // [34] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 lda.z __5 sta.z conio_line_text lda.z __5+1 sta.z conio_line_text+1 // CONIO_SCREEN_COLORS + line_offset // [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __6 clc adc #COLORRAM sta.z __6+1 // conio_line_color = CONIO_SCREEN_COLORS + line_offset // [36] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 lda.z __6 sta.z conio_line_color lda.z __6+1 sta.z conio_line_color+1 // gotoxy::@return // } // [37] return rts } // clrscr // clears the screen and moves the cursor to the upper left-hand corner of the screen. clrscr: { .label line_text = 3 .label line_cols = 5 // [39] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] // [39] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 lda #COLORRAM sta.z line_cols+1 // [39] phi clrscr::line_text#5 = DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 lda #DEFAULT_SCREEN sta.z line_text+1 // [39] phi clrscr::l#2 = 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 ldx #0 // clrscr::@1 __b1: // for( char l=0;lDEFAULT_SCREEN sta.z conio_line_text+1 // conio_line_color = CONIO_SCREEN_COLORS // [44] conio_line_color = COLORRAM -- pbuz1=pbuc1 lda #COLORRAM sta.z conio_line_color+1 // clrscr::@return // } // [45] return rts // [46] phi from clrscr::@1 to clrscr::@3 [phi:clrscr::@1->clrscr::@3] __b2: // [46] phi clrscr::c#2 = 0 [phi:clrscr::@1->clrscr::@3#0] -- vbuyy=vbuc1 ldy #0 // clrscr::@3 __b3: // for( char c=0;cclrscr::@1] // [39] phi clrscr::line_cols#5 = clrscr::line_cols#1 [phi:clrscr::@5->clrscr::@1#0] -- register_copy // [39] phi clrscr::line_text#5 = clrscr::line_text#1 [phi:clrscr::@5->clrscr::@1#1] -- register_copy // [39] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@5->clrscr::@1#2] -- register_copy jmp __b1 // clrscr::@4 __b4: // line_text[c] = ' ' // [51] clrscr::line_text#5[clrscr::c#2] = ' ' -- pbuz1_derefidx_vbuyy=vbuc1 lda #' ' sta (line_text),y // line_cols[c] = conio_textcolor // [52] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 lda #LIGHT_BLUE sta (line_cols),y // for( char c=0;cclrscr::@3] // [46] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@4->clrscr::@3#0] -- register_copy jmp __b3 } // test_casting // test_casting(signed word zp(3) signed_short_value) test_casting: { .label signed_short_value = 3 // printf("%d\n", signed_short_value) // [54] printf_sint::value#1 = test_casting::signed_short_value#0 // [55] call printf_sint jsr printf_sint // [56] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] // test_casting::@1 // printf("%d\n", signed_short_value) // [57] call cputs // [69] phi from test_casting::@1 to cputs [phi:test_casting::@1->cputs] // [69] phi cputs::s#4 = test_casting::s [phi:test_casting::@1->cputs#0] -- pbuz1=pbuc1 lda #s sta.z cputs.s+1 jsr cputs // test_casting::@return // } // [58] return rts .segment Data s: .text @"\n" .byte 0 } .segment Code // printf_sint // Print a signed integer using a specific format // printf_sint(signed word zp(3) value) printf_sint: { .label value = 3 // printf_buffer.sign = 0 // [59] *((byte*)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // if(value<0) // [60] if(printf_sint::value#1<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 lda.z value+1 bmi __b1 // [63] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] // [63] phi printf_sint::value#4 = printf_sint::value#1 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy jmp __b2 // printf_sint::@1 __b1: // value = -value // [61] printf_sint::value#0 = - printf_sint::value#1 -- vwsz1=_neg_vwsz1 lda #0 sec sbc.z value sta.z value lda #0 sbc.z value+1 sta.z value+1 // printf_buffer.sign = '-' // [62] *((byte*)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 lda #'-' sta printf_buffer // printf_sint::@2 __b2: // utoa(uvalue, printf_buffer.digits, format.radix) // [64] utoa::value#1 = (word)printf_sint::value#4 // [65] call utoa // [77] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] jsr utoa // printf_sint::@3 // printf_number_buffer(printf_buffer, format) // [66] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer) -- vbuaa=_deref_pbuc1 lda printf_buffer // [67] call printf_number_buffer // Print using format // [98] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] jsr printf_number_buffer // printf_sint::@return // } // [68] return rts } // cputs // Output a NUL-terminated string at the current cursor position // cputs(const byte* zp(5) s) cputs: { .label s = 5 // [70] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] // [70] phi cputs::s#3 = cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy // cputs::@1 __b1: // while(c=*s++) // [71] cputs::c#1 = *cputs::s#3 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y // [72] cputs::s#0 = ++ cputs::s#3 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: // [73] if(0!=cputs::c#1) goto cputs::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 // cputs::@return // } // [74] return rts // cputs::@2 __b2: // cputc(c) // [75] cputc::c#0 = cputs::c#1 // [76] call cputc // [105] phi from cputs::@2 to cputc [phi:cputs::@2->cputc] // [105] phi cputc::c#3 = cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy jsr cputc jmp __b1 } // utoa // Converts unsigned number value to a string representing it in RADIX format. // If the leading digits are zero they are not included in the string. // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) // utoa(word zp(3) value, byte* zp($18) buffer) utoa: { .const max_digits = 5 .label digit_value = $16 .label buffer = $18 .label digit = 7 .label value = 3 // [78] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] // [78] phi utoa::buffer#11 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 // [78] phi utoa::started#2 = 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 ldx #0 // [78] phi utoa::value#2 = utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy // [78] phi utoa::digit#2 = 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 txa sta.z digit // utoa::@1 __b1: // for( char digit=0; digit= digit_value) // [87] if(0!=utoa::started#2) goto utoa::@5 -- 0_neq_vbuxx_then_la1 cpx #0 bne __b5 // utoa::@7 // [88] if(utoa::value#2>=utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 cmp.z value+1 bne !+ lda.z digit_value cmp.z value beq __b5 !: bcc __b5 // [89] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] // [89] phi utoa::buffer#14 = utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy // [89] phi utoa::started#4 = utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy // [89] phi utoa::value#6 = utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy // utoa::@4 __b4: // for( char digit=0; digitutoa::@1] // [78] phi utoa::buffer#11 = utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy // [78] phi utoa::started#2 = utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy // [78] phi utoa::value#2 = utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy // [78] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy jmp __b1 // utoa::@5 __b5: // utoa_append(buffer++, value, digit_value) // [91] utoa_append::buffer#0 = utoa::buffer#11 // [92] utoa_append::value#0 = utoa::value#2 // [93] utoa_append::sub#0 = utoa::digit_value#0 // [94] call utoa_append // [116] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [95] utoa_append::return#0 = utoa_append::value#2 // utoa::@6 // value = utoa_append(buffer++, value, digit_value) // [96] utoa::value#0 = utoa_append::return#0 // value = utoa_append(buffer++, value, digit_value); // [97] utoa::buffer#4 = ++ utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: // [89] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] // [89] phi utoa::buffer#14 = utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy // [89] phi utoa::started#4 = 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 ldx #1 // [89] phi utoa::value#6 = utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy jmp __b4 } // printf_number_buffer // Print the contents of the number buffer using a specific format. // This handles minimum length, zero-filling, and left/right justification from the format // printf_number_buffer(byte register(A) buffer_sign) printf_number_buffer: { .label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS // printf_number_buffer::@1 // if(buffer.sign) // [99] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- 0_eq_vbuaa_then_la1 cmp #0 beq __b2 // printf_number_buffer::@3 // cputc(buffer.sign) // [100] cputc::c#2 = printf_number_buffer::buffer_sign#0 // [101] call cputc // [105] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc] // [105] phi cputc::c#3 = cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy jsr cputc // [102] phi from printf_number_buffer::@1 printf_number_buffer::@3 to printf_number_buffer::@2 [phi:printf_number_buffer::@1/printf_number_buffer::@3->printf_number_buffer::@2] // printf_number_buffer::@2 __b2: // cputs(buffer.digits) // [103] call cputs // [69] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs] // [69] phi cputs::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->cputs#0] -- pbuz1=pbuc1 lda #buffer_digits sta.z cputs.s+1 jsr cputs // printf_number_buffer::@return // } // [104] return rts } // cputc // Output one character at the current cursor position // Moves the cursor forward. Scrolls the entire screen if needed // cputc(byte register(A) c) cputc: { // if(c=='\n') // [106] if(cputc::c#3==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 cmp #'\n' beq __b1 // cputc::@2 // conio_line_text[conio_cursor_x] = c // [107] conio_line_text[conio_cursor_x] = cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z conio_cursor_x sta (conio_line_text),y // conio_line_color[conio_cursor_x] = conio_textcolor // [108] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE sta (conio_line_color),y // if(++conio_cursor_x==CONIO_WIDTH) // [109] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x // [110] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z conio_cursor_x bne __breturn // [111] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() // [112] call cputln jsr cputln // cputc::@return __breturn: // } // [113] return rts // [114] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] // cputc::@1 __b1: // cputln() // [115] call cputln jsr cputln rts } // utoa_append // Used to convert a single digit of an unsigned number value to a string representation // Counts a single digit up from '0' as long as the value is larger than sub. // Each time the digit is increased sub is subtracted from value. // - buffer : pointer to the char that receives the digit // - value : The value where the digit will be derived from // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. // utoa_append(byte* zp($18) buffer, word zp(3) value, word zp($16) sub) utoa_append: { .label buffer = $18 .label value = 3 .label sub = $16 .label return = 3 // [117] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] // [117] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 // [117] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy // utoa_append::@1 __b1: // while (value >= sub) // [118] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ lda.z sub cmp.z value beq __b2 !: bcc __b2 // utoa_append::@3 // *buffer = DIGITS[digit] // [119] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // utoa_append::@return // } // [120] return rts // utoa_append::@2 __b2: // digit++; // [121] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub // [122] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub sta.z value lda.z value+1 sbc.z sub+1 sta.z value+1 // [117] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] // [117] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy // [117] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // cputln // Print a newline cputln: { // conio_line_text += CONIO_WIDTH // [123] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_text sta.z conio_line_text bcc !+ inc.z conio_line_text+1 !: // conio_line_color += CONIO_WIDTH // [124] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_color sta.z conio_line_color bcc !+ inc.z conio_line_color+1 !: // conio_cursor_x = 0 // [125] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // conio_cursor_y++; // [126] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() // [127] call cscroll jsr cscroll // cputln::@return // } // [128] return rts } // cscroll // Scroll the entire screen if the cursor is beyond the last line cscroll: { // if(conio_cursor_y==CONIO_HEIGHT) // [129] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z conio_cursor_y bne __breturn // [130] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] // cscroll::@1 // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) // [131] call memcpy // [142] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] // [142] phi memcpy::destination#2 = (void*)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memcpy.destination+1 // [142] phi memcpy::source#2 = (void*)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 sta.z memcpy.source+1 jsr memcpy // [132] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] // cscroll::@2 // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) // [133] call memcpy // [142] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] // [142] phi memcpy::destination#2 = (void*)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 lda #COLORRAM sta.z memcpy.destination+1 // [142] phi memcpy::source#2 = (void*)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 sta.z memcpy.source+1 jsr memcpy // [134] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] // cscroll::@3 // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) // [135] call memset // [152] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [152] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' // [152] phi memset::str#3 = (void*)DEFAULT_SCREEN+(word)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 sta.z memset.str+1 jsr memset // [136] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] // cscroll::@4 // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) // [137] call memset // [152] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [152] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE // [152] phi memset::str#3 = (void*)COLORRAM+(word)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 sta.z memset.str+1 jsr memset // cscroll::@5 // conio_line_text -= CONIO_WIDTH // [138] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_text sbc #$28 sta.z conio_line_text lda.z conio_line_text+1 sbc #0 sta.z conio_line_text+1 // conio_line_color -= CONIO_WIDTH // [139] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_color sbc #$28 sta.z conio_line_color lda.z conio_line_color+1 sbc #0 sta.z conio_line_color+1 // conio_cursor_y--; // [140] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 dec.z conio_cursor_y // cscroll::@return __breturn: // } // [141] return rts } // memcpy // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. // memcpy(void* zp(8) destination, void* zp($18) source) memcpy: { .label src_end = $16 .label dst = 8 .label src = $18 .label source = $18 .label destination = 8 // char* src_end = (char*)source+num // [143] memcpy::src_end#0 = (byte*)memcpy::source#2 + (word)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 lda.z source clc adc #<$19*$28-$28 sta.z src_end lda.z source+1 adc #>$19*$28-$28 sta.z src_end+1 // [144] memcpy::src#4 = (byte*)memcpy::source#2 // [145] memcpy::dst#4 = (byte*)memcpy::destination#2 // [146] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] // [146] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy // [146] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy // memcpy::@1 __b1: // while(src!=src_end) // [147] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 lda.z src+1 cmp.z src_end+1 bne __b2 lda.z src cmp.z src_end bne __b2 // memcpy::@return // } // [148] return rts // memcpy::@2 __b2: // *dst++ = *src++ // [149] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y sta (dst),y // *dst++ = *src++; // [150] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: // [151] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: jmp __b1 } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. // memset(void* zp(8) str, byte register(X) c) memset: { .label end = $18 .label dst = 8 .label str = 8 // memset::@1 // char* end = (char*)str + num // [153] memset::end#0 = (byte*)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z str sta.z end lda #0 adc.z str+1 sta.z end+1 // [154] memset::dst#4 = (byte*)memset::str#3 // [155] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] // [155] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) // [156] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 lda.z dst cmp.z end bne __b3 // memset::@return // } // [157] return rts // memset::@3 __b3: // *dst = c // [158] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) // [159] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: jmp __b2 } // File Data .segment Data // The digits used for numbers DIGITS: .text "0123456789abcdef" // Values of decimal digits RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0