1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-29 03:56:15 +00:00
kickc/src/test/ref/casting-negative.log

5963 lines
412 KiB
Plaintext

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::$4) goto utoa::@11
Simple Condition utoa_append::$0 [216] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2
Simple Condition printf_padding::$0 [225] if(printf_padding::i#2<printf_padding::length#4) goto printf_padding::@2
Simple Condition printf_sint::$0 [233] if(printf_sint::value#1<0) goto printf_sint::@1
Simple Condition printf_sint::$3 [237] if(0==printf_sint::format_sign_always#0) goto printf_sint::@2
Simple Condition printf_number_buffer::$0 [258] if(0==printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1
Simple Condition printf_number_buffer::$20 [272] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@13
Simple Condition printf_number_buffer::$23 [277] if(printf_number_buffer::padding#1>=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::max_digits#1-1) goto utoa::@2
to:utoa::@3
utoa::@3: scope:[utoa] from utoa::@1
[80] utoa::$11 = (byte)utoa::value#2
[81] *utoa::buffer#11 = DIGITS[utoa::$11]
[82] utoa::buffer#3 = ++ utoa::buffer#11
[83] *utoa::buffer#3 = 0
to:utoa::@return
utoa::@return: scope:[utoa] from utoa::@3
[84] return
to:@return
utoa::@2: scope:[utoa] from utoa::@1
[85] utoa::$10 = utoa::digit#2 << 1
[86] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10]
[87] if(0!=utoa::started#2) goto utoa::@5
to:utoa::@7
utoa::@7: scope:[utoa] from utoa::@2
[88] if(utoa::value#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
lda #>DEFAULT_SCREEN
sta.z conio_line_text+1
// [4] conio_line_color = COLORRAM -- pbuz1=pbuc1
lda #<COLORRAM
sta.z conio_line_color
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
lda.z line_offset+1
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
lda.z __6+1
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
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
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
lda #>DEFAULT_SCREEN
sta.z conio_line_text+1
// [44] conio_line_color = COLORRAM -- pbuz1=pbuc1
lda #<COLORRAM
sta.z conio_line_color
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
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
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::max_digits#1-1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z digit
cmp #max_digits-1
bcc __b2
jmp __b3
// utoa::@3
__b3:
// [80] utoa::$11 = (byte)utoa::value#2 -- vbuxx=_byte_vwuz1
ldx.z value
// [81] *utoa::buffer#11 = DIGITS[utoa::$11] -- _deref_pbuz1=pbuc1_derefidx_vbuxx
lda DIGITS,x
ldy #0
sta (buffer),y
// [82] utoa::buffer#3 = ++ utoa::buffer#11 -- pbuz1=_inc_pbuz1
inc.z buffer
bne !+
inc.z buffer+1
!:
// [83] *utoa::buffer#3 = 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (buffer),y
jmp __breturn
// utoa::@return
__breturn:
// [84] return
rts
// utoa::@2
__b2:
// [85] utoa::$10 = utoa::digit#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z digit
asl
// [86] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] -- vwuz1=pwuc1_derefidx_vbuaa
tay
lda RADIX_DECIMAL_VALUES,y
sta.z digit_value
lda RADIX_DECIMAL_VALUES+1,y
sta.z digit_value+1
// [87] if(0!=utoa::started#2) goto utoa::@5 -- 0_neq_vbuxx_then_la1
cpx #0
bne __b5
jmp __b7
// utoa::@7
__b7:
// [88] if(utoa::value#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
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
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
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
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
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
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
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
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
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
lda.z line_offset+1
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
lda.z __6+1
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
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
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;l<CONIO_HEIGHT; l++ )
// [40] if(clrscr::l#2<$19) goto clrscr::@3 -- vbuxx_lt_vbuc1_then_la1
cpx #$19
bcc __b2
// clrscr::@2
// conio_cursor_x = 0
// [41] conio_cursor_x = 0 -- vbuz1=vbuc1
lda #0
sta.z conio_cursor_x
// conio_cursor_y = 0
// [42] conio_cursor_y = 0 -- vbuz1=vbuc1
sta.z conio_cursor_y
// conio_line_text = CONIO_SCREEN_TEXT
// [43] conio_line_text = DEFAULT_SCREEN -- pbuz1=pbuc1
lda #<DEFAULT_SCREEN
sta.z conio_line_text
lda #>DEFAULT_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
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;c<CONIO_WIDTH; c++ )
// [47] if(clrscr::c#2<$28) goto clrscr::@4 -- vbuyy_lt_vbuc1_then_la1
cpy #$28
bcc __b4
// clrscr::@5
// line_text += CONIO_WIDTH
// [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
!:
// line_cols += CONIO_WIDTH
// [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
!:
// for( char l=0;l<CONIO_HEIGHT; l++ )
// [50] clrscr::l#1 = ++ clrscr::l#2 -- vbuxx=_inc_vbuxx
inx
// [39] phi from clrscr::@5 to clrscr::@1 [phi:clrscr::@5->clrscr::@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;c<CONIO_WIDTH; c++ )
// [53] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy
iny
// [46] phi from clrscr::@4 to clrscr::@3 [phi:clrscr::@4->clrscr::@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
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
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<max_digits-1; digit++ )
// [79] if(utoa::digit#2<utoa::max_digits#1-1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z digit
cmp #max_digits-1
bcc __b2
// utoa::@3
// *buffer++ = DIGITS[(char)value]
// [80] utoa::$11 = (byte)utoa::value#2 -- vbuxx=_byte_vwuz1
ldx.z value
// [81] *utoa::buffer#11 = DIGITS[utoa::$11] -- _deref_pbuz1=pbuc1_derefidx_vbuxx
lda DIGITS,x
ldy #0
sta (buffer),y
// *buffer++ = DIGITS[(char)value];
// [82] utoa::buffer#3 = ++ utoa::buffer#11 -- pbuz1=_inc_pbuz1
inc.z buffer
bne !+
inc.z buffer+1
!:
// *buffer = 0
// [83] *utoa::buffer#3 = 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (buffer),y
// utoa::@return
// }
// [84] return
rts
// utoa::@2
__b2:
// unsigned int digit_value = digit_values[digit]
// [85] utoa::$10 = utoa::digit#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z digit
asl
// [86] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] -- vwuz1=pwuc1_derefidx_vbuaa
tay
lda RADIX_DECIMAL_VALUES,y
sta.z digit_value
lda RADIX_DECIMAL_VALUES+1,y
sta.z digit_value+1
// if (started || value >= 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; digit<max_digits-1; digit++ )
// [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]
// [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
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
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
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
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
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
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
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