mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-08-09 04:25:12 +00:00
8126 lines
506 KiB
Plaintext
8126 lines
506 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_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_uint (word) main::count (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL }
|
|
Eliminating unused variable with no statement (void~) main::$2
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
@begin: scope:[] from
|
|
to:@1
|
|
|
|
(byte()) toupper((byte) toupper::ch)
|
|
toupper: scope:[toupper] from strupr::@2
|
|
(byte) toupper::ch#1 ← phi( strupr::@2/(byte) toupper::ch#0 )
|
|
(bool~) toupper::$0 ← (byte) toupper::ch#1 >= (byte) 'a'
|
|
(bool~) toupper::$1 ← (byte) toupper::ch#1 <= (byte) 'z'
|
|
(bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1
|
|
if((bool~) toupper::$2) goto toupper::@1
|
|
to:toupper::@2
|
|
toupper::@1: scope:[toupper] from toupper
|
|
(byte) toupper::ch#2 ← phi( toupper/(byte) toupper::ch#1 )
|
|
(byte~) toupper::$3 ← (byte) toupper::ch#2 + (byte) 'A'-(byte) 'a'
|
|
(byte) toupper::return#0 ← (byte~) toupper::$3
|
|
to:toupper::@return
|
|
toupper::@2: scope:[toupper] from toupper
|
|
(byte) toupper::ch#3 ← phi( toupper/(byte) toupper::ch#1 )
|
|
(byte) toupper::return#1 ← (byte) toupper::ch#3
|
|
to:toupper::@return
|
|
toupper::@return: scope:[toupper] from toupper::@1 toupper::@2
|
|
(byte) toupper::return#4 ← phi( toupper::@1/(byte) toupper::return#0 toupper::@2/(byte) toupper::return#1 )
|
|
(byte) toupper::return#2 ← (byte) toupper::return#4
|
|
return
|
|
to:@return
|
|
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
memcpy: scope:[memcpy] from cscroll::@3 cscroll::@4
|
|
(word) memcpy::num#2 ← phi( cscroll::@3/(word) memcpy::num#0 cscroll::@4/(word) memcpy::num#1 )
|
|
(void*) memcpy::destination#2 ← phi( cscroll::@3/(void*) memcpy::destination#0 cscroll::@4/(void*) memcpy::destination#1 )
|
|
(void*) memcpy::source#2 ← phi( cscroll::@3/(void*) memcpy::source#0 cscroll::@4/(void*) memcpy::source#1 )
|
|
(byte*) memcpy::src#0 ← ((byte*)) (void*) memcpy::source#2
|
|
(byte*) memcpy::dst#0 ← ((byte*)) (void*) memcpy::destination#2
|
|
(byte*~) memcpy::$2 ← (byte*)(void*) memcpy::source#2
|
|
(byte*~) memcpy::$0 ← (byte*~) memcpy::$2 + (word) memcpy::num#2
|
|
(byte*) memcpy::src_end#0 ← (byte*~) memcpy::$0
|
|
to:memcpy::@1
|
|
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
|
(void*) memcpy::destination#4 ← phi( memcpy/(void*) memcpy::destination#2 memcpy::@2/(void*) memcpy::destination#5 )
|
|
(byte*) memcpy::dst#3 ← phi( memcpy/(byte*) memcpy::dst#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
|
(byte*) memcpy::src_end#1 ← phi( memcpy/(byte*) memcpy::src_end#0 memcpy::@2/(byte*) memcpy::src_end#2 )
|
|
(byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#0 memcpy::@2/(byte*) memcpy::src#1 )
|
|
(bool~) memcpy::$1 ← (byte*) memcpy::src#2 != (byte*) memcpy::src_end#1
|
|
if((bool~) memcpy::$1) goto memcpy::@2
|
|
to:memcpy::@3
|
|
memcpy::@2: scope:[memcpy] from memcpy::@1
|
|
(void*) memcpy::destination#5 ← phi( memcpy::@1/(void*) memcpy::destination#4 )
|
|
(byte*) memcpy::src_end#2 ← phi( memcpy::@1/(byte*) memcpy::src_end#1 )
|
|
(byte*) memcpy::dst#2 ← phi( memcpy::@1/(byte*) memcpy::dst#3 )
|
|
(byte*) memcpy::src#3 ← phi( memcpy::@1/(byte*) memcpy::src#2 )
|
|
*((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#3)
|
|
(byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
|
(byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#3
|
|
to:memcpy::@1
|
|
memcpy::@3: scope:[memcpy] from memcpy::@1
|
|
(void*) memcpy::destination#3 ← phi( memcpy::@1/(void*) memcpy::destination#4 )
|
|
(void*) memcpy::return#0 ← (void*) memcpy::destination#3
|
|
to:memcpy::@return
|
|
memcpy::@return: scope:[memcpy] from memcpy::@3
|
|
(void*) memcpy::return#4 ← phi( memcpy::@3/(void*) memcpy::return#0 )
|
|
(void*) memcpy::return#1 ← (void*) 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 main
|
|
(byte) memset::c#6 ← phi( cscroll::@5/(byte) memset::c#0 cscroll::@6/(byte) memset::c#1 main/(byte) memset::c#2 )
|
|
(void*) memset::str#5 ← phi( cscroll::@5/(void*) memset::str#0 cscroll::@6/(void*) memset::str#1 main/(void*) memset::str#2 )
|
|
(word) memset::num#3 ← phi( cscroll::@5/(word) memset::num#0 cscroll::@6/(word) memset::num#1 main/(word) memset::num#2 )
|
|
(bool~) memset::$0 ← (word) memset::num#3 > (number) 0
|
|
(bool~) memset::$1 ← ! (bool~) memset::$0
|
|
if((bool~) memset::$1) goto memset::@1
|
|
to:memset::@2
|
|
memset::@1: scope:[memset] from memset memset::@3
|
|
(void*) memset::str#3 ← phi( memset/(void*) memset::str#5 memset::@3/(void*) memset::str#6 )
|
|
(void*) memset::return#0 ← (void*) memset::str#3
|
|
to:memset::@return
|
|
memset::@2: scope:[memset] from memset
|
|
(byte) memset::c#5 ← phi( memset/(byte) memset::c#6 )
|
|
(word) memset::num#4 ← phi( memset/(word) memset::num#3 )
|
|
(void*) memset::str#4 ← phi( memset/(void*) memset::str#5 )
|
|
(byte*~) memset::$4 ← (byte*)(void*) memset::str#4
|
|
(byte*~) memset::$2 ← (byte*~) memset::$4 + (word) memset::num#4
|
|
(byte*) memset::end#0 ← (byte*~) memset::$2
|
|
(byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#4
|
|
to:memset::@3
|
|
memset::@3: scope:[memset] from memset::@2 memset::@4
|
|
(byte) memset::c#4 ← phi( memset::@2/(byte) memset::c#5 memset::@4/(byte) memset::c#3 )
|
|
(void*) memset::str#6 ← phi( memset::@2/(void*) memset::str#4 memset::@4/(void*) memset::str#7 )
|
|
(byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#2 )
|
|
(byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 )
|
|
(bool~) memset::$3 ← (byte*) memset::dst#2 != (byte*) memset::end#1
|
|
if((bool~) memset::$3) goto memset::@4
|
|
to:memset::@1
|
|
memset::@4: scope:[memset] from memset::@3
|
|
(void*) memset::str#7 ← phi( memset::@3/(void*) memset::str#6 )
|
|
(byte*) memset::end#2 ← phi( memset::@3/(byte*) memset::end#1 )
|
|
(byte*) memset::dst#3 ← phi( memset::@3/(byte*) memset::dst#2 )
|
|
(byte) memset::c#3 ← phi( memset::@3/(byte) memset::c#4 )
|
|
*((byte*) memset::dst#3) ← (byte) memset::c#3
|
|
(byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
|
|
to:memset::@3
|
|
memset::@return: scope:[memset] from memset::@1
|
|
(void*) memset::return#5 ← phi( memset::@1/(void*) memset::return#0 )
|
|
(void*) memset::return#1 ← (void*) memset::return#5
|
|
return
|
|
to:@return
|
|
|
|
(byte*()) strupr((byte*) strupr::str)
|
|
strupr: scope:[strupr] from printf_number_buffer::@11
|
|
(byte*) strupr::str#1 ← phi( printf_number_buffer::@11/(byte*) strupr::str#0 )
|
|
(byte*) strupr::src#0 ← (byte*) strupr::str#1
|
|
to:strupr::@1
|
|
strupr::@1: scope:[strupr] from strupr strupr::@4
|
|
(byte*) strupr::str#3 ← phi( strupr/(byte*) strupr::str#1 strupr::@4/(byte*) strupr::str#4 )
|
|
(byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::src#0 strupr::@4/(byte*) strupr::src#1 )
|
|
(bool~) strupr::$1 ← (number) 0 != *((byte*) strupr::src#2)
|
|
if((bool~) strupr::$1) goto strupr::@2
|
|
to:strupr::@3
|
|
strupr::@2: scope:[strupr] from strupr::@1
|
|
(byte*) strupr::str#5 ← phi( strupr::@1/(byte*) strupr::str#3 )
|
|
(byte*) strupr::src#3 ← phi( strupr::@1/(byte*) strupr::src#2 )
|
|
(byte) toupper::ch#0 ← *((byte*) strupr::src#3)
|
|
call toupper
|
|
(byte) toupper::return#3 ← (byte) toupper::return#2
|
|
to:strupr::@4
|
|
strupr::@4: scope:[strupr] from strupr::@2
|
|
(byte*) strupr::str#4 ← phi( strupr::@2/(byte*) strupr::str#5 )
|
|
(byte*) strupr::src#4 ← phi( strupr::@2/(byte*) strupr::src#3 )
|
|
(byte) toupper::return#5 ← phi( strupr::@2/(byte) toupper::return#3 )
|
|
(byte~) strupr::$0 ← (byte) toupper::return#5
|
|
*((byte*) strupr::src#4) ← (byte~) strupr::$0
|
|
(byte*) strupr::src#1 ← ++ (byte*) strupr::src#4
|
|
to:strupr::@1
|
|
strupr::@3: scope:[strupr] from strupr::@1
|
|
(byte*) strupr::str#2 ← phi( strupr::@1/(byte*) strupr::str#3 )
|
|
(byte*) strupr::return#0 ← (byte*) strupr::str#2
|
|
to:strupr::@return
|
|
strupr::@return: scope:[strupr] from strupr::@3
|
|
(byte*) strupr::return#3 ← phi( strupr::@3/(byte*) strupr::return#0 )
|
|
(byte*) strupr::return#1 ← (byte*) strupr::return#3
|
|
return
|
|
to:@return
|
|
|
|
(word()) strlen((byte*) strlen::str)
|
|
strlen: scope:[strlen] from printf_number_buffer::@6
|
|
(byte*) strlen::str#4 ← phi( printf_number_buffer::@6/(byte*) strlen::str#1 )
|
|
(word) strlen::len#0 ← (word) 0
|
|
to:strlen::@1
|
|
strlen::@1: scope:[strlen] from strlen strlen::@2
|
|
(word) strlen::len#4 ← phi( strlen/(word) strlen::len#0 strlen::@2/(word) strlen::len#1 )
|
|
(byte*) strlen::str#2 ← phi( strlen/(byte*) strlen::str#4 strlen::@2/(byte*) strlen::str#0 )
|
|
(bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2)
|
|
if((bool~) strlen::$0) goto strlen::@2
|
|
to:strlen::@3
|
|
strlen::@2: scope:[strlen] from strlen::@1
|
|
(byte*) strlen::str#3 ← phi( strlen::@1/(byte*) strlen::str#2 )
|
|
(word) strlen::len#2 ← phi( strlen::@1/(word) strlen::len#4 )
|
|
(word) strlen::len#1 ← ++ (word) strlen::len#2
|
|
(byte*) strlen::str#0 ← ++ (byte*) strlen::str#3
|
|
to:strlen::@1
|
|
strlen::@3: scope:[strlen] from strlen::@1
|
|
(word) strlen::len#3 ← phi( strlen::@1/(word) strlen::len#4 )
|
|
(word) strlen::return#0 ← (word) strlen::len#3
|
|
to:strlen::@return
|
|
strlen::@return: scope:[strlen] from strlen::@3
|
|
(word) strlen::return#3 ← phi( strlen::@3/(word) strlen::return#0 )
|
|
(word) strlen::return#1 ← (word) strlen::return#3
|
|
return
|
|
to:@return
|
|
|
|
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
|
mul8u: scope:[mul8u] from mul8s
|
|
(byte) mul8u::a#5 ← phi( mul8s/(byte) mul8u::a#1 )
|
|
(byte) mul8u::b#1 ← phi( mul8s/(byte) mul8u::b#0 )
|
|
(word) mul8u::res#0 ← (word) 0
|
|
(word) mul8u::mb#0 ← (word)(byte) mul8u::b#1
|
|
to:mul8u::@1
|
|
mul8u::@1: scope:[mul8u] from mul8u mul8u::@4
|
|
(word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
|
|
(word) mul8u::res#4 ← phi( mul8u/(word) mul8u::res#0 mul8u::@4/(word) mul8u::res#6 )
|
|
(byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#5 mul8u::@4/(byte) mul8u::a#0 )
|
|
(bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0
|
|
if((bool~) mul8u::$0) goto mul8u::@2
|
|
to:mul8u::@3
|
|
mul8u::@2: scope:[mul8u] from mul8u::@1
|
|
(word) mul8u::res#5 ← phi( mul8u::@1/(word) mul8u::res#4 )
|
|
(word) mul8u::mb#4 ← phi( mul8u::@1/(word) mul8u::mb#5 )
|
|
(byte) mul8u::a#3 ← phi( mul8u::@1/(byte) mul8u::a#2 )
|
|
(number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1
|
|
(bool~) mul8u::$2 ← (number~) mul8u::$1 != (number) 0
|
|
(bool~) mul8u::$3 ← ! (bool~) mul8u::$2
|
|
if((bool~) mul8u::$3) goto mul8u::@4
|
|
to:mul8u::@5
|
|
mul8u::@3: scope:[mul8u] from mul8u::@1
|
|
(word) mul8u::res#2 ← phi( mul8u::@1/(word) mul8u::res#4 )
|
|
(word) mul8u::return#0 ← (word) mul8u::res#2
|
|
to:mul8u::@return
|
|
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@5
|
|
(word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#5 mul8u::@5/(word) mul8u::res#1 )
|
|
(word) mul8u::mb#2 ← phi( mul8u::@2/(word) mul8u::mb#4 mul8u::@5/(word) mul8u::mb#3 )
|
|
(byte) mul8u::a#4 ← phi( mul8u::@2/(byte) mul8u::a#3 mul8u::@5/(byte) mul8u::a#6 )
|
|
(byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1
|
|
(byte) mul8u::a#0 ← (byte~) mul8u::$5
|
|
(word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
|
|
(word) mul8u::mb#1 ← (word~) mul8u::$6
|
|
to:mul8u::@1
|
|
mul8u::@5: scope:[mul8u] from mul8u::@2
|
|
(byte) mul8u::a#6 ← phi( mul8u::@2/(byte) mul8u::a#3 )
|
|
(word) mul8u::mb#3 ← phi( mul8u::@2/(word) mul8u::mb#4 )
|
|
(word) mul8u::res#3 ← phi( mul8u::@2/(word) mul8u::res#5 )
|
|
(word~) mul8u::$4 ← (word) mul8u::res#3 + (word) mul8u::mb#3
|
|
(word) mul8u::res#1 ← (word~) mul8u::$4
|
|
to:mul8u::@4
|
|
mul8u::@return: scope:[mul8u] from mul8u::@3
|
|
(word) mul8u::return#3 ← phi( mul8u::@3/(word) mul8u::return#0 )
|
|
(word) mul8u::return#1 ← (word) mul8u::return#3
|
|
return
|
|
to:@return
|
|
|
|
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
|
|
mul8s: scope:[mul8s] from main::@13 main::@5
|
|
(signed byte) mul8s::b#2 ← phi( main::@13/(signed byte) mul8s::b#1 main::@5/(signed byte) mul8s::b#0 )
|
|
(signed byte) mul8s::a#2 ← phi( main::@13/(signed byte) mul8s::a#1 main::@5/(signed byte) mul8s::a#0 )
|
|
(byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#2
|
|
(byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#2
|
|
call mul8u
|
|
(word) mul8u::return#2 ← (word) mul8u::return#1
|
|
to:mul8s::@5
|
|
mul8s::@5: scope:[mul8s] from mul8s
|
|
(signed byte) mul8s::b#5 ← phi( mul8s/(signed byte) mul8s::b#2 )
|
|
(signed byte) mul8s::a#3 ← phi( mul8s/(signed byte) mul8s::a#2 )
|
|
(word) mul8u::return#4 ← phi( mul8s/(word) mul8u::return#2 )
|
|
(word~) mul8s::$0 ← (word) mul8u::return#4
|
|
(word) mul8s::m#0 ← (word~) mul8s::$0
|
|
(bool~) mul8s::$1 ← (signed byte) mul8s::a#3 < (number) 0
|
|
(bool~) mul8s::$2 ← ! (bool~) mul8s::$1
|
|
if((bool~) mul8s::$2) goto mul8s::@1
|
|
to:mul8s::@3
|
|
mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@5
|
|
(signed byte) mul8s::a#5 ← phi( mul8s::@3/(signed byte) mul8s::a#6 mul8s::@5/(signed byte) mul8s::a#3 )
|
|
(word) mul8s::m#6 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@5/(word) mul8s::m#0 )
|
|
(signed byte) mul8s::b#3 ← phi( mul8s::@3/(signed byte) mul8s::b#4 mul8s::@5/(signed byte) mul8s::b#5 )
|
|
(bool~) mul8s::$3 ← (signed byte) mul8s::b#3 < (number) 0
|
|
(bool~) mul8s::$4 ← ! (bool~) mul8s::$3
|
|
if((bool~) mul8s::$4) goto mul8s::@2
|
|
to:mul8s::@4
|
|
mul8s::@3: scope:[mul8s] from mul8s::@5
|
|
(signed byte) mul8s::a#6 ← phi( mul8s::@5/(signed byte) mul8s::a#3 )
|
|
(signed byte) mul8s::b#4 ← phi( mul8s::@5/(signed byte) mul8s::b#5 )
|
|
(word) mul8s::m#3 ← phi( mul8s::@5/(word) mul8s::m#0 )
|
|
(byte~) mul8s::$6 ← > (word) mul8s::m#3
|
|
(byte~) mul8s::$13 ← (byte)(signed byte) mul8s::b#4
|
|
(byte~) mul8s::$7 ← (byte~) mul8s::$6 - (byte~) mul8s::$13
|
|
(byte~) mul8s::$11 ← (byte~) mul8s::$7
|
|
(word) mul8s::m#1 ← (word) mul8s::m#3 hi= (byte~) mul8s::$11
|
|
to:mul8s::@1
|
|
mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4
|
|
(word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#6 mul8s::@4/(word) mul8s::m#2 )
|
|
(signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4
|
|
to:mul8s::@return
|
|
mul8s::@4: scope:[mul8s] from mul8s::@1
|
|
(signed byte) mul8s::a#4 ← phi( mul8s::@1/(signed byte) mul8s::a#5 )
|
|
(word) mul8s::m#5 ← phi( mul8s::@1/(word) mul8s::m#6 )
|
|
(byte~) mul8s::$9 ← > (word) mul8s::m#5
|
|
(byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#4
|
|
(byte~) mul8s::$10 ← (byte~) mul8s::$9 - (byte~) mul8s::$14
|
|
(byte~) mul8s::$12 ← (byte~) mul8s::$10
|
|
(word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$12
|
|
to:mul8s::@2
|
|
mul8s::@return: scope:[mul8s] from mul8s::@2
|
|
(signed word) mul8s::return#4 ← phi( mul8s::@2/(signed word) mul8s::return#0 )
|
|
(signed word) mul8s::return#1 ← (signed word) mul8s::return#4
|
|
return
|
|
to:@return
|
|
@1: scope:[] from @begin
|
|
(byte) conio_cursor_x ← (byte) 0
|
|
(byte) conio_cursor_y ← (byte) 0
|
|
(byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT
|
|
(byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS
|
|
(byte) conio_textcolor ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT
|
|
(byte) conio_scroll_enable ← (byte) 1
|
|
to:@2
|
|
|
|
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
|
|
gotoxy: scope:[gotoxy] from cscroll::@2 main::@3
|
|
(byte) gotoxy::x#5 ← phi( cscroll::@2/(byte) gotoxy::x#1 main::@3/(byte) gotoxy::x#2 )
|
|
(byte) gotoxy::y#3 ← phi( cscroll::@2/(byte) gotoxy::y#1 main::@3/(byte) gotoxy::y#2 )
|
|
(bool~) gotoxy::$0 ← (byte) gotoxy::y#3 > (number) $19
|
|
(bool~) gotoxy::$1 ← ! (bool~) gotoxy::$0
|
|
if((bool~) gotoxy::$1) goto gotoxy::@1
|
|
to:gotoxy::@3
|
|
gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3
|
|
(byte) gotoxy::y#5 ← phi( gotoxy/(byte) gotoxy::y#3 gotoxy::@3/(byte) gotoxy::y#0 )
|
|
(byte) gotoxy::x#3 ← phi( gotoxy/(byte) gotoxy::x#5 gotoxy::@3/(byte) gotoxy::x#6 )
|
|
(bool~) gotoxy::$2 ← (byte) gotoxy::x#3 >= (number) $28
|
|
(bool~) gotoxy::$3 ← ! (bool~) gotoxy::$2
|
|
if((bool~) gotoxy::$3) goto gotoxy::@2
|
|
to:gotoxy::@4
|
|
gotoxy::@3: scope:[gotoxy] from gotoxy
|
|
(byte) gotoxy::x#6 ← phi( gotoxy/(byte) gotoxy::x#5 )
|
|
(byte) gotoxy::y#0 ← (number) 0
|
|
to:gotoxy::@1
|
|
gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4
|
|
(byte) gotoxy::y#4 ← phi( gotoxy::@1/(byte) gotoxy::y#5 gotoxy::@4/(byte) gotoxy::y#6 )
|
|
(byte) gotoxy::x#4 ← phi( gotoxy::@1/(byte) gotoxy::x#3 gotoxy::@4/(byte) gotoxy::x#0 )
|
|
(byte) conio_cursor_x ← (byte) gotoxy::x#4
|
|
(byte) conio_cursor_y ← (byte) gotoxy::y#4
|
|
(word~) gotoxy::$8 ← (word)(byte) gotoxy::y#4
|
|
(number~) gotoxy::$4 ← (word~) gotoxy::$8 * (number) $28
|
|
(number~) gotoxy::$5 ← (number~) gotoxy::$4 + (byte) gotoxy::x#4
|
|
(word) gotoxy::offset#0 ← (number~) gotoxy::$5
|
|
(byte*~) gotoxy::$6 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0
|
|
(byte*) conio_cursor_text ← (byte*~) gotoxy::$6
|
|
(byte*~) gotoxy::$7 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0
|
|
(byte*) conio_cursor_color ← (byte*~) gotoxy::$7
|
|
to:gotoxy::@return
|
|
gotoxy::@4: scope:[gotoxy] from gotoxy::@1
|
|
(byte) gotoxy::y#6 ← phi( gotoxy::@1/(byte) gotoxy::y#5 )
|
|
(byte) gotoxy::x#0 ← (number) 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
|
|
(byte) cputc::c#3 ← phi( cputs::@2/(byte) cputc::c#0 printf_number_buffer::@9/(byte) cputc::c#2 printf_padding::@2/(byte) cputc::c#1 )
|
|
(bool~) cputc::$0 ← (byte) cputc::c#3 == (byte) '
|
|
'
|
|
if((bool~) 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
|
|
(byte) cputc::c#4 ← phi( cputc/(byte) cputc::c#3 )
|
|
*((byte*) conio_cursor_text) ← (byte) cputc::c#4
|
|
(byte*) conio_cursor_text ← ++ (byte*) conio_cursor_text
|
|
*((byte*) conio_cursor_color) ← (byte) conio_textcolor
|
|
(byte*) conio_cursor_color ← ++ (byte*) conio_cursor_color
|
|
(byte) conio_cursor_x ← ++ (byte) conio_cursor_x
|
|
(bool~) cputc::$1 ← (byte) conio_cursor_x == (number) $28
|
|
(bool~) cputc::$2 ← ! (bool~) cputc::$1
|
|
if((bool~) cputc::$2) goto cputc::@return
|
|
to:cputc::@3
|
|
cputc::@3: scope:[cputc] from cputc::@2
|
|
(byte) conio_cursor_x ← (number) 0
|
|
(byte) conio_cursor_y ← ++ (byte) conio_cursor_y
|
|
call cscroll
|
|
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
|
|
(number~) cputln::$0 ← (number) $28 - (byte) conio_cursor_x
|
|
(word) cputln::ln_offset#0 ← (number~) cputln::$0
|
|
(byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0
|
|
(byte*) conio_cursor_text ← (byte*~) cputln::$1
|
|
(byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0
|
|
(byte*) conio_cursor_color ← (byte*~) cputln::$2
|
|
(byte) conio_cursor_x ← (number) 0
|
|
(byte) conio_cursor_y ← ++ (byte) 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()) cscroll()
|
|
cscroll: scope:[cscroll] from cputc::@3 cputln
|
|
(bool~) cscroll::$0 ← (byte) conio_cursor_y == (number) $19
|
|
(bool~) cscroll::$1 ← ! (bool~) cscroll::$0
|
|
if((bool~) cscroll::$1) goto cscroll::@return
|
|
to:cscroll::@1
|
|
cscroll::@1: scope:[cscroll] from cscroll
|
|
(bool~) cscroll::$9 ← (number) 0 != (byte) conio_scroll_enable
|
|
if((bool~) cscroll::$9) goto cscroll::@3
|
|
to:cscroll::@2
|
|
cscroll::@3: scope:[cscroll] from cscroll::@1
|
|
(void*) memcpy::destination#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT
|
|
(void*) memcpy::source#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $28
|
|
(word) memcpy::num#0 ← (number) $19*(number) $28-(number) $28
|
|
call memcpy
|
|
(void*) memcpy::return#2 ← (void*) memcpy::return#1
|
|
to:cscroll::@4
|
|
cscroll::@4: scope:[cscroll] from cscroll::@3
|
|
(void*) memcpy::destination#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS
|
|
(void*) memcpy::source#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $28
|
|
(word) memcpy::num#1 ← (number) $19*(number) $28-(number) $28
|
|
call memcpy
|
|
(void*) memcpy::return#3 ← (void*) memcpy::return#1
|
|
to:cscroll::@5
|
|
cscroll::@5: scope:[cscroll] from cscroll::@4
|
|
(void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(number) $28
|
|
(byte) memset::c#0 ← (byte) ' '
|
|
(word) memset::num#0 ← (number) $28
|
|
call memset
|
|
(void*) memset::return#2 ← (void*) memset::return#1
|
|
to:cscroll::@6
|
|
cscroll::@6: scope:[cscroll] from cscroll::@5
|
|
(void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(number) $28
|
|
(byte) memset::c#1 ← (byte) conio_textcolor
|
|
(word) memset::num#1 ← (number) $28
|
|
call memset
|
|
(void*) memset::return#3 ← (void*) memset::return#1
|
|
to:cscroll::@7
|
|
cscroll::@7: scope:[cscroll] from cscroll::@6
|
|
(byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (number) $28
|
|
(byte*) conio_cursor_text ← (byte*~) cscroll::$7
|
|
(byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (number) $28
|
|
(byte*) conio_cursor_color ← (byte*~) cscroll::$8
|
|
(byte) conio_cursor_y ← -- (byte) conio_cursor_y
|
|
to:cscroll::@return
|
|
cscroll::@2: scope:[cscroll] from cscroll::@1
|
|
(byte) gotoxy::x#1 ← (number) 0
|
|
(byte) gotoxy::y#1 ← (number) 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()) cputs((to_nomodify byte*) cputs::s)
|
|
cputs: scope:[cputs] from main::@11 printf_number_buffer::@5
|
|
(to_nomodify byte*) cputs::s#4 ← phi( main::@11/(to_nomodify byte*) cputs::s#2 printf_number_buffer::@5/(to_nomodify byte*) cputs::s#1 )
|
|
(byte) cputs::c#0 ← (byte) 0
|
|
to:cputs::@1
|
|
cputs::@1: scope:[cputs] from cputs cputs::@3
|
|
(to_nomodify byte*) cputs::s#3 ← phi( cputs/(to_nomodify byte*) cputs::s#4 cputs::@3/(to_nomodify byte*) cputs::s#5 )
|
|
(byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3)
|
|
(to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3
|
|
(bool~) cputs::$1 ← (number) 0 != (byte) cputs::c#1
|
|
if((bool~) cputs::$1) goto cputs::@2
|
|
to:cputs::@return
|
|
cputs::@2: scope:[cputs] from cputs::@1
|
|
(to_nomodify byte*) cputs::s#6 ← phi( cputs::@1/(to_nomodify byte*) cputs::s#0 )
|
|
(byte) cputs::c#2 ← phi( cputs::@1/(byte) cputs::c#1 )
|
|
(byte) cputc::c#0 ← (byte) cputs::c#2
|
|
call cputc
|
|
to:cputs::@3
|
|
cputs::@3: scope:[cputs] from cputs::@2
|
|
(to_nomodify byte*) cputs::s#5 ← phi( cputs::@2/(to_nomodify byte*) cputs::s#6 )
|
|
to:cputs::@1
|
|
cputs::@return: scope:[cputs] from cputs::@1
|
|
return
|
|
to:@return
|
|
|
|
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
|
utoa: scope:[utoa] from printf_uint::@3
|
|
(byte*) utoa::buffer#21 ← phi( printf_uint::@3/(byte*) utoa::buffer#5 )
|
|
(word) utoa::value#12 ← phi( printf_uint::@3/(word) utoa::value#1 )
|
|
(byte) utoa::radix#1 ← phi( printf_uint::@3/(byte) utoa::radix#0 )
|
|
(byte) utoa::max_digits#0 ← (byte) 0
|
|
(word*) utoa::digit_values#0 ← (word*) 0
|
|
(bool~) utoa::$0 ← (byte) utoa::radix#1 == (const byte) DECIMAL
|
|
if((bool~) utoa::$0) goto utoa::@1
|
|
to:utoa::@6
|
|
utoa::@1: scope:[utoa] from utoa
|
|
(byte*) utoa::buffer#17 ← phi( utoa/(byte*) utoa::buffer#21 )
|
|
(word) utoa::value#8 ← phi( utoa/(word) utoa::value#12 )
|
|
(byte) utoa::max_digits#1 ← (number) 5
|
|
(word*) utoa::digit_values#1 ← (const word*) RADIX_DECIMAL_VALUES
|
|
to:utoa::@5
|
|
utoa::@6: scope:[utoa] from utoa
|
|
(word) utoa::value#13 ← phi( utoa/(word) utoa::value#12 )
|
|
(byte*) utoa::buffer#16 ← phi( utoa/(byte*) utoa::buffer#21 )
|
|
(byte) utoa::radix#2 ← phi( utoa/(byte) utoa::radix#1 )
|
|
(bool~) utoa::$1 ← (byte) utoa::radix#2 == (const byte) HEXADECIMAL
|
|
if((bool~) utoa::$1) goto utoa::@2
|
|
to:utoa::@7
|
|
utoa::@2: scope:[utoa] from utoa::@6
|
|
(byte*) utoa::buffer#18 ← phi( utoa::@6/(byte*) utoa::buffer#16 )
|
|
(word) utoa::value#9 ← phi( utoa::@6/(word) utoa::value#13 )
|
|
(byte) utoa::max_digits#2 ← (number) 4
|
|
(word*) utoa::digit_values#2 ← (const word*) RADIX_HEXADECIMAL_VALUES
|
|
to:utoa::@5
|
|
utoa::@7: scope:[utoa] from utoa::@6
|
|
(word) utoa::value#14 ← phi( utoa::@6/(word) utoa::value#13 )
|
|
(byte*) utoa::buffer#13 ← phi( utoa::@6/(byte*) utoa::buffer#16 )
|
|
(byte) utoa::radix#3 ← phi( utoa::@6/(byte) utoa::radix#2 )
|
|
(bool~) utoa::$2 ← (byte) utoa::radix#3 == (const byte) OCTAL
|
|
if((bool~) utoa::$2) goto utoa::@3
|
|
to:utoa::@8
|
|
utoa::@3: scope:[utoa] from utoa::@7
|
|
(byte*) utoa::buffer#19 ← phi( utoa::@7/(byte*) utoa::buffer#13 )
|
|
(word) utoa::value#10 ← phi( utoa::@7/(word) utoa::value#14 )
|
|
(byte) utoa::max_digits#3 ← (number) 6
|
|
(word*) utoa::digit_values#3 ← (const word*) RADIX_OCTAL_VALUES
|
|
to:utoa::@5
|
|
utoa::@8: scope:[utoa] from utoa::@7
|
|
(word) utoa::value#15 ← phi( utoa::@7/(word) utoa::value#14 )
|
|
(byte*) utoa::buffer#10 ← phi( utoa::@7/(byte*) utoa::buffer#13 )
|
|
(byte) utoa::radix#4 ← phi( utoa::@7/(byte) utoa::radix#3 )
|
|
(bool~) utoa::$3 ← (byte) utoa::radix#4 == (const byte) BINARY
|
|
if((bool~) utoa::$3) goto utoa::@4
|
|
to:utoa::@9
|
|
utoa::@4: scope:[utoa] from utoa::@8
|
|
(byte*) utoa::buffer#20 ← phi( utoa::@8/(byte*) utoa::buffer#10 )
|
|
(word) utoa::value#11 ← phi( utoa::@8/(word) utoa::value#15 )
|
|
(byte) utoa::max_digits#4 ← (number) $10
|
|
(word*) utoa::digit_values#4 ← (const word*) RADIX_BINARY_VALUES
|
|
to:utoa::@5
|
|
utoa::@9: scope:[utoa] from utoa::@8
|
|
(byte*) utoa::buffer#6 ← phi( utoa::@8/(byte*) utoa::buffer#10 )
|
|
*((byte*) utoa::buffer#6) ← (byte) 'e'
|
|
(byte*) utoa::buffer#0 ← ++ (byte*) utoa::buffer#6
|
|
*((byte*) utoa::buffer#0) ← (byte) 'r'
|
|
(byte*) utoa::buffer#1 ← ++ (byte*) utoa::buffer#0
|
|
*((byte*) utoa::buffer#1) ← (byte) 'r'
|
|
(byte*) utoa::buffer#2 ← ++ (byte*) utoa::buffer#1
|
|
*((byte*) utoa::buffer#2) ← (number) 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
|
|
(byte*) utoa::buffer#15 ← phi( utoa::@1/(byte*) utoa::buffer#17 utoa::@2/(byte*) utoa::buffer#18 utoa::@3/(byte*) utoa::buffer#19 utoa::@4/(byte*) utoa::buffer#20 )
|
|
(word) utoa::value#7 ← phi( utoa::@1/(word) utoa::value#8 utoa::@2/(word) utoa::value#9 utoa::@3/(word) utoa::value#10 utoa::@4/(word) utoa::value#11 )
|
|
(word*) utoa::digit_values#8 ← phi( utoa::@1/(word*) utoa::digit_values#1 utoa::@2/(word*) utoa::digit_values#2 utoa::@3/(word*) utoa::digit_values#3 utoa::@4/(word*) utoa::digit_values#4 )
|
|
(byte) utoa::max_digits#7 ← phi( utoa::@1/(byte) utoa::max_digits#1 utoa::@2/(byte) utoa::max_digits#2 utoa::@3/(byte) utoa::max_digits#3 utoa::@4/(byte) utoa::max_digits#4 )
|
|
(byte) utoa::started#0 ← (byte) 0
|
|
(byte) utoa::digit#0 ← (byte) 0
|
|
to:utoa::@10
|
|
utoa::@10: scope:[utoa] from utoa::@13 utoa::@5
|
|
(byte*) utoa::buffer#11 ← phi( utoa::@13/(byte*) utoa::buffer#14 utoa::@5/(byte*) utoa::buffer#15 )
|
|
(byte) utoa::started#3 ← phi( utoa::@13/(byte) utoa::started#4 utoa::@5/(byte) utoa::started#0 )
|
|
(word) utoa::value#5 ← phi( utoa::@13/(word) utoa::value#6 utoa::@5/(word) utoa::value#7 )
|
|
(word*) utoa::digit_values#6 ← phi( utoa::@13/(word*) utoa::digit_values#7 utoa::@5/(word*) utoa::digit_values#8 )
|
|
(byte) utoa::digit#2 ← phi( utoa::@13/(byte) utoa::digit#1 utoa::@5/(byte) utoa::digit#0 )
|
|
(byte) utoa::max_digits#5 ← phi( utoa::@13/(byte) utoa::max_digits#6 utoa::@5/(byte) utoa::max_digits#7 )
|
|
(number~) utoa::$4 ← (byte) utoa::max_digits#5 - (number) 1
|
|
(bool~) utoa::$5 ← (byte) utoa::digit#2 < (number~) utoa::$4
|
|
if((bool~) utoa::$5) goto utoa::@11
|
|
to:utoa::@12
|
|
utoa::@11: scope:[utoa] from utoa::@10
|
|
(byte) utoa::max_digits#8 ← phi( utoa::@10/(byte) utoa::max_digits#5 )
|
|
(byte*) utoa::buffer#12 ← phi( utoa::@10/(byte*) utoa::buffer#11 )
|
|
(byte) utoa::started#2 ← phi( utoa::@10/(byte) utoa::started#3 )
|
|
(word) utoa::value#2 ← phi( utoa::@10/(word) utoa::value#5 )
|
|
(word*) utoa::digit_values#5 ← phi( utoa::@10/(word*) utoa::digit_values#6 )
|
|
(byte) utoa::digit#3 ← phi( utoa::@10/(byte) utoa::digit#2 )
|
|
(byte~) utoa::$10 ← (byte) utoa::digit#3 * (const byte) SIZEOF_WORD
|
|
(word) utoa::digit_value#0 ← *((word*) utoa::digit_values#5 + (byte~) utoa::$10)
|
|
(bool~) utoa::$6 ← (word) utoa::value#2 >= (word) utoa::digit_value#0
|
|
(bool~) utoa::$7 ← (byte) utoa::started#2 || (bool~) utoa::$6
|
|
(bool~) utoa::$8 ← ! (bool~) utoa::$7
|
|
if((bool~) utoa::$8) goto utoa::@13
|
|
to:utoa::@14
|
|
utoa::@12: scope:[utoa] from utoa::@10
|
|
(byte*) utoa::buffer#7 ← phi( utoa::@10/(byte*) utoa::buffer#11 )
|
|
(word) utoa::value#3 ← phi( utoa::@10/(word) utoa::value#5 )
|
|
(byte~) utoa::$11 ← (byte)(word) utoa::value#3
|
|
*((byte*) utoa::buffer#7) ← *((const byte*) DIGITS + (byte~) utoa::$11)
|
|
(byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#7
|
|
*((byte*) utoa::buffer#3) ← (number) 0
|
|
to:utoa::@return
|
|
utoa::@13: scope:[utoa] from utoa::@11 utoa::@15
|
|
(byte*) utoa::buffer#14 ← phi( utoa::@11/(byte*) utoa::buffer#12 utoa::@15/(byte*) utoa::buffer#4 )
|
|
(byte) utoa::started#4 ← phi( utoa::@11/(byte) utoa::started#2 utoa::@15/(byte) utoa::started#1 )
|
|
(word) utoa::value#6 ← phi( utoa::@11/(word) utoa::value#2 utoa::@15/(word) utoa::value#0 )
|
|
(word*) utoa::digit_values#7 ← phi( utoa::@11/(word*) utoa::digit_values#5 utoa::@15/(word*) utoa::digit_values#9 )
|
|
(byte) utoa::max_digits#6 ← phi( utoa::@11/(byte) utoa::max_digits#8 utoa::@15/(byte) utoa::max_digits#9 )
|
|
(byte) utoa::digit#4 ← phi( utoa::@11/(byte) utoa::digit#3 utoa::@15/(byte) utoa::digit#5 )
|
|
(byte) utoa::digit#1 ← ++ (byte) utoa::digit#4
|
|
to:utoa::@10
|
|
utoa::@14: scope:[utoa] from utoa::@11
|
|
(word*) utoa::digit_values#10 ← phi( utoa::@11/(word*) utoa::digit_values#5 )
|
|
(byte) utoa::max_digits#10 ← phi( utoa::@11/(byte) utoa::max_digits#8 )
|
|
(byte) utoa::digit#6 ← phi( utoa::@11/(byte) utoa::digit#3 )
|
|
(word) utoa::digit_value#1 ← phi( utoa::@11/(word) utoa::digit_value#0 )
|
|
(word) utoa::value#4 ← phi( utoa::@11/(word) utoa::value#2 )
|
|
(byte*) utoa::buffer#8 ← phi( utoa::@11/(byte*) utoa::buffer#12 )
|
|
(byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#8
|
|
(word) utoa_append::value#0 ← (word) utoa::value#4
|
|
(word) utoa_append::sub#0 ← (word) utoa::digit_value#1
|
|
call utoa_append
|
|
(word) utoa_append::return#0 ← (word) utoa_append::return#2
|
|
to:utoa::@15
|
|
utoa::@15: scope:[utoa] from utoa::@14
|
|
(word*) utoa::digit_values#9 ← phi( utoa::@14/(word*) utoa::digit_values#10 )
|
|
(byte) utoa::max_digits#9 ← phi( utoa::@14/(byte) utoa::max_digits#10 )
|
|
(byte) utoa::digit#5 ← phi( utoa::@14/(byte) utoa::digit#6 )
|
|
(byte*) utoa::buffer#9 ← phi( utoa::@14/(byte*) utoa::buffer#8 )
|
|
(word) utoa_append::return#3 ← phi( utoa::@14/(word) utoa_append::return#0 )
|
|
(word~) utoa::$9 ← (word) utoa_append::return#3
|
|
(word) utoa::value#0 ← (word~) utoa::$9
|
|
(byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#9
|
|
(byte) utoa::started#1 ← (number) 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
|
|
(byte*) utoa_append::buffer#3 ← phi( utoa::@14/(byte*) utoa_append::buffer#0 )
|
|
(word) utoa_append::sub#3 ← phi( utoa::@14/(word) utoa_append::sub#0 )
|
|
(word) utoa_append::value#5 ← phi( utoa::@14/(word) utoa_append::value#0 )
|
|
(byte) utoa_append::digit#0 ← (byte) 0
|
|
to:utoa_append::@1
|
|
utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2
|
|
(byte*) utoa_append::buffer#2 ← phi( utoa_append/(byte*) utoa_append::buffer#3 utoa_append::@2/(byte*) utoa_append::buffer#4 )
|
|
(byte) utoa_append::digit#4 ← phi( utoa_append/(byte) utoa_append::digit#0 utoa_append::@2/(byte) utoa_append::digit#1 )
|
|
(word) utoa_append::sub#1 ← phi( utoa_append/(word) utoa_append::sub#3 utoa_append::@2/(word) utoa_append::sub#2 )
|
|
(word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#5 utoa_append::@2/(word) utoa_append::value#1 )
|
|
(bool~) utoa_append::$0 ← (word) utoa_append::value#2 >= (word) utoa_append::sub#1
|
|
if((bool~) utoa_append::$0) goto utoa_append::@2
|
|
to:utoa_append::@3
|
|
utoa_append::@2: scope:[utoa_append] from utoa_append::@1
|
|
(byte*) utoa_append::buffer#4 ← phi( utoa_append::@1/(byte*) utoa_append::buffer#2 )
|
|
(word) utoa_append::sub#2 ← phi( utoa_append::@1/(word) utoa_append::sub#1 )
|
|
(word) utoa_append::value#3 ← phi( utoa_append::@1/(word) utoa_append::value#2 )
|
|
(byte) utoa_append::digit#2 ← phi( utoa_append::@1/(byte) utoa_append::digit#4 )
|
|
(byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2
|
|
(word) utoa_append::value#1 ← (word) utoa_append::value#3 - (word) utoa_append::sub#2
|
|
to:utoa_append::@1
|
|
utoa_append::@3: scope:[utoa_append] from utoa_append::@1
|
|
(word) utoa_append::value#4 ← phi( utoa_append::@1/(word) utoa_append::value#2 )
|
|
(byte*) utoa_append::buffer#1 ← phi( utoa_append::@1/(byte*) utoa_append::buffer#2 )
|
|
(byte) utoa_append::digit#3 ← phi( utoa_append::@1/(byte) utoa_append::digit#4 )
|
|
*((byte*) utoa_append::buffer#1) ← *((const byte*) DIGITS + (byte) utoa_append::digit#3)
|
|
(word) utoa_append::return#1 ← (word) utoa_append::value#4
|
|
to:utoa_append::@return
|
|
utoa_append::@return: scope:[utoa_append] from utoa_append::@3
|
|
(word) utoa_append::return#4 ← phi( utoa_append::@3/(word) utoa_append::return#1 )
|
|
(word) utoa_append::return#2 ← (word) 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
|
|
(byte) printf_padding::pad#5 ← phi( printf_number_buffer::@10/(byte) printf_padding::pad#1 printf_number_buffer::@12/(byte) printf_padding::pad#2 printf_number_buffer::@8/(byte) printf_padding::pad#0 )
|
|
(byte) printf_padding::length#4 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 )
|
|
(byte) printf_padding::i#0 ← (byte) 0
|
|
to:printf_padding::@1
|
|
printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3
|
|
(byte) printf_padding::pad#4 ← phi( printf_padding/(byte) printf_padding::pad#5 printf_padding::@3/(byte) printf_padding::pad#6 )
|
|
(byte) printf_padding::length#3 ← phi( printf_padding/(byte) printf_padding::length#4 printf_padding::@3/(byte) printf_padding::length#5 )
|
|
(byte) printf_padding::i#2 ← phi( printf_padding/(byte) printf_padding::i#0 printf_padding::@3/(byte) printf_padding::i#1 )
|
|
(bool~) printf_padding::$0 ← (byte) printf_padding::i#2 < (byte) printf_padding::length#3
|
|
if((bool~) printf_padding::$0) goto printf_padding::@2
|
|
to:printf_padding::@return
|
|
printf_padding::@2: scope:[printf_padding] from printf_padding::@1
|
|
(byte) printf_padding::length#6 ← phi( printf_padding::@1/(byte) printf_padding::length#3 )
|
|
(byte) printf_padding::i#4 ← phi( printf_padding::@1/(byte) printf_padding::i#2 )
|
|
(byte) printf_padding::pad#3 ← phi( printf_padding::@1/(byte) printf_padding::pad#4 )
|
|
(byte) cputc::c#1 ← (byte) printf_padding::pad#3
|
|
call cputc
|
|
to:printf_padding::@3
|
|
printf_padding::@3: scope:[printf_padding] from printf_padding::@2
|
|
(byte) printf_padding::pad#6 ← phi( printf_padding::@2/(byte) printf_padding::pad#3 )
|
|
(byte) printf_padding::length#5 ← phi( printf_padding::@2/(byte) printf_padding::length#6 )
|
|
(byte) printf_padding::i#3 ← phi( printf_padding::@2/(byte) printf_padding::i#4 )
|
|
(byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#3
|
|
to:printf_padding::@1
|
|
printf_padding::@return: scope:[printf_padding] from printf_padding::@1
|
|
return
|
|
to:@return
|
|
|
|
(void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix)
|
|
printf_uint: scope:[printf_uint] from main::@10
|
|
(byte) printf_uint::format_upper_case#5 ← phi( main::@10/(byte) printf_uint::format_upper_case#0 )
|
|
(byte) printf_uint::format_zero_padding#5 ← phi( main::@10/(byte) printf_uint::format_zero_padding#0 )
|
|
(byte) printf_uint::format_justify_left#5 ← phi( main::@10/(byte) printf_uint::format_justify_left#0 )
|
|
(byte) printf_uint::format_min_length#5 ← phi( main::@10/(byte) printf_uint::format_min_length#0 )
|
|
(byte) printf_uint::format_radix#5 ← phi( main::@10/(byte) printf_uint::format_radix#0 )
|
|
(word) printf_uint::uvalue#4 ← phi( main::@10/(word) printf_uint::uvalue#0 )
|
|
(byte) printf_uint::format_sign_always#1 ← phi( main::@10/(byte) printf_uint::format_sign_always#0 )
|
|
(bool~) printf_uint::$5 ← (number) 0 != (byte) printf_uint::format_sign_always#1
|
|
if((bool~) printf_uint::$5) goto printf_uint::@1
|
|
to:printf_uint::@2
|
|
printf_uint::@1: scope:[printf_uint] from printf_uint
|
|
(byte) printf_uint::format_upper_case#3 ← phi( printf_uint/(byte) printf_uint::format_upper_case#5 )
|
|
(byte) printf_uint::format_zero_padding#3 ← phi( printf_uint/(byte) printf_uint::format_zero_padding#5 )
|
|
(byte) printf_uint::format_sign_always#4 ← phi( printf_uint/(byte) printf_uint::format_sign_always#1 )
|
|
(byte) printf_uint::format_justify_left#3 ← phi( printf_uint/(byte) printf_uint::format_justify_left#5 )
|
|
(byte) printf_uint::format_min_length#3 ← phi( printf_uint/(byte) printf_uint::format_min_length#5 )
|
|
(byte) printf_uint::format_radix#3 ← phi( printf_uint/(byte) printf_uint::format_radix#5 )
|
|
(word) printf_uint::uvalue#2 ← phi( printf_uint/(word) printf_uint::uvalue#4 )
|
|
(byte~) printf_uint::$1 ← (byte) '+'
|
|
to:printf_uint::@3
|
|
printf_uint::@2: scope:[printf_uint] from printf_uint
|
|
(byte) printf_uint::format_upper_case#4 ← phi( printf_uint/(byte) printf_uint::format_upper_case#5 )
|
|
(byte) printf_uint::format_zero_padding#4 ← phi( printf_uint/(byte) printf_uint::format_zero_padding#5 )
|
|
(byte) printf_uint::format_sign_always#5 ← phi( printf_uint/(byte) printf_uint::format_sign_always#1 )
|
|
(byte) printf_uint::format_justify_left#4 ← phi( printf_uint/(byte) printf_uint::format_justify_left#5 )
|
|
(byte) printf_uint::format_min_length#4 ← phi( printf_uint/(byte) printf_uint::format_min_length#5 )
|
|
(byte) printf_uint::format_radix#4 ← phi( printf_uint/(byte) printf_uint::format_radix#5 )
|
|
(word) printf_uint::uvalue#3 ← phi( printf_uint/(word) printf_uint::uvalue#4 )
|
|
(number~) printf_uint::$0 ← (number) 0
|
|
to:printf_uint::@3
|
|
printf_uint::@3: scope:[printf_uint] from printf_uint::@1 printf_uint::@2
|
|
(byte) printf_uint::format_upper_case#2 ← phi( printf_uint::@1/(byte) printf_uint::format_upper_case#3 printf_uint::@2/(byte) printf_uint::format_upper_case#4 )
|
|
(byte) printf_uint::format_zero_padding#2 ← phi( printf_uint::@1/(byte) printf_uint::format_zero_padding#3 printf_uint::@2/(byte) printf_uint::format_zero_padding#4 )
|
|
(byte) printf_uint::format_sign_always#3 ← phi( printf_uint::@1/(byte) printf_uint::format_sign_always#4 printf_uint::@2/(byte) printf_uint::format_sign_always#5 )
|
|
(byte) printf_uint::format_justify_left#2 ← phi( printf_uint::@1/(byte) printf_uint::format_justify_left#3 printf_uint::@2/(byte) printf_uint::format_justify_left#4 )
|
|
(byte) printf_uint::format_min_length#2 ← phi( printf_uint::@1/(byte) printf_uint::format_min_length#3 printf_uint::@2/(byte) printf_uint::format_min_length#4 )
|
|
(byte) printf_uint::format_radix#1 ← phi( printf_uint::@1/(byte) printf_uint::format_radix#3 printf_uint::@2/(byte) printf_uint::format_radix#4 )
|
|
(word) printf_uint::uvalue#1 ← phi( printf_uint::@1/(word) printf_uint::uvalue#2 printf_uint::@2/(word) printf_uint::uvalue#3 )
|
|
(number~) printf_uint::$2 ← phi( printf_uint::@1/(byte~) printf_uint::$1 printf_uint::@2/(number~) printf_uint::$0 )
|
|
*((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (number~) printf_uint::$2
|
|
(word) utoa::value#1 ← (word) printf_uint::uvalue#1
|
|
(byte*) utoa::buffer#5 ← (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
(byte) utoa::radix#0 ← (byte) printf_uint::format_radix#1
|
|
call utoa
|
|
to:printf_uint::@4
|
|
printf_uint::@4: scope:[printf_uint] from printf_uint::@3
|
|
(byte) printf_uint::format_radix#2 ← phi( printf_uint::@3/(byte) printf_uint::format_radix#1 )
|
|
(byte) printf_uint::format_upper_case#1 ← phi( printf_uint::@3/(byte) printf_uint::format_upper_case#2 )
|
|
(byte) printf_uint::format_zero_padding#1 ← phi( printf_uint::@3/(byte) printf_uint::format_zero_padding#2 )
|
|
(byte) printf_uint::format_sign_always#2 ← phi( printf_uint::@3/(byte) printf_uint::format_sign_always#3 )
|
|
(byte) printf_uint::format_justify_left#1 ← phi( printf_uint::@3/(byte) printf_uint::format_justify_left#2 )
|
|
(byte) printf_uint::format_min_length#1 ← phi( printf_uint::@3/(byte) printf_uint::format_min_length#2 )
|
|
(byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN)
|
|
(byte*) printf_number_buffer::buffer_digits#0 ← (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
(byte) printf_number_buffer::format_min_length#0 ← (byte) printf_uint::format_min_length#1
|
|
(byte) printf_number_buffer::format_justify_left#0 ← (byte) printf_uint::format_justify_left#1
|
|
(byte) printf_number_buffer::format_sign_always#0 ← (byte) printf_uint::format_sign_always#2
|
|
(byte) printf_number_buffer::format_zero_padding#0 ← (byte) printf_uint::format_zero_padding#1
|
|
(byte) printf_number_buffer::format_upper_case#0 ← (byte) printf_uint::format_upper_case#1
|
|
(byte) printf_number_buffer::format_radix#0 ← (byte) printf_uint::format_radix#2
|
|
call printf_number_buffer
|
|
to:printf_uint::@5
|
|
printf_uint::@5: scope:[printf_uint] from printf_uint::@4
|
|
to:printf_uint::@return
|
|
printf_uint::@return: scope:[printf_uint] from printf_uint::@5
|
|
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_uint::@4
|
|
(byte) printf_number_buffer::format_upper_case#10 ← phi( printf_uint::@4/(byte) printf_number_buffer::format_upper_case#0 )
|
|
(byte) printf_number_buffer::buffer_sign#7 ← phi( printf_uint::@4/(byte) printf_number_buffer::buffer_sign#0 )
|
|
(byte*) printf_number_buffer::buffer_digits#4 ← phi( printf_uint::@4/(byte*) printf_number_buffer::buffer_digits#0 )
|
|
(byte) printf_number_buffer::format_zero_padding#4 ← phi( printf_uint::@4/(byte) printf_number_buffer::format_zero_padding#0 )
|
|
(byte) printf_number_buffer::format_justify_left#3 ← phi( printf_uint::@4/(byte) printf_number_buffer::format_justify_left#0 )
|
|
(byte) printf_number_buffer::format_min_length#1 ← phi( printf_uint::@4/(byte) printf_number_buffer::format_min_length#0 )
|
|
(signed byte) printf_number_buffer::padding#0 ← (signed byte) 0
|
|
(bool~) printf_number_buffer::$26 ← (number) 0 != (byte) printf_number_buffer::format_min_length#1
|
|
(bool~) printf_number_buffer::$0 ← ! (bool~) printf_number_buffer::$26
|
|
if((bool~) 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
|
|
(byte*) printf_number_buffer::buffer_digits#12 ← phi( printf_number_buffer/(byte*) printf_number_buffer::buffer_digits#4 printf_number_buffer::@13/(byte*) printf_number_buffer::buffer_digits#15 printf_number_buffer::@14/(byte*) printf_number_buffer::buffer_digits#16 )
|
|
(byte) printf_number_buffer::format_upper_case#7 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_upper_case#10 printf_number_buffer::@13/(byte) printf_number_buffer::format_upper_case#11 printf_number_buffer::@14/(byte) printf_number_buffer::format_upper_case#12 )
|
|
(byte) printf_number_buffer::buffer_sign#5 ← phi( printf_number_buffer/(byte) printf_number_buffer::buffer_sign#7 printf_number_buffer::@13/(byte) printf_number_buffer::buffer_sign#8 printf_number_buffer::@14/(byte) printf_number_buffer::buffer_sign#9 )
|
|
(signed byte) printf_number_buffer::padding#3 ← phi( printf_number_buffer/(signed byte) printf_number_buffer::padding#0 printf_number_buffer::@13/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@14/(signed byte) printf_number_buffer::padding#2 )
|
|
(byte) printf_number_buffer::format_zero_padding#1 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_zero_padding#4 printf_number_buffer::@13/(byte) printf_number_buffer::format_zero_padding#5 printf_number_buffer::@14/(byte) printf_number_buffer::format_zero_padding#6 )
|
|
(byte) printf_number_buffer::format_justify_left#1 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_justify_left#3 printf_number_buffer::@13/(byte) printf_number_buffer::format_justify_left#4 printf_number_buffer::@14/(byte) printf_number_buffer::format_justify_left#5 )
|
|
(bool~) printf_number_buffer::$27 ← (number) 0 != (byte) printf_number_buffer::format_justify_left#1
|
|
(bool~) printf_number_buffer::$1 ← ! (bool~) printf_number_buffer::$27
|
|
(bool~) printf_number_buffer::$28 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#1
|
|
(bool~) printf_number_buffer::$2 ← ! (bool~) printf_number_buffer::$28
|
|
(bool~) printf_number_buffer::$3 ← (bool~) printf_number_buffer::$1 && (bool~) printf_number_buffer::$2
|
|
(bool~) printf_number_buffer::$4 ← (bool~) printf_number_buffer::$3 && (signed byte) printf_number_buffer::padding#3
|
|
(bool~) printf_number_buffer::$5 ← ! (bool~) printf_number_buffer::$4
|
|
if((bool~) 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
|
|
(byte) printf_number_buffer::format_upper_case#16 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_upper_case#10 )
|
|
(byte) printf_number_buffer::format_zero_padding#16 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_zero_padding#4 )
|
|
(byte) printf_number_buffer::format_justify_left#11 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_justify_left#3 )
|
|
(byte) printf_number_buffer::format_min_length#5 ← phi( printf_number_buffer/(byte) printf_number_buffer::format_min_length#1 )
|
|
(byte) printf_number_buffer::buffer_sign#4 ← phi( printf_number_buffer/(byte) printf_number_buffer::buffer_sign#7 )
|
|
(byte*) printf_number_buffer::buffer_digits#1 ← phi( printf_number_buffer/(byte*) printf_number_buffer::buffer_digits#4 )
|
|
(byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#1
|
|
call strlen
|
|
(word) strlen::return#2 ← (word) strlen::return#1
|
|
to:printf_number_buffer::@15
|
|
printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@6
|
|
(byte*) printf_number_buffer::buffer_digits#18 ← phi( printf_number_buffer::@6/(byte*) printf_number_buffer::buffer_digits#1 )
|
|
(byte) printf_number_buffer::format_upper_case#14 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_upper_case#16 )
|
|
(byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_zero_padding#16 )
|
|
(byte) printf_number_buffer::format_justify_left#7 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_justify_left#11 )
|
|
(byte) printf_number_buffer::format_min_length#3 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_min_length#5 )
|
|
(byte) printf_number_buffer::buffer_sign#1 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::buffer_sign#4 )
|
|
(word) strlen::return#4 ← phi( printf_number_buffer::@6/(word) strlen::return#2 )
|
|
(word~) printf_number_buffer::$19 ← (word) strlen::return#4
|
|
(signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19
|
|
(bool~) printf_number_buffer::$29 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#1
|
|
(bool~) printf_number_buffer::$20 ← ! (bool~) printf_number_buffer::$29
|
|
if((bool~) 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
|
|
(byte*) printf_number_buffer::buffer_digits#15 ← phi( printf_number_buffer::@15/(byte*) printf_number_buffer::buffer_digits#18 printf_number_buffer::@7/(byte*) printf_number_buffer::buffer_digits#19 )
|
|
(byte) printf_number_buffer::format_upper_case#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_upper_case#14 printf_number_buffer::@7/(byte) printf_number_buffer::format_upper_case#15 )
|
|
(byte) printf_number_buffer::buffer_sign#8 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::buffer_sign#1 printf_number_buffer::@7/(byte) printf_number_buffer::buffer_sign#11 )
|
|
(byte) printf_number_buffer::format_zero_padding#5 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_zero_padding#10 printf_number_buffer::@7/(byte) printf_number_buffer::format_zero_padding#11 )
|
|
(byte) printf_number_buffer::format_justify_left#4 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_justify_left#7 printf_number_buffer::@7/(byte) printf_number_buffer::format_justify_left#8 )
|
|
(signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@15/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 )
|
|
(byte) printf_number_buffer::format_min_length#2 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_min_length#3 printf_number_buffer::@7/(byte) printf_number_buffer::format_min_length#4 )
|
|
(signed byte~) printf_number_buffer::$25 ← (signed byte)(byte) printf_number_buffer::format_min_length#2
|
|
(signed byte~) printf_number_buffer::$21 ← (signed byte~) printf_number_buffer::$25 - (signed byte) printf_number_buffer::len#2
|
|
(signed byte) printf_number_buffer::padding#1 ← (signed byte~) printf_number_buffer::$21
|
|
(bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (number) 0
|
|
(bool~) printf_number_buffer::$23 ← ! (bool~) printf_number_buffer::$22
|
|
if((bool~) 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
|
|
(byte*) printf_number_buffer::buffer_digits#19 ← phi( printf_number_buffer::@15/(byte*) printf_number_buffer::buffer_digits#18 )
|
|
(byte) printf_number_buffer::format_upper_case#15 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_upper_case#14 )
|
|
(byte) printf_number_buffer::buffer_sign#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::buffer_sign#1 )
|
|
(byte) printf_number_buffer::format_zero_padding#11 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_zero_padding#10 )
|
|
(byte) printf_number_buffer::format_justify_left#8 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_justify_left#7 )
|
|
(byte) printf_number_buffer::format_min_length#4 ← phi( printf_number_buffer::@15/(byte) printf_number_buffer::format_min_length#3 )
|
|
(signed byte) printf_number_buffer::len#3 ← phi( printf_number_buffer::@15/(signed byte) printf_number_buffer::len#0 )
|
|
(signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#3
|
|
to:printf_number_buffer::@13
|
|
printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@13
|
|
(byte*) printf_number_buffer::buffer_digits#16 ← phi( printf_number_buffer::@13/(byte*) printf_number_buffer::buffer_digits#15 )
|
|
(byte) printf_number_buffer::format_upper_case#12 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_upper_case#11 )
|
|
(byte) printf_number_buffer::buffer_sign#9 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::buffer_sign#8 )
|
|
(byte) printf_number_buffer::format_zero_padding#6 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_zero_padding#5 )
|
|
(byte) printf_number_buffer::format_justify_left#5 ← phi( printf_number_buffer::@13/(byte) printf_number_buffer::format_justify_left#4 )
|
|
(signed byte) printf_number_buffer::padding#2 ← (number) 0
|
|
to:printf_number_buffer::@1
|
|
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16
|
|
(byte) printf_number_buffer::format_justify_left#16 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_justify_left#1 printf_number_buffer::@16/(byte) printf_number_buffer::format_justify_left#18 )
|
|
(byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_number_buffer::@1/(byte*) printf_number_buffer::buffer_digits#12 printf_number_buffer::@16/(byte*) printf_number_buffer::buffer_digits#13 )
|
|
(byte) printf_number_buffer::format_upper_case#5 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_upper_case#7 printf_number_buffer::@16/(byte) printf_number_buffer::format_upper_case#8 )
|
|
(signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer::@1/(signed byte) printf_number_buffer::padding#3 printf_number_buffer::@16/(signed byte) printf_number_buffer::padding#12 )
|
|
(byte) printf_number_buffer::format_zero_padding#8 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_zero_padding#1 printf_number_buffer::@16/(byte) printf_number_buffer::format_zero_padding#12 )
|
|
(byte) printf_number_buffer::buffer_sign#2 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::buffer_sign#5 printf_number_buffer::@16/(byte) printf_number_buffer::buffer_sign#6 )
|
|
(bool~) printf_number_buffer::$30 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#2
|
|
(bool~) printf_number_buffer::$7 ← ! (bool~) printf_number_buffer::$30
|
|
if((bool~) 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
|
|
(byte) printf_number_buffer::format_justify_left#20 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_justify_left#1 )
|
|
(byte*) printf_number_buffer::buffer_digits#17 ← phi( printf_number_buffer::@1/(byte*) printf_number_buffer::buffer_digits#12 )
|
|
(byte) printf_number_buffer::format_upper_case#13 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_upper_case#7 )
|
|
(byte) printf_number_buffer::format_zero_padding#17 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::format_zero_padding#1 )
|
|
(byte) printf_number_buffer::buffer_sign#10 ← phi( printf_number_buffer::@1/(byte) printf_number_buffer::buffer_sign#5 )
|
|
(signed byte) printf_number_buffer::padding#4 ← phi( printf_number_buffer::@1/(signed byte) printf_number_buffer::padding#3 )
|
|
(byte) printf_padding::pad#0 ← (byte) ' '
|
|
(byte) printf_padding::length#0 ← (byte)(signed 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
|
|
(byte) printf_number_buffer::format_justify_left#18 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_justify_left#20 )
|
|
(byte*) printf_number_buffer::buffer_digits#13 ← phi( printf_number_buffer::@8/(byte*) printf_number_buffer::buffer_digits#17 )
|
|
(byte) printf_number_buffer::format_upper_case#8 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_upper_case#13 )
|
|
(signed byte) printf_number_buffer::padding#12 ← phi( printf_number_buffer::@8/(signed byte) printf_number_buffer::padding#4 )
|
|
(byte) printf_number_buffer::format_zero_padding#12 ← phi( printf_number_buffer::@8/(byte) printf_number_buffer::format_zero_padding#17 )
|
|
(byte) printf_number_buffer::buffer_sign#6 ← phi( printf_number_buffer::@8/(byte) 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
|
|
(byte) printf_number_buffer::format_justify_left#13 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_justify_left#15 printf_number_buffer::@2/(byte) printf_number_buffer::format_justify_left#16 )
|
|
(byte*) printf_number_buffer::buffer_digits#8 ← phi( printf_number_buffer::@17/(byte*) printf_number_buffer::buffer_digits#9 printf_number_buffer::@2/(byte*) printf_number_buffer::buffer_digits#10 )
|
|
(byte) printf_number_buffer::format_upper_case#3 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_upper_case#4 printf_number_buffer::@2/(byte) printf_number_buffer::format_upper_case#5 )
|
|
(signed byte) printf_number_buffer::padding#5 ← phi( printf_number_buffer::@17/(signed byte) printf_number_buffer::padding#9 printf_number_buffer::@2/(signed byte) printf_number_buffer::padding#10 )
|
|
(byte) printf_number_buffer::format_zero_padding#2 ← phi( printf_number_buffer::@17/(byte) printf_number_buffer::format_zero_padding#7 printf_number_buffer::@2/(byte) printf_number_buffer::format_zero_padding#8 )
|
|
(bool~) printf_number_buffer::$9 ← (byte) printf_number_buffer::format_zero_padding#2 && (signed byte) printf_number_buffer::padding#5
|
|
(bool~) printf_number_buffer::$10 ← ! (bool~) printf_number_buffer::$9
|
|
if((bool~) 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
|
|
(byte) printf_number_buffer::format_justify_left#19 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_justify_left#16 )
|
|
(byte*) printf_number_buffer::buffer_digits#14 ← phi( printf_number_buffer::@2/(byte*) printf_number_buffer::buffer_digits#10 )
|
|
(byte) printf_number_buffer::format_upper_case#9 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_upper_case#5 )
|
|
(signed byte) printf_number_buffer::padding#13 ← phi( printf_number_buffer::@2/(signed byte) printf_number_buffer::padding#10 )
|
|
(byte) printf_number_buffer::format_zero_padding#13 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::format_zero_padding#8 )
|
|
(byte) printf_number_buffer::buffer_sign#3 ← phi( printf_number_buffer::@2/(byte) printf_number_buffer::buffer_sign#2 )
|
|
(byte) cputc::c#2 ← (byte) 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
|
|
(byte) printf_number_buffer::format_justify_left#15 ← phi( printf_number_buffer::@9/(byte) printf_number_buffer::format_justify_left#19 )
|
|
(byte*) printf_number_buffer::buffer_digits#9 ← phi( printf_number_buffer::@9/(byte*) printf_number_buffer::buffer_digits#14 )
|
|
(byte) printf_number_buffer::format_upper_case#4 ← phi( printf_number_buffer::@9/(byte) printf_number_buffer::format_upper_case#9 )
|
|
(signed byte) printf_number_buffer::padding#9 ← phi( printf_number_buffer::@9/(signed byte) printf_number_buffer::padding#13 )
|
|
(byte) printf_number_buffer::format_zero_padding#7 ← phi( printf_number_buffer::@9/(byte) 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
|
|
(signed byte) printf_number_buffer::padding#15 ← phi( printf_number_buffer::@18/(signed byte) printf_number_buffer::padding#16 printf_number_buffer::@3/(signed byte) printf_number_buffer::padding#5 )
|
|
(byte) printf_number_buffer::format_justify_left#10 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_justify_left#12 printf_number_buffer::@3/(byte) printf_number_buffer::format_justify_left#13 )
|
|
(byte) printf_number_buffer::format_zero_padding#15 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_zero_padding#18 printf_number_buffer::@3/(byte) printf_number_buffer::format_zero_padding#2 )
|
|
(byte*) printf_number_buffer::buffer_digits#6 ← phi( printf_number_buffer::@18/(byte*) printf_number_buffer::buffer_digits#7 printf_number_buffer::@3/(byte*) printf_number_buffer::buffer_digits#8 )
|
|
(byte) printf_number_buffer::format_upper_case#1 ← phi( printf_number_buffer::@18/(byte) printf_number_buffer::format_upper_case#2 printf_number_buffer::@3/(byte) printf_number_buffer::format_upper_case#3 )
|
|
(bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1
|
|
(bool~) printf_number_buffer::$12 ← ! (bool~) printf_number_buffer::$31
|
|
if((bool~) 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
|
|
(byte) printf_number_buffer::format_justify_left#17 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_justify_left#13 )
|
|
(byte) printf_number_buffer::format_zero_padding#20 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_zero_padding#2 )
|
|
(byte*) printf_number_buffer::buffer_digits#11 ← phi( printf_number_buffer::@3/(byte*) printf_number_buffer::buffer_digits#8 )
|
|
(byte) printf_number_buffer::format_upper_case#6 ← phi( printf_number_buffer::@3/(byte) printf_number_buffer::format_upper_case#3 )
|
|
(signed byte) printf_number_buffer::padding#6 ← phi( printf_number_buffer::@3/(signed byte) printf_number_buffer::padding#5 )
|
|
(byte) printf_padding::pad#1 ← (byte) '0'
|
|
(byte) printf_padding::length#1 ← (byte)(signed 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
|
|
(signed byte) printf_number_buffer::padding#16 ← phi( printf_number_buffer::@10/(signed byte) printf_number_buffer::padding#6 )
|
|
(byte) printf_number_buffer::format_justify_left#12 ← phi( printf_number_buffer::@10/(byte) printf_number_buffer::format_justify_left#17 )
|
|
(byte) printf_number_buffer::format_zero_padding#18 ← phi( printf_number_buffer::@10/(byte) printf_number_buffer::format_zero_padding#20 )
|
|
(byte*) printf_number_buffer::buffer_digits#7 ← phi( printf_number_buffer::@10/(byte*) printf_number_buffer::buffer_digits#11 )
|
|
(byte) printf_number_buffer::format_upper_case#2 ← phi( printf_number_buffer::@10/(byte) 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
|
|
(signed byte) printf_number_buffer::padding#11 ← phi( printf_number_buffer::@20/(signed byte) printf_number_buffer::padding#14 printf_number_buffer::@4/(signed byte) printf_number_buffer::padding#15 )
|
|
(byte) printf_number_buffer::format_justify_left#6 ← phi( printf_number_buffer::@20/(byte) printf_number_buffer::format_justify_left#9 printf_number_buffer::@4/(byte) printf_number_buffer::format_justify_left#10 )
|
|
(byte) printf_number_buffer::format_zero_padding#9 ← phi( printf_number_buffer::@20/(byte) printf_number_buffer::format_zero_padding#14 printf_number_buffer::@4/(byte) printf_number_buffer::format_zero_padding#15 )
|
|
(byte*) printf_number_buffer::buffer_digits#2 ← phi( printf_number_buffer::@20/(byte*) printf_number_buffer::buffer_digits#5 printf_number_buffer::@4/(byte*) printf_number_buffer::buffer_digits#6 )
|
|
(to_nomodify byte*) cputs::s#1 ← (byte*) 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
|
|
(signed byte) printf_number_buffer::padding#7 ← phi( printf_number_buffer::@5/(signed byte) printf_number_buffer::padding#11 )
|
|
(byte) printf_number_buffer::format_justify_left#2 ← phi( printf_number_buffer::@5/(byte) printf_number_buffer::format_justify_left#6 )
|
|
(byte) printf_number_buffer::format_zero_padding#3 ← phi( printf_number_buffer::@5/(byte) printf_number_buffer::format_zero_padding#9 )
|
|
(bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3
|
|
(bool~) printf_number_buffer::$14 ← ! (bool~) printf_number_buffer::$32
|
|
(bool~) printf_number_buffer::$15 ← (byte) printf_number_buffer::format_justify_left#2 && (bool~) printf_number_buffer::$14
|
|
(bool~) printf_number_buffer::$16 ← (bool~) printf_number_buffer::$15 && (signed byte) printf_number_buffer::padding#7
|
|
(bool~) printf_number_buffer::$17 ← ! (bool~) printf_number_buffer::$16
|
|
if((bool~) 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
|
|
(signed byte) printf_number_buffer::padding#17 ← phi( printf_number_buffer::@4/(signed byte) printf_number_buffer::padding#15 )
|
|
(byte) printf_number_buffer::format_justify_left#14 ← phi( printf_number_buffer::@4/(byte) printf_number_buffer::format_justify_left#10 )
|
|
(byte) printf_number_buffer::format_zero_padding#19 ← phi( printf_number_buffer::@4/(byte) printf_number_buffer::format_zero_padding#15 )
|
|
(byte*) printf_number_buffer::buffer_digits#3 ← phi( printf_number_buffer::@4/(byte*) printf_number_buffer::buffer_digits#6 )
|
|
(byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#3
|
|
call strupr
|
|
(byte*) strupr::return#2 ← (byte*) strupr::return#1
|
|
to:printf_number_buffer::@20
|
|
printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@11
|
|
(signed byte) printf_number_buffer::padding#14 ← phi( printf_number_buffer::@11/(signed byte) printf_number_buffer::padding#17 )
|
|
(byte) printf_number_buffer::format_justify_left#9 ← phi( printf_number_buffer::@11/(byte) printf_number_buffer::format_justify_left#14 )
|
|
(byte) printf_number_buffer::format_zero_padding#14 ← phi( printf_number_buffer::@11/(byte) printf_number_buffer::format_zero_padding#19 )
|
|
(byte*) printf_number_buffer::buffer_digits#5 ← phi( printf_number_buffer::@11/(byte*) printf_number_buffer::buffer_digits#3 )
|
|
to:printf_number_buffer::@5
|
|
printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19
|
|
(signed byte) printf_number_buffer::padding#8 ← phi( printf_number_buffer::@19/(signed byte) printf_number_buffer::padding#7 )
|
|
(byte) printf_padding::pad#2 ← (byte) ' '
|
|
(byte) printf_padding::length#2 ← (byte)(signed 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()) main()
|
|
main: scope:[main] from @2
|
|
(void*) memset::str#2 ← (void*)(const nomodify byte*) SCREEN
|
|
(byte) memset::c#2 ← (byte) ' '
|
|
(word) memset::num#2 ← (number) $3e8
|
|
call memset
|
|
(void*) memset::return#4 ← (void*) memset::return#1
|
|
to:main::@9
|
|
main::@9: scope:[main] from main
|
|
(word) main::count#0 ← (word) 0
|
|
(byte*) main::sc#0 ← (const nomodify byte*) SCREEN
|
|
(byte) main::y#0 ← (byte) 0
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@6 main::@9
|
|
(byte*) main::sc#9 ← phi( main::@6/(byte*) main::sc#10 main::@9/(byte*) main::sc#0 )
|
|
(word) main::count#6 ← phi( main::@6/(word) main::count#8 main::@9/(word) main::count#0 )
|
|
(byte) main::y#2 ← phi( main::@6/(byte) main::y#1 main::@9/(byte) main::y#0 )
|
|
(bool~) main::$3 ← (byte) main::y#2 < (number) $19
|
|
if((bool~) main::$3) goto main::@2
|
|
to:main::@3
|
|
main::@2: scope:[main] from main::@1
|
|
(word) main::count#11 ← phi( main::@1/(word) main::count#6 )
|
|
(byte*) main::sc#8 ← phi( main::@1/(byte*) main::sc#9 )
|
|
(byte) main::y#6 ← phi( main::@1/(byte) main::y#2 )
|
|
(byte) main::x#0 ← (byte) 0
|
|
to:main::@4
|
|
main::@3: scope:[main] from main::@1
|
|
(word) main::count#4 ← phi( main::@1/(word) main::count#6 )
|
|
(byte) gotoxy::x#2 ← (number) 0
|
|
(byte) gotoxy::y#2 ← (number) 0
|
|
call gotoxy
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@3
|
|
(word) main::count#2 ← phi( main::@3/(word) main::count#4 )
|
|
(word) printf_uint::uvalue#0 ← (word) main::count#2
|
|
(byte) printf_uint::format_min_length#0 ← (byte) 0
|
|
(byte) printf_uint::format_justify_left#0 ← (byte) 0
|
|
(byte) printf_uint::format_sign_always#0 ← (byte) 0
|
|
(byte) printf_uint::format_zero_padding#0 ← (byte) 0
|
|
(byte) printf_uint::format_upper_case#0 ← (byte) 0
|
|
(byte) printf_uint::format_radix#0 ← (const byte) DECIMAL
|
|
call printf_uint
|
|
to:main::@11
|
|
main::@11: scope:[main] from main::@10
|
|
(to_nomodify byte*) cputs::s#2 ← (const byte*) main::s
|
|
call cputs
|
|
to:main::@12
|
|
main::@12: scope:[main] from main::@11
|
|
to:main::@return
|
|
main::@4: scope:[main] from main::@2 main::@7
|
|
(word) main::count#10 ← phi( main::@2/(word) main::count#11 main::@7/(word) main::count#12 )
|
|
(byte*) main::sc#7 ← phi( main::@2/(byte*) main::sc#8 main::@7/(byte*) main::sc#1 )
|
|
(byte) main::y#5 ← phi( main::@2/(byte) main::y#6 main::@7/(byte) main::y#7 )
|
|
(byte) main::x#2 ← phi( main::@2/(byte) main::x#0 main::@7/(byte) main::x#1 )
|
|
(bool~) main::$4 ← (byte) main::x#2 < (number) $28
|
|
if((bool~) main::$4) goto main::@5
|
|
to:main::@6
|
|
main::@5: scope:[main] from main::@4
|
|
(word) main::count#9 ← phi( main::@4/(word) main::count#10 )
|
|
(byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#7 )
|
|
(byte) main::y#3 ← phi( main::@4/(byte) main::y#5 )
|
|
(byte) main::x#3 ← phi( main::@4/(byte) main::x#2 )
|
|
(signed byte~) main::$14 ← (signed byte)(byte) main::x#3
|
|
(number~) main::$5 ← (signed byte~) main::$14 * (number) 2
|
|
(number~) main::$6 ← (number~) main::$5 - (number) $27
|
|
(signed byte) main::xd#0 ← (number~) main::$6
|
|
(signed byte~) main::$15 ← (signed byte)(byte) main::y#3
|
|
(number~) main::$7 ← (signed byte~) main::$15 * (number) 2
|
|
(number~) main::$8 ← (number~) main::$7 - (number) $18
|
|
(signed byte) main::yd#0 ← (number~) main::$8
|
|
(signed byte) mul8s::a#0 ← (signed byte) main::xd#0
|
|
(signed byte) mul8s::b#0 ← (signed byte) main::xd#0
|
|
call mul8s
|
|
(signed word) mul8s::return#2 ← (signed word) mul8s::return#1
|
|
to:main::@13
|
|
main::@13: scope:[main] from main::@5
|
|
(byte) main::y#10 ← phi( main::@5/(byte) main::y#3 )
|
|
(word) main::count#7 ← phi( main::@5/(word) main::count#9 )
|
|
(byte) main::x#7 ← phi( main::@5/(byte) main::x#3 )
|
|
(byte*) main::sc#5 ← phi( main::@5/(byte*) main::sc#6 )
|
|
(signed byte) main::yd#1 ← phi( main::@5/(signed byte) main::yd#0 )
|
|
(signed word) mul8s::return#5 ← phi( main::@5/(signed word) mul8s::return#2 )
|
|
(signed word~) main::$9 ← (signed word) mul8s::return#5
|
|
(signed byte) mul8s::a#1 ← (signed byte) main::yd#1
|
|
(signed byte) mul8s::b#1 ← (signed byte) main::yd#1
|
|
call mul8s
|
|
(signed word) mul8s::return#3 ← (signed word) mul8s::return#1
|
|
to:main::@14
|
|
main::@14: scope:[main] from main::@13
|
|
(byte) main::y#8 ← phi( main::@13/(byte) main::y#10 )
|
|
(word) main::count#5 ← phi( main::@13/(word) main::count#7 )
|
|
(byte) main::x#5 ← phi( main::@13/(byte) main::x#7 )
|
|
(byte*) main::sc#4 ← phi( main::@13/(byte*) main::sc#5 )
|
|
(signed word) mul8s::return#6 ← phi( main::@13/(signed word) mul8s::return#3 )
|
|
(signed word~) main::$10 ← (signed word) mul8s::return#6
|
|
(signed word~) main::$11 ← (signed word~) main::$9 + (signed word~) main::$10
|
|
(signed word) main::dist_sq#0 ← (signed word~) main::$11
|
|
(bool~) main::$12 ← (signed word) main::dist_sq#0 < (number) 2*(number) 9*(number) 2*(number) 9
|
|
(bool~) main::$13 ← ! (bool~) main::$12
|
|
if((bool~) main::$13) goto main::@7
|
|
to:main::@8
|
|
main::@6: scope:[main] from main::@4
|
|
(byte*) main::sc#10 ← phi( main::@4/(byte*) main::sc#7 )
|
|
(word) main::count#8 ← phi( main::@4/(word) main::count#10 )
|
|
(byte) main::y#4 ← phi( main::@4/(byte) main::y#5 )
|
|
(byte) main::y#1 ← ++ (byte) main::y#4
|
|
to:main::@1
|
|
main::@7: scope:[main] from main::@14 main::@8
|
|
(word) main::count#12 ← phi( main::@14/(word) main::count#5 main::@8/(word) main::count#1 )
|
|
(byte) main::y#7 ← phi( main::@14/(byte) main::y#8 main::@8/(byte) main::y#9 )
|
|
(byte) main::x#4 ← phi( main::@14/(byte) main::x#5 main::@8/(byte) main::x#6 )
|
|
(byte*) main::sc#2 ← phi( main::@14/(byte*) main::sc#4 main::@8/(byte*) main::sc#3 )
|
|
(byte*) main::sc#1 ← ++ (byte*) main::sc#2
|
|
(byte) main::x#1 ← ++ (byte) main::x#4
|
|
to:main::@4
|
|
main::@8: scope:[main] from main::@14
|
|
(byte) main::y#9 ← phi( main::@14/(byte) main::y#8 )
|
|
(byte) main::x#6 ← phi( main::@14/(byte) main::x#5 )
|
|
(word) main::count#3 ← phi( main::@14/(word) main::count#5 )
|
|
(byte*) main::sc#3 ← phi( main::@14/(byte*) main::sc#4 )
|
|
*((byte*) main::sc#3) ← (byte) '*'
|
|
(word) main::count#1 ← ++ (word) main::count#3
|
|
to:main::@7
|
|
main::@return: scope:[main] from main::@12
|
|
return
|
|
to:@return
|
|
@2: scope:[] from @1
|
|
call main
|
|
to:@3
|
|
@3: scope:[] from @2
|
|
to:@end
|
|
@end: scope:[] from @3
|
|
|
|
SYMBOL TABLE SSA
|
|
(label) @1
|
|
(label) @2
|
|
(label) @3
|
|
(label) @begin
|
|
(label) @end
|
|
(const byte) BINARY = (number) 2
|
|
(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*)(number) $d800
|
|
(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*)(number) $400
|
|
(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e
|
|
(const byte) DECIMAL = (number) $a
|
|
(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z
|
|
(const byte) HEXADECIMAL = (number) $10
|
|
(const byte) OCTAL = (number) 8
|
|
(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1
|
|
(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN = (byte) 0
|
|
(const byte) RADIX::BINARY = (number) 2
|
|
(const byte) RADIX::DECIMAL = (number) $a
|
|
(const byte) RADIX::HEXADECIMAL = (number) $10
|
|
(const byte) RADIX::OCTAL = (number) 8
|
|
(const word*) RADIX_BINARY_VALUES[] = { (word) $8000, (word) $4000, (word) $2000, (word) $1000, (word) $800, (word) $400, (word) $200, (word) $100, (word) $80, (word) $40, (word) $20, (word) $10, (word) 8, (word) 4, (word) 2 }
|
|
(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a }
|
|
(const word*) RADIX_HEXADECIMAL_VALUES[] = { (word) $1000, (word) $100, (word) $10 }
|
|
(const word*) RADIX_OCTAL_VALUES[] = { (word) $8000, (word) $1000, (word) $200, (word) $40, (word) 8 }
|
|
(const nomodify byte*) SCREEN = (byte*)(number) $400
|
|
(const byte) SIZEOF_WORD = (byte) 2
|
|
(byte*) conio_cursor_color loadstore
|
|
(byte*) conio_cursor_text loadstore
|
|
(byte) conio_cursor_x loadstore
|
|
(byte) conio_cursor_y loadstore
|
|
(byte) conio_scroll_enable loadstore
|
|
(byte) conio_textcolor loadstore
|
|
(void()) cputc((byte) cputc::c)
|
|
(bool~) cputc::$0
|
|
(bool~) cputc::$1
|
|
(bool~) cputc::$2
|
|
(label) cputc::@1
|
|
(label) cputc::@2
|
|
(label) cputc::@3
|
|
(label) cputc::@4
|
|
(label) cputc::@5
|
|
(label) cputc::@return
|
|
(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()
|
|
(number~) cputln::$0
|
|
(byte*~) cputln::$1
|
|
(byte*~) cputln::$2
|
|
(label) cputln::@1
|
|
(label) cputln::@return
|
|
(word) cputln::ln_offset
|
|
(word) cputln::ln_offset#0
|
|
(void()) cputs((to_nomodify byte*) cputs::s)
|
|
(bool~) cputs::$1
|
|
(label) cputs::@1
|
|
(label) cputs::@2
|
|
(label) cputs::@3
|
|
(label) cputs::@return
|
|
(byte) cputs::c
|
|
(byte) cputs::c#0
|
|
(byte) cputs::c#1
|
|
(byte) cputs::c#2
|
|
(to_nomodify byte*) cputs::s
|
|
(to_nomodify byte*) cputs::s#0
|
|
(to_nomodify byte*) cputs::s#1
|
|
(to_nomodify byte*) cputs::s#2
|
|
(to_nomodify byte*) cputs::s#3
|
|
(to_nomodify byte*) cputs::s#4
|
|
(to_nomodify byte*) cputs::s#5
|
|
(to_nomodify byte*) cputs::s#6
|
|
(void()) cscroll()
|
|
(bool~) cscroll::$0
|
|
(bool~) cscroll::$1
|
|
(byte*~) cscroll::$7
|
|
(byte*~) cscroll::$8
|
|
(bool~) cscroll::$9
|
|
(label) cscroll::@1
|
|
(label) cscroll::@2
|
|
(label) cscroll::@3
|
|
(label) cscroll::@4
|
|
(label) cscroll::@5
|
|
(label) cscroll::@6
|
|
(label) cscroll::@7
|
|
(label) cscroll::@8
|
|
(label) cscroll::@return
|
|
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
|
|
(bool~) gotoxy::$0
|
|
(bool~) gotoxy::$1
|
|
(bool~) gotoxy::$2
|
|
(bool~) gotoxy::$3
|
|
(number~) gotoxy::$4
|
|
(number~) gotoxy::$5
|
|
(byte*~) gotoxy::$6
|
|
(byte*~) gotoxy::$7
|
|
(word~) gotoxy::$8
|
|
(label) gotoxy::@1
|
|
(label) gotoxy::@2
|
|
(label) gotoxy::@3
|
|
(label) gotoxy::@4
|
|
(label) gotoxy::@return
|
|
(word) gotoxy::offset
|
|
(word) gotoxy::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()
|
|
(signed word~) main::$10
|
|
(signed word~) main::$11
|
|
(bool~) main::$12
|
|
(bool~) main::$13
|
|
(signed byte~) main::$14
|
|
(signed byte~) main::$15
|
|
(bool~) main::$3
|
|
(bool~) main::$4
|
|
(number~) main::$5
|
|
(number~) main::$6
|
|
(number~) main::$7
|
|
(number~) main::$8
|
|
(signed word~) main::$9
|
|
(label) main::@1
|
|
(label) main::@10
|
|
(label) main::@11
|
|
(label) main::@12
|
|
(label) main::@13
|
|
(label) main::@14
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(label) main::@9
|
|
(label) main::@return
|
|
(word) main::count
|
|
(word) main::count#0
|
|
(word) main::count#1
|
|
(word) main::count#10
|
|
(word) main::count#11
|
|
(word) main::count#12
|
|
(word) main::count#2
|
|
(word) main::count#3
|
|
(word) main::count#4
|
|
(word) main::count#5
|
|
(word) main::count#6
|
|
(word) main::count#7
|
|
(word) main::count#8
|
|
(word) main::count#9
|
|
(signed word) main::dist_sq
|
|
(signed word) main::dist_sq#0
|
|
(const byte*) main::s[(byte) 7] = (byte*) " chars"
|
|
(byte*) main::sc
|
|
(byte*) main::sc#0
|
|
(byte*) main::sc#1
|
|
(byte*) main::sc#10
|
|
(byte*) main::sc#2
|
|
(byte*) main::sc#3
|
|
(byte*) main::sc#4
|
|
(byte*) main::sc#5
|
|
(byte*) main::sc#6
|
|
(byte*) main::sc#7
|
|
(byte*) main::sc#8
|
|
(byte*) main::sc#9
|
|
(byte) main::x
|
|
(byte) main::x#0
|
|
(byte) main::x#1
|
|
(byte) main::x#2
|
|
(byte) main::x#3
|
|
(byte) main::x#4
|
|
(byte) main::x#5
|
|
(byte) main::x#6
|
|
(byte) main::x#7
|
|
(signed byte) main::xd
|
|
(signed byte) main::xd#0
|
|
(byte) main::y
|
|
(byte) main::y#0
|
|
(byte) main::y#1
|
|
(byte) main::y#10
|
|
(byte) main::y#2
|
|
(byte) main::y#3
|
|
(byte) main::y#4
|
|
(byte) main::y#5
|
|
(byte) main::y#6
|
|
(byte) main::y#7
|
|
(byte) main::y#8
|
|
(byte) main::y#9
|
|
(signed byte) main::yd
|
|
(signed byte) main::yd#0
|
|
(signed byte) main::yd#1
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
(byte*~) memcpy::$0
|
|
(bool~) memcpy::$1
|
|
(byte*~) memcpy::$2
|
|
(label) memcpy::@1
|
|
(label) memcpy::@2
|
|
(label) memcpy::@3
|
|
(label) memcpy::@return
|
|
(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
|
|
(label) memset::@1
|
|
(label) memset::@2
|
|
(label) memset::@3
|
|
(label) memset::@4
|
|
(label) memset::@return
|
|
(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::c#6
|
|
(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
|
|
(word) memset::num#4
|
|
(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::return#5
|
|
(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
|
|
(void*) memset::str#7
|
|
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
|
|
(word~) mul8s::$0
|
|
(bool~) mul8s::$1
|
|
(byte~) mul8s::$10
|
|
(byte~) mul8s::$11
|
|
(byte~) mul8s::$12
|
|
(byte~) mul8s::$13
|
|
(byte~) mul8s::$14
|
|
(bool~) mul8s::$2
|
|
(bool~) mul8s::$3
|
|
(bool~) mul8s::$4
|
|
(byte~) mul8s::$6
|
|
(byte~) mul8s::$7
|
|
(byte~) mul8s::$9
|
|
(label) mul8s::@1
|
|
(label) mul8s::@2
|
|
(label) mul8s::@3
|
|
(label) mul8s::@4
|
|
(label) mul8s::@5
|
|
(label) mul8s::@return
|
|
(signed byte) mul8s::a
|
|
(signed byte) mul8s::a#0
|
|
(signed byte) mul8s::a#1
|
|
(signed byte) mul8s::a#2
|
|
(signed byte) mul8s::a#3
|
|
(signed byte) mul8s::a#4
|
|
(signed byte) mul8s::a#5
|
|
(signed byte) mul8s::a#6
|
|
(signed byte) mul8s::b
|
|
(signed byte) mul8s::b#0
|
|
(signed byte) mul8s::b#1
|
|
(signed byte) mul8s::b#2
|
|
(signed byte) mul8s::b#3
|
|
(signed byte) mul8s::b#4
|
|
(signed byte) mul8s::b#5
|
|
(word) mul8s::m
|
|
(word) mul8s::m#0
|
|
(word) mul8s::m#1
|
|
(word) mul8s::m#2
|
|
(word) mul8s::m#3
|
|
(word) mul8s::m#4
|
|
(word) mul8s::m#5
|
|
(word) mul8s::m#6
|
|
(signed word) mul8s::return
|
|
(signed word) mul8s::return#0
|
|
(signed word) mul8s::return#1
|
|
(signed word) mul8s::return#2
|
|
(signed word) mul8s::return#3
|
|
(signed word) mul8s::return#4
|
|
(signed word) mul8s::return#5
|
|
(signed word) mul8s::return#6
|
|
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
|
(bool~) mul8u::$0
|
|
(number~) mul8u::$1
|
|
(bool~) mul8u::$2
|
|
(bool~) mul8u::$3
|
|
(word~) mul8u::$4
|
|
(byte~) mul8u::$5
|
|
(word~) mul8u::$6
|
|
(label) mul8u::@1
|
|
(label) mul8u::@2
|
|
(label) mul8u::@3
|
|
(label) mul8u::@4
|
|
(label) mul8u::@5
|
|
(label) mul8u::@return
|
|
(byte) mul8u::a
|
|
(byte) mul8u::a#0
|
|
(byte) mul8u::a#1
|
|
(byte) mul8u::a#2
|
|
(byte) mul8u::a#3
|
|
(byte) mul8u::a#4
|
|
(byte) mul8u::a#5
|
|
(byte) mul8u::a#6
|
|
(byte) mul8u::b
|
|
(byte) mul8u::b#0
|
|
(byte) mul8u::b#1
|
|
(word) mul8u::mb
|
|
(word) mul8u::mb#0
|
|
(word) mul8u::mb#1
|
|
(word) mul8u::mb#2
|
|
(word) mul8u::mb#3
|
|
(word) mul8u::mb#4
|
|
(word) mul8u::mb#5
|
|
(word) mul8u::res
|
|
(word) mul8u::res#0
|
|
(word) mul8u::res#1
|
|
(word) mul8u::res#2
|
|
(word) mul8u::res#3
|
|
(word) mul8u::res#4
|
|
(word) mul8u::res#5
|
|
(word) mul8u::res#6
|
|
(word) mul8u::return
|
|
(word) mul8u::return#0
|
|
(word) mul8u::return#1
|
|
(word) mul8u::return#2
|
|
(word) mul8u::return#3
|
|
(word) mul8u::return#4
|
|
(struct printf_buffer_number) printf_buffer loadstore = {}
|
|
(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) }
|
|
(byte) printf_buffer_number::sign
|
|
(byte) printf_format_number::justify_left
|
|
(byte) printf_format_number::min_length
|
|
(byte) printf_format_number::radix
|
|
(byte) printf_format_number::sign_always
|
|
(byte) printf_format_number::upper_case
|
|
(byte) printf_format_number::zero_padding
|
|
(byte) printf_format_string::justify_left
|
|
(byte) printf_format_string::min_length
|
|
(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
|
|
(label) printf_number_buffer::@1
|
|
(label) printf_number_buffer::@10
|
|
(label) printf_number_buffer::@11
|
|
(label) printf_number_buffer::@12
|
|
(label) printf_number_buffer::@13
|
|
(label) printf_number_buffer::@14
|
|
(label) printf_number_buffer::@15
|
|
(label) printf_number_buffer::@16
|
|
(label) printf_number_buffer::@17
|
|
(label) printf_number_buffer::@18
|
|
(label) printf_number_buffer::@19
|
|
(label) printf_number_buffer::@2
|
|
(label) printf_number_buffer::@20
|
|
(label) printf_number_buffer::@21
|
|
(label) printf_number_buffer::@3
|
|
(label) printf_number_buffer::@4
|
|
(label) printf_number_buffer::@5
|
|
(label) printf_number_buffer::@6
|
|
(label) printf_number_buffer::@7
|
|
(label) printf_number_buffer::@8
|
|
(label) printf_number_buffer::@9
|
|
(label) printf_number_buffer::@return
|
|
(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
|
|
(label) printf_padding::@1
|
|
(label) printf_padding::@2
|
|
(label) printf_padding::@3
|
|
(label) printf_padding::@return
|
|
(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_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix)
|
|
(number~) printf_uint::$0
|
|
(byte~) printf_uint::$1
|
|
(number~) printf_uint::$2
|
|
(bool~) printf_uint::$5
|
|
(label) printf_uint::@1
|
|
(label) printf_uint::@2
|
|
(label) printf_uint::@3
|
|
(label) printf_uint::@4
|
|
(label) printf_uint::@5
|
|
(label) printf_uint::@return
|
|
(struct printf_format_number) printf_uint::format
|
|
(byte) printf_uint::format_justify_left
|
|
(byte) printf_uint::format_justify_left#0
|
|
(byte) printf_uint::format_justify_left#1
|
|
(byte) printf_uint::format_justify_left#2
|
|
(byte) printf_uint::format_justify_left#3
|
|
(byte) printf_uint::format_justify_left#4
|
|
(byte) printf_uint::format_justify_left#5
|
|
(byte) printf_uint::format_min_length
|
|
(byte) printf_uint::format_min_length#0
|
|
(byte) printf_uint::format_min_length#1
|
|
(byte) printf_uint::format_min_length#2
|
|
(byte) printf_uint::format_min_length#3
|
|
(byte) printf_uint::format_min_length#4
|
|
(byte) printf_uint::format_min_length#5
|
|
(byte) printf_uint::format_radix
|
|
(byte) printf_uint::format_radix#0
|
|
(byte) printf_uint::format_radix#1
|
|
(byte) printf_uint::format_radix#2
|
|
(byte) printf_uint::format_radix#3
|
|
(byte) printf_uint::format_radix#4
|
|
(byte) printf_uint::format_radix#5
|
|
(byte) printf_uint::format_sign_always
|
|
(byte) printf_uint::format_sign_always#0
|
|
(byte) printf_uint::format_sign_always#1
|
|
(byte) printf_uint::format_sign_always#2
|
|
(byte) printf_uint::format_sign_always#3
|
|
(byte) printf_uint::format_sign_always#4
|
|
(byte) printf_uint::format_sign_always#5
|
|
(byte) printf_uint::format_upper_case
|
|
(byte) printf_uint::format_upper_case#0
|
|
(byte) printf_uint::format_upper_case#1
|
|
(byte) printf_uint::format_upper_case#2
|
|
(byte) printf_uint::format_upper_case#3
|
|
(byte) printf_uint::format_upper_case#4
|
|
(byte) printf_uint::format_upper_case#5
|
|
(byte) printf_uint::format_zero_padding
|
|
(byte) printf_uint::format_zero_padding#0
|
|
(byte) printf_uint::format_zero_padding#1
|
|
(byte) printf_uint::format_zero_padding#2
|
|
(byte) printf_uint::format_zero_padding#3
|
|
(byte) printf_uint::format_zero_padding#4
|
|
(byte) printf_uint::format_zero_padding#5
|
|
(word) printf_uint::uvalue
|
|
(word) printf_uint::uvalue#0
|
|
(word) printf_uint::uvalue#1
|
|
(word) printf_uint::uvalue#2
|
|
(word) printf_uint::uvalue#3
|
|
(word) printf_uint::uvalue#4
|
|
(word()) strlen((byte*) strlen::str)
|
|
(bool~) strlen::$0
|
|
(label) strlen::@1
|
|
(label) strlen::@2
|
|
(label) strlen::@3
|
|
(label) strlen::@return
|
|
(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
|
|
(label) strupr::@1
|
|
(label) strupr::@2
|
|
(label) strupr::@3
|
|
(label) strupr::@4
|
|
(label) strupr::@return
|
|
(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
|
|
(byte()) toupper((byte) toupper::ch)
|
|
(bool~) toupper::$0
|
|
(bool~) toupper::$1
|
|
(bool~) toupper::$2
|
|
(byte~) toupper::$3
|
|
(label) toupper::@1
|
|
(label) toupper::@2
|
|
(label) toupper::@return
|
|
(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
|
|
(label) utoa::@1
|
|
(label) utoa::@10
|
|
(label) utoa::@11
|
|
(label) utoa::@12
|
|
(label) utoa::@13
|
|
(label) utoa::@14
|
|
(label) utoa::@15
|
|
(label) utoa::@2
|
|
(label) utoa::@3
|
|
(label) utoa::@4
|
|
(label) utoa::@5
|
|
(label) utoa::@6
|
|
(label) utoa::@7
|
|
(label) utoa::@8
|
|
(label) utoa::@9
|
|
(label) utoa::@return
|
|
(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
|
|
(label) utoa_append::@1
|
|
(label) utoa_append::@2
|
|
(label) utoa_append::@3
|
|
(label) utoa_append::@return
|
|
(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) 0 in (bool~) memset::$0 ← (word) memset::num#3 > (number) 0
|
|
Adding number conversion cast (unumber) 0 in (bool~) strupr::$1 ← (number) 0 != *((byte*) strupr::src#2)
|
|
Adding number conversion cast (unumber) 0 in (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2)
|
|
Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0
|
|
Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1
|
|
Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1
|
|
Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0
|
|
Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1
|
|
Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
|
|
Adding number conversion cast (snumber) 0 in (bool~) mul8s::$1 ← (signed byte) mul8s::a#3 < (number) 0
|
|
Adding number conversion cast (snumber) 0 in (bool~) mul8s::$3 ← (signed byte) mul8s::b#3 < (number) 0
|
|
Adding number conversion cast (unumber) $19 in (bool~) gotoxy::$0 ← (byte) gotoxy::y#3 > (number) $19
|
|
Adding number conversion cast (unumber) $28 in (bool~) gotoxy::$2 ← (byte) gotoxy::x#3 >= (number) $28
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#0 ← (number) 0
|
|
Adding number conversion cast (unumber) $28 in (number~) gotoxy::$4 ← (word~) gotoxy::$8 * (number) $28
|
|
Adding number conversion cast (unumber) gotoxy::$4 in (number~) gotoxy::$4 ← (word~) gotoxy::$8 * (unumber)(number) $28
|
|
Adding number conversion cast (unumber) gotoxy::$5 in (number~) gotoxy::$5 ← (unumber~) gotoxy::$4 + (byte) gotoxy::x#4
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#0 ← (number) 0
|
|
Adding number conversion cast (unumber) $28 in (bool~) cputc::$1 ← (byte) conio_cursor_x == (number) $28
|
|
Adding number conversion cast (unumber) 0 in (byte) conio_cursor_x ← (number) 0
|
|
Adding number conversion cast (unumber) $28 in (number~) cputln::$0 ← (number) $28 - (byte) conio_cursor_x
|
|
Adding number conversion cast (unumber) cputln::$0 in (number~) cputln::$0 ← (unumber)(number) $28 - (byte) conio_cursor_x
|
|
Adding number conversion cast (unumber) 0 in (byte) conio_cursor_x ← (number) 0
|
|
Adding number conversion cast (unumber) $19 in (bool~) cscroll::$0 ← (byte) conio_cursor_y == (number) $19
|
|
Adding number conversion cast (unumber) 0 in (bool~) cscroll::$9 ← (number) 0 != (byte) conio_scroll_enable
|
|
Adding number conversion cast (unumber) $28 in (void*) memcpy::source#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $28
|
|
Adding number conversion cast (unumber) $19*$28-$28 in (word) memcpy::num#0 ← (number) $19*(number) $28-(number) $28
|
|
Adding number conversion cast (unumber) $28 in (void*) memcpy::source#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $28
|
|
Adding number conversion cast (unumber) $19*$28-$28 in (word) memcpy::num#1 ← (number) $19*(number) $28-(number) $28
|
|
Adding number conversion cast (unumber) $28 in (void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(number) $28
|
|
Adding number conversion cast (unumber) $19*$28 in (void*) memset::str#0 ← (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(number) $19*(number) $28-(unumber)(number) $28
|
|
Adding number conversion cast (unumber) $28 in (word) memset::num#0 ← (number) $28
|
|
Adding number conversion cast (unumber) $28 in (void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(number) $28
|
|
Adding number conversion cast (unumber) $19*$28 in (void*) memset::str#1 ← (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(number) $19*(number) $28-(unumber)(number) $28
|
|
Adding number conversion cast (unumber) $28 in (word) memset::num#1 ← (number) $28
|
|
Adding number conversion cast (unumber) $28 in (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (number) $28
|
|
Adding number conversion cast (unumber) $28 in (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (number) $28
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#1 ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#1 ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in (bool~) cputs::$1 ← (number) 0 != (byte) cputs::c#1
|
|
Adding number conversion cast (unumber) 5 in (byte) utoa::max_digits#1 ← (number) 5
|
|
Adding number conversion cast (unumber) 4 in (byte) utoa::max_digits#2 ← (number) 4
|
|
Adding number conversion cast (unumber) 6 in (byte) utoa::max_digits#3 ← (number) 6
|
|
Adding number conversion cast (unumber) $10 in (byte) utoa::max_digits#4 ← (number) $10
|
|
Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#2) ← (number) 0
|
|
Adding number conversion cast (unumber) 1 in (number~) utoa::$4 ← (byte) utoa::max_digits#5 - (number) 1
|
|
Adding number conversion cast (unumber) utoa::$4 in (number~) utoa::$4 ← (byte) utoa::max_digits#5 - (unumber)(number) 1
|
|
Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#3) ← (number) 0
|
|
Adding number conversion cast (unumber) 1 in (byte) utoa::started#1 ← (number) 1
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_uint::$5 ← (number) 0 != (byte) printf_uint::format_sign_always#1
|
|
Adding number conversion cast (unumber) printf_uint::$2 in (byte) printf_uint::format_upper_case#2 ← phi( printf_uint::@1/(byte) printf_uint::format_upper_case#3 printf_uint::@2/(byte) printf_uint::format_upper_case#4 )
|
|
(byte) printf_uint::format_zero_padding#2 ← phi( printf_uint::@1/(byte) printf_uint::format_zero_padding#3 printf_uint::@2/(byte) printf_uint::format_zero_padding#4 )
|
|
(byte) printf_uint::format_sign_always#3 ← phi( printf_uint::@1/(byte) printf_uint::format_sign_always#4 printf_uint::@2/(byte) printf_uint::format_sign_always#5 )
|
|
(byte) printf_uint::format_justify_left#2 ← phi( printf_uint::@1/(byte) printf_uint::format_justify_left#3 printf_uint::@2/(byte) printf_uint::format_justify_left#4 )
|
|
(byte) printf_uint::format_min_length#2 ← phi( printf_uint::@1/(byte) printf_uint::format_min_length#3 printf_uint::@2/(byte) printf_uint::format_min_length#4 )
|
|
(byte) printf_uint::format_radix#1 ← phi( printf_uint::@1/(byte) printf_uint::format_radix#3 printf_uint::@2/(byte) printf_uint::format_radix#4 )
|
|
(word) printf_uint::uvalue#1 ← phi( printf_uint::@1/(word) printf_uint::uvalue#2 printf_uint::@2/(word) printf_uint::uvalue#3 )
|
|
(number~) printf_uint::$2 ← phi( printf_uint::@1/(byte~) printf_uint::$1 printf_uint::@2/(number~) printf_uint::$0 )
|
|
Adding number conversion cast (unumber) printf_uint::$0 in (byte) printf_uint::format_upper_case#2 ← phi( printf_uint::@1/(byte) printf_uint::format_upper_case#3 printf_uint::@2/(byte) printf_uint::format_upper_case#4 )
|
|
(byte) printf_uint::format_zero_padding#2 ← phi( printf_uint::@1/(byte) printf_uint::format_zero_padding#3 printf_uint::@2/(byte) printf_uint::format_zero_padding#4 )
|
|
(byte) printf_uint::format_sign_always#3 ← phi( printf_uint::@1/(byte) printf_uint::format_sign_always#4 printf_uint::@2/(byte) printf_uint::format_sign_always#5 )
|
|
(byte) printf_uint::format_justify_left#2 ← phi( printf_uint::@1/(byte) printf_uint::format_justify_left#3 printf_uint::@2/(byte) printf_uint::format_justify_left#4 )
|
|
(byte) printf_uint::format_min_length#2 ← phi( printf_uint::@1/(byte) printf_uint::format_min_length#3 printf_uint::@2/(byte) printf_uint::format_min_length#4 )
|
|
(byte) printf_uint::format_radix#1 ← phi( printf_uint::@1/(byte) printf_uint::format_radix#3 printf_uint::@2/(byte) printf_uint::format_radix#4 )
|
|
(word) printf_uint::uvalue#1 ← phi( printf_uint::@1/(word) printf_uint::uvalue#2 printf_uint::@2/(word) printf_uint::uvalue#3 )
|
|
(unumber~) printf_uint::$2 ← phi( printf_uint::@1/(byte~) printf_uint::$1 printf_uint::@2/(number~) printf_uint::$0 )
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$26 ← (number) 0 != (byte) printf_number_buffer::format_min_length#1
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$27 ← (number) 0 != (byte) printf_number_buffer::format_justify_left#1
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$28 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#1
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$29 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#1
|
|
Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (number) 0
|
|
Adding number conversion cast (snumber) 0 in (signed byte) printf_number_buffer::padding#2 ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$30 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#2
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3
|
|
Adding number conversion cast (unumber) $3e8 in (word) memset::num#2 ← (number) $3e8
|
|
Adding number conversion cast (unumber) $19 in (bool~) main::$3 ← (byte) main::y#2 < (number) $19
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#2 ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#2 ← (number) 0
|
|
Adding number conversion cast (unumber) $28 in (bool~) main::$4 ← (byte) main::x#2 < (number) $28
|
|
Adding number conversion cast (snumber) 2 in (number~) main::$5 ← (signed byte~) main::$14 * (number) 2
|
|
Adding number conversion cast (snumber) main::$5 in (number~) main::$5 ← (signed byte~) main::$14 * (snumber)(number) 2
|
|
Adding number conversion cast (snumber) $27 in (number~) main::$6 ← (snumber~) main::$5 - (number) $27
|
|
Adding number conversion cast (snumber) main::$6 in (number~) main::$6 ← (snumber~) main::$5 - (snumber)(number) $27
|
|
Adding number conversion cast (snumber) 2 in (number~) main::$7 ← (signed byte~) main::$15 * (number) 2
|
|
Adding number conversion cast (snumber) main::$7 in (number~) main::$7 ← (signed byte~) main::$15 * (snumber)(number) 2
|
|
Adding number conversion cast (snumber) $18 in (number~) main::$8 ← (snumber~) main::$7 - (number) $18
|
|
Adding number conversion cast (snumber) main::$8 in (number~) main::$8 ← (snumber~) main::$7 - (snumber)(number) $18
|
|
Adding number conversion cast (snumber) 2*9*2*9 in (bool~) main::$12 ← (signed word) main::dist_sq#0 < (number) 2*(number) 9*(number) 2*(number) 9
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Adding number conversion cast (unumber) 0 in (unumber~) printf_uint::$0 ← (number) 0
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast (byte*) memcpy::src#0 ← (byte*)(void*) memcpy::source#2
|
|
Inlining cast (byte*) memcpy::dst#0 ← (byte*)(void*) memcpy::destination#2
|
|
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#4
|
|
Inlining cast (byte) gotoxy::y#0 ← (unumber)(number) 0
|
|
Inlining cast (byte) gotoxy::x#0 ← (unumber)(number) 0
|
|
Inlining cast (byte) conio_cursor_x ← (unumber)(number) 0
|
|
Inlining cast (byte) conio_cursor_x ← (unumber)(number) 0
|
|
Inlining cast (word) memcpy::num#0 ← (unumber)(number) $19*(number) $28-(number) $28
|
|
Inlining cast (word) memcpy::num#1 ← (unumber)(number) $19*(number) $28-(number) $28
|
|
Inlining cast (word) memset::num#0 ← (unumber)(number) $28
|
|
Inlining cast (word) memset::num#1 ← (unumber)(number) $28
|
|
Inlining cast (byte) gotoxy::x#1 ← (unumber)(number) 0
|
|
Inlining cast (byte) gotoxy::y#1 ← (unumber)(number) 0
|
|
Inlining cast (byte) utoa::max_digits#1 ← (unumber)(number) 5
|
|
Inlining cast (byte) utoa::max_digits#2 ← (unumber)(number) 4
|
|
Inlining cast (byte) utoa::max_digits#3 ← (unumber)(number) 6
|
|
Inlining cast (byte) utoa::max_digits#4 ← (unumber)(number) $10
|
|
Inlining cast *((byte*) utoa::buffer#2) ← (unumber)(number) 0
|
|
Inlining cast *((byte*) utoa::buffer#3) ← (unumber)(number) 0
|
|
Inlining cast (byte) utoa::started#1 ← (unumber)(number) 1
|
|
Inlining cast (unumber~) printf_uint::$0 ← (unumber)(number) 0
|
|
Inlining cast (signed byte) printf_number_buffer::padding#2 ← (snumber)(number) 0
|
|
Inlining cast (word) memset::num#2 ← (unumber)(number) $3e8
|
|
Inlining cast (byte) gotoxy::x#2 ← (unumber)(number) 0
|
|
Inlining cast (byte) gotoxy::y#2 ← (unumber)(number) 0
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (byte*) 1024
|
|
Simplifying constant pointer cast (byte*) 55296
|
|
Simplifying constant pointer cast (byte*) 1024
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
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 0
|
|
Simplifying constant integer cast $28
|
|
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 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 $3e8
|
|
Simplifying constant integer cast $19
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $18
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
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) 0
|
|
Finalized unsigned number type (byte) $28
|
|
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) 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 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 unsigned number type (word) $3e8
|
|
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 signed number type (signed byte) 2
|
|
Finalized signed number type (signed byte) $27
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized signed number type (signed byte) $18
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
|
|
Inferred type updated to word in (unumber~) gotoxy::$4 ← (word~) gotoxy::$8 * (byte) $28
|
|
Inferred type updated to word in (unumber~) gotoxy::$5 ← (word~) gotoxy::$4 + (byte) gotoxy::x#4
|
|
Inferred type updated to byte in (unumber~) cputln::$0 ← (byte) $28 - (byte) conio_cursor_x
|
|
Inferred type updated to byte in (unumber~) utoa::$4 ← (byte) utoa::max_digits#5 - (byte) 1
|
|
Inferred type updated to byte in (unumber~) printf_uint::$0 ← (byte) 0
|
|
Inferred type updated to byte for (unumber~) printf_uint::$2
|
|
Inferred type updated to signed byte in (snumber~) main::$5 ← (signed byte~) main::$14 * (signed byte) 2
|
|
Inferred type updated to signed byte in (snumber~) main::$6 ← (signed byte~) main::$5 - (signed byte) $27
|
|
Inferred type updated to signed byte in (snumber~) main::$7 ← (signed byte~) main::$15 * (signed byte) 2
|
|
Inferred type updated to signed byte in (snumber~) main::$8 ← (signed byte~) main::$7 - (signed byte) $18
|
|
Inversing boolean not [33] (bool~) memset::$1 ← (word) memset::num#3 <= (byte) 0 from [32] (bool~) memset::$0 ← (word) memset::num#3 > (byte) 0
|
|
Inversing boolean not [91] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [90] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0
|
|
Inversing boolean not [115] (bool~) mul8s::$2 ← (signed byte) mul8s::a#3 >= (signed byte) 0 from [114] (bool~) mul8s::$1 ← (signed byte) mul8s::a#3 < (signed byte) 0
|
|
Inversing boolean not [119] (bool~) mul8s::$4 ← (signed byte) mul8s::b#3 >= (signed byte) 0 from [118] (bool~) mul8s::$3 ← (signed byte) mul8s::b#3 < (signed byte) 0
|
|
Inversing boolean not [146] (bool~) gotoxy::$1 ← (byte) gotoxy::y#3 <= (byte) $19 from [145] (bool~) gotoxy::$0 ← (byte) gotoxy::y#3 > (byte) $19
|
|
Inversing boolean not [150] (bool~) gotoxy::$3 ← (byte) gotoxy::x#3 < (byte) $28 from [149] (bool~) gotoxy::$2 ← (byte) gotoxy::x#3 >= (byte) $28
|
|
Inversing boolean not [179] (bool~) cputc::$2 ← (byte) conio_cursor_x != (byte) $28 from [178] (bool~) cputc::$1 ← (byte) conio_cursor_x == (byte) $28
|
|
Inversing boolean not [196] (bool~) cscroll::$1 ← (byte) conio_cursor_y != (byte) $19 from [195] (bool~) cscroll::$0 ← (byte) conio_cursor_y == (byte) $19
|
|
Inversing boolean not [360] (bool~) printf_number_buffer::$0 ← (byte) 0 == (byte) printf_number_buffer::format_min_length#1 from [359] (bool~) printf_number_buffer::$26 ← (byte) 0 != (byte) printf_number_buffer::format_min_length#1
|
|
Inversing boolean not [364] (bool~) printf_number_buffer::$1 ← (byte) 0 == (byte) printf_number_buffer::format_justify_left#1 from [363] (bool~) printf_number_buffer::$27 ← (byte) 0 != (byte) printf_number_buffer::format_justify_left#1
|
|
Inversing boolean not [366] (bool~) printf_number_buffer::$2 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#1 from [365] (bool~) printf_number_buffer::$28 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#1
|
|
Inversing boolean not [379] (bool~) printf_number_buffer::$20 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#1 from [378] (bool~) printf_number_buffer::$29 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#1
|
|
Inversing boolean not [386] (bool~) printf_number_buffer::$23 ← (signed byte) printf_number_buffer::padding#1 >= (signed byte) 0 from [385] (bool~) printf_number_buffer::$22 ← (signed byte) printf_number_buffer::padding#1 < (signed byte) 0
|
|
Inversing boolean not [394] (bool~) printf_number_buffer::$7 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#2 from [393] (bool~) printf_number_buffer::$30 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#2
|
|
Inversing boolean not [411] (bool~) printf_number_buffer::$12 ← (byte) 0 == (byte) printf_number_buffer::format_upper_case#1 from [410] (bool~) printf_number_buffer::$31 ← (byte) 0 != (byte) printf_number_buffer::format_upper_case#1
|
|
Inversing boolean not [423] (bool~) printf_number_buffer::$14 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#3 from [422] (bool~) printf_number_buffer::$32 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#3
|
|
Inversing boolean not [493] (bool~) main::$13 ← (signed word) main::dist_sq#0 >= (signed word)(number) 2*(number) 9*(number) 2*(number) 9 from [492] (bool~) main::$12 ← (signed word) main::dist_sq#0 < (signed word)(number) 2*(number) 9*(number) 2*(number) 9
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
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 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#3 memset::return#5 memset::return#1
|
|
Alias memset::str#4 = memset::str#5
|
|
Alias memset::num#3 = memset::num#4
|
|
Alias memset::c#5 = memset::c#6
|
|
Alias memset::end#0 = memset::$2
|
|
Alias memset::c#3 = memset::c#4
|
|
Alias memset::dst#2 = memset::dst#3
|
|
Alias memset::end#1 = memset::end#2
|
|
Alias memset::str#6 = memset::str#7
|
|
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 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 mul8u::a#2 = mul8u::a#3 mul8u::a#6
|
|
Alias mul8u::mb#3 = mul8u::mb#4 mul8u::mb#5
|
|
Alias mul8u::res#2 = mul8u::res#5 mul8u::res#4 mul8u::return#0 mul8u::res#3 mul8u::return#3 mul8u::return#1
|
|
Alias mul8u::a#0 = mul8u::$5
|
|
Alias mul8u::mb#1 = mul8u::$6
|
|
Alias mul8u::res#1 = mul8u::$4
|
|
Alias mul8u::return#2 = mul8u::return#4
|
|
Alias mul8s::a#2 = mul8s::a#3 mul8s::a#6
|
|
Alias mul8s::b#2 = mul8s::b#5 mul8s::b#4
|
|
Alias mul8s::m#0 = mul8s::$0 mul8s::m#3
|
|
Alias mul8s::$11 = mul8s::$7
|
|
Alias mul8s::m#5 = mul8s::m#6
|
|
Alias mul8s::a#4 = mul8s::a#5
|
|
Alias mul8s::$12 = mul8s::$10
|
|
Alias mul8s::return#0 = mul8s::return#4 mul8s::return#1
|
|
Alias gotoxy::x#5 = gotoxy::x#6
|
|
Alias gotoxy::offset#0 = gotoxy::$5
|
|
Alias gotoxy::y#5 = gotoxy::y#6
|
|
Alias cputc::c#3 = cputc::c#4
|
|
Alias cputln::ln_offset#0 = cputln::$0
|
|
Alias cputs::c#1 = cputs::c#2
|
|
Alias cputs::s#0 = cputs::s#6 cputs::s#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_uint::uvalue#2 = printf_uint::uvalue#4 printf_uint::uvalue#3
|
|
Alias printf_uint::format_radix#3 = printf_uint::format_radix#5 printf_uint::format_radix#4
|
|
Alias printf_uint::format_min_length#3 = printf_uint::format_min_length#5 printf_uint::format_min_length#4
|
|
Alias printf_uint::format_justify_left#3 = printf_uint::format_justify_left#5 printf_uint::format_justify_left#4
|
|
Alias printf_uint::format_sign_always#1 = printf_uint::format_sign_always#4 printf_uint::format_sign_always#5
|
|
Alias printf_uint::format_zero_padding#3 = printf_uint::format_zero_padding#5 printf_uint::format_zero_padding#4
|
|
Alias printf_uint::format_upper_case#3 = printf_uint::format_upper_case#5 printf_uint::format_upper_case#4
|
|
Alias printf_uint::format_min_length#1 = printf_uint::format_min_length#2
|
|
Alias printf_uint::format_justify_left#1 = printf_uint::format_justify_left#2
|
|
Alias printf_uint::format_sign_always#2 = printf_uint::format_sign_always#3
|
|
Alias printf_uint::format_zero_padding#1 = printf_uint::format_zero_padding#2
|
|
Alias printf_uint::format_upper_case#1 = printf_uint::format_upper_case#2
|
|
Alias printf_uint::format_radix#1 = printf_uint::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::y#2 = main::y#6
|
|
Alias main::sc#8 = main::sc#9
|
|
Alias main::count#11 = main::count#6 main::count#4 main::count#2
|
|
Alias main::x#2 = main::x#3 main::x#7 main::x#5 main::x#6
|
|
Alias main::y#10 = main::y#3 main::y#5 main::y#8 main::y#4 main::y#9
|
|
Alias main::sc#10 = main::sc#6 main::sc#7 main::sc#5 main::sc#4 main::sc#3
|
|
Alias main::count#10 = main::count#9 main::count#7 main::count#5 main::count#8 main::count#3
|
|
Alias main::xd#0 = main::$6
|
|
Alias main::yd#0 = main::$8 main::yd#1
|
|
Alias mul8s::return#2 = mul8s::return#5
|
|
Alias mul8s::return#3 = mul8s::return#6
|
|
Alias main::dist_sq#0 = main::$11
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Alias mul8u::a#2 = mul8u::a#4
|
|
Alias mul8u::mb#2 = mul8u::mb#3
|
|
Alias mul8s::b#2 = mul8s::b#3
|
|
Alias mul8s::a#2 = mul8s::a#4
|
|
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_uint::uvalue#1 = printf_uint::uvalue#2
|
|
Alias printf_uint::format_radix#1 = printf_uint::format_radix#3
|
|
Alias printf_uint::format_min_length#1 = printf_uint::format_min_length#3
|
|
Alias printf_uint::format_justify_left#1 = printf_uint::format_justify_left#3
|
|
Alias printf_uint::format_sign_always#1 = printf_uint::format_sign_always#2
|
|
Alias printf_uint::format_zero_padding#1 = printf_uint::format_zero_padding#3
|
|
Alias printf_uint::format_upper_case#1 = printf_uint::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
|
|
Alias main::sc#10 = main::sc#2
|
|
Alias main::x#2 = main::x#4
|
|
Alias main::y#10 = main::y#7
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
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_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Identical Phi Values (byte) toupper::ch#1 (byte) toupper::ch#0
|
|
Identical Phi Values (byte*) memcpy::src_end#1 (byte*) memcpy::src_end#0
|
|
Identical Phi Values (void*) memcpy::destination#3 (void*) memcpy::destination#2
|
|
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
|
|
Identical Phi Values (void*) memset::str#6 (void*) memset::str#4
|
|
Identical Phi Values (byte) memset::c#3 (byte) memset::c#5
|
|
Identical Phi Values (byte*) strupr::src#0 (byte*) strupr::str#0
|
|
Identical Phi Values (byte*) strupr::str#2 (byte*) strupr::src#0
|
|
Identical Phi Values (byte*) strlen::str#4 (byte*) strlen::str#1
|
|
Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0
|
|
Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1
|
|
Identical Phi Values (byte) utoa::radix#1 (byte) utoa::radix#0
|
|
Identical Phi Values (word) utoa::value#10 (word) utoa::value#1
|
|
Identical Phi Values (byte*) utoa::buffer#10 (byte*) utoa::buffer#5
|
|
Identical Phi Values (byte) utoa::max_digits#10 (byte) utoa::max_digits#7
|
|
Identical Phi Values (word*) utoa::digit_values#10 (word*) utoa::digit_values#8
|
|
Identical Phi Values (word) utoa_append::value#5 (word) utoa_append::value#0
|
|
Identical Phi Values (word) utoa_append::sub#3 (word) utoa_append::sub#0
|
|
Identical Phi Values (byte*) utoa_append::buffer#3 (byte*) utoa_append::buffer#0
|
|
Identical Phi Values (word) utoa_append::sub#1 (word) utoa_append::sub#3
|
|
Identical Phi Values (byte*) utoa_append::buffer#1 (byte*) utoa_append::buffer#3
|
|
Identical Phi Values (byte) printf_padding::length#3 (byte) printf_padding::length#4
|
|
Identical Phi Values (byte) printf_padding::pad#3 (byte) printf_padding::pad#5
|
|
Identical Phi Values (byte) printf_uint::format_sign_always#1 (byte) printf_uint::format_sign_always#0
|
|
Identical Phi Values (word) printf_uint::uvalue#1 (word) printf_uint::uvalue#0
|
|
Identical Phi Values (byte) printf_uint::format_radix#1 (byte) printf_uint::format_radix#0
|
|
Identical Phi Values (byte) printf_uint::format_min_length#1 (byte) printf_uint::format_min_length#0
|
|
Identical Phi Values (byte) printf_uint::format_justify_left#1 (byte) printf_uint::format_justify_left#0
|
|
Identical Phi Values (byte) printf_uint::format_zero_padding#1 (byte) printf_uint::format_zero_padding#0
|
|
Identical Phi Values (byte) printf_uint::format_upper_case#1 (byte) printf_uint::format_upper_case#0
|
|
Identical Phi Values (byte) printf_number_buffer::format_min_length#1 (byte) printf_number_buffer::format_min_length#0
|
|
Identical Phi Values (byte) printf_number_buffer::format_justify_left#1 (byte) printf_number_buffer::format_justify_left#0
|
|
Identical Phi Values (byte) printf_number_buffer::format_zero_padding#1 (byte) printf_number_buffer::format_zero_padding#0
|
|
Identical Phi Values (byte*) printf_number_buffer::buffer_digits#1 (byte*) printf_number_buffer::buffer_digits#0
|
|
Identical Phi Values (byte) printf_number_buffer::buffer_sign#1 (byte) printf_number_buffer::buffer_sign#0
|
|
Identical Phi Values (byte) printf_number_buffer::format_upper_case#1 (byte) printf_number_buffer::format_upper_case#0
|
|
Identical Phi Values (byte) main::y#10 (byte) main::y#2
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Identical Phi Values (void*) memset::return#0 (void*) memset::str#4
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition (bool~) memcpy::$1 [15] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2
|
|
Simple Condition (bool~) memset::$1 [22] if((word) memset::num#3<=(byte) 0) goto memset::@1
|
|
Simple Condition (bool~) memset::$3 [29] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4
|
|
Simple Condition (bool~) strupr::$1 [36] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2
|
|
Simple Condition (bool~) strlen::$0 [48] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2
|
|
Simple Condition (bool~) mul8u::$0 [57] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
|
|
Simple Condition (bool~) mul8u::$3 [60] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@4
|
|
Simple Condition (bool~) mul8s::$2 [73] if((signed byte) mul8s::a#2>=(signed byte) 0) goto mul8s::@1
|
|
Simple Condition (bool~) mul8s::$4 [76] if((signed byte) mul8s::b#2>=(signed byte) 0) goto mul8s::@2
|
|
Simple Condition (bool~) gotoxy::$1 [96] if((byte) gotoxy::y#3<=(byte) $19) goto gotoxy::@1
|
|
Simple Condition (bool~) gotoxy::$3 [99] if((byte) gotoxy::x#3<(byte) $28) goto gotoxy::@2
|
|
Simple Condition (bool~) cputc::$0 [115] if((byte) cputc::c#3==(byte) '
|
|
') goto cputc::@1
|
|
Simple Condition (bool~) cputc::$2 [123] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return
|
|
Simple Condition (bool~) cscroll::$1 [138] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return
|
|
Simple Condition (bool~) cscroll::$9 [140] if((byte) 0!=(byte) conio_scroll_enable) goto cscroll::@3
|
|
Simple Condition (bool~) cputs::$1 [176] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2
|
|
Simple Condition (bool~) utoa::$0 [184] if((byte) utoa::radix#0==(const byte) DECIMAL) goto utoa::@1
|
|
Simple Condition (bool~) utoa::$1 [188] if((byte) utoa::radix#0==(const byte) HEXADECIMAL) goto utoa::@2
|
|
Simple Condition (bool~) utoa::$2 [192] if((byte) utoa::radix#0==(const byte) OCTAL) goto utoa::@3
|
|
Simple Condition (bool~) utoa::$3 [196] if((byte) utoa::radix#0==(const byte) BINARY) goto utoa::@4
|
|
Simple Condition (bool~) utoa::$5 [213] if((byte) utoa::digit#2<(byte~) utoa::$4) goto utoa::@11
|
|
Simple Condition (bool~) utoa_append::$0 [238] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2
|
|
Simple Condition (bool~) printf_padding::$0 [247] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2
|
|
Simple Condition (bool~) printf_uint::$5 [254] if((byte) 0!=(byte) printf_uint::format_sign_always#0) goto printf_uint::@1
|
|
Simple Condition (bool~) printf_number_buffer::$0 [276] if((byte) 0==(byte) printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1
|
|
Simple Condition (bool~) printf_number_buffer::$20 [290] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@13
|
|
Simple Condition (bool~) printf_number_buffer::$23 [295] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@1
|
|
Simple Condition (bool~) printf_number_buffer::$7 [299] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3
|
|
Simple Condition (bool~) printf_number_buffer::$12 [309] if((byte) 0==(byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5
|
|
Simple Condition (bool~) main::$3 [337] if((byte) main::y#2<(byte) $19) goto main::@2
|
|
Simple Condition (bool~) main::$4 [354] if((byte) main::x#2<(byte) $28) goto main::@5
|
|
Simple Condition (bool~) main::$13 [373] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@7
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Rewriting && if()-condition to two if()s [3] (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1
|
|
Rewriting ! if()-condition to reversed if() [218] (bool~) utoa::$8 ← ! (bool~) utoa::$7
|
|
Rewriting || if()-condition to two if()s [217] (bool~) utoa::$7 ← (byte) utoa::started#2 || (bool~) utoa::$6
|
|
Rewriting ! if()-condition to reversed if() [282] (bool~) printf_number_buffer::$5 ← ! (bool~) printf_number_buffer::$4
|
|
Rewriting && if()-condition to two if()s [281] (bool~) printf_number_buffer::$4 ← (bool~) printf_number_buffer::$3 && (signed byte) printf_number_buffer::padding#10
|
|
Rewriting && if()-condition to two if()s [280] (bool~) printf_number_buffer::$3 ← (bool~) printf_number_buffer::$1 && (bool~) printf_number_buffer::$2
|
|
Rewriting ! if()-condition to reversed if() [304] (bool~) printf_number_buffer::$10 ← ! (bool~) printf_number_buffer::$9
|
|
Rewriting && if()-condition to two if()s [303] (bool~) printf_number_buffer::$9 ← (byte) printf_number_buffer::format_zero_padding#0 && (signed byte) printf_number_buffer::padding#10
|
|
Rewriting ! if()-condition to reversed if() [318] (bool~) printf_number_buffer::$17 ← ! (bool~) printf_number_buffer::$16
|
|
Rewriting && if()-condition to two if()s [317] (bool~) printf_number_buffer::$16 ← (bool~) printf_number_buffer::$15 && (signed byte) printf_number_buffer::padding#10
|
|
Rewriting && if()-condition to two if()s [316] (bool~) printf_number_buffer::$15 ← (byte) printf_number_buffer::format_justify_left#0 && (bool~) printf_number_buffer::$14
|
|
Successful SSA optimization Pass2ConditionalAndOrRewriting
|
|
Warning! Adding boolean cast to non-boolean condition (byte) utoa::started#2
|
|
Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_zero_padding#0
|
|
Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_justify_left#0
|
|
Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10
|
|
Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10
|
|
Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10
|
|
Constant right-side identified [143] (word) memcpy::num#0 ← (unumber)(number) $19*(number) $28-(number) $28
|
|
Constant right-side identified [148] (word) memcpy::num#1 ← (unumber)(number) $19*(number) $28-(number) $28
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const word) strlen::len#0 = 0
|
|
Constant (const word) mul8u::res#0 = 0
|
|
Constant (const byte) gotoxy::y#0 = 0
|
|
Constant (const byte) gotoxy::x#0 = 0
|
|
Constant (const void*) memcpy::destination#0 = (void*)CONIO_SCREEN_TEXT
|
|
Constant (const void*) memcpy::source#0 = (void*)CONIO_SCREEN_TEXT+$28
|
|
Constant (const word) memcpy::num#0 = (unumber)$19*$28-$28
|
|
Constant (const void*) memcpy::destination#1 = (void*)CONIO_SCREEN_COLORS
|
|
Constant (const void*) memcpy::source#1 = (void*)CONIO_SCREEN_COLORS+$28
|
|
Constant (const word) memcpy::num#1 = (unumber)$19*$28-$28
|
|
Constant (const void*) memset::str#0 = (void*)CONIO_SCREEN_TEXT+(word)$19*$28-$28
|
|
Constant (const byte) memset::c#0 = ' '
|
|
Constant (const word) memset::num#0 = $28
|
|
Constant (const void*) memset::str#1 = (void*)CONIO_SCREEN_COLORS+(word)$19*$28-$28
|
|
Constant (const word) memset::num#1 = $28
|
|
Constant (const byte) gotoxy::x#1 = 0
|
|
Constant (const byte) gotoxy::y#1 = 0
|
|
Constant (const byte) cputs::c#0 = 0
|
|
Constant (const byte) utoa::max_digits#0 = 0
|
|
Constant (const word*) utoa::digit_values#0 = (word*) 0
|
|
Constant (const byte) utoa::max_digits#1 = 5
|
|
Constant (const word*) utoa::digit_values#1 = RADIX_DECIMAL_VALUES
|
|
Constant (const byte) utoa::max_digits#2 = 4
|
|
Constant (const word*) utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES
|
|
Constant (const byte) utoa::max_digits#3 = 6
|
|
Constant (const word*) utoa::digit_values#3 = RADIX_OCTAL_VALUES
|
|
Constant (const byte) utoa::max_digits#4 = $10
|
|
Constant (const word*) utoa::digit_values#4 = RADIX_BINARY_VALUES
|
|
Constant (const byte) utoa::started#0 = 0
|
|
Constant (const byte) utoa::digit#0 = 0
|
|
Constant (const byte) utoa::started#1 = 1
|
|
Constant (const byte) utoa_append::digit#0 = 0
|
|
Constant (const byte) printf_padding::i#0 = 0
|
|
Constant (const byte) printf_uint::$1 = '+'
|
|
Constant (const byte) printf_uint::$0 = 0
|
|
Constant (const byte*) utoa::buffer#5 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
Constant (const byte*) printf_number_buffer::buffer_digits#0 = (byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
Constant (const signed byte) printf_number_buffer::padding#0 = 0
|
|
Constant (const signed byte) printf_number_buffer::padding#2 = 0
|
|
Constant (const byte) printf_padding::pad#0 = ' '
|
|
Constant (const byte) printf_padding::pad#1 = '0'
|
|
Constant (const byte) printf_padding::pad#2 = ' '
|
|
Constant (const void*) memset::str#2 = (void*)SCREEN
|
|
Constant (const byte) memset::c#2 = ' '
|
|
Constant (const word) memset::num#2 = $3e8
|
|
Constant (const word) main::count#0 = 0
|
|
Constant (const byte*) main::sc#0 = SCREEN
|
|
Constant (const byte) main::y#0 = 0
|
|
Constant (const byte) main::x#0 = 0
|
|
Constant (const byte) gotoxy::x#2 = 0
|
|
Constant (const byte) gotoxy::y#2 = 0
|
|
Constant (const byte) printf_uint::format_min_length#0 = 0
|
|
Constant (const byte) printf_uint::format_justify_left#0 = 0
|
|
Constant (const byte) printf_uint::format_sign_always#0 = 0
|
|
Constant (const byte) printf_uint::format_zero_padding#0 = 0
|
|
Constant (const byte) printf_uint::format_upper_case#0 = 0
|
|
Constant (const byte) printf_uint::format_radix#0 = DECIMAL
|
|
Constant (const to_nomodify byte*) cputs::s#2 = main::s
|
|
Constant (const byte) conio_textcolor = CONIO_TEXTCOLOR_DEFAULT
|
|
Constant (const byte) conio_scroll_enable = 1
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant (const byte) memset::c#1 = conio_textcolor
|
|
Constant (const byte) utoa::radix#0 = printf_uint::format_radix#0
|
|
Constant (const byte) printf_number_buffer::format_min_length#0 = printf_uint::format_min_length#0
|
|
Constant (const byte) printf_number_buffer::format_justify_left#0 = printf_uint::format_justify_left#0
|
|
Constant (const byte) printf_number_buffer::format_sign_always#0 = printf_uint::format_sign_always#0
|
|
Constant (const byte) printf_number_buffer::format_zero_padding#0 = printf_uint::format_zero_padding#0
|
|
Constant (const byte) printf_number_buffer::format_upper_case#0 = printf_uint::format_upper_case#0
|
|
Constant (const byte) printf_number_buffer::format_radix#0 = printf_uint::format_radix#0
|
|
Constant (const byte*) strlen::str#1 = printf_number_buffer::buffer_digits#0
|
|
Constant (const to_nomodify byte*) cputs::s#1 = printf_number_buffer::buffer_digits#0
|
|
Constant (const byte*) strupr::str#0 = printf_number_buffer::buffer_digits#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant (const signed byte) printf_number_buffer::$25 = (signed byte)printf_number_buffer::format_min_length#0
|
|
Constant (const byte*) strupr::return#2 = strupr::str#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
if() condition always true - replacing block destination [140] if((byte) 0!=(const byte) conio_scroll_enable) goto cscroll::@3
|
|
if() condition always true - replacing block destination [184] if((const byte) utoa::radix#0==(const byte) DECIMAL) goto utoa::@1
|
|
if() condition always false - eliminating [188] if((const byte) utoa::radix#0==(const byte) HEXADECIMAL) goto utoa::@2
|
|
if() condition always false - eliminating [192] if((const byte) utoa::radix#0==(const byte) OCTAL) goto utoa::@3
|
|
if() condition always false - eliminating [196] if((const byte) utoa::radix#0==(const byte) BINARY) goto utoa::@4
|
|
if() condition always false - eliminating [254] if((byte) 0!=(const byte) printf_uint::format_sign_always#0) goto printf_uint::@1
|
|
if() condition always true - replacing block destination [276] if((byte) 0==(const byte) printf_number_buffer::format_min_length#0) goto printf_number_buffer::@1
|
|
if() condition always true - replacing block destination [309] if((byte) 0==(const byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Rewriting conditional comparison [96] if((byte) gotoxy::y#3<=(byte) $19) goto gotoxy::@1
|
|
Simplifying constant evaluating to zero (signed byte)(const byte) printf_number_buffer::format_min_length#0 in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero (byte*)&printf_buffer in [258] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte~) printf_uint::$2
|
|
Simplifying expression containing zero (byte*)&printf_buffer in [263] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN)
|
|
Simplifying expression containing zero printf_number_buffer::len#2 in [293] (signed byte) printf_number_buffer::padding#1 ← (const signed byte) printf_number_buffer::$25 - (signed byte) printf_number_buffer::len#2
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused variable (void*) memcpy::return#2 and assignment [114] (void*) memcpy::return#2 ← (void*) memcpy::destination#2
|
|
Eliminating unused variable (void*) memcpy::return#3 and assignment [116] (void*) memcpy::return#3 ← (void*) memcpy::destination#2
|
|
Eliminating unused variable (void*) memset::return#2 and assignment [118] (void*) memset::return#2 ← (void*) memset::str#4
|
|
Eliminating unused variable (void*) memset::return#3 and assignment [120] (void*) memset::return#3 ← (void*) memset::str#4
|
|
Eliminating unused variable (void*) memset::return#4 and assignment [217] (void*) memset::return#4 ← (void*) memset::str#4
|
|
Eliminating unused constant (const byte*) strupr::return#2
|
|
Eliminating unused constant (const byte) cputs::c#0
|
|
Eliminating unused constant (const byte) BINARY
|
|
Eliminating unused constant (const byte) OCTAL
|
|
Eliminating unused constant (const byte) HEXADECIMAL
|
|
Eliminating unused constant (const byte) utoa::max_digits#0
|
|
Eliminating unused constant (const word*) utoa::digit_values#0
|
|
Eliminating unused constant (const byte) utoa::radix#0
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_min_length#0
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_sign_always#0
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_upper_case#0
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_radix#0
|
|
Eliminating unused constant (const signed byte) printf_number_buffer::$25
|
|
Eliminating unused constant (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN
|
|
Eliminating unused constant (const byte) conio_scroll_enable
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Eliminating unused constant (const byte) printf_uint::format_min_length#0
|
|
Eliminating unused constant (const byte) printf_uint::format_sign_always#0
|
|
Eliminating unused constant (const byte) printf_uint::format_upper_case#0
|
|
Eliminating unused constant (const byte) printf_uint::format_radix#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Eliminating unused constant (const byte) DECIMAL
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Eliminating variable (bool~) toupper::$0 from unused block toupper
|
|
Eliminating variable (bool~) toupper::$1 from unused block toupper
|
|
Eliminating variable (byte) toupper::return#0 from unused block toupper::@1
|
|
Eliminating variable (byte) toupper::return#2 from unused block toupper::@return
|
|
Eliminating variable (byte*) strupr::src#2 from unused block strupr::@1
|
|
Eliminating variable (byte) toupper::ch#0 from unused block strupr::@2
|
|
Eliminating variable (byte) toupper::return#3 from unused block strupr::@2
|
|
Eliminating variable (byte~) strupr::$0 from unused block strupr::@4
|
|
Eliminating variable (byte*) strupr::src#1 from unused block strupr::@4
|
|
Eliminating variable (byte*) strlen::str#2 from unused block strlen::@1
|
|
Eliminating variable (word) strlen::len#2 from unused block strlen::@1
|
|
Eliminating variable (word) strlen::len#1 from unused block strlen::@2
|
|
Eliminating variable (byte*) strlen::str#0 from unused block strlen::@2
|
|
Eliminating variable (byte*) utoa::buffer#0 from unused block utoa::@9
|
|
Eliminating variable (byte*) utoa::buffer#1 from unused block utoa::@9
|
|
Eliminating variable (byte*) utoa::buffer#2 from unused block utoa::@9
|
|
Eliminating variable (word) strlen::return#2 from unused block printf_number_buffer::@6
|
|
Eliminating variable (word~) printf_number_buffer::$19 from unused block printf_number_buffer::@15
|
|
Eliminating variable (signed byte) printf_number_buffer::len#0 from unused block printf_number_buffer::@15
|
|
Eliminating variable (signed byte) printf_number_buffer::len#2 from unused block printf_number_buffer::@13
|
|
Eliminating variable (signed byte) printf_number_buffer::padding#1 from unused block printf_number_buffer::@13
|
|
Eliminating variable (signed byte) printf_number_buffer::len#1 from unused block printf_number_buffer::@7
|
|
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 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 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_uint::@1) in block printf_uint::@3
|
|
Removing unused block printf_uint::@1
|
|
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
|
|
Adding number conversion cast (unumber) $19+1 in if((byte) gotoxy::y#3<(byte) $19+(number) 1) goto gotoxy::@1
|
|
Adding number conversion cast (unumber) 1 in if((byte) gotoxy::y#3<(unumber)(byte) $19+(number) 1) goto gotoxy::@1
|
|
Adding number conversion cast (unumber) 0 in (bool~) utoa::$12 ← (number) 0 != (byte) utoa::started#2
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$33 ← (number) 0 != (const byte) printf_number_buffer::format_zero_padding#0
|
|
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$34 ← (number) 0 != (const byte) printf_number_buffer::format_justify_left#0
|
|
Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$35 ← (number) 0 != (signed byte) printf_number_buffer::padding#10
|
|
Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$36 ← (number) 0 != (signed byte) printf_number_buffer::padding#10
|
|
Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$37 ← (number) 0 != (signed byte) printf_number_buffer::padding#10
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast (byte) $19+(unumber)(number) 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_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Identical Phi Values (byte) gotoxy::y#3 (const byte) gotoxy::y#2
|
|
Identical Phi Values (byte) gotoxy::x#3 (const byte) gotoxy::x#2
|
|
Identical Phi Values (byte) utoa::max_digits#7 (const byte) utoa::max_digits#1
|
|
Identical Phi Values (word*) utoa::digit_values#8 (const word*) utoa::digit_values#1
|
|
Identical Phi Values (byte~) printf_uint::$2 (const byte) printf_uint::$0
|
|
Identical Phi Values (signed byte) printf_number_buffer::padding#10 (const signed byte) printf_number_buffer::padding#0
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition (bool~) utoa::$12 [120] if((byte) 0!=(byte) utoa::started#2) goto utoa::@14
|
|
Simple Condition (bool~) printf_number_buffer::$1 [157] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@23
|
|
Simple Condition (bool~) printf_number_buffer::$33 [162] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@24
|
|
Simple Condition (bool~) printf_number_buffer::$34 [170] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@26
|
|
Simple Condition (bool~) utoa::$6 [209] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14
|
|
Simple Condition (bool~) printf_number_buffer::$35 [211] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8
|
|
Simple Condition (bool~) printf_number_buffer::$2 [212] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@22
|
|
Simple Condition (bool~) printf_number_buffer::$36 [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10
|
|
Simple Condition (bool~) printf_number_buffer::$37 [216] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12
|
|
Simple Condition (bool~) printf_number_buffer::$14 [217] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@25
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Negating conditional jump and destination [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2
|
|
Negating conditional jump and destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4
|
|
Negating conditional jump and destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return
|
|
Negating conditional jump and destination [212] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2
|
|
Negating conditional jump and destination [217] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [114] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1
|
|
Constant right-side identified [159] (byte) printf_padding::length#0 ← (byte)(const signed byte) printf_number_buffer::padding#0
|
|
Constant right-side identified [165] (byte) printf_padding::length#1 ← (byte)(const signed byte) printf_number_buffer::padding#0
|
|
Constant right-side identified [171] (byte) printf_padding::length#2 ← (byte)(const signed byte) printf_number_buffer::padding#0
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte) utoa::$4 = utoa::max_digits#1-1
|
|
Constant (const byte) printf_padding::length#0 = (byte)printf_number_buffer::padding#0
|
|
Constant (const byte) printf_padding::length#1 = (byte)printf_number_buffer::padding#0
|
|
Constant (const byte) printf_padding::length#2 = (byte)printf_number_buffer::padding#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
if() condition always true - replacing block destination [56] if((const byte) gotoxy::y#2<(byte) $19+(byte) 1) goto gotoxy::@1
|
|
if() condition always true - replacing block destination [58] if((const byte) gotoxy::x#2<(byte) $28) goto gotoxy::@2
|
|
if() condition always false - eliminating [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2
|
|
if() condition always true - replacing block destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4
|
|
if() condition always true - replacing block destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return
|
|
if() condition always false - eliminating [211] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8
|
|
if() condition always false - eliminating [212] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2
|
|
if() condition always false - eliminating [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10
|
|
if() condition always false - eliminating [216] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12
|
|
if() condition always false - eliminating [217] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in
|
|
Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in
|
|
Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Eliminating unused constant (const byte) gotoxy::x#1
|
|
Eliminating unused constant (const byte) gotoxy::y#1
|
|
Eliminating unused constant (const byte) utoa::max_digits#2
|
|
Eliminating unused constant (const word*) utoa::digit_values#2
|
|
Eliminating unused constant (const byte) utoa::max_digits#3
|
|
Eliminating unused constant (const word*) utoa::digit_values#3
|
|
Eliminating unused constant (const byte) utoa::max_digits#4
|
|
Eliminating unused constant (const word*) utoa::digit_values#4
|
|
Eliminating unused constant (const byte) printf_uint::$1
|
|
Eliminating unused constant (const signed byte) printf_number_buffer::padding#0
|
|
Eliminating unused constant (const signed byte) printf_number_buffer::padding#2
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_justify_left#0
|
|
Eliminating unused constant (const byte) printf_number_buffer::format_zero_padding#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Eliminating unused constant (const word*) RADIX_BINARY_VALUES
|
|
Eliminating unused constant (const word*) RADIX_OCTAL_VALUES
|
|
Eliminating unused constant (const word*) RADIX_HEXADECIMAL_VALUES
|
|
Eliminating unused constant (const byte) printf_uint::format_justify_left#0
|
|
Eliminating unused constant (const byte) printf_uint::format_zero_padding#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Eliminating variable (byte) printf_padding::length#4 from unused block printf_padding
|
|
Eliminating variable (byte) printf_padding::pad#5 from unused block printf_padding
|
|
Eliminating variable (byte) printf_padding::i#2 from unused block printf_padding::@1
|
|
Eliminating variable (byte) cputc::c#1 from unused block printf_padding::@2
|
|
Eliminating variable (byte) printf_padding::i#1 from unused block printf_padding::@3
|
|
Removing PHI-reference to removed block (gotoxy::@3) in block gotoxy::@1
|
|
Removing unused block gotoxy::@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
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Identical Phi Values (byte) gotoxy::y#4 (const byte) gotoxy::y#2
|
|
Identical Phi Values (byte) gotoxy::x#4 (const byte) gotoxy::x#2
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Constant right-side identified [59] (word~) gotoxy::$8 ← (word)(const byte) gotoxy::y#2
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const word) gotoxy::$8 = (word)gotoxy::y#2
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Simplifying constant evaluating to zero (word)(const byte) gotoxy::y#2 in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero gotoxy::$4 in [61] (word) gotoxy::offset#0 ← (word~) gotoxy::$4 + (const byte) gotoxy::x#2
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused constant (const byte) gotoxy::y#0
|
|
Eliminating unused constant (const byte) gotoxy::x#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Alias gotoxy::offset#0 = gotoxy::$4
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Constant right-side identified [57] (word) gotoxy::offset#0 ← (const word) gotoxy::$8 * (byte) $28
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const word) gotoxy::offset#0 = gotoxy::$8*$28
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Simplifying constant evaluating to zero (const word) gotoxy::$8*(byte) $28 in
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero CONIO_SCREEN_TEXT in [58] (byte*~) gotoxy::$6 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (const word) gotoxy::offset#0
|
|
Simplifying expression containing zero CONIO_SCREEN_COLORS in [60] (byte*~) gotoxy::$7 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (const word) gotoxy::offset#0
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused constant (const word) gotoxy::$8
|
|
Eliminating unused constant (const word) gotoxy::offset#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
|
|
Constant (const byte*) gotoxy::$6 = CONIO_SCREEN_TEXT
|
|
Constant (const byte*) gotoxy::$7 = CONIO_SCREEN_COLORS
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Alias candidate removed (volatile)conio_cursor_text = cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = cputln::$2 cscroll::$8
|
|
Inlining Noop Cast [1] (byte*) memcpy::src#0 ← (byte*)(void*) memcpy::source#2 keeping memcpy::source#2
|
|
Inlining Noop Cast [2] (byte*) memcpy::dst#0 ← (byte*)(void*) memcpy::destination#2 keeping memcpy::destination#2
|
|
Inlining Noop Cast [3] (byte*~) memcpy::$2 ← (byte*)(void*) memcpy::source#2 keeping memcpy::source#2
|
|
Inlining Noop Cast [13] (byte*~) memset::$4 ← (byte*)(void*) memset::str#4 keeping memset::str#4
|
|
Inlining Noop Cast [15] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#4 keeping memset::str#4
|
|
Inlining Noop Cast [41] (byte~) mul8s::$13 ← (byte)(signed byte) mul8s::b#2 keeping mul8s::b#2
|
|
Inlining Noop Cast [45] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
|
|
Inlining Noop Cast [47] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#2 keeping mul8s::a#2
|
|
Inlining Noop Cast [146] (signed byte~) main::$14 ← (signed byte)(byte) main::x#2 keeping main::x#2
|
|
Inlining Noop Cast [149] (signed byte~) main::$15 ← (signed byte)(byte) main::y#2 keeping main::y#2
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Inlining Noop Cast [155] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
|
|
Inlining Noop Cast [160] (signed word) mul8s::return#3 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Rewriting multiplication to use shift [104] (byte~) utoa::$10 ← (byte) utoa::digit#2 * (const byte) SIZEOF_WORD
|
|
Rewriting multiplication to use shift [147] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 * (signed byte) 2
|
|
Rewriting multiplication to use shift [150] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 * (signed byte) 2
|
|
Successful SSA optimization Pass2MultiplyToShiftRewriting
|
|
Inlining constant with var siblings (const void*) memcpy::destination#0
|
|
Inlining constant with var siblings (const void*) memcpy::source#0
|
|
Inlining constant with var siblings (const word) memcpy::num#0
|
|
Inlining constant with var siblings (const void*) memcpy::destination#1
|
|
Inlining constant with var siblings (const void*) memcpy::source#1
|
|
Inlining constant with var siblings (const word) memcpy::num#1
|
|
Inlining constant with var siblings (const void*) memset::str#0
|
|
Inlining constant with var siblings (const byte) memset::c#0
|
|
Inlining constant with var siblings (const word) memset::num#0
|
|
Inlining constant with var siblings (const void*) memset::str#1
|
|
Inlining constant with var siblings (const word) memset::num#1
|
|
Inlining constant with var siblings (const void*) memset::str#2
|
|
Inlining constant with var siblings (const byte) memset::c#2
|
|
Inlining constant with var siblings (const word) memset::num#2
|
|
Inlining constant with var siblings (const byte) memset::c#1
|
|
Inlining constant with var siblings (const word) mul8u::res#0
|
|
Inlining constant with var siblings (const to_nomodify byte*) cputs::s#2
|
|
Inlining constant with var siblings (const to_nomodify byte*) cputs::s#1
|
|
Inlining constant with var siblings (const byte) utoa::started#0
|
|
Inlining constant with var siblings (const byte) utoa::digit#0
|
|
Inlining constant with var siblings (const byte) utoa::started#1
|
|
Inlining constant with var siblings (const byte*) utoa::buffer#5
|
|
Inlining constant with var siblings (const byte) utoa_append::digit#0
|
|
Inlining constant with var siblings (const word) main::count#0
|
|
Inlining constant with var siblings (const byte*) main::sc#0
|
|
Inlining constant with var siblings (const byte) main::y#0
|
|
Inlining constant with var siblings (const byte) main::x#0
|
|
Constant inlined utoa_append::digit#0 = (byte) 0
|
|
Constant inlined utoa::digit_values#1 = (const word*) RADIX_DECIMAL_VALUES
|
|
Constant inlined cputs::s#1 = (const byte*) printf_number_buffer::buffer_digits#0
|
|
Constant inlined cputs::s#2 = (const byte*) main::s
|
|
Constant inlined memset::num#2 = (word) $3e8
|
|
Constant inlined conio_textcolor = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT
|
|
Constant inlined memcpy::destination#0 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT
|
|
Constant inlined memset::num#1 = (byte) $28
|
|
Constant inlined memcpy::destination#1 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS
|
|
Constant inlined memset::num#0 = (byte) $28
|
|
Constant inlined memcpy::source#1 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(byte) $28
|
|
Constant inlined utoa::digit#0 = (byte) 0
|
|
Constant inlined utoa::$4 = (const byte) utoa::max_digits#1-(byte) 1
|
|
Constant inlined memset::str#2 = (void*)(const nomodify byte*) SCREEN
|
|
Constant inlined memset::str#1 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(word)(number) $19*(number) $28-(byte) $28
|
|
Constant inlined memset::str#0 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(word)(number) $19*(number) $28-(byte) $28
|
|
Constant inlined printf_uint::$0 = (byte) 0
|
|
Constant inlined gotoxy::$6 = (const nomodify byte*) CONIO_SCREEN_TEXT
|
|
Constant inlined gotoxy::$7 = (const nomodify byte*) CONIO_SCREEN_COLORS
|
|
Constant inlined utoa::started#1 = (byte) 1
|
|
Constant inlined main::sc#0 = (const nomodify byte*) SCREEN
|
|
Constant inlined utoa::started#0 = (byte) 0
|
|
Constant inlined main::x#0 = (byte) 0
|
|
Constant inlined main::y#0 = (byte) 0
|
|
Constant inlined memcpy::source#0 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28
|
|
Constant inlined memcpy::num#1 = (word)(number) $19*(number) $28-(number) $28
|
|
Constant inlined memcpy::num#0 = (word)(number) $19*(number) $28-(number) $28
|
|
Constant inlined main::count#0 = (word) 0
|
|
Constant inlined mul8u::res#0 = (word) 0
|
|
Constant inlined utoa::buffer#5 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
Constant inlined memset::c#0 = (byte) ' '
|
|
Constant inlined memset::c#1 = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT
|
|
Constant inlined memset::c#2 = (byte) ' '
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Alias candidate removed (volatile)conio_cursor_text = cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = cputln::$2 cscroll::$8
|
|
Identical Phi Values (word) memcpy::num#2 (word)(number) $19*(number) $28-(number) $28
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Eliminating unused constant (const byte) SIZEOF_WORD
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Alias candidate removed (volatile)conio_cursor_text = cputln::$1 cscroll::$7
|
|
Alias candidate removed (volatile)conio_cursor_color = cputln::$2 cscroll::$8
|
|
Added new block during phi lifting mul8u::@6(between mul8u::@2 and mul8u::@4)
|
|
Added new block during phi lifting mul8s::@6(between mul8s::@5 and mul8s::@1)
|
|
Added new block during phi lifting mul8s::@7(between mul8s::@1 and mul8s::@2)
|
|
Added new block during phi lifting utoa::@17(between utoa::@16 and utoa::@13)
|
|
Added new block during phi lifting main::@15(between main::@14 and main::@7)
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @2
|
|
Adding NOP phi() at start of @3
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::@9
|
|
Adding NOP phi() at start of main::@3
|
|
Adding NOP phi() at start of main::@11
|
|
Adding NOP phi() at start of main::@12
|
|
Adding NOP phi() at start of mul8u::@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 memset::@1
|
|
Adding NOP phi() at start of memcpy::@3
|
|
Adding NOP phi() at start of printf_uint
|
|
Adding NOP phi() at start of printf_uint::@2
|
|
Adding NOP phi() at start of printf_uint::@5
|
|
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 utoa
|
|
Adding NOP phi() at start of utoa::@1
|
|
Adding NOP phi() at start of gotoxy
|
|
Adding NOP phi() at start of gotoxy::@1
|
|
CALL GRAPH
|
|
Calls in [] to main:6
|
|
Calls in [main] to memset:10 gotoxy:15 printf_uint:17 cputs:19 mul8s:38 mul8s:44
|
|
Calls in [mul8s] to mul8u:61
|
|
Calls in [cputs] to cputc:106
|
|
Calls in [cputc] to cscroll:118 cputln:122
|
|
Calls in [cputln] to cscroll:131
|
|
Calls in [cscroll] to memcpy:137 memcpy:139 memset:141 memset:143
|
|
Calls in [printf_uint] to utoa:178 printf_number_buffer:180
|
|
Calls in [printf_number_buffer] to cputc:190 cputs:195
|
|
Calls in [utoa] to utoa_append:224
|
|
|
|
Created 35 initial phi equivalence classes
|
|
Coalesced [22] main::sc#12 ← main::sc#8
|
|
Coalesced [23] main::count#14 ← main::count#11
|
|
Coalesced [27] main::y#11 ← main::y#1
|
|
Coalesced (already) [28] main::count#13 ← main::count#10
|
|
Coalesced (already) [29] main::sc#11 ← main::sc#10
|
|
Coalesced [36] mul8s::a#8 ← mul8s::a#0
|
|
Coalesced [37] mul8s::b#7 ← mul8s::b#0
|
|
Coalesced [42] mul8s::a#7 ← mul8s::a#1
|
|
Coalesced [43] mul8s::b#6 ← mul8s::b#1
|
|
Coalesced [50] main::count#17 ← main::count#1
|
|
Coalesced [54] main::x#8 ← main::x#1
|
|
Coalesced [55] main::sc#13 ← main::sc#1
|
|
Coalesced [56] main::count#15 ← main::count#12
|
|
Coalesced (already) [57] main::count#16 ← main::count#10
|
|
Coalesced [68] mul8s::m#7 ← mul8s::m#1
|
|
Coalesced [74] mul8s::m#10 ← mul8s::m#2
|
|
Coalesced [77] mul8s::m#9 ← mul8s::m#5
|
|
Coalesced [78] mul8s::m#8 ← mul8s::m#0
|
|
Coalesced [80] mul8u::a#7 ← mul8u::a#1
|
|
Coalesced [81] mul8u::mb#6 ← mul8u::mb#0
|
|
Coalesced [89] mul8u::res#9 ← mul8u::res#1
|
|
Coalesced [93] mul8u::a#8 ← mul8u::a#0
|
|
Coalesced [94] mul8u::res#7 ← mul8u::res#6
|
|
Coalesced [95] mul8u::mb#7 ← mul8u::mb#1
|
|
Coalesced (already) [96] mul8u::res#8 ← mul8u::res#2
|
|
Coalesced [98] cputs::s#7 ← cputs::s#4
|
|
Coalesced [105] cputc::c#5 ← cputc::c#0
|
|
Coalesced [107] cputs::s#8 ← cputs::s#0
|
|
Coalesced [160] memset::dst#5 ← memset::dst#1
|
|
Coalesced [172] memcpy::src#5 ← memcpy::src#1
|
|
Coalesced [173] memcpy::dst#5 ← memcpy::dst#1
|
|
Coalesced [189] cputc::c#6 ← cputc::c#2
|
|
Coalesced [200] utoa::value#17 ← utoa::value#1
|
|
Coalesced [212] utoa::value#18 ← utoa::value#2
|
|
Coalesced [213] utoa::started#6 ← utoa::started#2
|
|
Coalesced [214] utoa::buffer#23 ← utoa::buffer#11
|
|
Coalesced [217] utoa::digit#7 ← utoa::digit#1
|
|
Coalesced (already) [218] utoa::value#16 ← utoa::value#6
|
|
Coalesced (already) [219] utoa::started#5 ← utoa::started#4
|
|
Coalesced (already) [220] utoa::buffer#22 ← utoa::buffer#14
|
|
Coalesced [228] utoa::value#19 ← utoa::value#0
|
|
Coalesced [229] utoa::buffer#24 ← utoa::buffer#4
|
|
Coalesced [230] utoa_append::value#6 ← utoa_append::value#0
|
|
Coalesced [237] utoa_append::value#7 ← utoa_append::value#1
|
|
Coalesced [238] utoa_append::digit#5 ← utoa_append::digit#1
|
|
Coalesced down to 26 phi equivalence classes
|
|
Culled Empty Block (label) @3
|
|
Culled Empty Block (label) main::@9
|
|
Culled Empty Block (label) main::@12
|
|
Culled Empty Block (label) main::@2
|
|
Culled Empty Block (label) main::@15
|
|
Culled Empty Block (label) mul8s::@7
|
|
Culled Empty Block (label) mul8s::@6
|
|
Culled Empty Block (label) mul8u::@3
|
|
Culled Empty Block (label) mul8u::@6
|
|
Culled Empty Block (label) cputs::@3
|
|
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) memset::@1
|
|
Culled Empty Block (label) memcpy::@3
|
|
Culled Empty Block (label) printf_uint::@2
|
|
Culled Empty Block (label) printf_uint::@5
|
|
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) utoa::@1
|
|
Culled Empty Block (label) utoa::@5
|
|
Culled Empty Block (label) utoa::@17
|
|
Culled Empty Block (label) gotoxy::@1
|
|
Renumbering block memset::@2 to memset::@1
|
|
Renumbering block memset::@3 to memset::@2
|
|
Renumbering block memset::@4 to memset::@3
|
|
Renumbering block mul8u::@4 to mul8u::@3
|
|
Renumbering block mul8u::@5 to mul8u::@4
|
|
Renumbering block gotoxy::@2 to gotoxy::@1
|
|
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 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_uint::@3 to printf_uint::@1
|
|
Renumbering block printf_uint::@4 to printf_uint::@2
|
|
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
|
|
Renumbering block main::@3 to main::@2
|
|
Renumbering block main::@4 to main::@3
|
|
Renumbering block main::@5 to main::@4
|
|
Renumbering block main::@6 to main::@5
|
|
Renumbering block main::@7 to main::@6
|
|
Renumbering block main::@8 to main::@7
|
|
Renumbering block main::@10 to main::@8
|
|
Renumbering block main::@11 to main::@9
|
|
Renumbering block main::@13 to main::@10
|
|
Renumbering block main::@14 to main::@11
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @2
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::@2
|
|
Adding NOP phi() at start of main::@9
|
|
Adding NOP phi() at start of cputc::@1
|
|
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
|
|
Adding NOP phi() at start of printf_uint
|
|
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 utoa
|
|
Adding NOP phi() at start of utoa_append
|
|
Adding NOP phi() at start of gotoxy
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
@begin: scope:[] from
|
|
[0] phi()
|
|
to:@1
|
|
@1: scope:[] from @begin
|
|
[1] (byte) conio_cursor_x ← (byte) 0
|
|
[2] (byte) conio_cursor_y ← (byte) 0
|
|
[3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT
|
|
[4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS
|
|
to:@2
|
|
@2: scope:[] from @1
|
|
[5] phi()
|
|
[6] call main
|
|
to:@end
|
|
@end: scope:[] from @2
|
|
[7] phi()
|
|
|
|
(void()) main()
|
|
main: scope:[main] from @2
|
|
[8] phi()
|
|
[9] call memset
|
|
to:main::@1
|
|
main::@1: scope:[main] from main main::@5
|
|
[10] (byte*) main::sc#8 ← phi( main::@5/(byte*) main::sc#10 main/(const nomodify byte*) SCREEN )
|
|
[10] (word) main::count#11 ← phi( main::@5/(word) main::count#10 main/(word) 0 )
|
|
[10] (byte) main::y#2 ← phi( main::@5/(byte) main::y#1 main/(byte) 0 )
|
|
[11] if((byte) main::y#2<(byte) $19) goto main::@3
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1
|
|
[12] phi()
|
|
[13] call gotoxy
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@2
|
|
[14] (word) printf_uint::uvalue#0 ← (word) main::count#11
|
|
[15] call printf_uint
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@8
|
|
[16] phi()
|
|
[17] call cputs
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@9
|
|
[18] return
|
|
to:@return
|
|
main::@3: scope:[main] from main::@1 main::@6
|
|
[19] (word) main::count#10 ← phi( main::@1/(word) main::count#11 main::@6/(word) main::count#12 )
|
|
[19] (byte*) main::sc#10 ← phi( main::@1/(byte*) main::sc#8 main::@6/(byte*) main::sc#1 )
|
|
[19] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@6/(byte) main::x#1 )
|
|
[20] if((byte) main::x#2<(byte) $28) goto main::@4
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@3
|
|
[21] (byte) main::y#1 ← ++ (byte) main::y#2
|
|
to:main::@1
|
|
main::@4: scope:[main] from main::@3
|
|
[22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1
|
|
[23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27
|
|
[24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1
|
|
[25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18
|
|
[26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0
|
|
[27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0
|
|
[28] call mul8s
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@4
|
|
[29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4
|
|
[30] (signed byte) mul8s::a#1 ← (signed byte) main::yd#0
|
|
[31] (signed byte) mul8s::b#1 ← (signed byte) main::yd#0
|
|
[32] call mul8s
|
|
to:main::@11
|
|
main::@11: scope:[main] from main::@10
|
|
[33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4
|
|
[34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10
|
|
[35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@11
|
|
[36] *((byte*) main::sc#10) ← (byte) '*'
|
|
[37] (word) main::count#1 ← ++ (word) main::count#10
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@11 main::@7
|
|
[38] (word) main::count#12 ← phi( main::@11/(word) main::count#10 main::@7/(word) main::count#1 )
|
|
[39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10
|
|
[40] (byte) main::x#1 ← ++ (byte) main::x#2
|
|
to:main::@3
|
|
|
|
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
|
|
mul8s: scope:[mul8s] from main::@10 main::@4
|
|
[41] (signed byte) mul8s::b#2 ← phi( main::@10/(signed byte) mul8s::b#1 main::@4/(signed byte) mul8s::b#0 )
|
|
[41] (signed byte) mul8s::a#2 ← phi( main::@10/(signed byte) mul8s::a#1 main::@4/(signed byte) mul8s::a#0 )
|
|
[42] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#2
|
|
[43] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#2
|
|
[44] call mul8u
|
|
[45] (word) mul8u::return#2 ← (word) mul8u::res#2
|
|
to:mul8s::@5
|
|
mul8s::@5: scope:[mul8s] from mul8s
|
|
[46] (word) mul8s::m#0 ← (word) mul8u::return#2
|
|
[47] if((signed byte) mul8s::a#2>=(signed byte) 0) goto mul8s::@1
|
|
to:mul8s::@3
|
|
mul8s::@3: scope:[mul8s] from mul8s::@5
|
|
[48] (byte~) mul8s::$6 ← > (word) mul8s::m#0
|
|
[49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2
|
|
[50] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$11
|
|
to:mul8s::@1
|
|
mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@5
|
|
[51] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@5/(word) mul8s::m#0 )
|
|
[52] if((signed byte) mul8s::b#2>=(signed byte) 0) goto mul8s::@2
|
|
to:mul8s::@4
|
|
mul8s::@4: scope:[mul8s] from mul8s::@1
|
|
[53] (byte~) mul8s::$9 ← > (word) mul8s::m#5
|
|
[54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2
|
|
[55] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$12
|
|
to:mul8s::@2
|
|
mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4
|
|
[56] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 )
|
|
to:mul8s::@return
|
|
mul8s::@return: scope:[mul8s] from mul8s::@2
|
|
[57] return
|
|
to:@return
|
|
|
|
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
|
mul8u: scope:[mul8u] from mul8s
|
|
[58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0
|
|
to:mul8u::@1
|
|
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
|
|
[59] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
|
|
[59] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 )
|
|
[59] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 )
|
|
[60] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
|
|
to:mul8u::@return
|
|
mul8u::@return: scope:[mul8u] from mul8u::@1
|
|
[61] return
|
|
to:@return
|
|
mul8u::@2: scope:[mul8u] from mul8u::@1
|
|
[62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1
|
|
[63] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
|
|
to:mul8u::@4
|
|
mul8u::@4: scope:[mul8u] from mul8u::@2
|
|
[64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
|
|
to:mul8u::@3
|
|
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
|
|
[65] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
|
|
[66] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1
|
|
[67] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
|
|
to:mul8u::@1
|
|
|
|
(void()) cputs((to_nomodify byte*) cputs::s)
|
|
cputs: scope:[cputs] from main::@9 printf_number_buffer::@2
|
|
[68] (to_nomodify byte*) cputs::s#4 ← phi( main::@9/(const byte*) main::s printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 )
|
|
to:cputs::@1
|
|
cputs::@1: scope:[cputs] from cputs cputs::@2
|
|
[69] (to_nomodify byte*) cputs::s#3 ← phi( cputs/(to_nomodify byte*) cputs::s#4 cputs::@2/(to_nomodify byte*) cputs::s#0 )
|
|
[70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3)
|
|
[71] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3
|
|
[72] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2
|
|
to:cputs::@return
|
|
cputs::@return: scope:[cputs] from cputs::@1
|
|
[73] return
|
|
to:@return
|
|
cputs::@2: scope:[cputs] from cputs::@1
|
|
[74] (byte) cputc::c#0 ← (byte) cputs::c#1
|
|
[75] call cputc
|
|
to:cputs::@1
|
|
|
|
(void()) cputc((byte) cputc::c)
|
|
cputc: scope:[cputc] from cputs::@2 printf_number_buffer::@3
|
|
[76] (byte) cputc::c#3 ← phi( cputs::@2/(byte) cputc::c#0 printf_number_buffer::@3/(byte) cputc::c#2 )
|
|
[77] if((byte) cputc::c#3==(byte) '
|
|
') goto cputc::@1
|
|
to:cputc::@2
|
|
cputc::@2: scope:[cputc] from cputc
|
|
[78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3
|
|
[79] (byte*) conio_cursor_text ← ++ (byte*) conio_cursor_text
|
|
[80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT
|
|
[81] (byte*) conio_cursor_color ← ++ (byte*) conio_cursor_color
|
|
[82] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x
|
|
[83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return
|
|
to:cputc::@3
|
|
cputc::@3: scope:[cputc] from cputc::@2
|
|
[84] (byte) conio_cursor_x ← (byte) 0
|
|
[85] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y
|
|
[86] call cscroll
|
|
to:cputc::@return
|
|
cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3
|
|
[87] return
|
|
to:@return
|
|
cputc::@1: scope:[cputc] from cputc
|
|
[88] phi()
|
|
[89] call cputln
|
|
to:cputc::@return
|
|
|
|
(void()) cputln()
|
|
cputln: scope:[cputln] from cputc::@1
|
|
[90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x
|
|
[91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0
|
|
[92] (byte*) conio_cursor_text ← (byte*~) cputln::$1
|
|
[93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0
|
|
[94] (byte*) conio_cursor_color ← (byte*~) cputln::$2
|
|
[95] (byte) conio_cursor_x ← (byte) 0
|
|
[96] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y
|
|
[97] call cscroll
|
|
to:cputln::@return
|
|
cputln::@return: scope:[cputln] from cputln
|
|
[98] return
|
|
to:@return
|
|
|
|
(void()) cscroll()
|
|
cscroll: scope:[cscroll] from cputc::@3 cputln
|
|
[99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return
|
|
to:cscroll::@1
|
|
cscroll::@1: scope:[cscroll] from cscroll
|
|
[100] phi()
|
|
[101] call memcpy
|
|
to:cscroll::@2
|
|
cscroll::@2: scope:[cscroll] from cscroll::@1
|
|
[102] phi()
|
|
[103] call memcpy
|
|
to:cscroll::@3
|
|
cscroll::@3: scope:[cscroll] from cscroll::@2
|
|
[104] phi()
|
|
[105] call memset
|
|
to:cscroll::@4
|
|
cscroll::@4: scope:[cscroll] from cscroll::@3
|
|
[106] phi()
|
|
[107] call memset
|
|
to:cscroll::@5
|
|
cscroll::@5: scope:[cscroll] from cscroll::@4
|
|
[108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28
|
|
[109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7
|
|
[110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28
|
|
[111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8
|
|
[112] (byte) conio_cursor_y ← -- (byte) conio_cursor_y
|
|
to:cscroll::@return
|
|
cscroll::@return: scope:[cscroll] from cscroll cscroll::@5
|
|
[113] return
|
|
to:@return
|
|
|
|
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
|
memset: scope:[memset] from cscroll::@3 cscroll::@4 main
|
|
[114] (byte) memset::c#5 ← phi( cscroll::@3/(byte) ' ' cscroll::@4/(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT main/(byte) ' ' )
|
|
[114] (void*) memset::str#4 ← phi( cscroll::@3/(void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(word)(number) $19*(number) $28-(byte) $28 cscroll::@4/(void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(word)(number) $19*(number) $28-(byte) $28 main/(void*)(const nomodify byte*) SCREEN )
|
|
[114] (word) memset::num#3 ← phi( cscroll::@3/(byte) $28 cscroll::@4/(byte) $28 main/(word) $3e8 )
|
|
[115] if((word) memset::num#3<=(byte) 0) goto memset::@return
|
|
to:memset::@1
|
|
memset::@1: scope:[memset] from memset
|
|
[116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3
|
|
[117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4
|
|
to:memset::@2
|
|
memset::@2: scope:[memset] from memset::@1 memset::@3
|
|
[118] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
|
[119] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
|
to:memset::@return
|
|
memset::@return: scope:[memset] from memset memset::@2
|
|
[120] return
|
|
to:@return
|
|
memset::@3: scope:[memset] from memset::@2
|
|
[121] *((byte*) memset::dst#2) ← (byte) memset::c#5
|
|
[122] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
|
to:memset::@2
|
|
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
memcpy: scope:[memcpy] from cscroll::@1 cscroll::@2
|
|
[123] (void*) memcpy::destination#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) CONIO_SCREEN_TEXT cscroll::@2/(void*)(const nomodify byte*) CONIO_SCREEN_COLORS )
|
|
[123] (void*) memcpy::source#2 ← phi( cscroll::@1/(void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28 cscroll::@2/(void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(byte) $28 )
|
|
[124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28
|
|
[125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2
|
|
[126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2
|
|
to:memcpy::@1
|
|
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
|
[127] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*) memcpy::dst#4 memcpy::@2/(byte*) memcpy::dst#1 )
|
|
[127] (byte*) memcpy::src#2 ← phi( memcpy/(byte*) memcpy::src#4 memcpy::@2/(byte*) memcpy::src#1 )
|
|
[128] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2
|
|
to:memcpy::@return
|
|
memcpy::@return: scope:[memcpy] from memcpy::@1
|
|
[129] return
|
|
to:@return
|
|
memcpy::@2: scope:[memcpy] from memcpy::@1
|
|
[130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
|
[131] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
|
[132] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
|
to:memcpy::@1
|
|
|
|
(void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix)
|
|
printf_uint: scope:[printf_uint] from main::@8
|
|
[133] phi()
|
|
to:printf_uint::@1
|
|
printf_uint::@1: scope:[printf_uint] from printf_uint
|
|
[134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
|
[135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0
|
|
[136] call utoa
|
|
to:printf_uint::@2
|
|
printf_uint::@2: scope:[printf_uint] from printf_uint::@1
|
|
[137] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
|
[138] call printf_number_buffer
|
|
to:printf_uint::@return
|
|
printf_uint::@return: scope:[printf_uint] from printf_uint::@2
|
|
[139] 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_uint::@2
|
|
[140] phi()
|
|
to:printf_number_buffer::@1
|
|
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer
|
|
[141] if((byte) 0==(byte) 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
|
|
[142] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0
|
|
[143] call cputc
|
|
to:printf_number_buffer::@2
|
|
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3
|
|
[144] phi()
|
|
[145] call cputs
|
|
to:printf_number_buffer::@return
|
|
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2
|
|
[146] return
|
|
to:@return
|
|
|
|
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
|
utoa: scope:[utoa] from printf_uint::@1
|
|
[147] phi()
|
|
to:utoa::@1
|
|
utoa::@1: scope:[utoa] from utoa utoa::@4
|
|
[148] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
|
[148] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 )
|
|
[148] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 )
|
|
[148] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 )
|
|
[149] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2
|
|
to:utoa::@3
|
|
utoa::@3: scope:[utoa] from utoa::@1
|
|
[150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2
|
|
[151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11)
|
|
[152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11
|
|
[153] *((byte*) utoa::buffer#3) ← (byte) 0
|
|
to:utoa::@return
|
|
utoa::@return: scope:[utoa] from utoa::@3
|
|
[154] return
|
|
to:@return
|
|
utoa::@2: scope:[utoa] from utoa::@1
|
|
[155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1
|
|
[156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10)
|
|
[157] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5
|
|
to:utoa::@7
|
|
utoa::@7: scope:[utoa] from utoa::@2
|
|
[158] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5
|
|
to:utoa::@4
|
|
utoa::@4: scope:[utoa] from utoa::@6 utoa::@7
|
|
[159] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 )
|
|
[159] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 )
|
|
[159] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 )
|
|
[160] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2
|
|
to:utoa::@1
|
|
utoa::@5: scope:[utoa] from utoa::@2 utoa::@7
|
|
[161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
|
[162] (word) utoa_append::value#0 ← (word) utoa::value#2
|
|
[163] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
|
[164] call utoa_append
|
|
[165] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
|
to:utoa::@6
|
|
utoa::@6: scope:[utoa] from utoa::@5
|
|
[166] (word) utoa::value#0 ← (word) utoa_append::return#0
|
|
[167] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11
|
|
to:utoa::@4
|
|
|
|
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
|
utoa_append: scope:[utoa_append] from utoa::@5
|
|
[168] phi()
|
|
to:utoa_append::@1
|
|
utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2
|
|
[169] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 )
|
|
[169] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 )
|
|
[170] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2
|
|
to:utoa_append::@3
|
|
utoa_append::@3: scope:[utoa_append] from utoa_append::@1
|
|
[171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2)
|
|
to:utoa_append::@return
|
|
utoa_append::@return: scope:[utoa_append] from utoa_append::@3
|
|
[172] return
|
|
to:@return
|
|
utoa_append::@2: scope:[utoa_append] from utoa_append::@1
|
|
[173] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2
|
|
[174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0
|
|
to:utoa_append::@1
|
|
|
|
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
|
|
gotoxy: scope:[gotoxy] from main::@2
|
|
[175] phi()
|
|
to:gotoxy::@1
|
|
gotoxy::@1: scope:[gotoxy] from gotoxy
|
|
[176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2
|
|
[177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2
|
|
[178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT
|
|
[179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS
|
|
to:gotoxy::@return
|
|
gotoxy::@return: scope:[gotoxy] from gotoxy::@1
|
|
[180] return
|
|
to:@return
|
|
|
|
null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc
|
|
null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc
|
|
null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc
|
|
null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
(byte*) conio_cursor_color loadstore 3484376.71875
|
|
(byte*) conio_cursor_text loadstore 3430770.9230769235
|
|
(byte) conio_cursor_x loadstore 489798.1428571429
|
|
(byte) conio_cursor_y loadstore 4735295.735294118
|
|
(void()) cputc((byte) cputc::c)
|
|
(byte) cputc::c
|
|
(byte) cputc::c#0 200002.0
|
|
(byte) cputc::c#2 2002.0
|
|
(byte) cputc::c#3 1050502.0
|
|
(void()) cputln()
|
|
(byte*~) cputln::$1 2.0000002E7
|
|
(byte*~) cputln::$2 2.0000002E7
|
|
(word) cputln::ln_offset
|
|
(word) cputln::ln_offset#0 1.0000001E7
|
|
(void()) cputs((to_nomodify byte*) cputs::s)
|
|
(byte) cputs::c
|
|
(byte) cputs::c#1 100001.0
|
|
(to_nomodify byte*) cputs::s
|
|
(to_nomodify byte*) cputs::s#0 50000.5
|
|
(to_nomodify byte*) cputs::s#3 155002.0
|
|
(to_nomodify byte*) cputs::s#4 10001.0
|
|
(void()) cscroll()
|
|
(byte*~) cscroll::$7 2.00000002E8
|
|
(byte*~) cscroll::$8 2.00000002E8
|
|
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
|
|
(word) gotoxy::offset
|
|
(byte) gotoxy::x
|
|
(byte) gotoxy::y
|
|
(void()) main()
|
|
(signed word~) main::$10 2002.0
|
|
(signed byte~) main::$5 2002.0
|
|
(signed byte~) main::$7 2002.0
|
|
(signed word~) main::$9 400.4
|
|
(word) main::count
|
|
(word) main::count#1 2002.0
|
|
(word) main::count#10 178.05555555555557
|
|
(word) main::count#11 53.25
|
|
(word) main::count#12 1001.0
|
|
(signed word) main::dist_sq
|
|
(signed word) main::dist_sq#0 2002.0
|
|
(byte*) main::sc
|
|
(byte*) main::sc#1 1001.0
|
|
(byte*) main::sc#10 160.25
|
|
(byte*) main::sc#8 101.0
|
|
(byte) main::x
|
|
(byte) main::x#1 2002.0
|
|
(byte) main::x#2 150.14999999999998
|
|
(signed byte) main::xd
|
|
(signed byte) main::xd#0 750.75
|
|
(byte) main::y
|
|
(byte) main::y#1 202.0
|
|
(byte) main::y#2 13.173913043478262
|
|
(signed byte) main::yd
|
|
(signed byte) main::yd#0 500.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.00000000001E11
|
|
(byte*) memcpy::dst#2 1.0033333333466667E11
|
|
(byte*) memcpy::dst#4 2.000000002E9
|
|
(word) memcpy::num
|
|
(void*) memcpy::return
|
|
(void*) memcpy::source
|
|
(void*) memcpy::source#2
|
|
(byte*) memcpy::src
|
|
(byte*) memcpy::src#1 2.00000000002E11
|
|
(byte*) memcpy::src#2 1.0025000000125E11
|
|
(byte*) memcpy::src#4 1.000000001E9
|
|
(byte*) memcpy::src_end
|
|
(byte*) memcpy::src_end#0 1.262500000025E10
|
|
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
|
(byte) memset::c
|
|
(byte) memset::c#5 1.250000000125E9
|
|
(byte*) memset::dst
|
|
(byte*) memset::dst#1 2.0000000002E10
|
|
(byte*) memset::dst#2 1.3666666668333332E10
|
|
(byte*) memset::dst#4 2.000000002E9
|
|
(byte*) memset::end
|
|
(byte*) memset::end#0 1.8333333336666665E9
|
|
(word) memset::num
|
|
(word) memset::num#3 1.000000001E9
|
|
(void*) memset::return
|
|
(void*) memset::str
|
|
(void*) memset::str#4
|
|
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
|
|
(byte~) mul8s::$11 20002.0
|
|
(byte~) mul8s::$12 20002.0
|
|
(byte~) mul8s::$6 20002.0
|
|
(byte~) mul8s::$9 20002.0
|
|
(signed byte) mul8s::a
|
|
(signed byte) mul8s::a#0 1001.0
|
|
(signed byte) mul8s::a#1 1001.0
|
|
(signed byte) mul8s::a#2 923.3076923076923
|
|
(signed byte) mul8s::b
|
|
(signed byte) mul8s::b#0 2002.0
|
|
(signed byte) mul8s::b#1 2002.0
|
|
(signed byte) mul8s::b#2 1091.181818181818
|
|
(word) mul8s::m
|
|
(word) mul8s::m#0 10001.0
|
|
(word) mul8s::m#1 20002.0
|
|
(word) mul8s::m#2 20002.0
|
|
(word) mul8s::m#4 5000.5
|
|
(word) mul8s::m#5 12501.25
|
|
(signed word) mul8s::return
|
|
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
|
(byte~) mul8u::$1 2.00000002E8
|
|
(byte) mul8u::a
|
|
(byte) mul8u::a#0 1.00000001E8
|
|
(byte) mul8u::a#1 36667.33333333333
|
|
(byte) mul8u::a#2 6.668333416666667E7
|
|
(byte) mul8u::b
|
|
(byte) mul8u::b#0 10001.0
|
|
(word) mul8u::mb
|
|
(word) mul8u::mb#0 200002.0
|
|
(word) mul8u::mb#1 2.00000002E8
|
|
(word) mul8u::mb#2 4.287142914285715E7
|
|
(word) mul8u::res
|
|
(word) mul8u::res#1 2.00000002E8
|
|
(word) mul8u::res#2 5.0001667333333336E7
|
|
(word) mul8u::res#6 1.00000001E8
|
|
(word) mul8u::return
|
|
(word) mul8u::return#2 20002.0
|
|
(struct printf_buffer_number) printf_buffer loadstore = {}
|
|
(byte) printf_buffer_number::sign
|
|
(byte) printf_format_number::justify_left
|
|
(byte) printf_format_number::min_length
|
|
(byte) printf_format_number::radix
|
|
(byte) printf_format_number::sign_always
|
|
(byte) printf_format_number::upper_case
|
|
(byte) printf_format_number::zero_padding
|
|
(byte) printf_format_string::justify_left
|
|
(byte) printf_format_string::min_length
|
|
(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 701.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_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix)
|
|
(struct printf_format_number) printf_uint::format
|
|
(byte) printf_uint::format_justify_left
|
|
(byte) printf_uint::format_min_length
|
|
(byte) printf_uint::format_radix
|
|
(byte) printf_uint::format_sign_always
|
|
(byte) printf_uint::format_upper_case
|
|
(byte) printf_uint::format_zero_padding
|
|
(word) printf_uint::uvalue
|
|
(word) printf_uint::uvalue#0 37.33333333333333
|
|
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
|
(byte~) utoa::$10 20002.0
|
|
(byte~) utoa::$11 2002.0
|
|
(byte*) utoa::buffer
|
|
(byte*) utoa::buffer#11 3000.4285714285716
|
|
(byte*) utoa::buffer#14 15001.5
|
|
(byte*) utoa::buffer#3 2002.0
|
|
(byte*) utoa::buffer#4 20002.0
|
|
(byte) utoa::digit
|
|
(byte) utoa::digit#1 20002.0
|
|
(byte) utoa::digit#2 2857.4285714285716
|
|
(word) utoa::digit_value
|
|
(word) utoa::digit_value#0 6000.6
|
|
(word*) utoa::digit_values
|
|
(byte) utoa::max_digits
|
|
(byte) utoa::radix
|
|
(byte) utoa::started
|
|
(byte) utoa::started#2 5000.5
|
|
(byte) utoa::started#4 10001.0
|
|
(word) utoa::value
|
|
(word) utoa::value#0 10001.0
|
|
(word) utoa::value#1 551.0
|
|
(word) utoa::value#2 5857.857142857143
|
|
(word) utoa::value#6 15001.5
|
|
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
|
(byte*) utoa_append::buffer
|
|
(byte*) utoa_append::buffer#0 13750.25
|
|
(byte) utoa_append::digit
|
|
(byte) utoa_append::digit#1 1.0000001E7
|
|
(byte) utoa_append::digit#2 1.00500015E7
|
|
(word) utoa_append::return
|
|
(word) utoa_append::return#0 20002.0
|
|
(word) utoa_append::sub
|
|
(word) utoa_append::sub#0 3335000.5
|
|
(word) utoa_append::value
|
|
(word) utoa_append::value#0 36667.33333333333
|
|
(word) utoa_append::value#1 2.0000002E7
|
|
(word) utoa_append::value#2 5018334.166666666
|
|
|
|
Initial phi equivalence classes
|
|
[ main::y#2 main::y#1 ]
|
|
[ main::count#11 main::count#10 main::count#12 main::count#1 ]
|
|
[ main::sc#8 main::sc#10 main::sc#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
[ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
[ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ]
|
|
[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
|
[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
|
|
[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
|
|
[ cputs::s#3 cputs::s#4 cputs::s#0 ]
|
|
[ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
[ memset::num#3 ]
|
|
[ memset::str#4 ]
|
|
[ memset::c#5 ]
|
|
[ memset::dst#2 memset::dst#4 memset::dst#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 ]
|
|
[ 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 ]
|
|
[ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ]
|
|
[ utoa_append::digit#2 utoa_append::digit#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_cursor_text to live range equivalence class [ conio_cursor_text ]
|
|
Added variable conio_cursor_color to live range equivalence class [ conio_cursor_color ]
|
|
Added variable printf_uint::uvalue#0 to live range equivalence class [ printf_uint::uvalue#0 ]
|
|
Added variable main::$5 to live range equivalence class [ main::$5 ]
|
|
Added variable main::xd#0 to live range equivalence class [ main::xd#0 ]
|
|
Added variable main::$7 to live range equivalence class [ main::$7 ]
|
|
Added variable main::yd#0 to live range equivalence class [ main::yd#0 ]
|
|
Added variable main::$9 to live range equivalence class [ main::$9 ]
|
|
Added variable main::$10 to live range equivalence class [ main::$10 ]
|
|
Added variable main::dist_sq#0 to live range equivalence class [ main::dist_sq#0 ]
|
|
Added variable mul8u::b#0 to live range equivalence class [ mul8u::b#0 ]
|
|
Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ]
|
|
Added variable mul8s::$6 to live range equivalence class [ mul8s::$6 ]
|
|
Added variable mul8s::$11 to live range equivalence class [ mul8s::$11 ]
|
|
Added variable mul8s::$9 to live range equivalence class [ mul8s::$9 ]
|
|
Added variable mul8s::$12 to live range equivalence class [ mul8s::$12 ]
|
|
Added variable mul8u::$1 to live range equivalence class [ mul8u::$1 ]
|
|
Added variable cputs::c#1 to live range equivalence class [ cputs::c#1 ]
|
|
Added variable cputln::ln_offset#0 to live range equivalence class [ cputln::ln_offset#0 ]
|
|
Added variable cputln::$1 to live range equivalence class [ cputln::$1 ]
|
|
Added variable cputln::$2 to live range equivalence class [ cputln::$2 ]
|
|
Added variable cscroll::$7 to live range equivalence class [ cscroll::$7 ]
|
|
Added variable cscroll::$8 to live range equivalence class [ cscroll::$8 ]
|
|
Added variable memset::end#0 to live range equivalence class [ memset::end#0 ]
|
|
Added variable memcpy::src_end#0 to live range equivalence class [ memcpy::src_end#0 ]
|
|
Added variable printf_number_buffer::buffer_sign#0 to live range equivalence class [ printf_number_buffer::buffer_sign#0 ]
|
|
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 printf_buffer to live range equivalence class [ printf_buffer ]
|
|
Complete equivalence classes
|
|
[ main::y#2 main::y#1 ]
|
|
[ main::count#11 main::count#10 main::count#12 main::count#1 ]
|
|
[ main::sc#8 main::sc#10 main::sc#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
[ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
[ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ]
|
|
[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
|
[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
|
|
[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
|
|
[ cputs::s#3 cputs::s#4 cputs::s#0 ]
|
|
[ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
[ memset::num#3 ]
|
|
[ memset::str#4 ]
|
|
[ memset::c#5 ]
|
|
[ memset::dst#2 memset::dst#4 memset::dst#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 ]
|
|
[ 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 ]
|
|
[ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ]
|
|
[ utoa_append::digit#2 utoa_append::digit#1 ]
|
|
[ conio_cursor_x ]
|
|
[ conio_cursor_y ]
|
|
[ conio_cursor_text ]
|
|
[ conio_cursor_color ]
|
|
[ printf_uint::uvalue#0 ]
|
|
[ main::$5 ]
|
|
[ main::xd#0 ]
|
|
[ main::$7 ]
|
|
[ main::yd#0 ]
|
|
[ main::$9 ]
|
|
[ main::$10 ]
|
|
[ main::dist_sq#0 ]
|
|
[ mul8u::b#0 ]
|
|
[ mul8u::return#2 ]
|
|
[ mul8s::$6 ]
|
|
[ mul8s::$11 ]
|
|
[ mul8s::$9 ]
|
|
[ mul8s::$12 ]
|
|
[ mul8u::$1 ]
|
|
[ cputs::c#1 ]
|
|
[ cputln::ln_offset#0 ]
|
|
[ cputln::$1 ]
|
|
[ cputln::$2 ]
|
|
[ cscroll::$7 ]
|
|
[ cscroll::$8 ]
|
|
[ memset::end#0 ]
|
|
[ memcpy::src_end#0 ]
|
|
[ printf_number_buffer::buffer_sign#0 ]
|
|
[ utoa::$11 ]
|
|
[ utoa::buffer#3 ]
|
|
[ utoa::$10 ]
|
|
[ utoa::digit_value#0 ]
|
|
[ utoa_append::buffer#0 ]
|
|
[ utoa_append::sub#0 ]
|
|
[ utoa_append::return#0 ]
|
|
[ printf_buffer ]
|
|
Allocated zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Allocated zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ]
|
|
Allocated zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ]
|
|
Allocated zp[1]:7 [ main::x#2 main::x#1 ]
|
|
Allocated zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Allocated zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
Allocated zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ]
|
|
Allocated zp[1]:12 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
|
Allocated zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
|
|
Allocated zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
|
|
Allocated zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ]
|
|
Allocated zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
Allocated zp[2]:20 [ memset::num#3 ]
|
|
Allocated zp[2]:22 [ memset::str#4 ]
|
|
Allocated zp[1]:24 [ memset::c#5 ]
|
|
Allocated zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
|
|
Allocated zp[2]:27 [ memcpy::source#2 ]
|
|
Allocated zp[2]:29 [ memcpy::destination#2 ]
|
|
Allocated zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ]
|
|
Allocated zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ]
|
|
Allocated zp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
|
|
Allocated zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ]
|
|
Allocated zp[1]:38 [ utoa::started#2 utoa::started#4 ]
|
|
Allocated zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ]
|
|
Allocated zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ]
|
|
Allocated zp[1]:43 [ utoa_append::digit#2 utoa_append::digit#1 ]
|
|
Allocated zp[1]:44 [ conio_cursor_x ]
|
|
Allocated zp[1]:45 [ conio_cursor_y ]
|
|
Allocated zp[2]:46 [ conio_cursor_text ]
|
|
Allocated zp[2]:48 [ conio_cursor_color ]
|
|
Allocated zp[2]:50 [ printf_uint::uvalue#0 ]
|
|
Allocated zp[1]:52 [ main::$5 ]
|
|
Allocated zp[1]:53 [ main::xd#0 ]
|
|
Allocated zp[1]:54 [ main::$7 ]
|
|
Allocated zp[1]:55 [ main::yd#0 ]
|
|
Allocated zp[2]:56 [ main::$9 ]
|
|
Allocated zp[2]:58 [ main::$10 ]
|
|
Allocated zp[2]:60 [ main::dist_sq#0 ]
|
|
Allocated zp[1]:62 [ mul8u::b#0 ]
|
|
Allocated zp[2]:63 [ mul8u::return#2 ]
|
|
Allocated zp[1]:65 [ mul8s::$6 ]
|
|
Allocated zp[1]:66 [ mul8s::$11 ]
|
|
Allocated zp[1]:67 [ mul8s::$9 ]
|
|
Allocated zp[1]:68 [ mul8s::$12 ]
|
|
Allocated zp[1]:69 [ mul8u::$1 ]
|
|
Allocated zp[1]:70 [ cputs::c#1 ]
|
|
Allocated zp[2]:71 [ cputln::ln_offset#0 ]
|
|
Allocated zp[2]:73 [ cputln::$1 ]
|
|
Allocated zp[2]:75 [ cputln::$2 ]
|
|
Allocated zp[2]:77 [ cscroll::$7 ]
|
|
Allocated zp[2]:79 [ cscroll::$8 ]
|
|
Allocated zp[2]:81 [ memset::end#0 ]
|
|
Allocated zp[2]:83 [ memcpy::src_end#0 ]
|
|
Allocated zp[1]:85 [ printf_number_buffer::buffer_sign#0 ]
|
|
Allocated zp[1]:86 [ utoa::$11 ]
|
|
Allocated zp[2]:87 [ utoa::buffer#3 ]
|
|
Allocated zp[1]:89 [ utoa::$10 ]
|
|
Allocated zp[2]:90 [ utoa::digit_value#0 ]
|
|
Allocated zp[2]:92 [ utoa_append::buffer#0 ]
|
|
Allocated zp[2]:94 [ utoa_append::sub#0 ]
|
|
Allocated zp[2]:96 [ utoa_append::return#0 ]
|
|
Allocated mem[12] [ printf_buffer ]
|
|
|
|
INITIAL ASM
|
|
Target platform is c64basic / MOS6502X
|
|
// File Comments
|
|
// Plot a r=9 circle on the screen using chars - count how many chars are used
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(__bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The default text color
|
|
.const CONIO_TEXTCOLOR_DEFAULT = $e
|
|
.const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
|
|
// The screen width
|
|
// The screen height
|
|
// The screen bytes
|
|
// The text screen address
|
|
.label CONIO_SCREEN_TEXT = $400
|
|
// The color screen address
|
|
.label CONIO_SCREEN_COLORS = $d800
|
|
.label SCREEN = $400
|
|
.label conio_cursor_x = $2c
|
|
.label conio_cursor_y = $2d
|
|
.label conio_cursor_text = $2e
|
|
.label conio_cursor_color = $30
|
|
// @begin
|
|
__bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor x-position
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor y-position
|
|
lda #0
|
|
sta.z conio_cursor_y
|
|
// [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
// [5] phi from @1 to @2 [phi:@1->@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// @2
|
|
__b2:
|
|
// [6] call main
|
|
// [8] phi from @2 to main [phi:@2->main]
|
|
main_from___b2:
|
|
jsr main
|
|
// [7] phi from @2 to @end [phi:@2->@end]
|
|
__bend_from___b2:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
// main
|
|
main: {
|
|
.label __5 = $34
|
|
.label __7 = $36
|
|
.label __9 = $38
|
|
.label __10 = $3a
|
|
.label xd = $35
|
|
.label yd = $37
|
|
.label dist_sq = $3c
|
|
.label y = 2
|
|
.label sc = 5
|
|
.label x = 7
|
|
.label count = 3
|
|
// [9] call memset
|
|
// [114] phi from main to memset [phi:main->memset]
|
|
memset_from_main:
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:main->memset#0] -- vbuz1=vbuc1
|
|
lda #' '
|
|
sta.z memset.c
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) SCREEN [phi:main->memset#1] -- pvoz1=pvoc1
|
|
lda #<SCREEN
|
|
sta.z memset.str
|
|
lda #>SCREEN
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (word) $3e8 [phi:main->memset#2] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta.z memset.num
|
|
lda #>$3e8
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [10] phi from main to main::@1 [phi:main->main::@1]
|
|
__b1_from_main:
|
|
// [10] phi (byte*) main::sc#8 = (const nomodify byte*) SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z sc
|
|
lda #>SCREEN
|
|
sta.z sc+1
|
|
// [10] phi (word) main::count#11 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z count
|
|
lda #>0
|
|
sta.z count+1
|
|
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z y
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z y
|
|
cmp #$19
|
|
bcc __b3_from___b1
|
|
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [13] call gotoxy
|
|
// [175] phi from main::@2 to gotoxy [phi:main::@2->gotoxy]
|
|
gotoxy_from___b2:
|
|
jsr gotoxy
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 -- vwuz1=vwuz2
|
|
lda.z count
|
|
sta.z printf_uint.uvalue
|
|
lda.z count+1
|
|
sta.z printf_uint.uvalue+1
|
|
// [15] call printf_uint
|
|
// [133] phi from main::@8 to printf_uint [phi:main::@8->printf_uint]
|
|
printf_uint_from___b8:
|
|
jsr printf_uint
|
|
// [16] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
|
__b9_from___b8:
|
|
jmp __b9
|
|
// main::@9
|
|
__b9:
|
|
// [17] call cputs
|
|
// [68] phi from main::@9 to cputs [phi:main::@9->cputs]
|
|
cputs_from___b9:
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) main::s [phi:main::@9->cputs#0] -- pbuz1=pbuc1
|
|
lda #<s
|
|
sta.z cputs.s
|
|
lda #>s
|
|
sta.z cputs.s+1
|
|
jsr cputs
|
|
jmp __breturn
|
|
// main::@return
|
|
__breturn:
|
|
// [18] return
|
|
rts
|
|
// [19] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b3_from___b1:
|
|
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z x
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z x
|
|
cmp #$28
|
|
bcc __b4
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
|
|
inc.z y
|
|
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
|
|
__b1_from___b5:
|
|
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
|
|
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
|
|
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
|
|
jmp __b1
|
|
// main::@4
|
|
__b4:
|
|
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsz1=vbsz2_rol_1
|
|
lda.z x
|
|
asl
|
|
sta.z __5
|
|
// [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsz1=vbsz2_minus_vbsc1
|
|
lax.z __5
|
|
axs #$27
|
|
stx.z xd
|
|
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsz1=vbsz2_rol_1
|
|
lda.z y
|
|
asl
|
|
sta.z __7
|
|
// [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsz2_minus_vbsc1
|
|
lax.z __7
|
|
axs #$18
|
|
stx.z yd
|
|
// [26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0 -- vbsz1=vbsz2
|
|
lda.z xd
|
|
sta.z mul8s.a
|
|
// [27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0 -- vbsz1=vbsz2
|
|
lda.z xd
|
|
sta.z mul8s.b
|
|
// [28] call mul8s
|
|
// [41] phi from main::@4 to mul8s [phi:main::@4->mul8s]
|
|
mul8s_from___b4:
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#0 [phi:main::@4->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#0 [phi:main::@4->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
jmp __b10
|
|
// main::@10
|
|
__b10:
|
|
// [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 -- vwsz1=vwsz2
|
|
lda.z mul8s.m
|
|
sta.z __9
|
|
lda.z mul8s.m+1
|
|
sta.z __9+1
|
|
// [30] (signed byte) mul8s::a#1 ← (signed byte) main::yd#0 -- vbsz1=vbsz2
|
|
lda.z yd
|
|
sta.z mul8s.a
|
|
// [31] (signed byte) mul8s::b#1 ← (signed byte) main::yd#0 -- vbsz1=vbsz2
|
|
lda.z yd
|
|
sta.z mul8s.b
|
|
// [32] call mul8s
|
|
// [41] phi from main::@10 to mul8s [phi:main::@10->mul8s]
|
|
mul8s_from___b10:
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#1 [phi:main::@10->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#1 [phi:main::@10->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
jmp __b11
|
|
// main::@11
|
|
__b11:
|
|
// [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4 -- vwsz1=vwsz2
|
|
lda.z mul8s.m
|
|
sta.z __10
|
|
lda.z mul8s.m+1
|
|
sta.z __10+1
|
|
// [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 -- vwsz1=vwsz2_plus_vwsz3
|
|
lda.z __9
|
|
clc
|
|
adc.z __10
|
|
sta.z dist_sq
|
|
lda.z __9+1
|
|
adc.z __10+1
|
|
sta.z dist_sq+1
|
|
// [35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6 -- vwsz1_ge_vwsc1_then_la1
|
|
lda.z dist_sq
|
|
cmp #<2*9*2*9
|
|
lda.z dist_sq+1
|
|
sbc #>2*9*2*9
|
|
bvc !+
|
|
eor #$80
|
|
!:
|
|
bpl __b6_from___b11
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [36] *((byte*) main::sc#10) ← (byte) '*' -- _deref_pbuz1=vbuc1
|
|
lda #'*'
|
|
ldy #0
|
|
sta (sc),y
|
|
// [37] (word) main::count#1 ← ++ (word) main::count#10 -- vwuz1=_inc_vwuz1
|
|
inc.z count
|
|
bne !+
|
|
inc.z count+1
|
|
!:
|
|
// [38] phi from main::@11 main::@7 to main::@6 [phi:main::@11/main::@7->main::@6]
|
|
__b6_from___b11:
|
|
__b6_from___b7:
|
|
// [38] phi (word) main::count#12 = (word) main::count#10 [phi:main::@11/main::@7->main::@6#0] -- register_copy
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10 -- pbuz1=_inc_pbuz1
|
|
inc.z sc
|
|
bne !+
|
|
inc.z sc+1
|
|
!:
|
|
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1
|
|
inc.z x
|
|
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
|
|
__b3_from___b6:
|
|
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
|
|
jmp __b3
|
|
s: .text " chars"
|
|
.byte 0
|
|
}
|
|
// mul8s
|
|
// Multiply of two signed chars to a signed int
|
|
// Fixes offsets introduced by using unsigned multiplication
|
|
// mul8s(signed byte zp(8) a, signed byte zp(9) b)
|
|
mul8s: {
|
|
.label __6 = $41
|
|
.label __9 = $43
|
|
.label __11 = $42
|
|
.label __12 = $44
|
|
.label m = $a
|
|
.label a = 8
|
|
.label b = 9
|
|
// [42] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#2 -- vbuz1=vbuz2
|
|
lda.z a
|
|
sta.z mul8u.a
|
|
// [43] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#2 -- vbuz1=vbuz2
|
|
lda.z b
|
|
sta.z mul8u.b
|
|
// [44] call mul8u
|
|
jsr mul8u
|
|
// [45] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2
|
|
lda.z mul8u.res
|
|
sta.z mul8u.return
|
|
lda.z mul8u.res+1
|
|
sta.z mul8u.return+1
|
|
jmp __b5
|
|
// mul8s::@5
|
|
__b5:
|
|
// [46] (word) mul8s::m#0 ← (word) mul8u::return#2 -- vwuz1=vwuz2
|
|
lda.z mul8u.return
|
|
sta.z m
|
|
lda.z mul8u.return+1
|
|
sta.z m+1
|
|
// [47] if((signed byte) mul8s::a#2>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1
|
|
lda.z a
|
|
cmp #0
|
|
bpl __b1_from___b5
|
|
jmp __b3
|
|
// mul8s::@3
|
|
__b3:
|
|
// [48] (byte~) mul8s::$6 ← > (word) mul8s::m#0 -- vbuz1=_hi_vwuz2
|
|
lda.z m+1
|
|
sta.z __6
|
|
// [49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2 -- vbuz1=vbuz2_minus_vbuz3
|
|
lda.z __6
|
|
sec
|
|
sbc.z b
|
|
sta.z __11
|
|
// [50] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$11 -- vwuz1=vwuz1_sethi_vbuz2
|
|
lda.z __11
|
|
sta.z m+1
|
|
// [51] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1]
|
|
__b1_from___b3:
|
|
__b1_from___b5:
|
|
// [51] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy
|
|
jmp __b1
|
|
// mul8s::@1
|
|
__b1:
|
|
// [52] if((signed byte) mul8s::b#2>=(signed byte) 0) goto mul8s::@2 -- vbsz1_ge_0_then_la1
|
|
lda.z b
|
|
cmp #0
|
|
bpl __b2_from___b1
|
|
jmp __b4
|
|
// mul8s::@4
|
|
__b4:
|
|
// [53] (byte~) mul8s::$9 ← > (word) mul8s::m#5 -- vbuz1=_hi_vwuz2
|
|
lda.z m+1
|
|
sta.z __9
|
|
// [54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2 -- vbuz1=vbuz2_minus_vbuz3
|
|
lda.z __9
|
|
sec
|
|
sbc.z a
|
|
sta.z __12
|
|
// [55] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$12 -- vwuz1=vwuz1_sethi_vbuz2
|
|
lda.z __12
|
|
sta.z m+1
|
|
// [56] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2]
|
|
__b2_from___b1:
|
|
__b2_from___b4:
|
|
// [56] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy
|
|
jmp __b2
|
|
// mul8s::@2
|
|
__b2:
|
|
jmp __breturn
|
|
// mul8s::@return
|
|
__breturn:
|
|
// [57] return
|
|
rts
|
|
}
|
|
// mul8u
|
|
// Perform binary multiplication of two unsigned 8-bit chars into a 16-bit unsigned int
|
|
// mul8u(byte zp($c) a, byte zp($3e) b)
|
|
mul8u: {
|
|
.label __1 = $45
|
|
.label mb = $f
|
|
.label a = $c
|
|
.label res = $d
|
|
.label b = $3e
|
|
.label return = $3f
|
|
// [58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuz2
|
|
lda.z b
|
|
sta.z mb
|
|
lda #0
|
|
sta.z mb+1
|
|
// [59] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
|
|
__b1_from_mul8u:
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z res
|
|
lda #>0
|
|
sta.z res+1
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy
|
|
jmp __b1
|
|
// mul8u::@1
|
|
__b1:
|
|
// [60] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1
|
|
lda.z a
|
|
cmp #0
|
|
bne __b2
|
|
jmp __breturn
|
|
// mul8u::@return
|
|
__breturn:
|
|
// [61] return
|
|
rts
|
|
// mul8u::@2
|
|
__b2:
|
|
// [62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1
|
|
lda #1
|
|
and.z a
|
|
sta.z __1
|
|
// [63] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1
|
|
lda.z __1
|
|
cmp #0
|
|
beq __b3_from___b2
|
|
jmp __b4
|
|
// mul8u::@4
|
|
__b4:
|
|
// [64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
|
|
lda.z res
|
|
clc
|
|
adc.z mb
|
|
sta.z res
|
|
lda.z res+1
|
|
adc.z mb+1
|
|
sta.z res+1
|
|
// [65] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
|
|
__b3_from___b2:
|
|
__b3_from___b4:
|
|
// [65] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
|
|
jmp __b3
|
|
// mul8u::@3
|
|
__b3:
|
|
// [66] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuz1=vbuz1_ror_1
|
|
lsr.z a
|
|
// [67] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
|
|
asl.z mb
|
|
rol.z mb+1
|
|
// [59] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
|
|
__b1_from___b3:
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// cputs
|
|
// Output a NUL-terminated string at the current cursor position
|
|
// cputs(byte* zp($11) s)
|
|
cputs: {
|
|
.label c = $46
|
|
.label s = $11
|
|
// [69] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1]
|
|
__b1_from_cputs:
|
|
__b1_from___b2:
|
|
// [69] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy
|
|
jmp __b1
|
|
// cputs::@1
|
|
__b1:
|
|
// [70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (s),y
|
|
sta.z c
|
|
// [71] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1
|
|
inc.z s
|
|
bne !+
|
|
inc.z s+1
|
|
!:
|
|
// [72] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z c
|
|
bne __b2
|
|
jmp __breturn
|
|
// cputs::@return
|
|
__breturn:
|
|
// [73] return
|
|
rts
|
|
// cputs::@2
|
|
__b2:
|
|
// [74] (byte) cputc::c#0 ← (byte) cputs::c#1 -- vbuz1=vbuz2
|
|
lda.z c
|
|
sta.z cputc.c
|
|
// [75] call cputc
|
|
// [76] phi from cputs::@2 to cputc [phi:cputs::@2->cputc]
|
|
cputc_from___b2:
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy
|
|
jsr cputc
|
|
jmp __b1_from___b2
|
|
}
|
|
// cputc
|
|
// Output one character at the current cursor position
|
|
// Moves the cursor forward. Scrolls the entire screen if needed
|
|
// cputc(byte zp($13) c)
|
|
cputc: {
|
|
.label c = $13
|
|
// [77] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1
|
|
lda #'\n'
|
|
cmp.z c
|
|
beq __b1_from_cputc
|
|
jmp __b2
|
|
// cputc::@2
|
|
__b2:
|
|
// [78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3 -- _deref_pbuz1=vbuz2
|
|
lda.z c
|
|
ldy #0
|
|
sta (conio_cursor_text),y
|
|
// [79] (byte*) conio_cursor_text ← ++ (byte*) conio_cursor_text -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_text
|
|
bne !+
|
|
inc.z conio_cursor_text+1
|
|
!:
|
|
// [80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1
|
|
lda #CONIO_TEXTCOLOR_DEFAULT
|
|
ldy #0
|
|
sta (conio_cursor_color),y
|
|
// [81] (byte*) conio_cursor_color ← ++ (byte*) conio_cursor_color -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_color
|
|
bne !+
|
|
inc.z conio_cursor_color+1
|
|
!:
|
|
// [82] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_x
|
|
// [83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$28
|
|
cmp.z conio_cursor_x
|
|
bne __breturn
|
|
jmp __b3
|
|
// cputc::@3
|
|
__b3:
|
|
// [84] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [85] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// [86] call cscroll
|
|
jsr cscroll
|
|
jmp __breturn
|
|
// cputc::@return
|
|
__breturn:
|
|
// [87] return
|
|
rts
|
|
// [88] phi from cputc to cputc::@1 [phi:cputc->cputc::@1]
|
|
__b1_from_cputc:
|
|
jmp __b1
|
|
// cputc::@1
|
|
__b1:
|
|
// [89] call cputln
|
|
jsr cputln
|
|
jmp __breturn
|
|
}
|
|
// cputln
|
|
// Print a newline
|
|
cputln: {
|
|
.label __1 = $49
|
|
.label __2 = $4b
|
|
.label ln_offset = $47
|
|
// [90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x -- vwuz1=vbuc1_minus_vbuz2
|
|
sec
|
|
lda #$28
|
|
sbc.z conio_cursor_x
|
|
sta.z ln_offset
|
|
lda #0
|
|
sbc #0
|
|
sta.z ln_offset+1
|
|
// [91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0 -- pbuz1=pbuz2_plus_vwuz3
|
|
lda.z conio_cursor_text
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __1
|
|
lda.z conio_cursor_text+1
|
|
adc.z ln_offset+1
|
|
sta.z __1+1
|
|
// [92] (byte*) conio_cursor_text ← (byte*~) cputln::$1 -- pbuz1=pbuz2
|
|
lda.z __1
|
|
sta.z conio_cursor_text
|
|
lda.z __1+1
|
|
sta.z conio_cursor_text+1
|
|
// [93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0 -- pbuz1=pbuz2_plus_vwuz3
|
|
lda.z conio_cursor_color
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __2
|
|
lda.z conio_cursor_color+1
|
|
adc.z ln_offset+1
|
|
sta.z __2+1
|
|
// [94] (byte*) conio_cursor_color ← (byte*~) cputln::$2 -- pbuz1=pbuz2
|
|
lda.z __2
|
|
sta.z conio_cursor_color
|
|
lda.z __2+1
|
|
sta.z conio_cursor_color+1
|
|
// [95] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [96] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// [97] call cscroll
|
|
jsr cscroll
|
|
jmp __breturn
|
|
// cputln::@return
|
|
__breturn:
|
|
// [98] return
|
|
rts
|
|
}
|
|
// cscroll
|
|
// Scroll the entire screen if the cursor is beyond the last line
|
|
cscroll: {
|
|
.label __7 = $4d
|
|
.label __8 = $4f
|
|
// [99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$19
|
|
cmp.z conio_cursor_y
|
|
bne __breturn
|
|
// [100] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1]
|
|
__b1_from_cscroll:
|
|
jmp __b1
|
|
// cscroll::@1
|
|
__b1:
|
|
// [101] call memcpy
|
|
// [123] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy]
|
|
memcpy_from___b1:
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [102] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// cscroll::@2
|
|
__b2:
|
|
// [103] call memcpy
|
|
// [123] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy]
|
|
memcpy_from___b2:
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [104] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3]
|
|
__b3_from___b2:
|
|
jmp __b3
|
|
// cscroll::@3
|
|
__b3:
|
|
// [105] call memset
|
|
// [114] phi from cscroll::@3 to memset [phi:cscroll::@3->memset]
|
|
memset_from___b3:
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1
|
|
lda #' '
|
|
sta.z memset.c
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@3->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [106] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4]
|
|
__b4_from___b3:
|
|
jmp __b4
|
|
// cscroll::@4
|
|
__b4:
|
|
// [107] call memset
|
|
// [114] phi from cscroll::@4 to memset [phi:cscroll::@4->memset]
|
|
memset_from___b4:
|
|
// [114] phi (byte) memset::c#5 = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [phi:cscroll::@4->memset#0] -- vbuz1=vbuc1
|
|
lda #CONIO_TEXTCOLOR_DEFAULT
|
|
sta.z memset.c
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@4->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
jmp __b5
|
|
// cscroll::@5
|
|
__b5:
|
|
// [108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28 -- pbuz1=pbuz2_minus_vwuc1
|
|
lda.z conio_cursor_text
|
|
sec
|
|
sbc #<$28
|
|
sta.z __7
|
|
lda.z conio_cursor_text+1
|
|
sbc #>$28
|
|
sta.z __7+1
|
|
// [109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7 -- pbuz1=pbuz2
|
|
lda.z __7
|
|
sta.z conio_cursor_text
|
|
lda.z __7+1
|
|
sta.z conio_cursor_text+1
|
|
// [110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28 -- pbuz1=pbuz2_minus_vwuc1
|
|
lda.z conio_cursor_color
|
|
sec
|
|
sbc #<$28
|
|
sta.z __8
|
|
lda.z conio_cursor_color+1
|
|
sbc #>$28
|
|
sta.z __8+1
|
|
// [111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8 -- pbuz1=pbuz2
|
|
lda.z __8
|
|
sta.z conio_cursor_color
|
|
lda.z __8+1
|
|
sta.z conio_cursor_color+1
|
|
// [112] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1
|
|
dec.z conio_cursor_y
|
|
jmp __breturn
|
|
// cscroll::@return
|
|
__breturn:
|
|
// [113] return
|
|
rts
|
|
}
|
|
// 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($16) str, byte zp($18) c, word zp($14) num)
|
|
memset: {
|
|
.label end = $51
|
|
.label dst = $19
|
|
.label num = $14
|
|
.label str = $16
|
|
.label c = $18
|
|
// [115] if((word) memset::num#3<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1
|
|
lda.z num
|
|
bne !+
|
|
lda.z num+1
|
|
beq __breturn
|
|
!:
|
|
jmp __b1
|
|
// memset::@1
|
|
__b1:
|
|
// [116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3 -- pbuz1=pbuz2_plus_vwuz3
|
|
lda.z str
|
|
clc
|
|
adc.z num
|
|
sta.z end
|
|
lda.z str+1
|
|
adc.z num+1
|
|
sta.z end+1
|
|
// [117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4 -- pbuz1=pbuz2
|
|
lda.z str
|
|
sta.z dst
|
|
lda.z str+1
|
|
sta.z dst+1
|
|
// [118] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
|
|
__b2_from___b1:
|
|
__b2_from___b3:
|
|
// [118] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy
|
|
jmp __b2
|
|
// memset::@2
|
|
__b2:
|
|
// [119] if((byte*) memset::dst#2!=(byte*) 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:
|
|
// [120] return
|
|
rts
|
|
// memset::@3
|
|
__b3:
|
|
// [121] *((byte*) memset::dst#2) ← (byte) memset::c#5 -- _deref_pbuz1=vbuz2
|
|
lda.z c
|
|
ldy #0
|
|
sta (dst),y
|
|
// [122] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
jmp __b2_from___b3
|
|
}
|
|
// 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($1d) destination, void* zp($1b) source)
|
|
memcpy: {
|
|
.label src_end = $53
|
|
.label dst = $21
|
|
.label src = $1f
|
|
.label source = $1b
|
|
.label destination = $1d
|
|
// [124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $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
|
|
// [125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 -- pbuz1=pbuz2
|
|
lda.z source
|
|
sta.z src
|
|
lda.z source+1
|
|
sta.z src+1
|
|
// [126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 -- pbuz1=pbuz2
|
|
lda.z destination
|
|
sta.z dst
|
|
lda.z destination+1
|
|
sta.z dst+1
|
|
// [127] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1]
|
|
__b1_from_memcpy:
|
|
__b1_from___b2:
|
|
// [127] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [127] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy
|
|
jmp __b1
|
|
// memcpy::@1
|
|
__b1:
|
|
// [128] if((byte*) memcpy::src#2!=(byte*) 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:
|
|
// [129] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// [130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
ldy #0
|
|
sta (dst),y
|
|
// [131] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [132] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
jmp __b1_from___b2
|
|
}
|
|
// printf_uint
|
|
// Print an unsigned int using a specific format
|
|
// printf_uint(word zp($32) uvalue)
|
|
printf_uint: {
|
|
.label uvalue = $32
|
|
jmp __b1
|
|
// printf_uint::@1
|
|
__b1:
|
|
// [134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Handle any sign
|
|
lda #0
|
|
sta printf_buffer
|
|
// [135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0 -- vwuz1=vwuz2
|
|
lda.z uvalue
|
|
sta.z utoa.value
|
|
lda.z uvalue+1
|
|
sta.z utoa.value+1
|
|
// [136] call utoa
|
|
// Format number into buffer
|
|
// [147] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa]
|
|
utoa_from___b1:
|
|
jsr utoa
|
|
jmp __b2
|
|
// printf_uint::@2
|
|
__b2:
|
|
// [137] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1
|
|
lda printf_buffer
|
|
sta.z printf_number_buffer.buffer_sign
|
|
// [138] call printf_number_buffer
|
|
// Print using format
|
|
// [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer]
|
|
printf_number_buffer_from___b2:
|
|
jsr printf_number_buffer
|
|
jmp __breturn
|
|
// printf_uint::@return
|
|
__breturn:
|
|
// [139] return
|
|
rts
|
|
}
|
|
// 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 zp($55) buffer_sign)
|
|
printf_number_buffer: {
|
|
.label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
.label buffer_sign = $55
|
|
jmp __b1
|
|
// printf_number_buffer::@1
|
|
__b1:
|
|
// [141] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z buffer_sign
|
|
beq __b2_from___b1
|
|
jmp __b3
|
|
// printf_number_buffer::@3
|
|
__b3:
|
|
// [142] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0 -- vbuz1=vbuz2
|
|
lda.z buffer_sign
|
|
sta.z cputc.c
|
|
// [143] call cputc
|
|
// [76] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc]
|
|
cputc_from___b3:
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy
|
|
jsr cputc
|
|
// [144] 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:
|
|
// [145] call cputs
|
|
// [68] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs]
|
|
cputs_from___b2:
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) 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:
|
|
// [146] return
|
|
rts
|
|
}
|
|
// 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($24) value, byte* zp($57) buffer)
|
|
utoa: {
|
|
.const max_digits = 5
|
|
.label __10 = $59
|
|
.label __11 = $56
|
|
.label digit_value = $5a
|
|
.label buffer = $57
|
|
.label digit = $23
|
|
.label value = $24
|
|
.label buffer_1 = $27
|
|
.label started = $26
|
|
// [148] phi from utoa to utoa::@1 [phi:utoa->utoa::@1]
|
|
__b1_from_utoa:
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1
|
|
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
sta.z buffer_1
|
|
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
sta.z buffer_1+1
|
|
// [148] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z started
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z digit
|
|
jmp __b1
|
|
// utoa::@1
|
|
__b1:
|
|
// [149] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z digit
|
|
cmp #max_digits-1
|
|
bcc __b2
|
|
jmp __b3
|
|
// utoa::@3
|
|
__b3:
|
|
// [150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuz1=_byte_vwuz2
|
|
lda.z value
|
|
sta.z __11
|
|
// [151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
|
|
ldy.z __11
|
|
lda DIGITS,y
|
|
ldy #0
|
|
sta (buffer_1),y
|
|
// [152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2
|
|
lda.z buffer_1
|
|
clc
|
|
adc #1
|
|
sta.z buffer
|
|
lda.z buffer_1+1
|
|
adc #0
|
|
sta.z buffer+1
|
|
// [153] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
ldy #0
|
|
sta (buffer),y
|
|
jmp __breturn
|
|
// utoa::@return
|
|
__breturn:
|
|
// [154] return
|
|
rts
|
|
// utoa::@2
|
|
__b2:
|
|
// [155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda.z digit
|
|
asl
|
|
sta.z __10
|
|
// [156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuz2
|
|
ldy.z __10
|
|
lda RADIX_DECIMAL_VALUES,y
|
|
sta.z digit_value
|
|
lda RADIX_DECIMAL_VALUES+1,y
|
|
sta.z digit_value+1
|
|
// [157] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z started
|
|
bne __b5
|
|
jmp __b7
|
|
// utoa::@7
|
|
__b7:
|
|
// [158] if((word) utoa::value#2>=(word) 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
|
|
// [159] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4]
|
|
__b4_from___b7:
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy
|
|
jmp __b4
|
|
// utoa::@4
|
|
__b4:
|
|
// [160] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1
|
|
inc.z digit
|
|
// [148] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1]
|
|
__b1_from___b4:
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy
|
|
// [148] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy
|
|
jmp __b1
|
|
// utoa::@5
|
|
__b5:
|
|
// [161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 -- pbuz1=pbuz2
|
|
lda.z buffer_1
|
|
sta.z utoa_append.buffer
|
|
lda.z buffer_1+1
|
|
sta.z utoa_append.buffer+1
|
|
// [162] (word) utoa_append::value#0 ← (word) utoa::value#2 -- vwuz1=vwuz2
|
|
lda.z value
|
|
sta.z utoa_append.value
|
|
lda.z value+1
|
|
sta.z utoa_append.value+1
|
|
// [163] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 -- vwuz1=vwuz2
|
|
lda.z digit_value
|
|
sta.z utoa_append.sub
|
|
lda.z digit_value+1
|
|
sta.z utoa_append.sub+1
|
|
// [164] call utoa_append
|
|
// [168] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append]
|
|
utoa_append_from___b5:
|
|
jsr utoa_append
|
|
// [165] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2
|
|
lda.z utoa_append.value
|
|
sta.z utoa_append.return
|
|
lda.z utoa_append.value+1
|
|
sta.z utoa_append.return+1
|
|
jmp __b6
|
|
// utoa::@6
|
|
__b6:
|
|
// [166] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2
|
|
lda.z utoa_append.return
|
|
sta.z value
|
|
lda.z utoa_append.return+1
|
|
sta.z value+1
|
|
// [167] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1
|
|
inc.z buffer_1
|
|
bne !+
|
|
inc.z buffer_1+1
|
|
!:
|
|
// [159] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4]
|
|
__b4_from___b6:
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z started
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy
|
|
jmp __b4
|
|
}
|
|
// 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($5c) buffer, word zp($29) value, word zp($5e) sub)
|
|
utoa_append: {
|
|
.label buffer = $5c
|
|
.label value = $29
|
|
.label sub = $5e
|
|
.label return = $60
|
|
.label digit = $2b
|
|
// [169] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1]
|
|
__b1_from_utoa_append:
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z digit
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy
|
|
jmp __b1
|
|
// utoa_append::@1
|
|
__b1:
|
|
// [170] if((word) utoa_append::value#2>=(word) 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:
|
|
// [171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
|
|
ldy.z digit
|
|
lda DIGITS,y
|
|
ldy #0
|
|
sta (buffer),y
|
|
jmp __breturn
|
|
// utoa_append::@return
|
|
__breturn:
|
|
// [172] return
|
|
rts
|
|
// utoa_append::@2
|
|
__b2:
|
|
// [173] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1
|
|
inc.z digit
|
|
// [174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) 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
|
|
// [169] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1]
|
|
__b1_from___b2:
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// gotoxy
|
|
// Set the cursor to the specified position
|
|
gotoxy: {
|
|
.const x = 0
|
|
.const y = 0
|
|
jmp __b1
|
|
// gotoxy::@1
|
|
__b1:
|
|
// [176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2 -- vbuz1=vbuc1
|
|
lda #x
|
|
sta.z conio_cursor_x
|
|
// [177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2 -- vbuz1=vbuc1
|
|
lda #y
|
|
sta.z conio_cursor_y
|
|
// [178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// [179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
jmp __breturn
|
|
// gotoxy::@return
|
|
__breturn:
|
|
// [180] return
|
|
rts
|
|
}
|
|
// File 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
|
|
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a
|
|
Statement [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::x#2 main::x#1 ]
|
|
Statement [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:53 [ main::xd#0 ]
|
|
Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:55 [ main::yd#0 ]
|
|
Statement [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [36] *((byte*) main::sc#10) ← (byte) '*' [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::x#2 main::x#1 ]
|
|
Statement [45] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#2 mul8s::b#2 mul8u::return#2 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::return#2 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::return#2 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
Statement [46] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#2 mul8s::b#2 mul8s::m#0 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2 [ mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2 [ mul8s::m#5 mul8s::$12 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::m#5 mul8s::$12 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::m#5 mul8s::$12 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#1 mul8u::mb#0 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#1 mul8u::mb#0 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:12 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
|
Statement [62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] ( main:6::cputs:17 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] { } main:6::printf_uint:15::printf_number_buffer:138::cputs:145 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a reg byte y
|
|
Statement [78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y
|
|
Statement [80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y
|
|
Statement [83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [84] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0 [ conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [92] (byte*) conio_cursor_text ← (byte*~) cputln::$1 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0 [ conio_cursor_y conio_cursor_text cputln::$2 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text cputln::$2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text cputln::$2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text cputln::$2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [94] (byte*) conio_cursor_color ← (byte*~) cputln::$2 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [95] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28 [ conio_cursor_y conio_cursor_color cscroll::$7 ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28 [ conio_cursor_y conio_cursor_text cscroll::$8 ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [115] if((word) memset::num#3<=(byte) 0) goto memset::@return [ memset::num#3 memset::str#4 memset::c#5 ] ( main:6::memset:9 [ printf_buffer memset::num#3 memset::str#4 memset::c#5 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { 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]:24 [ memset::c#5 ]
|
|
Statement [116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3 [ memset::str#4 memset::c#5 memset::end#0 ] ( main:6::memset:9 [ printf_buffer memset::str#4 memset::c#5 memset::end#0 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#4 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [119] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#2 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [121] *((byte*) memset::dst#2) ← (byte) memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#2 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { 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]:24 [ memset::c#5 ]
|
|
Statement [124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [128] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y
|
|
Statement [134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6::printf_uint:15 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::value#1 ] ( main:6::printf_uint:15 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::value#1 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#11 utoa::$11 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#11 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a reg byte y
|
|
Statement [152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#3 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [153] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a reg byte y
|
|
Statement [155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:38 [ utoa::started#2 utoa::started#4 ]
|
|
Statement [156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [158] if((word) utoa::value#2>=(word) 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:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [162] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [163] (word) utoa_append::sub#0 ← (word) 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:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [165] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [166] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [170] if((word) utoa_append::value#2>=(word) 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:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_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 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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]:43 [ utoa_append::digit#2 utoa_append::digit#1 ]
|
|
Statement [171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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]:35 [ utoa::digit#2 utoa::digit#1 ]
|
|
Statement [174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_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 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2 [ conio_cursor_x ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a
|
|
Statement [177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2 [ conio_cursor_x conio_cursor_y ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a
|
|
Statement [178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ conio_cursor_x conio_cursor_y conio_cursor_text ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y conio_cursor_text ] { } ) always clobbers reg byte a
|
|
Statement [179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { } ) always clobbers reg byte a
|
|
Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a
|
|
Statement [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
|
|
Statement [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
|
|
Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a
|
|
Statement [36] *((byte*) main::sc#10) ← (byte) '*' [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [45] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#2 mul8s::b#2 mul8u::return#2 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::return#2 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::return#2 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [46] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#2 mul8s::b#2 mul8s::m#0 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2 [ mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8s::m#0 mul8s::$11 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2 [ mul8s::m#5 mul8s::$12 ] ( main:6::mul8s:28 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::m#5 mul8s::$12 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } main:6::mul8s:32 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::m#5 mul8s::$12 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
|
|
Statement [58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#1 mul8u::mb#0 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#1 mul8u::mb#0 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:6::mul8s:28::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } { mul8u::return#2 = mul8u::res#2 } } main:6::mul8s:32::mul8u:44 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 printf_buffer mul8s::a#2 mul8s::b#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a
|
|
Statement [70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] ( main:6::cputs:17 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] { } main:6::printf_uint:15::printf_number_buffer:138::cputs:145 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color cputs::s#3 cputs::c#1 ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a reg byte y
|
|
Statement [78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte y
|
|
Statement [80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y
|
|
Statement [83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [84] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0 [ conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_color cputln::ln_offset#0 cputln::$1 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [92] (byte*) conio_cursor_text ← (byte*~) cputln::$1 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color cputln::ln_offset#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0 [ conio_cursor_y conio_cursor_text cputln::$2 ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text cputln::$2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text cputln::$2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text cputln::$2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [94] (byte*) conio_cursor_color ← (byte*~) cputln::$2 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [95] (byte) conio_cursor_x ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28 [ conio_cursor_y conio_cursor_color cscroll::$7 ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_color cscroll::$7 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28 [ conio_cursor_y conio_cursor_text cscroll::$8 ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text cscroll::$8 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8 [ conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::cputs:17::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [115] if((word) memset::num#3<=(byte) 0) goto memset::@return [ memset::num#3 memset::str#4 memset::c#5 ] ( main:6::memset:9 [ printf_buffer memset::num#3 memset::str#4 memset::c#5 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::num#3 memset::str#4 memset::c#5 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3 [ memset::str#4 memset::c#5 memset::end#0 ] ( main:6::memset:9 [ printf_buffer memset::str#4 memset::c#5 memset::end#0 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::str#4 memset::c#5 memset::end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#4 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [119] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#2 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [121] *((byte*) memset::dst#2) ← (byte) memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:6::memset:9 [ printf_buffer memset::c#5 memset::end#0 memset::dst#2 ] { } main:6::cputs:17::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:105 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:105 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memset:107 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memset:107 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memset::c#5 memset::end#0 memset::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y
|
|
Statement [124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $28 [ memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::source#2 memcpy::destination#2 memcpy::src_end#0 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2 [ memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::destination#2 memcpy::src_end#0 memcpy::src#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [128] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a
|
|
Statement [130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:6::cputs:17::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:101 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:101 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cscroll:86::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cscroll:86::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } main:6::cputs:17::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputs:145::cputc:75::cputln:89::cscroll:97::memcpy:103 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:6::printf_uint:15::printf_number_buffer:138::cputc:143::cputln:89::cscroll:97::memcpy:103 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uint::uvalue#0 = main::count#11 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#0 } } ) always clobbers reg byte a reg byte y
|
|
Statement [134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6::printf_uint:15 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::value#1 ] ( main:6::printf_uint:15 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::value#1 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#11 utoa::$11 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#11 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a reg byte y
|
|
Statement [152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::buffer#3 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [153] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a reg byte y
|
|
Statement [155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [158] if((word) utoa::value#2>=(word) 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:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [162] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [163] (word) utoa_append::sub#0 ← (word) 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:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [165] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [166] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:6::printf_uint:15::utoa:136 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { { printf_uint::uvalue#0 = main::count#11 utoa::value#1 } } ) always clobbers reg byte a
|
|
Statement [170] if((word) utoa_append::value#2>=(word) 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:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_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 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:6::printf_uint:15::utoa:136::utoa_append:164 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_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 ] { { printf_uint::uvalue#0 = main::count#11 utoa::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 [176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2 [ conio_cursor_x ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x ] { } ) always clobbers reg byte a
|
|
Statement [177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2 [ conio_cursor_x conio_cursor_y ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y ] { } ) always clobbers reg byte a
|
|
Statement [178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ conio_cursor_x conio_cursor_y conio_cursor_text ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y conio_cursor_text ] { } ) always clobbers reg byte a
|
|
Statement [179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] ( main:6::gotoxy:13 [ main::count#11 printf_buffer conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color ] { } ) always clobbers reg byte a
|
|
Potential registers zp[1]:2 [ main::y#2 main::y#1 ] : zp[1]:2 , reg byte x ,
|
|
Potential registers zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] : zp[2]:3 ,
|
|
Potential registers zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] : zp[2]:5 ,
|
|
Potential registers zp[1]:7 [ main::x#2 main::x#1 ] : zp[1]:7 , reg byte x ,
|
|
Potential registers zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] : zp[1]:8 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] : zp[1]:9 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] : zp[2]:10 ,
|
|
Potential registers zp[1]:12 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:12 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:13 ,
|
|
Potential registers zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:15 ,
|
|
Potential registers zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] : zp[2]:17 ,
|
|
Potential registers zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:20 [ memset::num#3 ] : zp[2]:20 ,
|
|
Potential registers zp[2]:22 [ memset::str#4 ] : zp[2]:22 ,
|
|
Potential registers zp[1]:24 [ memset::c#5 ] : zp[1]:24 , reg byte x ,
|
|
Potential registers zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:25 ,
|
|
Potential registers zp[2]:27 [ memcpy::source#2 ] : zp[2]:27 ,
|
|
Potential registers zp[2]:29 [ memcpy::destination#2 ] : zp[2]:29 ,
|
|
Potential registers zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] : zp[2]:31 ,
|
|
Potential registers zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] : zp[2]:33 ,
|
|
Potential registers zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:35 , reg byte x ,
|
|
Potential registers zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] : zp[2]:36 ,
|
|
Potential registers zp[1]:38 [ utoa::started#2 utoa::started#4 ] : zp[1]:38 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:39 ,
|
|
Potential registers zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:41 ,
|
|
Potential registers zp[1]:43 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:43 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:44 [ conio_cursor_x ] : zp[1]:44 ,
|
|
Potential registers zp[1]:45 [ conio_cursor_y ] : zp[1]:45 ,
|
|
Potential registers zp[2]:46 [ conio_cursor_text ] : zp[2]:46 ,
|
|
Potential registers zp[2]:48 [ conio_cursor_color ] : zp[2]:48 ,
|
|
Potential registers zp[2]:50 [ printf_uint::uvalue#0 ] : zp[2]:50 ,
|
|
Potential registers zp[1]:52 [ main::$5 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:53 [ main::xd#0 ] : zp[1]:53 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:54 [ main::$7 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:55 [ main::yd#0 ] : zp[1]:55 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:56 [ main::$9 ] : zp[2]:56 ,
|
|
Potential registers zp[2]:58 [ main::$10 ] : zp[2]:58 ,
|
|
Potential registers zp[2]:60 [ main::dist_sq#0 ] : zp[2]:60 ,
|
|
Potential registers zp[1]:62 [ mul8u::b#0 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:63 [ mul8u::return#2 ] : zp[2]:63 ,
|
|
Potential registers zp[1]:65 [ mul8s::$6 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:66 [ mul8s::$11 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:67 [ mul8s::$9 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:68 [ mul8s::$12 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:69 [ mul8u::$1 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:70 [ cputs::c#1 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:71 [ cputln::ln_offset#0 ] : zp[2]:71 ,
|
|
Potential registers zp[2]:73 [ cputln::$1 ] : zp[2]:73 ,
|
|
Potential registers zp[2]:75 [ cputln::$2 ] : zp[2]:75 ,
|
|
Potential registers zp[2]:77 [ cscroll::$7 ] : zp[2]:77 ,
|
|
Potential registers zp[2]:79 [ cscroll::$8 ] : zp[2]:79 ,
|
|
Potential registers zp[2]:81 [ memset::end#0 ] : zp[2]:81 ,
|
|
Potential registers zp[2]:83 [ memcpy::src_end#0 ] : zp[2]:83 ,
|
|
Potential registers zp[1]:85 [ printf_number_buffer::buffer_sign#0 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:86 [ utoa::$11 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:87 [ utoa::buffer#3 ] : zp[2]:87 ,
|
|
Potential registers zp[1]:89 [ utoa::$10 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:90 [ utoa::digit_value#0 ] : zp[2]:90 ,
|
|
Potential registers zp[2]:92 [ utoa_append::buffer#0 ] : zp[2]:92 ,
|
|
Potential registers zp[2]:94 [ utoa_append::sub#0 ] : zp[2]:94 ,
|
|
Potential registers zp[2]:96 [ utoa_append::return#0 ] : zp[2]:96 ,
|
|
Potential registers mem[12] [ printf_buffer ] : mem[12] ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [memcpy] 301,250,000,004.25: zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 202,333,333,337.67: zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 12,625,000,000.25: zp[2]:83 [ memcpy::src_end#0 ] 0: zp[2]:27 [ memcpy::source#2 ] 0: zp[2]:29 [ memcpy::destination#2 ]
|
|
Uplift Scope [memset] 35,666,666,672.33: zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833,333,333.67: zp[2]:81 [ memset::end#0 ] 1,250,000,000.12: zp[1]:24 [ memset::c#5 ] 1,000,000,001: zp[2]:20 [ memset::num#3 ] 0: zp[2]:22 [ memset::str#4 ]
|
|
Uplift Scope [mul8u] 350,001,670.33: zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 243,071,433.14: zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 200,000,002: zp[1]:69 [ mul8u::$1 ] 166,720,002.5: zp[1]:12 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 20,002: zp[2]:63 [ mul8u::return#2 ] 10,001: zp[1]:62 [ mul8u::b#0 ]
|
|
Uplift Scope [cscroll] 200,000,002: zp[2]:77 [ cscroll::$7 ] 200,000,002: zp[2]:79 [ cscroll::$8 ]
|
|
Uplift Scope [cputln] 20,000,002: zp[2]:73 [ cputln::$1 ] 20,000,002: zp[2]:75 [ cputln::$2 ] 10,000,001: zp[2]:71 [ cputln::ln_offset#0 ]
|
|
Uplift Scope [utoa_append] 25,055,003.5: zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 20,050,002.5: zp[1]:43 [ utoa_append::digit#2 utoa_append::digit#1 ] 3,335,000.5: zp[2]:94 [ utoa_append::sub#0 ] 20,002: zp[2]:96 [ utoa_append::return#0 ] 13,750.25: zp[2]:92 [ utoa_append::buffer#0 ]
|
|
Uplift Scope [] 4,735,295.74: zp[1]:45 [ conio_cursor_y ] 3,484,376.72: zp[2]:48 [ conio_cursor_color ] 3,430,770.92: zp[2]:46 [ conio_cursor_text ] 489,798.14: zp[1]:44 [ conio_cursor_x ] 0: mem[12] [ printf_buffer ]
|
|
Uplift Scope [cputc] 1,252,506: zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
Uplift Scope [cputs] 215,003.5: zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] 100,001: zp[1]:70 [ cputs::c#1 ]
|
|
Uplift Scope [mul8s] 67,506.75: zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 20,002: zp[1]:65 [ mul8s::$6 ] 20,002: zp[1]:66 [ mul8s::$11 ] 20,002: zp[1]:67 [ mul8s::$9 ] 20,002: zp[1]:68 [ mul8s::$12 ] 5,095.18: zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] 2,925.31: zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Uplift Scope [utoa] 38,003.93: zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 31,411.36: zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,859.43: zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] 20,002: zp[1]:89 [ utoa::$10 ] 15,001.5: zp[1]:38 [ utoa::started#2 utoa::started#4 ] 6,000.6: zp[2]:90 [ utoa::digit_value#0 ] 2,002: zp[1]:86 [ utoa::$11 ] 2,002: zp[2]:87 [ utoa::buffer#3 ]
|
|
Uplift Scope [main] 3,234.31: zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] 2,152.15: zp[1]:7 [ main::x#2 main::x#1 ] 2,002: zp[1]:52 [ main::$5 ] 2,002: zp[1]:54 [ main::$7 ] 2,002: zp[2]:58 [ main::$10 ] 2,002: zp[2]:60 [ main::dist_sq#0 ] 1,262.25: zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] 750.75: zp[1]:53 [ main::xd#0 ] 500.5: zp[1]:55 [ main::yd#0 ] 400.4: zp[2]:56 [ main::$9 ] 215.17: zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Uplift Scope [printf_number_buffer] 701: zp[1]:85 [ printf_number_buffer::buffer_sign#0 ]
|
|
Uplift Scope [printf_uint] 37.33: zp[2]:50 [ printf_uint::uvalue#0 ]
|
|
Uplift Scope [gotoxy]
|
|
Uplift Scope [RADIX]
|
|
Uplift Scope [printf_format_number]
|
|
Uplift Scope [printf_buffer_number]
|
|
Uplift Scope [printf_format_string]
|
|
|
|
Uplifting [memcpy] best 118348 combination zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:83 [ memcpy::src_end#0 ] zp[2]:27 [ memcpy::source#2 ] zp[2]:29 [ memcpy::destination#2 ]
|
|
Uplifting [memset] best 118329 combination zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:81 [ memset::end#0 ] reg byte x [ memset::c#5 ] zp[2]:20 [ memset::num#3 ] zp[2]:22 [ memset::str#4 ]
|
|
Uplifting [mul8u] best 109320 combination zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ]
|
|
Uplifting [cscroll] best 109320 combination zp[2]:77 [ cscroll::$7 ] zp[2]:79 [ cscroll::$8 ]
|
|
Uplifting [cputln] best 109320 combination zp[2]:73 [ cputln::$1 ] zp[2]:75 [ cputln::$2 ] zp[2]:71 [ cputln::ln_offset#0 ]
|
|
Uplifting [utoa_append] best 108717 combination zp[2]:41 [ 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]:94 [ utoa_append::sub#0 ] zp[2]:96 [ utoa_append::return#0 ] zp[2]:92 [ utoa_append::buffer#0 ]
|
|
Uplifting [] best 108717 combination zp[1]:45 [ conio_cursor_y ] zp[2]:48 [ conio_cursor_color ] zp[2]:46 [ conio_cursor_text ] zp[1]:44 [ conio_cursor_x ] mem[12] [ printf_buffer ]
|
|
Uplifting [cputc] best 108678 combination reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
Uplifting [cputs] best 108588 combination zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] reg byte a [ cputs::c#1 ]
|
|
Uplifting [mul8s] best 108564 combination zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte a [ mul8s::$6 ] reg byte a [ mul8s::$11 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$12 ] zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Limited combination testing to 100 combinations of 2304 possible.
|
|
Uplifting [utoa] best 108430 combination zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:90 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:87 [ utoa::buffer#3 ]
|
|
Uplifting [main] best 106730 combination zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] zp[1]:7 [ main::x#2 main::x#1 ] reg byte a [ main::$5 ] reg byte a [ main::$7 ] zp[2]:58 [ main::$10 ] zp[2]:60 [ main::dist_sq#0 ] zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] reg byte x [ main::xd#0 ] zp[1]:55 [ main::yd#0 ] zp[2]:56 [ main::$9 ] zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Limited combination testing to 100 combinations of 576 possible.
|
|
Uplifting [printf_number_buffer] best 106721 combination reg byte a [ printf_number_buffer::buffer_sign#0 ]
|
|
Uplifting [printf_uint] best 106721 combination zp[2]:50 [ printf_uint::uvalue#0 ]
|
|
Uplifting [gotoxy] best 106721 combination
|
|
Uplifting [RADIX] best 106721 combination
|
|
Uplifting [printf_format_number] best 106721 combination
|
|
Uplifting [printf_buffer_number] best 106721 combination
|
|
Uplifting [printf_format_string] best 106721 combination
|
|
Attempting to uplift remaining variables inzp[1]:45 [ conio_cursor_y ]
|
|
Uplifting [] best 106721 combination zp[1]:45 [ conio_cursor_y ]
|
|
Attempting to uplift remaining variables inzp[1]:44 [ conio_cursor_x ]
|
|
Uplifting [] best 106721 combination zp[1]:44 [ conio_cursor_x ]
|
|
Attempting to uplift remaining variables inzp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
|
|
Uplifting [utoa] best 106721 combination zp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
Uplifting [mul8s] best 106520 combination reg byte y [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Uplifting [mul8s] best 106520 combination zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:7 [ main::x#2 main::x#1 ]
|
|
Uplifting [main] best 106520 combination zp[1]:7 [ main::x#2 main::x#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:55 [ main::yd#0 ]
|
|
Uplifting [main] best 106520 combination zp[1]:55 [ main::yd#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ]
|
|
Uplifting [main] best 106520 combination zp[1]:2 [ main::y#2 main::y#1 ]
|
|
Coalescing zero page register [ zp[2]:46 [ conio_cursor_text ] ] with [ zp[2]:73 [ cputln::$1 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:46 [ conio_cursor_text cputln::$1 ] ] with [ zp[2]:77 [ cscroll::$7 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:48 [ conio_cursor_color ] ] with [ zp[2]:75 [ cputln::$2 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:48 [ conio_cursor_color cputln::$2 ] ] with [ zp[2]:79 [ cscroll::$8 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] ] with [ zp[2]:50 [ printf_uint::uvalue#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] ] with [ zp[2]:58 [ main::$10 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 main::$10 ] ] with [ zp[2]:63 [ mul8u::return#2 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:20 [ memset::num#3 ] ] with [ zp[2]:81 [ memset::end#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:22 [ memset::str#4 ] ] with [ zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:27 [ memcpy::source#2 ] ] with [ zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:29 [ memcpy::destination#2 ] ] with [ zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] ] with [ zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:96 [ utoa_append::return#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:87 [ utoa::buffer#3 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:92 [ utoa_append::buffer#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:56 [ main::$9 ] ] with [ zp[2]:60 [ main::dist_sq#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:90 [ utoa::digit_value#0 ] ] with [ zp[2]:94 [ utoa_append::sub#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 printf_uint::uvalue#0 ] ] with [ zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 main::$10 mul8u::return#2 ] ] with [ zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] ] with [ zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ]
|
|
Coalescing zero page register [ zp[2]:27 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] with [ zp[2]:20 [ memset::num#3 memset::end#0 ] ]
|
|
Coalescing zero page register [ zp[2]:29 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ] with [ zp[2]:22 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] ]
|
|
Coalescing zero page register [ zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] ] with [ zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] ]
|
|
Coalescing zero page register [ zp[1]:44 [ conio_cursor_x ] ] with [ zp[1]:2 [ main::y#2 main::y#1 ] ]
|
|
Coalescing zero page register [ zp[1]:45 [ conio_cursor_y ] ] with [ zp[1]:7 [ main::x#2 main::x#1 ] ]
|
|
Coalescing zero page register [ zp[2]:56 [ main::$9 main::dist_sq#0 ] ] with [ zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ]
|
|
Coalescing zero page register [ zp[2]:90 [ utoa::digit_value#0 utoa_append::sub#0 ] ] with [ zp[2]:71 [ cputln::ln_offset#0 ] ]
|
|
Coalescing zero page register [ zp[2]:56 [ main::$9 main::dist_sq#0 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp[2]:27 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#3 memset::end#0 ] ]
|
|
Coalescing zero page register [ zp[2]:90 [ utoa::digit_value#0 utoa_append::sub#0 cputln::ln_offset#0 ] ] with [ zp[2]:29 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] ]
|
|
Allocated (was zp[2]:3) zp[2]:2 [ main::count#11 main::count#10 main::count#12 main::count#1 printf_uint::uvalue#0 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ]
|
|
Allocated (was zp[2]:5) zp[2]:4 [ main::sc#8 main::sc#10 main::sc#1 ]
|
|
Allocated (was zp[2]:10) zp[2]:6 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 main::$10 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
|
|
Allocated (was zp[2]:17) zp[2]:8 [ cputs::s#3 cputs::s#4 cputs::s#0 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
|
|
Allocated (was zp[1]:35) zp[1]:10 [ utoa::digit#2 utoa::digit#1 mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
Allocated (was zp[1]:44) zp[1]:11 [ conio_cursor_x main::y#2 main::y#1 ]
|
|
Allocated (was zp[1]:45) zp[1]:12 [ conio_cursor_y main::x#2 main::x#1 ]
|
|
Allocated (was zp[2]:46) zp[2]:13 [ conio_cursor_text cputln::$1 cscroll::$7 ]
|
|
Allocated (was zp[2]:48) zp[2]:15 [ conio_cursor_color cputln::$2 cscroll::$8 ]
|
|
Allocated (was zp[1]:55) zp[1]:17 [ main::yd#0 ]
|
|
Allocated (was zp[2]:56) zp[2]:18 [ main::$9 main::dist_sq#0 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#3 memset::end#0 ]
|
|
Allocated (was zp[2]:83) zp[2]:20 [ memcpy::src_end#0 ]
|
|
Allocated (was zp[2]:90) zp[2]:22 [ utoa::digit_value#0 utoa_append::sub#0 cputln::ln_offset#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// Plot a r=9 circle on the screen using chars - count how many chars are used
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(__bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The default text color
|
|
.const CONIO_TEXTCOLOR_DEFAULT = $e
|
|
.const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
|
|
.const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
|
|
// The screen width
|
|
// The screen height
|
|
// The screen bytes
|
|
// The text screen address
|
|
.label CONIO_SCREEN_TEXT = $400
|
|
// The color screen address
|
|
.label CONIO_SCREEN_COLORS = $d800
|
|
.label SCREEN = $400
|
|
.label conio_cursor_x = $b
|
|
.label conio_cursor_y = $c
|
|
.label conio_cursor_text = $d
|
|
.label conio_cursor_color = $f
|
|
// @begin
|
|
__bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor x-position
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor y-position
|
|
lda #0
|
|
sta.z conio_cursor_y
|
|
// [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
// [5] phi from @1 to @2 [phi:@1->@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// @2
|
|
__b2:
|
|
// [6] call main
|
|
// [8] phi from @2 to main [phi:@2->main]
|
|
main_from___b2:
|
|
jsr main
|
|
// [7] phi from @2 to @end [phi:@2->@end]
|
|
__bend_from___b2:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
// main
|
|
main: {
|
|
.label __9 = $12
|
|
.label __10 = 6
|
|
.label yd = $11
|
|
.label dist_sq = $12
|
|
.label y = $b
|
|
.label sc = 4
|
|
.label x = $c
|
|
.label count = 2
|
|
// [9] call memset
|
|
// [114] phi from main to memset [phi:main->memset]
|
|
memset_from_main:
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:main->memset#0] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) SCREEN [phi:main->memset#1] -- pvoz1=pvoc1
|
|
lda #<SCREEN
|
|
sta.z memset.str
|
|
lda #>SCREEN
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (word) $3e8 [phi:main->memset#2] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta.z memset.num
|
|
lda #>$3e8
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [10] phi from main to main::@1 [phi:main->main::@1]
|
|
__b1_from_main:
|
|
// [10] phi (byte*) main::sc#8 = (const nomodify byte*) SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z sc
|
|
lda #>SCREEN
|
|
sta.z sc+1
|
|
// [10] phi (word) main::count#11 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z count
|
|
lda #>0
|
|
sta.z count+1
|
|
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z y
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z y
|
|
cmp #$19
|
|
bcc __b3_from___b1
|
|
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [13] call gotoxy
|
|
// [175] phi from main::@2 to gotoxy [phi:main::@2->gotoxy]
|
|
gotoxy_from___b2:
|
|
jsr gotoxy
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [14] (word) printf_uint::uvalue#0 ← (word) main::count#11
|
|
// [15] call printf_uint
|
|
// [133] phi from main::@8 to printf_uint [phi:main::@8->printf_uint]
|
|
printf_uint_from___b8:
|
|
jsr printf_uint
|
|
// [16] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
|
__b9_from___b8:
|
|
jmp __b9
|
|
// main::@9
|
|
__b9:
|
|
// [17] call cputs
|
|
// [68] phi from main::@9 to cputs [phi:main::@9->cputs]
|
|
cputs_from___b9:
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) main::s [phi:main::@9->cputs#0] -- pbuz1=pbuc1
|
|
lda #<s
|
|
sta.z cputs.s
|
|
lda #>s
|
|
sta.z cputs.s+1
|
|
jsr cputs
|
|
jmp __breturn
|
|
// main::@return
|
|
__breturn:
|
|
// [18] return
|
|
rts
|
|
// [19] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b3_from___b1:
|
|
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z x
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z x
|
|
cmp #$28
|
|
bcc __b4
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
|
|
inc.z y
|
|
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
|
|
__b1_from___b5:
|
|
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
|
|
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
|
|
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
|
|
jmp __b1
|
|
// main::@4
|
|
__b4:
|
|
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
|
|
lda.z x
|
|
asl
|
|
// [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1
|
|
tax
|
|
axs #$27
|
|
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
|
|
lda.z y
|
|
asl
|
|
// [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1
|
|
sec
|
|
sbc #$18
|
|
sta.z yd
|
|
// [26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0 -- vbsz1=vbsxx
|
|
stx.z mul8s.a
|
|
// [27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0 -- vbsyy=vbsxx
|
|
txa
|
|
tay
|
|
// [28] call mul8s
|
|
// [41] phi from main::@4 to mul8s [phi:main::@4->mul8s]
|
|
mul8s_from___b4:
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#0 [phi:main::@4->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#0 [phi:main::@4->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
jmp __b10
|
|
// main::@10
|
|
__b10:
|
|
// [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 -- vwsz1=vwsz2
|
|
lda.z mul8s.m
|
|
sta.z __9
|
|
lda.z mul8s.m+1
|
|
sta.z __9+1
|
|
// [30] (signed byte) mul8s::a#1 ← (signed byte) main::yd#0 -- vbsz1=vbsz2
|
|
lda.z yd
|
|
sta.z mul8s.a
|
|
// [31] (signed byte) mul8s::b#1 ← (signed byte) main::yd#0 -- vbsyy=vbsz1
|
|
ldy.z yd
|
|
// [32] call mul8s
|
|
// [41] phi from main::@10 to mul8s [phi:main::@10->mul8s]
|
|
mul8s_from___b10:
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#1 [phi:main::@10->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#1 [phi:main::@10->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
jmp __b11
|
|
// main::@11
|
|
__b11:
|
|
// [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4
|
|
// [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z dist_sq
|
|
clc
|
|
adc.z __10
|
|
sta.z dist_sq
|
|
lda.z dist_sq+1
|
|
adc.z __10+1
|
|
sta.z dist_sq+1
|
|
// [35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6 -- vwsz1_ge_vwsc1_then_la1
|
|
lda.z dist_sq
|
|
cmp #<2*9*2*9
|
|
lda.z dist_sq+1
|
|
sbc #>2*9*2*9
|
|
bvc !+
|
|
eor #$80
|
|
!:
|
|
bpl __b6_from___b11
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [36] *((byte*) main::sc#10) ← (byte) '*' -- _deref_pbuz1=vbuc1
|
|
lda #'*'
|
|
ldy #0
|
|
sta (sc),y
|
|
// [37] (word) main::count#1 ← ++ (word) main::count#10 -- vwuz1=_inc_vwuz1
|
|
inc.z count
|
|
bne !+
|
|
inc.z count+1
|
|
!:
|
|
// [38] phi from main::@11 main::@7 to main::@6 [phi:main::@11/main::@7->main::@6]
|
|
__b6_from___b11:
|
|
__b6_from___b7:
|
|
// [38] phi (word) main::count#12 = (word) main::count#10 [phi:main::@11/main::@7->main::@6#0] -- register_copy
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10 -- pbuz1=_inc_pbuz1
|
|
inc.z sc
|
|
bne !+
|
|
inc.z sc+1
|
|
!:
|
|
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1
|
|
inc.z x
|
|
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
|
|
__b3_from___b6:
|
|
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
|
|
jmp __b3
|
|
s: .text " chars"
|
|
.byte 0
|
|
}
|
|
// mul8s
|
|
// Multiply of two signed chars to a signed int
|
|
// Fixes offsets introduced by using unsigned multiplication
|
|
// mul8s(signed byte zp($a) a, signed byte register(Y) b)
|
|
mul8s: {
|
|
.label m = 6
|
|
.label a = $a
|
|
// [42] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#2 -- vbuxx=vbuz1
|
|
ldx.z a
|
|
// [43] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#2 -- vbuaa=vbuyy
|
|
tya
|
|
// [44] call mul8u
|
|
jsr mul8u
|
|
// [45] (word) mul8u::return#2 ← (word) mul8u::res#2
|
|
jmp __b5
|
|
// mul8s::@5
|
|
__b5:
|
|
// [46] (word) mul8s::m#0 ← (word) mul8u::return#2
|
|
// [47] if((signed byte) mul8s::a#2>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1
|
|
lda.z a
|
|
cmp #0
|
|
bpl __b1_from___b5
|
|
jmp __b3
|
|
// mul8s::@3
|
|
__b3:
|
|
// [48] (byte~) mul8s::$6 ← > (word) mul8s::m#0 -- vbuaa=_hi_vwuz1
|
|
lda.z m+1
|
|
// [49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2 -- vbuaa=vbuaa_minus_vbuyy
|
|
sty.z $ff
|
|
sec
|
|
sbc.z $ff
|
|
// [50] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$11 -- vwuz1=vwuz1_sethi_vbuaa
|
|
sta.z m+1
|
|
// [51] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1]
|
|
__b1_from___b3:
|
|
__b1_from___b5:
|
|
// [51] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy
|
|
jmp __b1
|
|
// mul8s::@1
|
|
__b1:
|
|
// [52] if((signed byte) mul8s::b#2>=(signed byte) 0) goto mul8s::@2 -- vbsyy_ge_0_then_la1
|
|
cpy #0
|
|
bpl __b2_from___b1
|
|
jmp __b4
|
|
// mul8s::@4
|
|
__b4:
|
|
// [53] (byte~) mul8s::$9 ← > (word) mul8s::m#5 -- vbuaa=_hi_vwuz1
|
|
lda.z m+1
|
|
// [54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2 -- vbuaa=vbuaa_minus_vbuz1
|
|
sec
|
|
sbc.z a
|
|
// [55] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$12 -- vwuz1=vwuz1_sethi_vbuaa
|
|
sta.z m+1
|
|
// [56] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2]
|
|
__b2_from___b1:
|
|
__b2_from___b4:
|
|
// [56] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy
|
|
jmp __b2
|
|
// mul8s::@2
|
|
__b2:
|
|
jmp __breturn
|
|
// mul8s::@return
|
|
__breturn:
|
|
// [57] return
|
|
rts
|
|
}
|
|
// mul8u
|
|
// Perform binary multiplication of two unsigned 8-bit chars into a 16-bit unsigned int
|
|
// mul8u(byte register(X) a, byte register(A) b)
|
|
mul8u: {
|
|
.label mb = 8
|
|
.label res = 6
|
|
.label return = 6
|
|
// [58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa
|
|
sta.z mb
|
|
lda #0
|
|
sta.z mb+1
|
|
// [59] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
|
|
__b1_from_mul8u:
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z res
|
|
lda #>0
|
|
sta.z res+1
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy
|
|
jmp __b1
|
|
// mul8u::@1
|
|
__b1:
|
|
// [60] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1
|
|
cpx #0
|
|
bne __b2
|
|
jmp __breturn
|
|
// mul8u::@return
|
|
__breturn:
|
|
// [61] return
|
|
rts
|
|
// mul8u::@2
|
|
__b2:
|
|
// [62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #1
|
|
// [63] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1
|
|
cmp #0
|
|
beq __b3_from___b2
|
|
jmp __b4
|
|
// mul8u::@4
|
|
__b4:
|
|
// [64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
|
|
lda.z res
|
|
clc
|
|
adc.z mb
|
|
sta.z res
|
|
lda.z res+1
|
|
adc.z mb+1
|
|
sta.z res+1
|
|
// [65] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
|
|
__b3_from___b2:
|
|
__b3_from___b4:
|
|
// [65] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
|
|
jmp __b3
|
|
// mul8u::@3
|
|
__b3:
|
|
// [66] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuxx=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
tax
|
|
// [67] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
|
|
asl.z mb
|
|
rol.z mb+1
|
|
// [59] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
|
|
__b1_from___b3:
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// cputs
|
|
// Output a NUL-terminated string at the current cursor position
|
|
// cputs(byte* zp(8) s)
|
|
cputs: {
|
|
.label s = 8
|
|
// [69] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1]
|
|
__b1_from_cputs:
|
|
__b1_from___b2:
|
|
// [69] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy
|
|
jmp __b1
|
|
// cputs::@1
|
|
__b1:
|
|
// [70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (s),y
|
|
// [71] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1
|
|
inc.z s
|
|
bne !+
|
|
inc.z s+1
|
|
!:
|
|
// [72] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1
|
|
cmp #0
|
|
bne __b2
|
|
jmp __breturn
|
|
// cputs::@return
|
|
__breturn:
|
|
// [73] return
|
|
rts
|
|
// cputs::@2
|
|
__b2:
|
|
// [74] (byte) cputc::c#0 ← (byte) cputs::c#1
|
|
// [75] call cputc
|
|
// [76] phi from cputs::@2 to cputc [phi:cputs::@2->cputc]
|
|
cputc_from___b2:
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy
|
|
jsr cputc
|
|
jmp __b1_from___b2
|
|
}
|
|
// 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: {
|
|
// [77] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1
|
|
cmp #'\n'
|
|
beq __b1_from_cputc
|
|
jmp __b2
|
|
// cputc::@2
|
|
__b2:
|
|
// [78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3 -- _deref_pbuz1=vbuaa
|
|
ldy #0
|
|
sta (conio_cursor_text),y
|
|
// [79] (byte*) conio_cursor_text ← ++ (byte*) conio_cursor_text -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_text
|
|
bne !+
|
|
inc.z conio_cursor_text+1
|
|
!:
|
|
// [80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1
|
|
lda #CONIO_TEXTCOLOR_DEFAULT
|
|
ldy #0
|
|
sta (conio_cursor_color),y
|
|
// [81] (byte*) conio_cursor_color ← ++ (byte*) conio_cursor_color -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_color
|
|
bne !+
|
|
inc.z conio_cursor_color+1
|
|
!:
|
|
// [82] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_x
|
|
// [83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$28
|
|
cmp.z conio_cursor_x
|
|
bne __breturn
|
|
jmp __b3
|
|
// cputc::@3
|
|
__b3:
|
|
// [84] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [85] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// [86] call cscroll
|
|
jsr cscroll
|
|
jmp __breturn
|
|
// cputc::@return
|
|
__breturn:
|
|
// [87] return
|
|
rts
|
|
// [88] phi from cputc to cputc::@1 [phi:cputc->cputc::@1]
|
|
__b1_from_cputc:
|
|
jmp __b1
|
|
// cputc::@1
|
|
__b1:
|
|
// [89] call cputln
|
|
jsr cputln
|
|
jmp __breturn
|
|
}
|
|
// cputln
|
|
// Print a newline
|
|
cputln: {
|
|
.label __1 = $d
|
|
.label __2 = $f
|
|
.label ln_offset = $16
|
|
// [90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x -- vwuz1=vbuc1_minus_vbuz2
|
|
sec
|
|
lda #$28
|
|
sbc.z conio_cursor_x
|
|
sta.z ln_offset
|
|
lda #0
|
|
sbc #0
|
|
sta.z ln_offset+1
|
|
// [91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0 -- pbuz1=pbuz1_plus_vwuz2
|
|
lda.z __1
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __1
|
|
lda.z __1+1
|
|
adc.z ln_offset+1
|
|
sta.z __1+1
|
|
// [92] (byte*) conio_cursor_text ← (byte*~) cputln::$1
|
|
// [93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0 -- pbuz1=pbuz1_plus_vwuz2
|
|
lda.z __2
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __2
|
|
lda.z __2+1
|
|
adc.z ln_offset+1
|
|
sta.z __2+1
|
|
// [94] (byte*) conio_cursor_color ← (byte*~) cputln::$2
|
|
// [95] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// [96] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// [97] call cscroll
|
|
jsr cscroll
|
|
jmp __breturn
|
|
// cputln::@return
|
|
__breturn:
|
|
// [98] return
|
|
rts
|
|
}
|
|
// cscroll
|
|
// Scroll the entire screen if the cursor is beyond the last line
|
|
cscroll: {
|
|
.label __7 = $d
|
|
.label __8 = $f
|
|
// [99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$19
|
|
cmp.z conio_cursor_y
|
|
bne __breturn
|
|
// [100] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1]
|
|
__b1_from_cscroll:
|
|
jmp __b1
|
|
// cscroll::@1
|
|
__b1:
|
|
// [101] call memcpy
|
|
// [123] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy]
|
|
memcpy_from___b1:
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [102] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2]
|
|
__b2_from___b1:
|
|
jmp __b2
|
|
// cscroll::@2
|
|
__b2:
|
|
// [103] call memcpy
|
|
// [123] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy]
|
|
memcpy_from___b2:
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [104] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3]
|
|
__b3_from___b2:
|
|
jmp __b3
|
|
// cscroll::@3
|
|
__b3:
|
|
// [105] call memset
|
|
// [114] phi from cscroll::@3 to memset [phi:cscroll::@3->memset]
|
|
memset_from___b3:
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@3->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [106] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4]
|
|
__b4_from___b3:
|
|
jmp __b4
|
|
// cscroll::@4
|
|
__b4:
|
|
// [107] call memset
|
|
// [114] phi from cscroll::@4 to memset [phi:cscroll::@4->memset]
|
|
memset_from___b4:
|
|
// [114] phi (byte) memset::c#5 = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1
|
|
ldx #CONIO_TEXTCOLOR_DEFAULT
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@4->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
jmp __b5
|
|
// cscroll::@5
|
|
__b5:
|
|
// [108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1
|
|
lda.z __7
|
|
sec
|
|
sbc #<$28
|
|
sta.z __7
|
|
lda.z __7+1
|
|
sbc #>$28
|
|
sta.z __7+1
|
|
// [109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7
|
|
// [110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1
|
|
lda.z __8
|
|
sec
|
|
sbc #<$28
|
|
sta.z __8
|
|
lda.z __8+1
|
|
sbc #>$28
|
|
sta.z __8+1
|
|
// [111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8
|
|
// [112] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1
|
|
dec.z conio_cursor_y
|
|
jmp __breturn
|
|
// cscroll::@return
|
|
__breturn:
|
|
// [113] return
|
|
rts
|
|
}
|
|
// 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($16) str, byte register(X) c, word zp($12) num)
|
|
memset: {
|
|
.label end = $12
|
|
.label dst = $16
|
|
.label num = $12
|
|
.label str = $16
|
|
// [115] if((word) memset::num#3<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1
|
|
lda.z num
|
|
bne !+
|
|
lda.z num+1
|
|
beq __breturn
|
|
!:
|
|
jmp __b1
|
|
// memset::@1
|
|
__b1:
|
|
// [116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3 -- pbuz1=pbuz2_plus_vwuz1
|
|
lda.z end
|
|
clc
|
|
adc.z str
|
|
sta.z end
|
|
lda.z end+1
|
|
adc.z str+1
|
|
sta.z end+1
|
|
// [117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4
|
|
// [118] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
|
|
__b2_from___b1:
|
|
__b2_from___b3:
|
|
// [118] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy
|
|
jmp __b2
|
|
// memset::@2
|
|
__b2:
|
|
// [119] if((byte*) memset::dst#2!=(byte*) 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:
|
|
// [120] return
|
|
rts
|
|
// memset::@3
|
|
__b3:
|
|
// [121] *((byte*) memset::dst#2) ← (byte) memset::c#5 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (dst),y
|
|
// [122] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
jmp __b2_from___b3
|
|
}
|
|
// 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($16) destination, void* zp($12) source)
|
|
memcpy: {
|
|
.label src_end = $14
|
|
.label dst = $16
|
|
.label src = $12
|
|
.label source = $12
|
|
.label destination = $16
|
|
// [124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $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
|
|
// [125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2
|
|
// [126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2
|
|
// [127] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1]
|
|
__b1_from_memcpy:
|
|
__b1_from___b2:
|
|
// [127] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [127] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy
|
|
jmp __b1
|
|
// memcpy::@1
|
|
__b1:
|
|
// [128] if((byte*) memcpy::src#2!=(byte*) 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:
|
|
// [129] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// [130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
ldy #0
|
|
sta (dst),y
|
|
// [131] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [132] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
jmp __b1_from___b2
|
|
}
|
|
// printf_uint
|
|
// Print an unsigned int using a specific format
|
|
// printf_uint(word zp(2) uvalue)
|
|
printf_uint: {
|
|
.label uvalue = 2
|
|
jmp __b1
|
|
// printf_uint::@1
|
|
__b1:
|
|
// [134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Handle any sign
|
|
lda #0
|
|
sta printf_buffer
|
|
// [135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0
|
|
// [136] call utoa
|
|
// Format number into buffer
|
|
// [147] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa]
|
|
utoa_from___b1:
|
|
jsr utoa
|
|
jmp __b2
|
|
// printf_uint::@2
|
|
__b2:
|
|
// [137] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuaa=_deref_pbuc1
|
|
lda printf_buffer
|
|
// [138] call printf_number_buffer
|
|
// Print using format
|
|
// [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer]
|
|
printf_number_buffer_from___b2:
|
|
jsr printf_number_buffer
|
|
jmp __breturn
|
|
// printf_uint::@return
|
|
__breturn:
|
|
// [139] return
|
|
rts
|
|
}
|
|
// 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:
|
|
// [141] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b2_from___b1
|
|
jmp __b3
|
|
// printf_number_buffer::@3
|
|
__b3:
|
|
// [142] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0
|
|
// [143] call cputc
|
|
// [76] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc]
|
|
cputc_from___b3:
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy
|
|
jsr cputc
|
|
// [144] 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:
|
|
// [145] call cputs
|
|
// [68] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs]
|
|
cputs_from___b2:
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) 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:
|
|
// [146] return
|
|
rts
|
|
}
|
|
// 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(2) value, byte* zp($12) buffer)
|
|
utoa: {
|
|
.const max_digits = 5
|
|
.label digit_value = $16
|
|
.label buffer = $12
|
|
.label digit = $a
|
|
.label value = 2
|
|
// [148] phi from utoa to utoa::@1 [phi:utoa->utoa::@1]
|
|
__b1_from_utoa:
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) 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
|
|
// [148] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z digit
|
|
jmp __b1
|
|
// utoa::@1
|
|
__b1:
|
|
// [149] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z digit
|
|
cmp #max_digits-1
|
|
bcc __b2
|
|
jmp __b3
|
|
// utoa::@3
|
|
__b3:
|
|
// [150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1
|
|
lda.z value
|
|
// [151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa
|
|
tay
|
|
lda DIGITS,y
|
|
ldy #0
|
|
sta (buffer),y
|
|
// [152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1
|
|
inc.z buffer
|
|
bne !+
|
|
inc.z buffer+1
|
|
!:
|
|
// [153] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
ldy #0
|
|
sta (buffer),y
|
|
jmp __breturn
|
|
// utoa::@return
|
|
__breturn:
|
|
// [154] return
|
|
rts
|
|
// utoa::@2
|
|
__b2:
|
|
// [155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z digit
|
|
asl
|
|
// [156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) 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
|
|
// [157] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1
|
|
cpx #0
|
|
bne __b5
|
|
jmp __b7
|
|
// utoa::@7
|
|
__b7:
|
|
// [158] if((word) utoa::value#2>=(word) 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
|
|
// [159] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4]
|
|
__b4_from___b7:
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy
|
|
jmp __b4
|
|
// utoa::@4
|
|
__b4:
|
|
// [160] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1
|
|
inc.z digit
|
|
// [148] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1]
|
|
__b1_from___b4:
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy
|
|
// [148] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy
|
|
jmp __b1
|
|
// utoa::@5
|
|
__b5:
|
|
// [161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
|
// [162] (word) utoa_append::value#0 ← (word) utoa::value#2
|
|
// [163] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
|
// [164] call utoa_append
|
|
// [168] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append]
|
|
utoa_append_from___b5:
|
|
jsr utoa_append
|
|
// [165] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
|
jmp __b6
|
|
// utoa::@6
|
|
__b6:
|
|
// [166] (word) utoa::value#0 ← (word) utoa_append::return#0
|
|
// [167] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1
|
|
inc.z buffer
|
|
bne !+
|
|
inc.z buffer+1
|
|
!:
|
|
// [159] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4]
|
|
__b4_from___b6:
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1
|
|
ldx #1
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy
|
|
jmp __b4
|
|
}
|
|
// 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($12) buffer, word zp(2) value, word zp($16) sub)
|
|
utoa_append: {
|
|
.label buffer = $12
|
|
.label value = 2
|
|
.label sub = $16
|
|
.label return = 2
|
|
// [169] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1]
|
|
__b1_from_utoa_append:
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy
|
|
jmp __b1
|
|
// utoa_append::@1
|
|
__b1:
|
|
// [170] if((word) utoa_append::value#2>=(word) 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:
|
|
// [171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
|
lda DIGITS,x
|
|
ldy #0
|
|
sta (buffer),y
|
|
jmp __breturn
|
|
// utoa_append::@return
|
|
__breturn:
|
|
// [172] return
|
|
rts
|
|
// utoa_append::@2
|
|
__b2:
|
|
// [173] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) 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
|
|
// [169] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1]
|
|
__b1_from___b2:
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// gotoxy
|
|
// Set the cursor to the specified position
|
|
gotoxy: {
|
|
.const x = 0
|
|
.const y = 0
|
|
jmp __b1
|
|
// gotoxy::@1
|
|
__b1:
|
|
// [176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2 -- vbuz1=vbuc1
|
|
lda #x
|
|
sta.z conio_cursor_x
|
|
// [177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2 -- vbuz1=vbuc1
|
|
lda #y
|
|
sta.z conio_cursor_y
|
|
// [178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// [179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
jmp __breturn
|
|
// gotoxy::@return
|
|
__breturn:
|
|
// [180] return
|
|
rts
|
|
}
|
|
// File 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 __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __bend
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b10
|
|
Removing instruction jmp __b11
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
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 __b2
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b2
|
|
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 __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #0
|
|
Removing instruction lda #>0
|
|
Removing instruction lda #0
|
|
Removing instruction lda #>0
|
|
Removing instruction ldy #0
|
|
Replacing instruction lda #0 with TXA
|
|
Replacing instruction ldy #0 with TAY
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label __b6_from___b11 with __b6
|
|
Replacing label __b1_from___b5 with __b1
|
|
Replacing label __b2_from___b1 with __b2
|
|
Replacing label __b3_from___b2 with __b3
|
|
Replacing label __b1_from___b2 with __b1
|
|
Replacing label __b1_from_cputc with __b1
|
|
Replacing label __b2_from___b3 with __b2
|
|
Replacing label __b1_from___b2 with __b1
|
|
Replacing label __b2_from___b1 with __b2
|
|
Removing instruction __b1:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction main_from___b2:
|
|
Removing instruction __bend_from___b2:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction gotoxy_from___b2:
|
|
Removing instruction printf_uint_from___b8:
|
|
Removing instruction __b9_from___b8:
|
|
Removing instruction cputs_from___b9:
|
|
Removing instruction __b6_from___b11:
|
|
Removing instruction __b6_from___b7:
|
|
Removing instruction __b1_from___b3:
|
|
Removing instruction __b1_from___b5:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __b2_from___b4:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b3_from___b2:
|
|
Removing instruction __b3_from___b4:
|
|
Removing instruction __b1_from_cputs:
|
|
Removing instruction __b1_from___b2:
|
|
Removing instruction cputc_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 __b2_from___b1:
|
|
Removing instruction __b2_from___b3:
|
|
Removing instruction __b1_from_memcpy:
|
|
Removing instruction __b1_from___b2:
|
|
Removing instruction cputc_from___b3:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __b2_from___b3:
|
|
Removing instruction cputs_from___b2:
|
|
Removing instruction __b4_from___b7:
|
|
Removing instruction utoa_append_from___b5:
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
|
Removing instruction __b2:
|
|
Removing instruction __bend:
|
|
Removing instruction memset_from_main:
|
|
Removing instruction __b1_from_main:
|
|
Removing instruction __b2:
|
|
Removing instruction __b8:
|
|
Removing instruction __b9:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b5:
|
|
Removing instruction __b1_from___b5:
|
|
Removing instruction mul8s_from___b4:
|
|
Removing instruction __b10:
|
|
Removing instruction mul8s_from___b10:
|
|
Removing instruction __b11:
|
|
Removing instruction __b7:
|
|
Removing instruction __b3_from___b6:
|
|
Removing instruction __b5:
|
|
Removing instruction __b3:
|
|
Removing instruction __b4:
|
|
Removing instruction __b1_from_mul8u:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b4:
|
|
Removing instruction __b1_from___b3:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b2:
|
|
Removing instruction __b3:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1:
|
|
Removing instruction __b2:
|
|
Removing instruction __b3:
|
|
Removing instruction __b4:
|
|
Removing instruction __b5:
|
|
Removing instruction __b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1:
|
|
Removing instruction utoa_from___b1:
|
|
Removing instruction __b2:
|
|
Removing instruction printf_number_buffer_from___b2:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1:
|
|
Removing instruction __b3:
|
|
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_from_utoa_append:
|
|
Removing instruction __b3:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from___b2:
|
|
Removing instruction __b1:
|
|
Removing instruction __breturn:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Replacing jump to rts with rts in jmp __breturn
|
|
Succesful ASM optimization Pass5DoubleJumpElimination
|
|
Relabelling long label __b3_from___b1 to __b2
|
|
Succesful ASM optimization Pass5RelabelLongLabels
|
|
Adding RTS to root block
|
|
Succesful ASM optimization Pass5AddMainRts
|
|
Removing instruction lda #<0
|
|
Removing instruction lda.z digit_value+1
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
|
|
FINAL SYMBOL TABLE
|
|
(label) @1
|
|
(label) @2
|
|
(label) @begin
|
|
(label) @end
|
|
(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*) 55296
|
|
(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*) 1024
|
|
(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e
|
|
(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z
|
|
(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1
|
|
(const byte) RADIX::BINARY = (number) 2
|
|
(const byte) RADIX::DECIMAL = (number) $a
|
|
(const byte) RADIX::HEXADECIMAL = (number) $10
|
|
(const byte) RADIX::OCTAL = (number) 8
|
|
(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a }
|
|
(const nomodify byte*) SCREEN = (byte*) 1024
|
|
(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c
|
|
(byte*) conio_cursor_color loadstore zp[2]:15 3484376.71875
|
|
(byte*) conio_cursor_text loadstore zp[2]:13 3430770.9230769235
|
|
(byte) conio_cursor_x loadstore zp[1]:11 489798.1428571429
|
|
(byte) conio_cursor_y loadstore zp[1]:12 4735295.735294118
|
|
(void()) cputc((byte) cputc::c)
|
|
(label) cputc::@1
|
|
(label) cputc::@2
|
|
(label) cputc::@3
|
|
(label) cputc::@return
|
|
(byte) cputc::c
|
|
(byte) cputc::c#0 reg byte a 200002.0
|
|
(byte) cputc::c#2 reg byte a 2002.0
|
|
(byte) cputc::c#3 reg byte a 1050502.0
|
|
(void()) cputln()
|
|
(byte*~) cputln::$1 zp[2]:13 2.0000002E7
|
|
(byte*~) cputln::$2 zp[2]:15 2.0000002E7
|
|
(label) cputln::@return
|
|
(word) cputln::ln_offset
|
|
(word) cputln::ln_offset#0 ln_offset zp[2]:22 1.0000001E7
|
|
(void()) cputs((to_nomodify byte*) cputs::s)
|
|
(label) cputs::@1
|
|
(label) cputs::@2
|
|
(label) cputs::@return
|
|
(byte) cputs::c
|
|
(byte) cputs::c#1 reg byte a 100001.0
|
|
(to_nomodify byte*) cputs::s
|
|
(to_nomodify byte*) cputs::s#0 s zp[2]:8 50000.5
|
|
(to_nomodify byte*) cputs::s#3 s zp[2]:8 155002.0
|
|
(to_nomodify byte*) cputs::s#4 s zp[2]:8 10001.0
|
|
(void()) cscroll()
|
|
(byte*~) cscroll::$7 zp[2]:13 2.00000002E8
|
|
(byte*~) cscroll::$8 zp[2]:15 2.00000002E8
|
|
(label) cscroll::@1
|
|
(label) cscroll::@2
|
|
(label) cscroll::@3
|
|
(label) cscroll::@4
|
|
(label) cscroll::@5
|
|
(label) cscroll::@return
|
|
(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y)
|
|
(label) gotoxy::@1
|
|
(label) gotoxy::@return
|
|
(word) gotoxy::offset
|
|
(byte) gotoxy::x
|
|
(const byte) gotoxy::x#2 x = (byte) 0
|
|
(byte) gotoxy::y
|
|
(const byte) gotoxy::y#2 y = (byte) 0
|
|
(void()) main()
|
|
(signed word~) main::$10 zp[2]:6 2002.0
|
|
(signed byte~) main::$5 reg byte a 2002.0
|
|
(signed byte~) main::$7 reg byte a 2002.0
|
|
(signed word~) main::$9 zp[2]:18 400.4
|
|
(label) main::@1
|
|
(label) main::@10
|
|
(label) main::@11
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(label) main::@9
|
|
(label) main::@return
|
|
(word) main::count
|
|
(word) main::count#1 count zp[2]:2 2002.0
|
|
(word) main::count#10 count zp[2]:2 178.05555555555557
|
|
(word) main::count#11 count zp[2]:2 53.25
|
|
(word) main::count#12 count zp[2]:2 1001.0
|
|
(signed word) main::dist_sq
|
|
(signed word) main::dist_sq#0 dist_sq zp[2]:18 2002.0
|
|
(const byte*) main::s[(byte) 7] = (byte*) " chars"
|
|
(byte*) main::sc
|
|
(byte*) main::sc#1 sc zp[2]:4 1001.0
|
|
(byte*) main::sc#10 sc zp[2]:4 160.25
|
|
(byte*) main::sc#8 sc zp[2]:4 101.0
|
|
(byte) main::x
|
|
(byte) main::x#1 x zp[1]:12 2002.0
|
|
(byte) main::x#2 x zp[1]:12 150.14999999999998
|
|
(signed byte) main::xd
|
|
(signed byte) main::xd#0 reg byte x 750.75
|
|
(byte) main::y
|
|
(byte) main::y#1 y zp[1]:11 202.0
|
|
(byte) main::y#2 y zp[1]:11 13.173913043478262
|
|
(signed byte) main::yd
|
|
(signed byte) main::yd#0 yd zp[1]:17 500.5
|
|
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
|
(label) memcpy::@1
|
|
(label) memcpy::@2
|
|
(label) memcpy::@return
|
|
(void*) memcpy::destination
|
|
(void*) memcpy::destination#2 destination zp[2]:22
|
|
(byte*) memcpy::dst
|
|
(byte*) memcpy::dst#1 dst zp[2]:22 1.00000000001E11
|
|
(byte*) memcpy::dst#2 dst zp[2]:22 1.0033333333466667E11
|
|
(byte*) memcpy::dst#4 dst zp[2]:22 2.000000002E9
|
|
(word) memcpy::num
|
|
(void*) memcpy::return
|
|
(void*) memcpy::source
|
|
(void*) memcpy::source#2 source zp[2]:18
|
|
(byte*) memcpy::src
|
|
(byte*) memcpy::src#1 src zp[2]:18 2.00000000002E11
|
|
(byte*) memcpy::src#2 src zp[2]:18 1.0025000000125E11
|
|
(byte*) memcpy::src#4 src zp[2]:18 1.000000001E9
|
|
(byte*) memcpy::src_end
|
|
(byte*) memcpy::src_end#0 src_end zp[2]:20 1.262500000025E10
|
|
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
|
(label) memset::@1
|
|
(label) memset::@2
|
|
(label) memset::@3
|
|
(label) memset::@return
|
|
(byte) memset::c
|
|
(byte) memset::c#5 reg byte x 1.250000000125E9
|
|
(byte*) memset::dst
|
|
(byte*) memset::dst#1 dst zp[2]:22 2.0000000002E10
|
|
(byte*) memset::dst#2 dst zp[2]:22 1.3666666668333332E10
|
|
(byte*) memset::dst#4 dst zp[2]:22 2.000000002E9
|
|
(byte*) memset::end
|
|
(byte*) memset::end#0 end zp[2]:18 1.8333333336666665E9
|
|
(word) memset::num
|
|
(word) memset::num#3 num zp[2]:18 1.000000001E9
|
|
(void*) memset::return
|
|
(void*) memset::str
|
|
(void*) memset::str#4 str zp[2]:22
|
|
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
|
|
(byte~) mul8s::$11 reg byte a 20002.0
|
|
(byte~) mul8s::$12 reg byte a 20002.0
|
|
(byte~) mul8s::$6 reg byte a 20002.0
|
|
(byte~) mul8s::$9 reg byte a 20002.0
|
|
(label) mul8s::@1
|
|
(label) mul8s::@2
|
|
(label) mul8s::@3
|
|
(label) mul8s::@4
|
|
(label) mul8s::@5
|
|
(label) mul8s::@return
|
|
(signed byte) mul8s::a
|
|
(signed byte) mul8s::a#0 a zp[1]:10 1001.0
|
|
(signed byte) mul8s::a#1 a zp[1]:10 1001.0
|
|
(signed byte) mul8s::a#2 a zp[1]:10 923.3076923076923
|
|
(signed byte) mul8s::b
|
|
(signed byte) mul8s::b#0 reg byte y 2002.0
|
|
(signed byte) mul8s::b#1 reg byte y 2002.0
|
|
(signed byte) mul8s::b#2 reg byte y 1091.181818181818
|
|
(word) mul8s::m
|
|
(word) mul8s::m#0 m zp[2]:6 10001.0
|
|
(word) mul8s::m#1 m zp[2]:6 20002.0
|
|
(word) mul8s::m#2 m zp[2]:6 20002.0
|
|
(word) mul8s::m#4 m zp[2]:6 5000.5
|
|
(word) mul8s::m#5 m zp[2]:6 12501.25
|
|
(signed word) mul8s::return
|
|
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
|
|
(byte~) mul8u::$1 reg byte a 2.00000002E8
|
|
(label) mul8u::@1
|
|
(label) mul8u::@2
|
|
(label) mul8u::@3
|
|
(label) mul8u::@4
|
|
(label) mul8u::@return
|
|
(byte) mul8u::a
|
|
(byte) mul8u::a#0 reg byte x 1.00000001E8
|
|
(byte) mul8u::a#1 reg byte x 36667.33333333333
|
|
(byte) mul8u::a#2 reg byte x 6.668333416666667E7
|
|
(byte) mul8u::b
|
|
(byte) mul8u::b#0 reg byte a 10001.0
|
|
(word) mul8u::mb
|
|
(word) mul8u::mb#0 mb zp[2]:8 200002.0
|
|
(word) mul8u::mb#1 mb zp[2]:8 2.00000002E8
|
|
(word) mul8u::mb#2 mb zp[2]:8 4.287142914285715E7
|
|
(word) mul8u::res
|
|
(word) mul8u::res#1 res zp[2]:6 2.00000002E8
|
|
(word) mul8u::res#2 res zp[2]:6 5.0001667333333336E7
|
|
(word) mul8u::res#6 res zp[2]:6 1.00000001E8
|
|
(word) mul8u::return
|
|
(word) mul8u::return#2 return zp[2]:6 20002.0
|
|
(struct printf_buffer_number) printf_buffer loadstore mem[12] = {}
|
|
(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) }
|
|
(byte) printf_buffer_number::sign
|
|
(byte) printf_format_number::justify_left
|
|
(byte) printf_format_number::min_length
|
|
(byte) printf_format_number::radix
|
|
(byte) printf_format_number::sign_always
|
|
(byte) printf_format_number::upper_case
|
|
(byte) printf_format_number::zero_padding
|
|
(byte) printf_format_string::justify_left
|
|
(byte) printf_format_string::min_length
|
|
(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)
|
|
(label) printf_number_buffer::@1
|
|
(label) printf_number_buffer::@2
|
|
(label) printf_number_buffer::@3
|
|
(label) printf_number_buffer::@return
|
|
(struct printf_buffer_number) printf_number_buffer::buffer
|
|
(byte*) printf_number_buffer::buffer_digits
|
|
(const byte*) printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
|
(byte) printf_number_buffer::buffer_sign
|
|
(byte) printf_number_buffer::buffer_sign#0 reg byte a 701.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_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix)
|
|
(label) printf_uint::@1
|
|
(label) printf_uint::@2
|
|
(label) printf_uint::@return
|
|
(struct printf_format_number) printf_uint::format
|
|
(byte) printf_uint::format_justify_left
|
|
(byte) printf_uint::format_min_length
|
|
(byte) printf_uint::format_radix
|
|
(byte) printf_uint::format_sign_always
|
|
(byte) printf_uint::format_upper_case
|
|
(byte) printf_uint::format_zero_padding
|
|
(word) printf_uint::uvalue
|
|
(word) printf_uint::uvalue#0 uvalue zp[2]:2 37.33333333333333
|
|
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
|
(byte~) utoa::$10 reg byte a 20002.0
|
|
(byte~) utoa::$11 reg byte a 2002.0
|
|
(label) utoa::@1
|
|
(label) utoa::@2
|
|
(label) utoa::@3
|
|
(label) utoa::@4
|
|
(label) utoa::@5
|
|
(label) utoa::@6
|
|
(label) utoa::@7
|
|
(label) utoa::@return
|
|
(byte*) utoa::buffer
|
|
(byte*) utoa::buffer#11 buffer zp[2]:18 3000.4285714285716
|
|
(byte*) utoa::buffer#14 buffer zp[2]:18 15001.5
|
|
(byte*) utoa::buffer#3 buffer zp[2]:18 2002.0
|
|
(byte*) utoa::buffer#4 buffer zp[2]:18 20002.0
|
|
(byte) utoa::digit
|
|
(byte) utoa::digit#1 digit zp[1]:10 20002.0
|
|
(byte) utoa::digit#2 digit zp[1]:10 2857.4285714285716
|
|
(word) utoa::digit_value
|
|
(word) utoa::digit_value#0 digit_value zp[2]:22 6000.6
|
|
(word*) utoa::digit_values
|
|
(byte) utoa::max_digits
|
|
(const byte) utoa::max_digits#1 max_digits = (byte) 5
|
|
(byte) utoa::radix
|
|
(byte) utoa::started
|
|
(byte) utoa::started#2 reg byte x 5000.5
|
|
(byte) utoa::started#4 reg byte x 10001.0
|
|
(word) utoa::value
|
|
(word) utoa::value#0 value zp[2]:2 10001.0
|
|
(word) utoa::value#1 value zp[2]:2 551.0
|
|
(word) utoa::value#2 value zp[2]:2 5857.857142857143
|
|
(word) utoa::value#6 value zp[2]:2 15001.5
|
|
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
|
(label) utoa_append::@1
|
|
(label) utoa_append::@2
|
|
(label) utoa_append::@3
|
|
(label) utoa_append::@return
|
|
(byte*) utoa_append::buffer
|
|
(byte*) utoa_append::buffer#0 buffer zp[2]:18 13750.25
|
|
(byte) utoa_append::digit
|
|
(byte) utoa_append::digit#1 reg byte x 1.0000001E7
|
|
(byte) utoa_append::digit#2 reg byte x 1.00500015E7
|
|
(word) utoa_append::return
|
|
(word) utoa_append::return#0 return zp[2]:2 20002.0
|
|
(word) utoa_append::sub
|
|
(word) utoa_append::sub#0 sub zp[2]:22 3335000.5
|
|
(word) utoa_append::value
|
|
(word) utoa_append::value#0 value zp[2]:2 36667.33333333333
|
|
(word) utoa_append::value#1 value zp[2]:2 2.0000002E7
|
|
(word) utoa_append::value#2 value zp[2]:2 5018334.166666666
|
|
|
|
zp[2]:2 [ main::count#11 main::count#10 main::count#12 main::count#1 printf_uint::uvalue#0 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ]
|
|
zp[2]:4 [ main::sc#8 main::sc#10 main::sc#1 ]
|
|
reg byte y [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
|
|
zp[2]:6 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 main::$10 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
|
|
reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
|
|
zp[2]:8 [ cputs::s#3 cputs::s#4 cputs::s#0 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
|
|
reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ]
|
|
reg byte x [ memset::c#5 ]
|
|
zp[1]:10 [ utoa::digit#2 utoa::digit#1 mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
|
|
reg byte x [ utoa::started#2 utoa::started#4 ]
|
|
reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ]
|
|
zp[1]:11 [ conio_cursor_x main::y#2 main::y#1 ]
|
|
zp[1]:12 [ conio_cursor_y main::x#2 main::x#1 ]
|
|
zp[2]:13 [ conio_cursor_text cputln::$1 cscroll::$7 ]
|
|
zp[2]:15 [ conio_cursor_color cputln::$2 cscroll::$8 ]
|
|
reg byte a [ main::$5 ]
|
|
reg byte x [ main::xd#0 ]
|
|
reg byte a [ main::$7 ]
|
|
zp[1]:17 [ main::yd#0 ]
|
|
zp[2]:18 [ main::$9 main::dist_sq#0 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 memset::num#3 memset::end#0 ]
|
|
reg byte a [ mul8u::b#0 ]
|
|
reg byte a [ mul8s::$6 ]
|
|
reg byte a [ mul8s::$11 ]
|
|
reg byte a [ mul8s::$9 ]
|
|
reg byte a [ mul8s::$12 ]
|
|
reg byte a [ mul8u::$1 ]
|
|
reg byte a [ cputs::c#1 ]
|
|
zp[2]:20 [ memcpy::src_end#0 ]
|
|
reg byte a [ printf_number_buffer::buffer_sign#0 ]
|
|
reg byte a [ utoa::$11 ]
|
|
reg byte a [ utoa::$10 ]
|
|
zp[2]:22 [ utoa::digit_value#0 utoa_append::sub#0 cputln::ln_offset#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ]
|
|
mem[12] [ printf_buffer ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 85370
|
|
|
|
// File Comments
|
|
// Plot a r=9 circle on the screen using chars - count how many chars are used
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(__bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The default text color
|
|
.const CONIO_TEXTCOLOR_DEFAULT = $e
|
|
.const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
|
|
.const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
|
|
// The screen width
|
|
// The screen height
|
|
// The screen bytes
|
|
// The text screen address
|
|
.label CONIO_SCREEN_TEXT = $400
|
|
// The color screen address
|
|
.label CONIO_SCREEN_COLORS = $d800
|
|
.label SCREEN = $400
|
|
.label conio_cursor_x = $b
|
|
.label conio_cursor_y = $c
|
|
.label conio_cursor_text = $d
|
|
.label conio_cursor_color = $f
|
|
// @begin
|
|
__bbegin:
|
|
// @1
|
|
// conio_cursor_x = 0
|
|
// [1] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor x-position
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// conio_cursor_y = 0
|
|
// [2] (byte) conio_cursor_y ← (byte) 0 -- vbuz1=vbuc1
|
|
// The current cursor y-position
|
|
sta.z conio_cursor_y
|
|
// conio_cursor_text = CONIO_SCREEN_TEXT
|
|
// [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// conio_cursor_color = CONIO_SCREEN_COLORS
|
|
// [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
// The current cursor address
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
// [5] phi from @1 to @2 [phi:@1->@2]
|
|
// @2
|
|
// [6] call main
|
|
// [8] phi from @2 to main [phi:@2->main]
|
|
jsr main
|
|
rts
|
|
// [7] phi from @2 to @end [phi:@2->@end]
|
|
// @end
|
|
// main
|
|
main: {
|
|
.label __9 = $12
|
|
.label __10 = 6
|
|
.label yd = $11
|
|
.label dist_sq = $12
|
|
.label y = $b
|
|
.label sc = 4
|
|
.label x = $c
|
|
.label count = 2
|
|
// memset(SCREEN, ' ', 1000)
|
|
// [9] call memset
|
|
// [114] phi from main to memset [phi:main->memset]
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:main->memset#0] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) SCREEN [phi:main->memset#1] -- pvoz1=pvoc1
|
|
lda #<SCREEN
|
|
sta.z memset.str
|
|
lda #>SCREEN
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (word) $3e8 [phi:main->memset#2] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta.z memset.num
|
|
lda #>$3e8
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [10] phi from main to main::@1 [phi:main->main::@1]
|
|
// [10] phi (byte*) main::sc#8 = (const nomodify byte*) SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z sc
|
|
lda #>SCREEN
|
|
sta.z sc+1
|
|
// [10] phi (word) main::count#11 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z count
|
|
sta.z count+1
|
|
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1
|
|
sta.z y
|
|
// main::@1
|
|
__b1:
|
|
// for(char y=0;y<25;y++)
|
|
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z y
|
|
cmp #$19
|
|
bcc __b2
|
|
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
// main::@2
|
|
// gotoxy(0,0)
|
|
// [13] call gotoxy
|
|
// [175] phi from main::@2 to gotoxy [phi:main::@2->gotoxy]
|
|
jsr gotoxy
|
|
// main::@8
|
|
// printf("%u chars",count)
|
|
// [14] (word) printf_uint::uvalue#0 ← (word) main::count#11
|
|
// [15] call printf_uint
|
|
// [133] phi from main::@8 to printf_uint [phi:main::@8->printf_uint]
|
|
jsr printf_uint
|
|
// [16] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
|
// main::@9
|
|
// printf("%u chars",count)
|
|
// [17] call cputs
|
|
// [68] phi from main::@9 to cputs [phi:main::@9->cputs]
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) main::s [phi:main::@9->cputs#0] -- pbuz1=pbuc1
|
|
lda #<s
|
|
sta.z cputs.s
|
|
lda #>s
|
|
sta.z cputs.s+1
|
|
jsr cputs
|
|
// main::@return
|
|
// }
|
|
// [18] return
|
|
rts
|
|
// [19] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b2:
|
|
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z x
|
|
// main::@3
|
|
__b3:
|
|
// for(char x=0;x<40;x++)
|
|
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z x
|
|
cmp #$28
|
|
bcc __b4
|
|
// main::@5
|
|
// for(char y=0;y<25;y++)
|
|
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1
|
|
inc.z y
|
|
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
|
|
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
|
|
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
|
|
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
|
|
jmp __b1
|
|
// main::@4
|
|
__b4:
|
|
// (signed char)x*2
|
|
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
|
|
lda.z x
|
|
asl
|
|
// xd = (signed char)x*2-39
|
|
// [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1
|
|
tax
|
|
axs #$27
|
|
// (signed char)y*2
|
|
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
|
|
lda.z y
|
|
asl
|
|
// yd = (signed char)y*2-24
|
|
// [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1
|
|
sec
|
|
sbc #$18
|
|
sta.z yd
|
|
// mul8s(xd,xd)
|
|
// [26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0 -- vbsz1=vbsxx
|
|
stx.z mul8s.a
|
|
// [27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0 -- vbsyy=vbsxx
|
|
txa
|
|
tay
|
|
// [28] call mul8s
|
|
// [41] phi from main::@4 to mul8s [phi:main::@4->mul8s]
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#0 [phi:main::@4->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#0 [phi:main::@4->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
// main::@10
|
|
// mul8s(xd,xd)
|
|
// [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 -- vwsz1=vwsz2
|
|
lda.z mul8s.m
|
|
sta.z __9
|
|
lda.z mul8s.m+1
|
|
sta.z __9+1
|
|
// mul8s(yd,yd)
|
|
// [30] (signed byte) mul8s::a#1 ← (signed byte) main::yd#0 -- vbsz1=vbsz2
|
|
lda.z yd
|
|
sta.z mul8s.a
|
|
// [31] (signed byte) mul8s::b#1 ← (signed byte) main::yd#0 -- vbsyy=vbsz1
|
|
ldy.z yd
|
|
// [32] call mul8s
|
|
// [41] phi from main::@10 to mul8s [phi:main::@10->mul8s]
|
|
// [41] phi (signed byte) mul8s::b#2 = (signed byte) mul8s::b#1 [phi:main::@10->mul8s#0] -- register_copy
|
|
// [41] phi (signed byte) mul8s::a#2 = (signed byte) mul8s::a#1 [phi:main::@10->mul8s#1] -- register_copy
|
|
jsr mul8s
|
|
// main::@11
|
|
// mul8s(yd,yd)
|
|
// [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4
|
|
// dist_sq = mul8s(xd,xd) + mul8s(yd,yd)
|
|
// [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z dist_sq
|
|
clc
|
|
adc.z __10
|
|
sta.z dist_sq
|
|
lda.z dist_sq+1
|
|
adc.z __10+1
|
|
sta.z dist_sq+1
|
|
// if(dist_sq<2*9*2*9)
|
|
// [35] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@6 -- vwsz1_ge_vwsc1_then_la1
|
|
lda.z dist_sq
|
|
cmp #<2*9*2*9
|
|
lda.z dist_sq+1
|
|
sbc #>2*9*2*9
|
|
bvc !+
|
|
eor #$80
|
|
!:
|
|
bpl __b6
|
|
// main::@7
|
|
// *sc = '*'
|
|
// [36] *((byte*) main::sc#10) ← (byte) '*' -- _deref_pbuz1=vbuc1
|
|
lda #'*'
|
|
ldy #0
|
|
sta (sc),y
|
|
// count++;
|
|
// [37] (word) main::count#1 ← ++ (word) main::count#10 -- vwuz1=_inc_vwuz1
|
|
inc.z count
|
|
bne !+
|
|
inc.z count+1
|
|
!:
|
|
// [38] phi from main::@11 main::@7 to main::@6 [phi:main::@11/main::@7->main::@6]
|
|
// [38] phi (word) main::count#12 = (word) main::count#10 [phi:main::@11/main::@7->main::@6#0] -- register_copy
|
|
// main::@6
|
|
__b6:
|
|
// sc++;
|
|
// [39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10 -- pbuz1=_inc_pbuz1
|
|
inc.z sc
|
|
bne !+
|
|
inc.z sc+1
|
|
!:
|
|
// for(char x=0;x<40;x++)
|
|
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1
|
|
inc.z x
|
|
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
|
|
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
|
|
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
|
|
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
|
|
jmp __b3
|
|
s: .text " chars"
|
|
.byte 0
|
|
}
|
|
// mul8s
|
|
// Multiply of two signed chars to a signed int
|
|
// Fixes offsets introduced by using unsigned multiplication
|
|
// mul8s(signed byte zp($a) a, signed byte register(Y) b)
|
|
mul8s: {
|
|
.label m = 6
|
|
.label a = $a
|
|
// mul8u((char)a, (char) b)
|
|
// [42] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#2 -- vbuxx=vbuz1
|
|
ldx.z a
|
|
// [43] (byte) mul8u::b#0 ← (byte)(signed byte) mul8s::b#2 -- vbuaa=vbuyy
|
|
tya
|
|
// [44] call mul8u
|
|
jsr mul8u
|
|
// [45] (word) mul8u::return#2 ← (word) mul8u::res#2
|
|
// mul8s::@5
|
|
// m = mul8u((char)a, (char) b)
|
|
// [46] (word) mul8s::m#0 ← (word) mul8u::return#2
|
|
// if(a<0)
|
|
// [47] if((signed byte) mul8s::a#2>=(signed byte) 0) goto mul8s::@1 -- vbsz1_ge_0_then_la1
|
|
lda.z a
|
|
cmp #0
|
|
bpl __b1
|
|
// mul8s::@3
|
|
// >m
|
|
// [48] (byte~) mul8s::$6 ← > (word) mul8s::m#0 -- vbuaa=_hi_vwuz1
|
|
lda.z m+1
|
|
// >m = (>m)-(char)b
|
|
// [49] (byte~) mul8s::$11 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#2 -- vbuaa=vbuaa_minus_vbuyy
|
|
sty.z $ff
|
|
sec
|
|
sbc.z $ff
|
|
// [50] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$11 -- vwuz1=vwuz1_sethi_vbuaa
|
|
sta.z m+1
|
|
// [51] phi from mul8s::@3 mul8s::@5 to mul8s::@1 [phi:mul8s::@3/mul8s::@5->mul8s::@1]
|
|
// [51] phi (word) mul8s::m#5 = (word) mul8s::m#1 [phi:mul8s::@3/mul8s::@5->mul8s::@1#0] -- register_copy
|
|
// mul8s::@1
|
|
__b1:
|
|
// if(b<0)
|
|
// [52] if((signed byte) mul8s::b#2>=(signed byte) 0) goto mul8s::@2 -- vbsyy_ge_0_then_la1
|
|
cpy #0
|
|
bpl __b2
|
|
// mul8s::@4
|
|
// >m
|
|
// [53] (byte~) mul8s::$9 ← > (word) mul8s::m#5 -- vbuaa=_hi_vwuz1
|
|
lda.z m+1
|
|
// >m = (>m)-(char)a
|
|
// [54] (byte~) mul8s::$12 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::a#2 -- vbuaa=vbuaa_minus_vbuz1
|
|
sec
|
|
sbc.z a
|
|
// [55] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$12 -- vwuz1=vwuz1_sethi_vbuaa
|
|
sta.z m+1
|
|
// [56] phi from mul8s::@1 mul8s::@4 to mul8s::@2 [phi:mul8s::@1/mul8s::@4->mul8s::@2]
|
|
// [56] phi (word) mul8s::m#4 = (word) mul8s::m#5 [phi:mul8s::@1/mul8s::@4->mul8s::@2#0] -- register_copy
|
|
// mul8s::@2
|
|
__b2:
|
|
// mul8s::@return
|
|
// }
|
|
// [57] return
|
|
rts
|
|
}
|
|
// mul8u
|
|
// Perform binary multiplication of two unsigned 8-bit chars into a 16-bit unsigned int
|
|
// mul8u(byte register(X) a, byte register(A) b)
|
|
mul8u: {
|
|
.label mb = 8
|
|
.label res = 6
|
|
.label return = 6
|
|
// mb = b
|
|
// [58] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa
|
|
sta.z mb
|
|
lda #0
|
|
sta.z mb+1
|
|
// [59] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1
|
|
sta.z res
|
|
sta.z res+1
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy
|
|
// mul8u::@1
|
|
__b1:
|
|
// while(a!=0)
|
|
// [60] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1
|
|
cpx #0
|
|
bne __b2
|
|
// mul8u::@return
|
|
// }
|
|
// [61] return
|
|
rts
|
|
// mul8u::@2
|
|
__b2:
|
|
// a&1
|
|
// [62] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1
|
|
txa
|
|
and #1
|
|
// if( (a&1) != 0)
|
|
// [63] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1
|
|
cmp #0
|
|
beq __b3
|
|
// mul8u::@4
|
|
// res = res + mb
|
|
// [64] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
|
|
lda.z res
|
|
clc
|
|
adc.z mb
|
|
sta.z res
|
|
lda.z res+1
|
|
adc.z mb+1
|
|
sta.z res+1
|
|
// [65] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
|
|
// [65] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
|
|
// mul8u::@3
|
|
__b3:
|
|
// a = a>>1
|
|
// [66] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuxx=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
tax
|
|
// mb = mb<<1
|
|
// [67] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
|
|
asl.z mb
|
|
rol.z mb+1
|
|
// [59] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
|
|
// [59] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
|
|
// [59] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
|
|
// [59] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// cputs
|
|
// Output a NUL-terminated string at the current cursor position
|
|
// cputs(byte* zp(8) s)
|
|
cputs: {
|
|
.label s = 8
|
|
// [69] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1]
|
|
// [69] phi (to_nomodify byte*) cputs::s#3 = (to_nomodify byte*) cputs::s#4 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy
|
|
// cputs::@1
|
|
__b1:
|
|
// c=*s++
|
|
// [70] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#3) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (s),y
|
|
// while(c=*s++)
|
|
// [71] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#3 -- pbuz1=_inc_pbuz1
|
|
inc.z s
|
|
bne !+
|
|
inc.z s+1
|
|
!:
|
|
// [72] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1
|
|
cmp #0
|
|
bne __b2
|
|
// cputs::@return
|
|
// }
|
|
// [73] return
|
|
rts
|
|
// cputs::@2
|
|
__b2:
|
|
// cputc(c)
|
|
// [74] (byte) cputc::c#0 ← (byte) cputs::c#1
|
|
// [75] call cputc
|
|
// [76] phi from cputs::@2 to cputc [phi:cputs::@2->cputc]
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#0 [phi:cputs::@2->cputc#0] -- register_copy
|
|
jsr cputc
|
|
jmp __b1
|
|
}
|
|
// 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')
|
|
// [77] if((byte) cputc::c#3==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1
|
|
cmp #'\n'
|
|
beq __b1
|
|
// cputc::@2
|
|
// *conio_cursor_text++ = c
|
|
// [78] *((byte*) conio_cursor_text) ← (byte) cputc::c#3 -- _deref_pbuz1=vbuaa
|
|
ldy #0
|
|
sta (conio_cursor_text),y
|
|
// *conio_cursor_text++ = c;
|
|
// [79] (byte*) conio_cursor_text ← ++ (byte*) conio_cursor_text -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_text
|
|
bne !+
|
|
inc.z conio_cursor_text+1
|
|
!:
|
|
// *conio_cursor_color++ = conio_textcolor
|
|
// [80] *((byte*) conio_cursor_color) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1
|
|
lda #CONIO_TEXTCOLOR_DEFAULT
|
|
ldy #0
|
|
sta (conio_cursor_color),y
|
|
// *conio_cursor_color++ = conio_textcolor;
|
|
// [81] (byte*) conio_cursor_color ← ++ (byte*) conio_cursor_color -- pbuz1=_inc_pbuz1
|
|
inc.z conio_cursor_color
|
|
bne !+
|
|
inc.z conio_cursor_color+1
|
|
!:
|
|
// if(++conio_cursor_x==CONIO_WIDTH)
|
|
// [82] (byte) conio_cursor_x ← ++ (byte) conio_cursor_x -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_x
|
|
// [83] if((byte) conio_cursor_x!=(byte) $28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$28
|
|
cmp.z conio_cursor_x
|
|
bne __breturn
|
|
// cputc::@3
|
|
// conio_cursor_x = 0
|
|
// [84] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// ++conio_cursor_y;
|
|
// [85] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// cscroll()
|
|
// [86] call cscroll
|
|
jsr cscroll
|
|
// cputc::@return
|
|
__breturn:
|
|
// }
|
|
// [87] return
|
|
rts
|
|
// [88] phi from cputc to cputc::@1 [phi:cputc->cputc::@1]
|
|
// cputc::@1
|
|
__b1:
|
|
// cputln()
|
|
// [89] call cputln
|
|
jsr cputln
|
|
rts
|
|
}
|
|
// cputln
|
|
// Print a newline
|
|
cputln: {
|
|
.label __1 = $d
|
|
.label __2 = $f
|
|
.label ln_offset = $16
|
|
// ln_offset = CONIO_WIDTH - conio_cursor_x
|
|
// [90] (word) cputln::ln_offset#0 ← (byte) $28 - (byte) conio_cursor_x -- vwuz1=vbuc1_minus_vbuz2
|
|
sec
|
|
lda #$28
|
|
sbc.z conio_cursor_x
|
|
sta.z ln_offset
|
|
lda #0
|
|
sbc #0
|
|
sta.z ln_offset+1
|
|
// conio_cursor_text + ln_offset
|
|
// [91] (byte*~) cputln::$1 ← (byte*) conio_cursor_text + (word) cputln::ln_offset#0 -- pbuz1=pbuz1_plus_vwuz2
|
|
lda.z __1
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __1
|
|
lda.z __1+1
|
|
adc.z ln_offset+1
|
|
sta.z __1+1
|
|
// conio_cursor_text = conio_cursor_text + ln_offset
|
|
// [92] (byte*) conio_cursor_text ← (byte*~) cputln::$1
|
|
// conio_cursor_color + ln_offset
|
|
// [93] (byte*~) cputln::$2 ← (byte*) conio_cursor_color + (word) cputln::ln_offset#0 -- pbuz1=pbuz1_plus_vwuz2
|
|
lda.z __2
|
|
clc
|
|
adc.z ln_offset
|
|
sta.z __2
|
|
lda.z __2+1
|
|
adc.z ln_offset+1
|
|
sta.z __2+1
|
|
// conio_cursor_color = conio_cursor_color + ln_offset
|
|
// [94] (byte*) conio_cursor_color ← (byte*~) cputln::$2
|
|
// conio_cursor_x = 0
|
|
// [95] (byte) conio_cursor_x ← (byte) 0 -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z conio_cursor_x
|
|
// conio_cursor_y++;
|
|
// [96] (byte) conio_cursor_y ← ++ (byte) conio_cursor_y -- vbuz1=_inc_vbuz1
|
|
inc.z conio_cursor_y
|
|
// cscroll()
|
|
// [97] call cscroll
|
|
jsr cscroll
|
|
// cputln::@return
|
|
// }
|
|
// [98] return
|
|
rts
|
|
}
|
|
// cscroll
|
|
// Scroll the entire screen if the cursor is beyond the last line
|
|
cscroll: {
|
|
.label __7 = $d
|
|
.label __8 = $f
|
|
// if(conio_cursor_y==CONIO_HEIGHT)
|
|
// [99] if((byte) conio_cursor_y!=(byte) $19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$19
|
|
cmp.z conio_cursor_y
|
|
bne __breturn
|
|
// [100] 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)
|
|
// [101] call memcpy
|
|
// [123] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy]
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_TEXT+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [102] 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)
|
|
// [103] call memcpy
|
|
// [123] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy]
|
|
// [123] phi (void*) memcpy::destination#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z memcpy.destination+1
|
|
// [123] phi (void*) memcpy::source#2 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(byte) $28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source
|
|
lda #>CONIO_SCREEN_COLORS+$28
|
|
sta.z memcpy.source+1
|
|
jsr memcpy
|
|
// [104] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3]
|
|
// cscroll::@3
|
|
// memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH)
|
|
// [105] call memset
|
|
// [114] phi from cscroll::@3 to memset [phi:cscroll::@3->memset]
|
|
// [114] phi (byte) memset::c#5 = (byte) ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_TEXT+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@3->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// [106] 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)
|
|
// [107] call memset
|
|
// [114] phi from cscroll::@4 to memset [phi:cscroll::@4->memset]
|
|
// [114] phi (byte) memset::c#5 = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1
|
|
ldx #CONIO_TEXTCOLOR_DEFAULT
|
|
// [114] phi (void*) memset::str#4 = (void*)(const nomodify byte*) CONIO_SCREEN_COLORS+(word)(number) $19*(number) $28-(byte) $28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1
|
|
lda #<CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str
|
|
lda #>CONIO_SCREEN_COLORS+$19*$28-$28
|
|
sta.z memset.str+1
|
|
// [114] phi (word) memset::num#3 = (byte) $28 [phi:cscroll::@4->memset#2] -- vwuz1=vbuc1
|
|
lda #<$28
|
|
sta.z memset.num
|
|
lda #>$28
|
|
sta.z memset.num+1
|
|
jsr memset
|
|
// cscroll::@5
|
|
// conio_cursor_text-CONIO_WIDTH
|
|
// [108] (byte*~) cscroll::$7 ← (byte*) conio_cursor_text - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1
|
|
lda.z __7
|
|
sec
|
|
sbc #<$28
|
|
sta.z __7
|
|
lda.z __7+1
|
|
sbc #>$28
|
|
sta.z __7+1
|
|
// conio_cursor_text = conio_cursor_text-CONIO_WIDTH
|
|
// [109] (byte*) conio_cursor_text ← (byte*~) cscroll::$7
|
|
// conio_cursor_color-CONIO_WIDTH
|
|
// [110] (byte*~) cscroll::$8 ← (byte*) conio_cursor_color - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1
|
|
lda.z __8
|
|
sec
|
|
sbc #<$28
|
|
sta.z __8
|
|
lda.z __8+1
|
|
sbc #>$28
|
|
sta.z __8+1
|
|
// conio_cursor_color = conio_cursor_color-CONIO_WIDTH
|
|
// [111] (byte*) conio_cursor_color ← (byte*~) cscroll::$8
|
|
// conio_cursor_y--;
|
|
// [112] (byte) conio_cursor_y ← -- (byte) conio_cursor_y -- vbuz1=_dec_vbuz1
|
|
dec.z conio_cursor_y
|
|
// cscroll::@return
|
|
__breturn:
|
|
// }
|
|
// [113] return
|
|
rts
|
|
}
|
|
// 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($16) str, byte register(X) c, word zp($12) num)
|
|
memset: {
|
|
.label end = $12
|
|
.label dst = $16
|
|
.label num = $12
|
|
.label str = $16
|
|
// if(num>0)
|
|
// [115] if((word) memset::num#3<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1
|
|
lda.z num
|
|
bne !+
|
|
lda.z num+1
|
|
beq __breturn
|
|
!:
|
|
// memset::@1
|
|
// end = (char*)str + num
|
|
// [116] (byte*) memset::end#0 ← (byte*)(void*) memset::str#4 + (word) memset::num#3 -- pbuz1=pbuz2_plus_vwuz1
|
|
lda.z end
|
|
clc
|
|
adc.z str
|
|
sta.z end
|
|
lda.z end+1
|
|
adc.z str+1
|
|
sta.z end+1
|
|
// [117] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#4
|
|
// [118] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
|
|
// [118] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy
|
|
// memset::@2
|
|
__b2:
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [119] if((byte*) memset::dst#2!=(byte*) 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
|
|
__breturn:
|
|
// }
|
|
// [120] return
|
|
rts
|
|
// memset::@3
|
|
__b3:
|
|
// *dst = c
|
|
// [121] *((byte*) memset::dst#2) ← (byte) memset::c#5 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (dst),y
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [122] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
jmp __b2
|
|
}
|
|
// 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($16) destination, void* zp($12) source)
|
|
memcpy: {
|
|
.label src_end = $14
|
|
.label dst = $16
|
|
.label src = $12
|
|
.label source = $12
|
|
.label destination = $16
|
|
// src_end = (char*)source+num
|
|
// [124] (byte*) memcpy::src_end#0 ← (byte*)(void*) memcpy::source#2 + (word)(number) $19*(number) $28-(number) $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
|
|
// [125] (byte*) memcpy::src#4 ← (byte*)(void*) memcpy::source#2
|
|
// [126] (byte*) memcpy::dst#4 ← (byte*)(void*) memcpy::destination#2
|
|
// [127] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1]
|
|
// [127] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy
|
|
// [127] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy
|
|
// memcpy::@1
|
|
__b1:
|
|
// while(src!=src_end)
|
|
// [128] if((byte*) memcpy::src#2!=(byte*) 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
|
|
// }
|
|
// [129] return
|
|
rts
|
|
// memcpy::@2
|
|
__b2:
|
|
// *dst++ = *src++
|
|
// [130] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (src),y
|
|
sta (dst),y
|
|
// *dst++ = *src++;
|
|
// [131] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [132] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1
|
|
inc.z src
|
|
bne !+
|
|
inc.z src+1
|
|
!:
|
|
jmp __b1
|
|
}
|
|
// printf_uint
|
|
// Print an unsigned int using a specific format
|
|
// printf_uint(word zp(2) uvalue)
|
|
printf_uint: {
|
|
.label uvalue = 2
|
|
// printf_uint::@1
|
|
// printf_buffer.sign = format.sign_always?'+':0
|
|
// [134] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
|
// Handle any sign
|
|
lda #0
|
|
sta printf_buffer
|
|
// utoa(uvalue, printf_buffer.digits, format.radix)
|
|
// [135] (word) utoa::value#1 ← (word) printf_uint::uvalue#0
|
|
// [136] call utoa
|
|
// Format number into buffer
|
|
// [147] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa]
|
|
jsr utoa
|
|
// printf_uint::@2
|
|
// printf_number_buffer(printf_buffer, format)
|
|
// [137] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuaa=_deref_pbuc1
|
|
lda printf_buffer
|
|
// [138] call printf_number_buffer
|
|
// Print using format
|
|
// [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer]
|
|
jsr printf_number_buffer
|
|
// printf_uint::@return
|
|
// }
|
|
// [139] return
|
|
rts
|
|
}
|
|
// 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)
|
|
// [141] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2 -- vbuc1_eq_vbuaa_then_la1
|
|
cmp #0
|
|
beq __b2
|
|
// printf_number_buffer::@3
|
|
// cputc(buffer.sign)
|
|
// [142] (byte) cputc::c#2 ← (byte) printf_number_buffer::buffer_sign#0
|
|
// [143] call cputc
|
|
// [76] phi from printf_number_buffer::@3 to cputc [phi:printf_number_buffer::@3->cputc]
|
|
// [76] phi (byte) cputc::c#3 = (byte) cputc::c#2 [phi:printf_number_buffer::@3->cputc#0] -- register_copy
|
|
jsr cputc
|
|
// [144] 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)
|
|
// [145] call cputs
|
|
// [68] phi from printf_number_buffer::@2 to cputs [phi:printf_number_buffer::@2->cputs]
|
|
// [68] phi (to_nomodify byte*) cputs::s#4 = (const byte*) 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
|
|
// }
|
|
// [146] return
|
|
rts
|
|
}
|
|
// 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(2) value, byte* zp($12) buffer)
|
|
utoa: {
|
|
.const max_digits = 5
|
|
.label digit_value = $16
|
|
.label buffer = $12
|
|
.label digit = $a
|
|
.label value = 2
|
|
// [148] phi from utoa to utoa::@1 [phi:utoa->utoa::@1]
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) 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
|
|
// [148] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#1 [phi:utoa->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1
|
|
txa
|
|
sta.z digit
|
|
// utoa::@1
|
|
__b1:
|
|
// for( char digit=0; digit<max_digits-1; digit++ )
|
|
// [149] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1
|
|
lda.z digit
|
|
cmp #max_digits-1
|
|
bcc __b2
|
|
// utoa::@3
|
|
// *buffer++ = DIGITS[(char)value]
|
|
// [150] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1
|
|
lda.z value
|
|
// [151] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa
|
|
tay
|
|
lda DIGITS,y
|
|
ldy #0
|
|
sta (buffer),y
|
|
// *buffer++ = DIGITS[(char)value];
|
|
// [152] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1
|
|
inc.z buffer
|
|
bne !+
|
|
inc.z buffer+1
|
|
!:
|
|
// *buffer = 0
|
|
// [153] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
tay
|
|
sta (buffer),y
|
|
// utoa::@return
|
|
// }
|
|
// [154] return
|
|
rts
|
|
// utoa::@2
|
|
__b2:
|
|
// digit_value = digit_values[digit]
|
|
// [155] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z digit
|
|
asl
|
|
// [156] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) 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)
|
|
// [157] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1
|
|
cpx #0
|
|
bne __b5
|
|
// utoa::@7
|
|
// [158] if((word) utoa::value#2>=(word) 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
|
|
// [159] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4]
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy
|
|
// utoa::@4
|
|
__b4:
|
|
// for( char digit=0; digit<max_digits-1; digit++ )
|
|
// [160] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1
|
|
inc.z digit
|
|
// [148] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1]
|
|
// [148] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy
|
|
// [148] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy
|
|
// [148] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy
|
|
// [148] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy
|
|
jmp __b1
|
|
// utoa::@5
|
|
__b5:
|
|
// utoa_append(buffer++, value, digit_value)
|
|
// [161] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
|
// [162] (word) utoa_append::value#0 ← (word) utoa::value#2
|
|
// [163] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
|
// [164] call utoa_append
|
|
// [168] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append]
|
|
jsr utoa_append
|
|
// utoa_append(buffer++, value, digit_value)
|
|
// [165] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
|
// utoa::@6
|
|
// value = utoa_append(buffer++, value, digit_value)
|
|
// [166] (word) utoa::value#0 ← (word) utoa_append::return#0
|
|
// value = utoa_append(buffer++, value, digit_value);
|
|
// [167] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1
|
|
inc.z buffer
|
|
bne !+
|
|
inc.z buffer+1
|
|
!:
|
|
// [159] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4]
|
|
// [159] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy
|
|
// [159] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1
|
|
ldx #1
|
|
// [159] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy
|
|
jmp __b4
|
|
}
|
|
// 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($12) buffer, word zp(2) value, word zp($16) sub)
|
|
utoa_append: {
|
|
.label buffer = $12
|
|
.label value = 2
|
|
.label sub = $16
|
|
.label return = 2
|
|
// [169] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1]
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy
|
|
// utoa_append::@1
|
|
__b1:
|
|
// while (value >= sub)
|
|
// [170] if((word) utoa_append::value#2>=(word) 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]
|
|
// [171] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
|
lda DIGITS,x
|
|
ldy #0
|
|
sta (buffer),y
|
|
// utoa_append::@return
|
|
// }
|
|
// [172] return
|
|
rts
|
|
// utoa_append::@2
|
|
__b2:
|
|
// digit++;
|
|
// [173] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// value -= sub
|
|
// [174] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) 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
|
|
// [169] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1]
|
|
// [169] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy
|
|
// [169] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// gotoxy
|
|
// Set the cursor to the specified position
|
|
gotoxy: {
|
|
.const x = 0
|
|
.const y = 0
|
|
// gotoxy::@1
|
|
// conio_cursor_x = x
|
|
// [176] (byte) conio_cursor_x ← (const byte) gotoxy::x#2 -- vbuz1=vbuc1
|
|
lda #x
|
|
sta.z conio_cursor_x
|
|
// conio_cursor_y = y
|
|
// [177] (byte) conio_cursor_y ← (const byte) gotoxy::y#2 -- vbuz1=vbuc1
|
|
lda #y
|
|
sta.z conio_cursor_y
|
|
// conio_cursor_text = CONIO_SCREEN_TEXT + offset
|
|
// [178] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text
|
|
lda #>CONIO_SCREEN_TEXT
|
|
sta.z conio_cursor_text+1
|
|
// conio_cursor_color = CONIO_SCREEN_COLORS + offset
|
|
// [179] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS -- pbuz1=pbuc1
|
|
lda #<CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color
|
|
lda #>CONIO_SCREEN_COLORS
|
|
sta.z conio_cursor_color+1
|
|
// gotoxy::@return
|
|
// }
|
|
// [180] return
|
|
rts
|
|
}
|
|
// File 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
|
|
|