mirror of https://gitlab.com/camelot/kickc.git
2540 lines
130 KiB
Plaintext
2540 lines
130 KiB
Plaintext
Resolved forward reference mulf_sqr1 to mulf_sqr1
|
|
Resolved forward reference mulf_sqr2 to mulf_sqr2
|
|
Setting inferred volatile on symbol affected by address-of: fmul8::aa in asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
Setting inferred volatile on symbol affected by address-of: fmul8::bb in asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
Setting inferred volatile on symbol affected by address-of: fmul8::cc in asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
Inlined call call __init
|
|
Eliminating unused variable with no statement memset::$2
|
|
Eliminating unused variable with no statement main::$1
|
|
Eliminating unused variable with no statement main::$5
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
|
|
void print_schar_at(signed char b , char *at)
|
|
print_schar_at: scope:[print_schar_at] from main::@1 main::@3 main::@9
|
|
print_schar_at::at#6 = phi( main::@1/print_schar_at::at#0, main::@3/print_schar_at::at#1, main::@9/print_schar_at::at#2 )
|
|
print_schar_at::b#4 = phi( main::@1/print_schar_at::b#1, main::@3/print_schar_at::b#2, main::@9/print_schar_at::b#3 )
|
|
print_schar_at::$0 = print_schar_at::b#4 < 0
|
|
if(print_schar_at::$0) goto print_schar_at::@1
|
|
to:print_schar_at::@3
|
|
print_schar_at::@1: scope:[print_schar_at] from print_schar_at
|
|
print_schar_at::b#7 = phi( print_schar_at/print_schar_at::b#4 )
|
|
print_schar_at::at#3 = phi( print_schar_at/print_schar_at::at#6 )
|
|
print_char_at::ch#0 = '-'
|
|
print_char_at::at#0 = print_schar_at::at#3
|
|
call print_char_at
|
|
to:print_schar_at::@4
|
|
print_schar_at::@4: scope:[print_schar_at] from print_schar_at::@1
|
|
print_schar_at::at#7 = phi( print_schar_at::@1/print_schar_at::at#3 )
|
|
print_schar_at::b#5 = phi( print_schar_at::@1/print_schar_at::b#7 )
|
|
print_schar_at::$5 = - print_schar_at::b#5
|
|
print_schar_at::b#0 = print_schar_at::$5
|
|
to:print_schar_at::@2
|
|
print_schar_at::@3: scope:[print_schar_at] from print_schar_at
|
|
print_schar_at::b#9 = phi( print_schar_at/print_schar_at::b#4 )
|
|
print_schar_at::at#4 = phi( print_schar_at/print_schar_at::at#6 )
|
|
print_char_at::ch#1 = ' '
|
|
print_char_at::at#1 = print_schar_at::at#4
|
|
call print_char_at
|
|
to:print_schar_at::@5
|
|
print_schar_at::@5: scope:[print_schar_at] from print_schar_at::@3
|
|
print_schar_at::b#8 = phi( print_schar_at::@3/print_schar_at::b#9 )
|
|
print_schar_at::at#8 = phi( print_schar_at::@3/print_schar_at::at#4 )
|
|
to:print_schar_at::@2
|
|
print_schar_at::@2: scope:[print_schar_at] from print_schar_at::@4 print_schar_at::@5
|
|
print_schar_at::b#6 = phi( print_schar_at::@4/print_schar_at::b#0, print_schar_at::@5/print_schar_at::b#8 )
|
|
print_schar_at::at#5 = phi( print_schar_at::@4/print_schar_at::at#7, print_schar_at::@5/print_schar_at::at#8 )
|
|
print_schar_at::$1 = print_schar_at::at#5 + 1
|
|
print_uchar_at::b#0 = (char)print_schar_at::b#6
|
|
print_uchar_at::at#0 = print_schar_at::$1
|
|
call print_uchar_at
|
|
to:print_schar_at::@6
|
|
print_schar_at::@6: scope:[print_schar_at] from print_schar_at::@2
|
|
to:print_schar_at::@return
|
|
print_schar_at::@return: scope:[print_schar_at] from print_schar_at::@6
|
|
return
|
|
to:@return
|
|
|
|
void print_uchar_at(char b , char *at)
|
|
print_uchar_at: scope:[print_uchar_at] from print_schar_at::@2
|
|
print_uchar_at::at#1 = phi( print_schar_at::@2/print_uchar_at::at#0 )
|
|
print_uchar_at::b#1 = phi( print_schar_at::@2/print_uchar_at::b#0 )
|
|
print_uchar_at::$0 = print_uchar_at::b#1 >> 4
|
|
print_char_at::ch#2 = print_hextab[print_uchar_at::$0]
|
|
print_char_at::at#2 = print_uchar_at::at#1
|
|
call print_char_at
|
|
to:print_uchar_at::@1
|
|
print_uchar_at::@1: scope:[print_uchar_at] from print_uchar_at
|
|
print_uchar_at::at#2 = phi( print_uchar_at/print_uchar_at::at#1 )
|
|
print_uchar_at::b#2 = phi( print_uchar_at/print_uchar_at::b#1 )
|
|
print_uchar_at::$2 = print_uchar_at::b#2 & $f
|
|
print_uchar_at::$3 = print_uchar_at::at#2 + 1
|
|
print_char_at::ch#3 = print_hextab[print_uchar_at::$2]
|
|
print_char_at::at#3 = print_uchar_at::$3
|
|
call print_char_at
|
|
to:print_uchar_at::@2
|
|
print_uchar_at::@2: scope:[print_uchar_at] from print_uchar_at::@1
|
|
to:print_uchar_at::@return
|
|
print_uchar_at::@return: scope:[print_uchar_at] from print_uchar_at::@2
|
|
return
|
|
to:@return
|
|
|
|
void print_char_at(char ch , char *at)
|
|
print_char_at: scope:[print_char_at] from print_schar_at::@1 print_schar_at::@3 print_uchar_at print_uchar_at::@1
|
|
print_char_at::at#4 = phi( print_schar_at::@1/print_char_at::at#0, print_schar_at::@3/print_char_at::at#1, print_uchar_at/print_char_at::at#2, print_uchar_at::@1/print_char_at::at#3 )
|
|
print_char_at::ch#4 = phi( print_schar_at::@1/print_char_at::ch#0, print_schar_at::@3/print_char_at::ch#1, print_uchar_at/print_char_at::ch#2, print_uchar_at::@1/print_char_at::ch#3 )
|
|
*print_char_at::at#4 = print_char_at::ch#4
|
|
to:print_char_at::@return
|
|
print_char_at::@return: scope:[print_char_at] from print_char_at
|
|
return
|
|
to:@return
|
|
|
|
void print_cls()
|
|
print_cls: scope:[print_cls] from init_screen
|
|
print_screen#2 = phi( init_screen/print_screen#4 )
|
|
memset::str#0 = (void *)print_screen#2
|
|
memset::c#0 = ' '
|
|
memset::num#0 = $3e8
|
|
call memset
|
|
memset::return#0 = memset::return#2
|
|
to:print_cls::@1
|
|
print_cls::@1: scope:[print_cls] from print_cls
|
|
to:print_cls::@return
|
|
print_cls::@return: scope:[print_cls] from print_cls::@1
|
|
return
|
|
to:@return
|
|
|
|
void * memset(void *str , char c , unsigned int num)
|
|
memset: scope:[memset] from print_cls
|
|
memset::c#4 = phi( print_cls/memset::c#0 )
|
|
memset::str#3 = phi( print_cls/memset::str#0 )
|
|
memset::num#1 = phi( print_cls/memset::num#0 )
|
|
memset::$0 = memset::num#1 > 0
|
|
memset::$1 = ! memset::$0
|
|
if(memset::$1) goto memset::@1
|
|
to:memset::@2
|
|
memset::@1: scope:[memset] from memset memset::@3
|
|
memset::str#1 = phi( memset/memset::str#3, memset::@3/memset::str#4 )
|
|
memset::return#1 = memset::str#1
|
|
to:memset::@return
|
|
memset::@2: scope:[memset] from memset
|
|
memset::c#3 = phi( memset/memset::c#4 )
|
|
memset::num#2 = phi( memset/memset::num#1 )
|
|
memset::str#2 = phi( memset/memset::str#3 )
|
|
memset::$4 = (char *)memset::str#2
|
|
memset::end#0 = memset::$4 + memset::num#2
|
|
memset::dst#0 = ((char *)) memset::str#2
|
|
to:memset::@3
|
|
memset::@3: scope:[memset] from memset::@2 memset::@4
|
|
memset::c#2 = phi( memset::@2/memset::c#3, memset::@4/memset::c#1 )
|
|
memset::str#4 = phi( memset::@2/memset::str#2, memset::@4/memset::str#5 )
|
|
memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 )
|
|
memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 )
|
|
memset::$3 = memset::dst#2 != memset::end#1
|
|
if(memset::$3) goto memset::@4
|
|
to:memset::@1
|
|
memset::@4: scope:[memset] from memset::@3
|
|
memset::str#5 = phi( memset::@3/memset::str#4 )
|
|
memset::end#2 = phi( memset::@3/memset::end#1 )
|
|
memset::dst#3 = phi( memset::@3/memset::dst#2 )
|
|
memset::c#1 = phi( memset::@3/memset::c#2 )
|
|
*memset::dst#3 = memset::c#1
|
|
memset::dst#1 = ++ memset::dst#3
|
|
to:memset::@3
|
|
memset::@return: scope:[memset] from memset::@1
|
|
memset::return#3 = phi( memset::@1/memset::return#1 )
|
|
memset::return#2 = memset::return#3
|
|
return
|
|
to:@return
|
|
|
|
void main()
|
|
main: scope:[main] from __start::@1
|
|
print_screen#6 = phi( __start::@1/print_screen#7 )
|
|
call init_screen
|
|
to:main::@6
|
|
main::@6: scope:[main] from main
|
|
main::at_line#0 = (char *)$400
|
|
main::at#0 = main::at_line#0 + 4
|
|
main::k#0 = 0
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@6 main::@7
|
|
main::at_line#7 = phi( main::@6/main::at_line#0, main::@7/main::at_line#5 )
|
|
main::at#4 = phi( main::@6/main::at#0, main::@7/main::at#1 )
|
|
main::k#2 = phi( main::@6/main::k#0, main::@7/main::k#1 )
|
|
print_schar_at::b#1 = vals[main::k#2]
|
|
print_schar_at::at#0 = main::at#4
|
|
call print_schar_at
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@1
|
|
main::at_line#5 = phi( main::@1/main::at_line#7 )
|
|
main::k#3 = phi( main::@1/main::k#2 )
|
|
main::at#5 = phi( main::@1/main::at#4 )
|
|
main::at#1 = main::at#5 + 4
|
|
main::k#1 = main::k#3 + rangenext(0,8)
|
|
main::$3 = main::k#1 != rangelast(0,8)
|
|
if(main::$3) goto main::@1
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@7
|
|
main::at_line#3 = phi( main::@7/main::at_line#5 )
|
|
main::i#0 = 0
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@2 main::@5
|
|
main::i#2 = phi( main::@2/main::i#0, main::@5/main::i#1 )
|
|
main::at_line#2 = phi( main::@2/main::at_line#3, main::@5/main::at_line#4 )
|
|
main::at_line#1 = main::at_line#2 + $28
|
|
main::at#2 = main::at_line#1
|
|
print_schar_at::b#2 = vals[main::i#2]
|
|
print_schar_at::at#1 = main::at#2
|
|
call print_schar_at
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@3
|
|
main::at_line#10 = phi( main::@3/main::at_line#1 )
|
|
main::i#6 = phi( main::@3/main::i#2 )
|
|
main::at#9 = phi( main::@3/main::at#2 )
|
|
main::j#0 = 0
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@10 main::@8
|
|
main::at_line#9 = phi( main::@10/main::at_line#6, main::@8/main::at_line#10 )
|
|
main::j#2 = phi( main::@10/main::j#1, main::@8/main::j#0 )
|
|
main::i#3 = phi( main::@10/main::i#5, main::@8/main::i#6 )
|
|
main::at#6 = phi( main::@10/main::at#8, main::@8/main::at#9 )
|
|
main::at#3 = main::at#6 + 4
|
|
fmul8::aa = vals[main::i#3]
|
|
fmul8::bb = vals[main::j#2]
|
|
call fmul8
|
|
fmul8::return#0 = fmul8::return#2
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@4
|
|
main::at_line#8 = phi( main::@4/main::at_line#9 )
|
|
main::i#7 = phi( main::@4/main::i#3 )
|
|
main::j#4 = phi( main::@4/main::j#2 )
|
|
main::at#7 = phi( main::@4/main::at#3 )
|
|
fmul8::return#3 = phi( main::@4/fmul8::return#0 )
|
|
main::r#0 = fmul8::return#3
|
|
print_schar_at::b#3 = main::r#0
|
|
print_schar_at::at#2 = main::at#7
|
|
call print_schar_at
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@9
|
|
main::at_line#6 = phi( main::@9/main::at_line#8 )
|
|
main::i#5 = phi( main::@9/main::i#7 )
|
|
main::at#8 = phi( main::@9/main::at#7 )
|
|
main::j#3 = phi( main::@9/main::j#4 )
|
|
main::j#1 = main::j#3 + rangenext(0,8)
|
|
main::$7 = main::j#1 != rangelast(0,8)
|
|
if(main::$7) goto main::@4
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@10
|
|
main::at_line#4 = phi( main::@10/main::at_line#6 )
|
|
main::i#4 = phi( main::@10/main::i#5 )
|
|
main::i#1 = main::i#4 + rangenext(0,8)
|
|
main::$8 = main::i#1 != rangelast(0,8)
|
|
if(main::$8) goto main::@3
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@5
|
|
return
|
|
to:@return
|
|
|
|
void init_screen()
|
|
init_screen: scope:[init_screen] from main
|
|
print_screen#4 = phi( main/print_screen#6 )
|
|
call print_cls
|
|
to:init_screen::@4
|
|
init_screen::@4: scope:[init_screen] from init_screen
|
|
init_screen::COLS#0 = (char *)$d800
|
|
init_screen::l#0 = 0
|
|
to:init_screen::@1
|
|
init_screen::@1: scope:[init_screen] from init_screen::@1 init_screen::@4
|
|
init_screen::l#2 = phi( init_screen::@1/init_screen::l#1, init_screen::@4/init_screen::l#0 )
|
|
init_screen::COLS#2 = phi( init_screen::@1/init_screen::COLS#2, init_screen::@4/init_screen::COLS#0 )
|
|
init_screen::COLS#2[init_screen::l#2] = init_screen::WHITE
|
|
init_screen::l#1 = init_screen::l#2 + rangenext(0,$27)
|
|
init_screen::$1 = init_screen::l#1 != rangelast(0,$27)
|
|
if(init_screen::$1) goto init_screen::@1
|
|
to:init_screen::@2
|
|
init_screen::@2: scope:[init_screen] from init_screen::@1
|
|
init_screen::COLS#4 = phi( init_screen::@1/init_screen::COLS#2 )
|
|
init_screen::m#0 = 0
|
|
to:init_screen::@3
|
|
init_screen::@3: scope:[init_screen] from init_screen::@2 init_screen::@3
|
|
init_screen::m#2 = phi( init_screen::@2/init_screen::m#0, init_screen::@3/init_screen::m#1 )
|
|
init_screen::COLS#3 = phi( init_screen::@2/init_screen::COLS#4, init_screen::@3/init_screen::COLS#1 )
|
|
init_screen::COLS#3[0] = init_screen::WHITE
|
|
init_screen::COLS#3[1] = init_screen::WHITE
|
|
init_screen::COLS#3[2] = init_screen::WHITE
|
|
init_screen::COLS#3[3] = init_screen::WHITE
|
|
init_screen::COLS#1 = init_screen::COLS#3 + $28
|
|
init_screen::m#1 = init_screen::m#2 + rangenext(0,$18)
|
|
init_screen::$2 = init_screen::m#1 != rangelast(0,$18)
|
|
if(init_screen::$2) goto init_screen::@3
|
|
to:init_screen::@return
|
|
init_screen::@return: scope:[init_screen] from init_screen::@3
|
|
return
|
|
to:@return
|
|
|
|
signed char fmul8(volatile signed char aa , volatile signed char bb)
|
|
fmul8: scope:[fmul8] from main::@4
|
|
fmul8::cc = 0
|
|
asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
fmul8::return#1 = fmul8::cc
|
|
to:fmul8::@return
|
|
fmul8::@return: scope:[fmul8] from fmul8
|
|
fmul8::return#4 = phi( fmul8/fmul8::return#1 )
|
|
fmul8::return#2 = fmul8::return#4
|
|
return
|
|
to:@return
|
|
|
|
void __start()
|
|
__start: scope:[__start] from
|
|
to:__start::__init1
|
|
__start::__init1: scope:[__start] from __start
|
|
print_screen#0 = (char *)$400
|
|
to:__start::@1
|
|
__start::@1: scope:[__start] from __start::__init1
|
|
print_screen#7 = phi( __start::__init1/print_screen#0 )
|
|
call main
|
|
to:__start::@2
|
|
__start::@2: scope:[__start] from __start::@1
|
|
print_screen#5 = phi( __start::@1/print_screen#7 )
|
|
to:__start::@return
|
|
__start::@return: scope:[__start] from __start::@2
|
|
print_screen#3 = phi( __start::@2/print_screen#5 )
|
|
print_screen#1 = print_screen#3
|
|
return
|
|
to:@return
|
|
|
|
SYMBOL TABLE SSA
|
|
__constant char RADIX::BINARY = 2
|
|
__constant char RADIX::DECIMAL = $a
|
|
__constant char RADIX::HEXADECIMAL = $10
|
|
__constant char RADIX::OCTAL = 8
|
|
void __start()
|
|
signed char fmul8(volatile signed char aa , volatile signed char bb)
|
|
__loadstore volatile signed char fmul8::aa
|
|
__loadstore volatile signed char fmul8::bb
|
|
__loadstore volatile signed char fmul8::cc
|
|
signed char fmul8::return
|
|
signed char fmul8::return#0
|
|
signed char fmul8::return#1
|
|
signed char fmul8::return#2
|
|
signed char fmul8::return#3
|
|
signed char fmul8::return#4
|
|
void init_screen()
|
|
bool init_screen::$1
|
|
bool init_screen::$2
|
|
char *init_screen::COLS
|
|
char *init_screen::COLS#0
|
|
char *init_screen::COLS#1
|
|
char *init_screen::COLS#2
|
|
char *init_screen::COLS#3
|
|
char *init_screen::COLS#4
|
|
__constant char init_screen::WHITE = 1
|
|
char init_screen::l
|
|
char init_screen::l#0
|
|
char init_screen::l#1
|
|
char init_screen::l#2
|
|
char init_screen::m
|
|
char init_screen::m#0
|
|
char init_screen::m#1
|
|
char init_screen::m#2
|
|
void main()
|
|
bool main::$3
|
|
bool main::$7
|
|
bool main::$8
|
|
char *main::at
|
|
char *main::at#0
|
|
char *main::at#1
|
|
char *main::at#2
|
|
char *main::at#3
|
|
char *main::at#4
|
|
char *main::at#5
|
|
char *main::at#6
|
|
char *main::at#7
|
|
char *main::at#8
|
|
char *main::at#9
|
|
char *main::at_line
|
|
char *main::at_line#0
|
|
char *main::at_line#1
|
|
char *main::at_line#10
|
|
char *main::at_line#2
|
|
char *main::at_line#3
|
|
char *main::at_line#4
|
|
char *main::at_line#5
|
|
char *main::at_line#6
|
|
char *main::at_line#7
|
|
char *main::at_line#8
|
|
char *main::at_line#9
|
|
char main::i
|
|
char main::i#0
|
|
char main::i#1
|
|
char main::i#2
|
|
char main::i#3
|
|
char main::i#4
|
|
char main::i#5
|
|
char main::i#6
|
|
char main::i#7
|
|
char main::j
|
|
char main::j#0
|
|
char main::j#1
|
|
char main::j#2
|
|
char main::j#3
|
|
char main::j#4
|
|
char main::k
|
|
char main::k#0
|
|
char main::k#1
|
|
char main::k#2
|
|
char main::k#3
|
|
signed char main::r
|
|
signed char main::r#0
|
|
void * memset(void *str , char c , unsigned int num)
|
|
bool memset::$0
|
|
bool memset::$1
|
|
bool memset::$3
|
|
char *memset::$4
|
|
char memset::c
|
|
char memset::c#0
|
|
char memset::c#1
|
|
char memset::c#2
|
|
char memset::c#3
|
|
char memset::c#4
|
|
char *memset::dst
|
|
char *memset::dst#0
|
|
char *memset::dst#1
|
|
char *memset::dst#2
|
|
char *memset::dst#3
|
|
char *memset::end
|
|
char *memset::end#0
|
|
char *memset::end#1
|
|
char *memset::end#2
|
|
unsigned int memset::num
|
|
unsigned int memset::num#0
|
|
unsigned int memset::num#1
|
|
unsigned int memset::num#2
|
|
void *memset::return
|
|
void *memset::return#0
|
|
void *memset::return#1
|
|
void *memset::return#2
|
|
void *memset::return#3
|
|
void *memset::str
|
|
void *memset::str#0
|
|
void *memset::str#1
|
|
void *memset::str#2
|
|
void *memset::str#3
|
|
void *memset::str#4
|
|
void *memset::str#5
|
|
__constant char mulf_sqr1[$200] = kickasm {{ .for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((i*i)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
|
|
.if(i>351) { .byte round(((512-i)*(512-i))/256) }
|
|
}
|
|
}}
|
|
__constant char mulf_sqr2[$200] = kickasm {{ .for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
|
|
.if(i>351) { .byte round(((i-511)*(i-511))/256) }
|
|
}
|
|
}}
|
|
void print_char_at(char ch , char *at)
|
|
char *print_char_at::at
|
|
char *print_char_at::at#0
|
|
char *print_char_at::at#1
|
|
char *print_char_at::at#2
|
|
char *print_char_at::at#3
|
|
char *print_char_at::at#4
|
|
char print_char_at::ch
|
|
char print_char_at::ch#0
|
|
char print_char_at::ch#1
|
|
char print_char_at::ch#2
|
|
char print_char_at::ch#3
|
|
char print_char_at::ch#4
|
|
void print_cls()
|
|
__constant const char print_hextab[] = "0123456789abcdef"z
|
|
void print_schar_at(signed char b , char *at)
|
|
bool print_schar_at::$0
|
|
char *print_schar_at::$1
|
|
signed char print_schar_at::$5
|
|
char *print_schar_at::at
|
|
char *print_schar_at::at#0
|
|
char *print_schar_at::at#1
|
|
char *print_schar_at::at#2
|
|
char *print_schar_at::at#3
|
|
char *print_schar_at::at#4
|
|
char *print_schar_at::at#5
|
|
char *print_schar_at::at#6
|
|
char *print_schar_at::at#7
|
|
char *print_schar_at::at#8
|
|
signed char print_schar_at::b
|
|
signed char print_schar_at::b#0
|
|
signed char print_schar_at::b#1
|
|
signed char print_schar_at::b#2
|
|
signed char print_schar_at::b#3
|
|
signed char print_schar_at::b#4
|
|
signed char print_schar_at::b#5
|
|
signed char print_schar_at::b#6
|
|
signed char print_schar_at::b#7
|
|
signed char print_schar_at::b#8
|
|
signed char print_schar_at::b#9
|
|
char *print_screen
|
|
char *print_screen#0
|
|
char *print_screen#1
|
|
char *print_screen#2
|
|
char *print_screen#3
|
|
char *print_screen#4
|
|
char *print_screen#5
|
|
char *print_screen#6
|
|
char *print_screen#7
|
|
void print_uchar_at(char b , char *at)
|
|
char print_uchar_at::$0
|
|
number print_uchar_at::$2
|
|
char *print_uchar_at::$3
|
|
char *print_uchar_at::at
|
|
char *print_uchar_at::at#0
|
|
char *print_uchar_at::at#1
|
|
char *print_uchar_at::at#2
|
|
char print_uchar_at::b
|
|
char print_uchar_at::b#0
|
|
char print_uchar_at::b#1
|
|
char print_uchar_at::b#2
|
|
__constant signed char vals[] = { -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f }
|
|
|
|
Adding number conversion cast (snumber) 0 in print_schar_at::$0 = print_schar_at::b#4 < 0
|
|
Adding number conversion cast (unumber) 1 in print_schar_at::$1 = print_schar_at::at#5 + 1
|
|
Adding number conversion cast (unumber) 4 in print_uchar_at::$0 = print_uchar_at::b#1 >> 4
|
|
Adding number conversion cast (unumber) $f in print_uchar_at::$2 = print_uchar_at::b#2 & $f
|
|
Adding number conversion cast (unumber) print_uchar_at::$2 in print_uchar_at::$2 = print_uchar_at::b#2 & (unumber)$f
|
|
Adding number conversion cast (unumber) 1 in print_uchar_at::$3 = print_uchar_at::at#2 + 1
|
|
Adding number conversion cast (unumber) $3e8 in memset::num#0 = $3e8
|
|
Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#1 > 0
|
|
Adding number conversion cast (unumber) 4 in main::at#0 = main::at_line#0 + 4
|
|
Adding number conversion cast (unumber) 4 in main::at#1 = main::at#5 + 4
|
|
Adding number conversion cast (unumber) $28 in main::at_line#1 = main::at_line#2 + $28
|
|
Adding number conversion cast (unumber) 4 in main::at#3 = main::at#6 + 4
|
|
Adding number conversion cast (unumber) 0 in init_screen::COLS#3[0] = init_screen::WHITE
|
|
Adding number conversion cast (unumber) 1 in init_screen::COLS#3[1] = init_screen::WHITE
|
|
Adding number conversion cast (unumber) 2 in init_screen::COLS#3[2] = init_screen::WHITE
|
|
Adding number conversion cast (unumber) 3 in init_screen::COLS#3[3] = init_screen::WHITE
|
|
Adding number conversion cast (unumber) $28 in init_screen::COLS#1 = init_screen::COLS#3 + $28
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast memset::num#0 = (unumber)$3e8
|
|
Inlining cast memset::dst#0 = (char *)memset::str#2
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $3e8
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant pointer cast (char *) 1024
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant pointer cast (char *) 55296
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 3
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant pointer cast (char *) 1024
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized signed number type (signed char) 0
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) $f
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (unsigned int) $3e8
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) 4
|
|
Finalized unsigned number type (char) 0
|
|
Finalized unsigned number type (char) 1
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) 3
|
|
Finalized unsigned number type (char) $28
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to char in print_uchar_at::$2 = print_uchar_at::b#2 & $f
|
|
Inversing boolean not [45] memset::$1 = memset::num#1 <= 0 from [44] memset::$0 = memset::num#1 > 0
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#4 fmul8::return#2
|
|
Alias print_schar_at::at#3 = print_schar_at::at#6 print_schar_at::at#7 print_schar_at::at#4 print_schar_at::at#8
|
|
Alias print_schar_at::b#4 = print_schar_at::b#7 print_schar_at::b#5 print_schar_at::b#9 print_schar_at::b#8
|
|
Alias print_schar_at::b#0 = print_schar_at::$5
|
|
Alias print_uchar_at::at#0 = print_schar_at::$1
|
|
Alias print_uchar_at::b#1 = print_uchar_at::b#2
|
|
Alias print_uchar_at::at#1 = print_uchar_at::at#2
|
|
Alias print_char_at::at#3 = print_uchar_at::$3
|
|
Alias memset::return#1 = memset::str#1 memset::return#3 memset::return#2
|
|
Alias memset::str#2 = memset::str#3
|
|
Alias memset::num#1 = memset::num#2
|
|
Alias memset::c#3 = memset::c#4
|
|
Alias memset::c#1 = memset::c#2
|
|
Alias memset::dst#2 = memset::dst#3
|
|
Alias memset::end#1 = memset::end#2
|
|
Alias memset::str#4 = memset::str#5
|
|
Alias main::at#4 = main::at#5
|
|
Alias main::k#2 = main::k#3
|
|
Alias main::at_line#3 = main::at_line#5 main::at_line#7
|
|
Alias main::at#2 = main::at_line#1 main::at#9 main::at_line#10
|
|
Alias main::i#2 = main::i#6
|
|
Alias fmul8::return#0 = fmul8::return#3
|
|
Alias main::at#3 = main::at#7 main::at#8
|
|
Alias main::j#2 = main::j#4 main::j#3
|
|
Alias main::i#3 = main::i#7 main::i#5 main::i#4
|
|
Alias main::at_line#4 = main::at_line#8 main::at_line#9 main::at_line#6
|
|
Alias init_screen::COLS#2 = init_screen::COLS#4
|
|
Alias print_screen#0 = print_screen#7 print_screen#5 print_screen#3 print_screen#1
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#4 fmul8::return#2
|
|
Alias print_schar_at::at#3 = print_schar_at::at#5
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#4 fmul8::return#2
|
|
Identical Phi Values print_uchar_at::b#1 print_uchar_at::b#0
|
|
Identical Phi Values print_uchar_at::at#1 print_uchar_at::at#0
|
|
Identical Phi Values print_screen#2 print_screen#4
|
|
Identical Phi Values memset::num#1 memset::num#0
|
|
Identical Phi Values memset::str#2 memset::str#0
|
|
Identical Phi Values memset::c#3 memset::c#0
|
|
Identical Phi Values memset::end#1 memset::end#0
|
|
Identical Phi Values memset::str#4 memset::str#2
|
|
Identical Phi Values memset::c#1 memset::c#3
|
|
Identical Phi Values print_screen#6 print_screen#0
|
|
Identical Phi Values main::at_line#3 main::at_line#0
|
|
Identical Phi Values main::i#3 main::i#2
|
|
Identical Phi Values main::at_line#4 main::at#2
|
|
Identical Phi Values print_screen#4 print_screen#6
|
|
Identical Phi Values init_screen::COLS#2 init_screen::COLS#0
|
|
Identical Phi Values fmul8::return#4 fmul8::return#1
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Identical Phi Values memset::return#1 memset::str#0
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition print_schar_at::$0 [2] if(print_schar_at::b#4<0) goto print_schar_at::@1
|
|
Simple Condition memset::$1 [37] if(memset::num#0<=0) goto memset::@1
|
|
Simple Condition memset::$3 [44] if(memset::dst#2!=memset::end#0) goto memset::@4
|
|
Simple Condition main::$3 [60] if(main::k#1!=rangelast(0,8)) goto main::@1
|
|
Simple Condition main::$7 [80] if(main::j#1!=rangelast(0,8)) goto main::@4
|
|
Simple Condition main::$8 [83] if(main::i#1!=rangelast(0,8)) goto main::@3
|
|
Simple Condition init_screen::$1 [93] if(init_screen::l#1!=rangelast(0,$27)) goto init_screen::@1
|
|
Simple Condition init_screen::$2 [103] if(init_screen::m#1!=rangelast(0,$18)) goto init_screen::@3
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Constant print_char_at::ch#0 = '-'
|
|
Constant print_char_at::ch#1 = ' '
|
|
Constant memset::c#0 = ' '
|
|
Constant memset::num#0 = $3e8
|
|
Constant main::at_line#0 = (char *) 1024
|
|
Constant main::k#0 = 0
|
|
Constant main::i#0 = 0
|
|
Constant main::j#0 = 0
|
|
Constant init_screen::COLS#0 = (char *) 55296
|
|
Constant init_screen::l#0 = 0
|
|
Constant init_screen::m#0 = 0
|
|
Constant print_screen#0 = (char *) 1024
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant memset::str#0 = (void *)print_screen#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant memset::return#0 = memset::str#0
|
|
Constant memset::$4 = (char *)memset::str#0
|
|
Constant memset::dst#0 = (char *)memset::str#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
if() condition always false - eliminating [37] if(memset::num#0<=0) goto memset::@1
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Resolved ranged next value [58] main::k#1 = ++ main::k#2 to ++
|
|
Resolved ranged comparison value [60] if(main::k#1!=rangelast(0,8)) goto main::@1 to 9
|
|
Resolved ranged next value [78] main::j#1 = ++ main::j#2 to ++
|
|
Resolved ranged comparison value [80] if(main::j#1!=rangelast(0,8)) goto main::@4 to 9
|
|
Resolved ranged next value [81] main::i#1 = ++ main::i#2 to ++
|
|
Resolved ranged comparison value [83] if(main::i#1!=rangelast(0,8)) goto main::@3 to 9
|
|
Resolved ranged next value [91] init_screen::l#1 = ++ init_screen::l#2 to ++
|
|
Resolved ranged comparison value [93] if(init_screen::l#1!=rangelast(0,$27)) goto init_screen::@1 to $28
|
|
Resolved ranged next value [101] init_screen::m#1 = ++ init_screen::m#2 to ++
|
|
Resolved ranged comparison value [103] if(init_screen::m#1!=rangelast(0,$18)) goto init_screen::@3 to $19
|
|
Simplifying expression containing zero init_screen::COLS#3 in [96] init_screen::COLS#3[0] = init_screen::WHITE
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused constant memset::return#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Removing unused procedure __start
|
|
Removing unused procedure block __start
|
|
Removing unused procedure block __start::__init1
|
|
Removing unused procedure block __start::@1
|
|
Removing unused procedure block __start::@2
|
|
Removing unused procedure block __start::@return
|
|
Successful SSA optimization PassNEliminateEmptyStart
|
|
Adding number conversion cast (unumber) 9 in [40] if(main::k#1!=9) goto main::@1
|
|
Adding number conversion cast (unumber) 9 in [57] if(main::j#1!=9) goto main::@4
|
|
Adding number conversion cast (unumber) 9 in [59] if(main::i#1!=9) goto main::@3
|
|
Adding number conversion cast (unumber) $28 in [65] if(init_screen::l#1!=$28) goto init_screen::@1
|
|
Adding number conversion cast (unumber) $19 in [73] if(init_screen::m#1!=$19) goto init_screen::@3
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast 9
|
|
Simplifying constant integer cast 9
|
|
Simplifying constant integer cast 9
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $19
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (char) 9
|
|
Finalized unsigned number type (char) 9
|
|
Finalized unsigned number type (char) 9
|
|
Finalized unsigned number type (char) $28
|
|
Finalized unsigned number type (char) $19
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Constant right-side identified [26] memset::end#0 = memset::$4 + memset::num#0
|
|
Constant right-side identified [33] main::at#0 = main::at_line#0 + 4
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant memset::end#0 = memset::$4+memset::num#0
|
|
Constant main::at#0 = main::at_line#0+4
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Inlining constant with var siblings print_char_at::ch#0
|
|
Inlining constant with var siblings print_char_at::ch#1
|
|
Inlining constant with var siblings memset::dst#0
|
|
Inlining constant with var siblings main::at_line#0
|
|
Inlining constant with var siblings main::k#0
|
|
Inlining constant with var siblings main::i#0
|
|
Inlining constant with var siblings main::j#0
|
|
Inlining constant with var siblings main::at#0
|
|
Inlining constant with var siblings init_screen::COLS#0
|
|
Inlining constant with var siblings init_screen::l#0
|
|
Inlining constant with var siblings init_screen::m#0
|
|
Constant inlined memset::$4 = (char *)memset::str#0
|
|
Constant inlined print_char_at::ch#0 = '-'
|
|
Constant inlined init_screen::m#0 = 0
|
|
Constant inlined print_char_at::ch#1 = ' '
|
|
Constant inlined init_screen::l#0 = 0
|
|
Constant inlined main::i#0 = 0
|
|
Constant inlined memset::dst#0 = (char *)memset::str#0
|
|
Constant inlined main::k#0 = 0
|
|
Constant inlined main::j#0 = 0
|
|
Constant inlined main::at_line#0 = (char *) 1024
|
|
Constant inlined main::at#0 = (char *) 1024+4
|
|
Constant inlined init_screen::COLS#0 = (char *) 55296
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Finalized unsigned number type (char) 2
|
|
Finalized unsigned number type (char) 8
|
|
Finalized unsigned number type (char) $a
|
|
Finalized unsigned number type (char) $10
|
|
Finalized unsigned number type (unsigned int) $200
|
|
Finalized unsigned number type (unsigned int) $200
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Alias candidate removed (volatile)fmul8::return#1 = fmul8::cc fmul8::return#2
|
|
Added new block during phi lifting main::@11(between main::@7 and main::@1)
|
|
Added new block during phi lifting main::@12(between main::@5 and main::@3)
|
|
Added new block during phi lifting main::@13(between main::@10 and main::@4)
|
|
Added new block during phi lifting init_screen::@5(between init_screen::@1 and init_screen::@1)
|
|
Added new block during phi lifting init_screen::@6(between init_screen::@3 and init_screen::@3)
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::@6
|
|
Adding NOP phi() at start of main::@2
|
|
Adding NOP phi() at start of init_screen
|
|
Adding NOP phi() at start of init_screen::@4
|
|
Adding NOP phi() at start of init_screen::@2
|
|
Adding NOP phi() at start of print_schar_at::@6
|
|
Adding NOP phi() at start of print_cls
|
|
Adding NOP phi() at start of print_cls::@1
|
|
Adding NOP phi() at start of print_uchar_at::@2
|
|
Adding NOP phi() at start of memset
|
|
Adding NOP phi() at start of memset::@2
|
|
Adding NOP phi() at start of memset::@1
|
|
CALL GRAPH
|
|
Calls in [main] to init_screen:1 print_schar_at:8 print_schar_at:19 fmul8:25 print_schar_at:32
|
|
Calls in [init_screen] to print_cls:45
|
|
Calls in [print_schar_at] to print_char_at:68 print_uchar_at:73 print_char_at:78
|
|
Calls in [print_cls] to memset:87
|
|
Calls in [print_uchar_at] to print_char_at:98 print_char_at:104
|
|
|
|
Created 15 initial phi equivalence classes
|
|
Coalesced [6] print_schar_at::b#10 = print_schar_at::b#1
|
|
Coalesced [7] print_schar_at::at#9 = print_schar_at::at#0
|
|
Coalesced [17] print_schar_at::b#11 = print_schar_at::b#2
|
|
Coalesced [18] print_schar_at::at#10 = print_schar_at::at#1
|
|
Not coalescing [20] main::at#12 = main::at#2
|
|
Coalesced [30] print_schar_at::b#12 = print_schar_at::b#3
|
|
Coalesced [31] print_schar_at::at#11 = print_schar_at::at#2
|
|
Coalesced [38] main::at_line#11 = main::at#2
|
|
Coalesced [39] main::i#8 = main::i#1
|
|
Coalesced [40] main::at#11 = main::at#3
|
|
Coalesced [41] main::j#5 = main::j#1
|
|
Coalesced [42] main::k#4 = main::k#1
|
|
Coalesced [43] main::at#10 = main::at#1
|
|
Coalesced [61] init_screen::COLS#5 = init_screen::COLS#1
|
|
Coalesced [62] init_screen::m#3 = init_screen::m#1
|
|
Coalesced [63] init_screen::l#3 = init_screen::l#1
|
|
Coalesced [67] print_char_at::at#6 = print_char_at::at#1
|
|
Coalesced [69] print_schar_at::b#14 = print_schar_at::b#4
|
|
Coalesced [77] print_char_at::at#5 = print_char_at::at#0
|
|
Coalesced [80] print_schar_at::b#13 = print_schar_at::b#0
|
|
Coalesced [96] print_char_at::ch#5 = print_char_at::ch#2
|
|
Coalesced [97] print_char_at::at#7 = print_char_at::at#2
|
|
Coalesced [102] print_char_at::ch#6 = print_char_at::ch#3
|
|
Coalesced [103] print_char_at::at#8 = print_char_at::at#3
|
|
Coalesced [115] memset::dst#4 = memset::dst#1
|
|
Coalesced down to 14 phi equivalence classes
|
|
Culled Empty Block label main::@6
|
|
Culled Empty Block label main::@2
|
|
Culled Empty Block label main::@12
|
|
Culled Empty Block label main::@13
|
|
Culled Empty Block label main::@11
|
|
Culled Empty Block label init_screen::@4
|
|
Culled Empty Block label init_screen::@2
|
|
Culled Empty Block label init_screen::@6
|
|
Culled Empty Block label init_screen::@5
|
|
Culled Empty Block label print_schar_at::@5
|
|
Culled Empty Block label print_schar_at::@6
|
|
Culled Empty Block label print_cls::@1
|
|
Culled Empty Block label print_uchar_at::@2
|
|
Culled Empty Block label memset::@2
|
|
Culled Empty Block label memset::@1
|
|
Renumbering block memset::@3 to memset::@1
|
|
Renumbering block memset::@4 to memset::@2
|
|
Renumbering block main::@3 to main::@2
|
|
Renumbering block main::@4 to main::@3
|
|
Renumbering block main::@5 to main::@4
|
|
Renumbering block main::@7 to main::@5
|
|
Renumbering block main::@8 to main::@6
|
|
Renumbering block main::@9 to main::@7
|
|
Renumbering block main::@10 to main::@8
|
|
Renumbering block init_screen::@3 to init_screen::@2
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of init_screen
|
|
Adding NOP phi() at start of print_cls
|
|
Adding NOP phi() at start of memset
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
|
|
void main()
|
|
main: scope:[main] from
|
|
[0] phi()
|
|
[1] call init_screen
|
|
to:main::@1
|
|
main::@1: scope:[main] from main main::@5
|
|
[2] main::at#4 = phi( main/(char *) 1024+4, main::@5/main::at#1 )
|
|
[2] main::k#2 = phi( main/0, main::@5/main::k#1 )
|
|
[3] print_schar_at::b#1 = vals[main::k#2]
|
|
[4] print_schar_at::at#0 = main::at#4
|
|
[5] call print_schar_at
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@1
|
|
[6] main::at#1 = main::at#4 + 4
|
|
[7] main::k#1 = ++ main::k#2
|
|
[8] if(main::k#1!=9) goto main::@1
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@4 main::@5
|
|
[9] main::i#2 = phi( main::@5/0, main::@4/main::i#1 )
|
|
[9] main::at_line#2 = phi( main::@5/(char *) 1024, main::@4/main::at#2 )
|
|
[10] main::at#2 = main::at_line#2 + $28
|
|
[11] print_schar_at::b#2 = vals[main::i#2]
|
|
[12] print_schar_at::at#1 = main::at#2
|
|
[13] call print_schar_at
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@2
|
|
[14] main::at#12 = main::at#2
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@6 main::@8
|
|
[15] main::j#2 = phi( main::@8/main::j#1, main::@6/0 )
|
|
[15] main::at#6 = phi( main::@8/main::at#3, main::@6/main::at#12 )
|
|
[16] main::at#3 = main::at#6 + 4
|
|
[17] fmul8::aa = vals[main::i#2]
|
|
[18] fmul8::bb = vals[main::j#2]
|
|
[19] call fmul8
|
|
[20] fmul8::return#0 = fmul8::return#2
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@3
|
|
[21] main::r#0 = fmul8::return#0
|
|
[22] print_schar_at::b#3 = main::r#0
|
|
[23] print_schar_at::at#2 = main::at#3
|
|
[24] call print_schar_at
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@7
|
|
[25] main::j#1 = ++ main::j#2
|
|
[26] if(main::j#1!=9) goto main::@3
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@8
|
|
[27] main::i#1 = ++ main::i#2
|
|
[28] if(main::i#1!=9) goto main::@2
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@4
|
|
[29] return
|
|
to:@return
|
|
|
|
void init_screen()
|
|
init_screen: scope:[init_screen] from main
|
|
[30] phi()
|
|
[31] call print_cls
|
|
to:init_screen::@1
|
|
init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
|
|
[32] init_screen::l#2 = phi( init_screen::@1/init_screen::l#1, init_screen/0 )
|
|
[33] ((char *) 55296)[init_screen::l#2] = init_screen::WHITE
|
|
[34] init_screen::l#1 = ++ init_screen::l#2
|
|
[35] if(init_screen::l#1!=$28) goto init_screen::@1
|
|
to:init_screen::@2
|
|
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@2
|
|
[36] init_screen::m#2 = phi( init_screen::@1/0, init_screen::@2/init_screen::m#1 )
|
|
[36] init_screen::COLS#3 = phi( init_screen::@1/(char *) 55296, init_screen::@2/init_screen::COLS#1 )
|
|
[37] *init_screen::COLS#3 = init_screen::WHITE
|
|
[38] init_screen::COLS#3[1] = init_screen::WHITE
|
|
[39] init_screen::COLS#3[2] = init_screen::WHITE
|
|
[40] init_screen::COLS#3[3] = init_screen::WHITE
|
|
[41] init_screen::COLS#1 = init_screen::COLS#3 + $28
|
|
[42] init_screen::m#1 = ++ init_screen::m#2
|
|
[43] if(init_screen::m#1!=$19) goto init_screen::@2
|
|
to:init_screen::@return
|
|
init_screen::@return: scope:[init_screen] from init_screen::@2
|
|
[44] return
|
|
to:@return
|
|
|
|
void print_schar_at(signed char b , char *at)
|
|
print_schar_at: scope:[print_schar_at] from main::@1 main::@2 main::@7
|
|
[45] print_schar_at::at#3 = phi( main::@1/print_schar_at::at#0, main::@2/print_schar_at::at#1, main::@7/print_schar_at::at#2 )
|
|
[45] print_schar_at::b#4 = phi( main::@1/print_schar_at::b#1, main::@2/print_schar_at::b#2, main::@7/print_schar_at::b#3 )
|
|
[46] if(print_schar_at::b#4<0) goto print_schar_at::@1
|
|
to:print_schar_at::@3
|
|
print_schar_at::@3: scope:[print_schar_at] from print_schar_at
|
|
[47] print_char_at::at#1 = print_schar_at::at#3
|
|
[48] call print_char_at
|
|
to:print_schar_at::@2
|
|
print_schar_at::@2: scope:[print_schar_at] from print_schar_at::@3 print_schar_at::@4
|
|
[49] print_schar_at::b#6 = phi( print_schar_at::@4/print_schar_at::b#0, print_schar_at::@3/print_schar_at::b#4 )
|
|
[50] print_uchar_at::at#0 = print_schar_at::at#3 + 1
|
|
[51] print_uchar_at::b#0 = (char)print_schar_at::b#6
|
|
[52] call print_uchar_at
|
|
to:print_schar_at::@return
|
|
print_schar_at::@return: scope:[print_schar_at] from print_schar_at::@2
|
|
[53] return
|
|
to:@return
|
|
print_schar_at::@1: scope:[print_schar_at] from print_schar_at
|
|
[54] print_char_at::at#0 = print_schar_at::at#3
|
|
[55] call print_char_at
|
|
to:print_schar_at::@4
|
|
print_schar_at::@4: scope:[print_schar_at] from print_schar_at::@1
|
|
[56] print_schar_at::b#0 = - print_schar_at::b#4
|
|
to:print_schar_at::@2
|
|
|
|
signed char fmul8(volatile signed char aa , volatile signed char bb)
|
|
fmul8: scope:[fmul8] from main::@3
|
|
[57] fmul8::cc = 0
|
|
asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
[59] fmul8::return#1 = fmul8::cc
|
|
to:fmul8::@return
|
|
fmul8::@return: scope:[fmul8] from fmul8
|
|
[60] fmul8::return#2 = fmul8::return#1
|
|
[61] return
|
|
to:@return
|
|
|
|
void print_cls()
|
|
print_cls: scope:[print_cls] from init_screen
|
|
[62] phi()
|
|
[63] call memset
|
|
to:print_cls::@return
|
|
print_cls::@return: scope:[print_cls] from print_cls
|
|
[64] return
|
|
to:@return
|
|
|
|
void print_char_at(char ch , char *at)
|
|
print_char_at: scope:[print_char_at] from print_schar_at::@1 print_schar_at::@3 print_uchar_at print_uchar_at::@1
|
|
[65] print_char_at::at#4 = phi( print_schar_at::@1/print_char_at::at#0, print_schar_at::@3/print_char_at::at#1, print_uchar_at/print_char_at::at#2, print_uchar_at::@1/print_char_at::at#3 )
|
|
[65] print_char_at::ch#4 = phi( print_schar_at::@1/'-', print_schar_at::@3/' ', print_uchar_at/print_char_at::ch#2, print_uchar_at::@1/print_char_at::ch#3 )
|
|
[66] *print_char_at::at#4 = print_char_at::ch#4
|
|
to:print_char_at::@return
|
|
print_char_at::@return: scope:[print_char_at] from print_char_at
|
|
[67] return
|
|
to:@return
|
|
|
|
void print_uchar_at(char b , char *at)
|
|
print_uchar_at: scope:[print_uchar_at] from print_schar_at::@2
|
|
[68] print_uchar_at::$0 = print_uchar_at::b#0 >> 4
|
|
[69] print_char_at::ch#2 = print_hextab[print_uchar_at::$0]
|
|
[70] print_char_at::at#2 = print_uchar_at::at#0
|
|
[71] call print_char_at
|
|
to:print_uchar_at::@1
|
|
print_uchar_at::@1: scope:[print_uchar_at] from print_uchar_at
|
|
[72] print_uchar_at::$2 = print_uchar_at::b#0 & $f
|
|
[73] print_char_at::at#3 = print_uchar_at::at#0 + 1
|
|
[74] print_char_at::ch#3 = print_hextab[print_uchar_at::$2]
|
|
[75] call print_char_at
|
|
to:print_uchar_at::@return
|
|
print_uchar_at::@return: scope:[print_uchar_at] from print_uchar_at::@1
|
|
[76] return
|
|
to:@return
|
|
|
|
void * memset(void *str , char c , unsigned int num)
|
|
memset: scope:[memset] from print_cls
|
|
[77] phi()
|
|
to:memset::@1
|
|
memset::@1: scope:[memset] from memset memset::@2
|
|
[78] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 )
|
|
[79] if(memset::dst#2!=memset::end#0) goto memset::@2
|
|
to:memset::@return
|
|
memset::@return: scope:[memset] from memset::@1
|
|
[80] return
|
|
to:@return
|
|
memset::@2: scope:[memset] from memset::@1
|
|
[81] *memset::dst#2 = memset::c#0
|
|
[82] memset::dst#1 = ++ memset::dst#2
|
|
to:memset::@1
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
signed char fmul8(volatile signed char aa , volatile signed char bb)
|
|
__loadstore volatile signed char fmul8::aa // 33.666666666666664
|
|
__loadstore volatile signed char fmul8::bb // 50.5
|
|
__loadstore volatile signed char fmul8::cc // 1001.0
|
|
signed char fmul8::return
|
|
signed char fmul8::return#0 // 202.0
|
|
signed char fmul8::return#1 // 2002.0
|
|
signed char fmul8::return#2 // 367.33333333333337
|
|
void init_screen()
|
|
char *init_screen::COLS
|
|
char *init_screen::COLS#1 // 67.33333333333333
|
|
char *init_screen::COLS#3 // 121.2
|
|
char init_screen::l
|
|
char init_screen::l#1 // 151.5
|
|
char init_screen::l#2 // 151.5
|
|
char init_screen::m
|
|
char init_screen::m#1 // 151.5
|
|
char init_screen::m#2 // 33.666666666666664
|
|
void main()
|
|
char *main::at
|
|
char *main::at#1 // 7.333333333333333
|
|
char *main::at#12 // 22.0
|
|
char *main::at#2 // 2.3157894736842106
|
|
char *main::at#3 // 27.545454545454547
|
|
char *main::at#4 // 8.25
|
|
char *main::at#6 // 213.0
|
|
char *main::at_line
|
|
char *main::at_line#2 // 22.0
|
|
char main::i
|
|
char main::i#1 // 16.5
|
|
char main::i#2 // 7.444444444444445
|
|
char main::j
|
|
char main::j#1 // 151.5
|
|
char main::j#2 // 30.299999999999997
|
|
char main::k
|
|
char main::k#1 // 16.5
|
|
char main::k#2 // 6.6000000000000005
|
|
signed char main::r
|
|
signed char main::r#0 // 202.0
|
|
void * memset(void *str , char c , unsigned int num)
|
|
char memset::c
|
|
char *memset::dst
|
|
char *memset::dst#1 // 20002.0
|
|
char *memset::dst#2 // 13334.666666666666
|
|
char *memset::end
|
|
unsigned int memset::num
|
|
void *memset::return
|
|
void *memset::str
|
|
void print_char_at(char ch , char *at)
|
|
char *print_char_at::at
|
|
char *print_char_at::at#0 // 2002.0
|
|
char *print_char_at::at#1 // 2002.0
|
|
char *print_char_at::at#2 // 20002.0
|
|
char *print_char_at::at#3 // 10001.0
|
|
char *print_char_at::at#4 // 122005.0
|
|
char print_char_at::ch
|
|
char print_char_at::ch#2 // 10001.0
|
|
char print_char_at::ch#3 // 20002.0
|
|
char print_char_at::ch#4 // 120003.0
|
|
void print_cls()
|
|
void print_schar_at(signed char b , char *at)
|
|
char *print_schar_at::at
|
|
char *print_schar_at::at#0 // 22.0
|
|
char *print_schar_at::at#1 // 22.0
|
|
char *print_schar_at::at#2 // 202.0
|
|
char *print_schar_at::at#3 // 390.75
|
|
signed char print_schar_at::b
|
|
signed char print_schar_at::b#0 // 2002.0
|
|
signed char print_schar_at::b#1 // 11.0
|
|
signed char print_schar_at::b#2 // 11.0
|
|
signed char print_schar_at::b#3 // 101.0
|
|
signed char print_schar_at::b#4 // 521.0
|
|
signed char print_schar_at::b#6 // 1001.0
|
|
char *print_screen
|
|
void print_uchar_at(char b , char *at)
|
|
char print_uchar_at::$0 // 20002.0
|
|
char print_uchar_at::$2 // 10001.0
|
|
char *print_uchar_at::at
|
|
char *print_uchar_at::at#0 // 3000.4285714285716
|
|
char print_uchar_at::b
|
|
char print_uchar_at::b#0 // 4200.6
|
|
|
|
Initial phi equivalence classes
|
|
[ main::k#2 main::k#1 ]
|
|
[ main::at#4 main::at#1 ]
|
|
[ main::at_line#2 main::at#2 ]
|
|
[ main::i#2 main::i#1 ]
|
|
[ main::at#6 main::at#3 main::at#12 ]
|
|
[ main::j#2 main::j#1 ]
|
|
[ init_screen::l#2 init_screen::l#1 ]
|
|
[ init_screen::COLS#3 init_screen::COLS#1 ]
|
|
[ init_screen::m#2 init_screen::m#1 ]
|
|
[ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ]
|
|
[ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
[ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
[ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ]
|
|
[ memset::dst#2 memset::dst#1 ]
|
|
Added variable fmul8::aa to live range equivalence class [ fmul8::aa ]
|
|
Added variable fmul8::bb to live range equivalence class [ fmul8::bb ]
|
|
Added variable fmul8::return#0 to live range equivalence class [ fmul8::return#0 ]
|
|
Added variable main::r#0 to live range equivalence class [ main::r#0 ]
|
|
Added variable print_uchar_at::at#0 to live range equivalence class [ print_uchar_at::at#0 ]
|
|
Added variable print_uchar_at::b#0 to live range equivalence class [ print_uchar_at::b#0 ]
|
|
Added variable fmul8::cc to live range equivalence class [ fmul8::cc ]
|
|
Added variable fmul8::return#1 to live range equivalence class [ fmul8::return#1 ]
|
|
Added variable fmul8::return#2 to live range equivalence class [ fmul8::return#2 ]
|
|
Added variable print_uchar_at::$0 to live range equivalence class [ print_uchar_at::$0 ]
|
|
Added variable print_uchar_at::$2 to live range equivalence class [ print_uchar_at::$2 ]
|
|
Complete equivalence classes
|
|
[ main::k#2 main::k#1 ]
|
|
[ main::at#4 main::at#1 ]
|
|
[ main::at_line#2 main::at#2 ]
|
|
[ main::i#2 main::i#1 ]
|
|
[ main::at#6 main::at#3 main::at#12 ]
|
|
[ main::j#2 main::j#1 ]
|
|
[ init_screen::l#2 init_screen::l#1 ]
|
|
[ init_screen::COLS#3 init_screen::COLS#1 ]
|
|
[ init_screen::m#2 init_screen::m#1 ]
|
|
[ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ]
|
|
[ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
[ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
[ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ]
|
|
[ memset::dst#2 memset::dst#1 ]
|
|
[ fmul8::aa ]
|
|
[ fmul8::bb ]
|
|
[ fmul8::return#0 ]
|
|
[ main::r#0 ]
|
|
[ print_uchar_at::at#0 ]
|
|
[ print_uchar_at::b#0 ]
|
|
[ fmul8::cc ]
|
|
[ fmul8::return#1 ]
|
|
[ fmul8::return#2 ]
|
|
[ print_uchar_at::$0 ]
|
|
[ print_uchar_at::$2 ]
|
|
Allocated zp[2]:2 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ]
|
|
Allocated zp[1]:4 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
Allocated zp[2]:5 [ memset::dst#2 memset::dst#1 ]
|
|
Allocated zp[1]:7 [ print_uchar_at::$0 ]
|
|
Allocated zp[1]:8 [ print_uchar_at::$2 ]
|
|
Allocated zp[1]:9 [ print_uchar_at::b#0 ]
|
|
Allocated zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
Allocated zp[2]:11 [ print_uchar_at::at#0 ]
|
|
Allocated zp[1]:13 [ fmul8::return#1 ]
|
|
Allocated zp[1]:14 [ fmul8::cc ]
|
|
Allocated zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ]
|
|
Allocated zp[1]:17 [ fmul8::return#2 ]
|
|
Allocated zp[1]:18 [ init_screen::l#2 init_screen::l#1 ]
|
|
Allocated zp[2]:19 [ main::at#6 main::at#3 main::at#12 ]
|
|
Allocated zp[1]:21 [ fmul8::return#0 ]
|
|
Allocated zp[1]:22 [ main::r#0 ]
|
|
Allocated zp[2]:23 [ init_screen::COLS#3 init_screen::COLS#1 ]
|
|
Allocated zp[1]:25 [ init_screen::m#2 init_screen::m#1 ]
|
|
Allocated zp[1]:26 [ main::j#2 main::j#1 ]
|
|
Allocated zp[1]:27 [ fmul8::bb ]
|
|
Allocated zp[1]:28 [ fmul8::aa ]
|
|
Allocated zp[2]:29 [ main::at_line#2 main::at#2 ]
|
|
Allocated zp[1]:31 [ main::i#2 main::i#1 ]
|
|
Allocated zp[1]:32 [ main::k#2 main::k#1 ]
|
|
Allocated zp[2]:33 [ main::at#4 main::at#1 ]
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [4] print_schar_at::at#0 = main::at#4 [ main::k#2 main::at#4 print_schar_at::b#1 print_schar_at::at#0 ] ( [ main::k#2 main::at#4 print_schar_at::b#1 print_schar_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:32 [ main::k#2 main::k#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
Statement [6] main::at#1 = main::at#4 + 4 [ main::k#2 main::at#1 ] ( [ main::k#2 main::at#1 ] { } ) always clobbers reg byte a
|
|
Statement [10] main::at#2 = main::at_line#2 + $28 [ main::i#2 main::at#2 ] ( [ main::i#2 main::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:31 [ main::i#2 main::i#1 ]
|
|
Statement [12] print_schar_at::at#1 = main::at#2 [ main::i#2 main::at#2 print_schar_at::b#2 print_schar_at::at#1 ] ( [ main::i#2 main::at#2 print_schar_at::b#2 print_schar_at::at#1 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } ) always clobbers reg byte a
|
|
Statement [14] main::at#12 = main::at#2 [ main::i#2 main::at#2 main::at#12 ] ( [ main::i#2 main::at#2 main::at#12 ] { } ) always clobbers reg byte a
|
|
Statement [16] main::at#3 = main::at#6 + 4 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:26 [ main::j#2 main::j#1 ]
|
|
Statement [17] fmul8::aa = vals[main::i#2] [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Statement [18] fmul8::bb = vals[main::j#2] [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Statement [23] print_schar_at::at#2 = main::at#3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#3 print_schar_at::at#2 ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#3 print_schar_at::at#2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [33] ((char *) 55296)[init_screen::l#2] = init_screen::WHITE [ init_screen::l#2 ] ( init_screen:1 [ init_screen::l#2 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:18 [ init_screen::l#2 init_screen::l#1 ]
|
|
Statement [37] *init_screen::COLS#3 = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte a as potential for zp[1]:25 [ init_screen::m#2 init_screen::m#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:25 [ init_screen::m#2 init_screen::m#1 ]
|
|
Statement [38] init_screen::COLS#3[1] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [39] init_screen::COLS#3[2] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [40] init_screen::COLS#3[3] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [41] init_screen::COLS#1 = init_screen::COLS#3 + $28 [ init_screen::m#2 init_screen::COLS#1 ] ( init_screen:1 [ init_screen::m#2 init_screen::COLS#1 ] { } ) always clobbers reg byte a
|
|
Statement [47] print_char_at::at#1 = print_schar_at::at#3 [ print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [50] print_uchar_at::at#0 = print_schar_at::at#3 + 1 [ print_schar_at::b#6 print_uchar_at::at#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [54] print_char_at::at#0 = print_schar_at::at#3 [ print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [56] print_schar_at::b#0 = - print_schar_at::b#4 [ print_schar_at::at#3 print_schar_at::b#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [57] fmul8::cc = 0 [ fmul8::aa fmul8::bb fmul8::cc ] ( fmul8:19 [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb fmul8::cc ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Statement asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc } always clobbers reg byte a reg byte x
|
|
Removing always clobbered register reg byte x as potential for zp[1]:31 [ main::i#2 main::i#1 ]
|
|
Removing always clobbered register reg byte x as potential for zp[1]:26 [ main::j#2 main::j#1 ]
|
|
Statement [66] *print_char_at::at#4 = print_char_at::ch#4 [ ] ( print_schar_at:5::print_char_at:48 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13::print_char_at:48 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24::print_char_at:48 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } print_schar_at:5::print_char_at:55 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13::print_char_at:55 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24::print_char_at:55 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } print_schar_at:5::print_uchar_at:52::print_char_at:71 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52::print_char_at:71 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52::print_char_at:71 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:5::print_uchar_at:52::print_char_at:75 [ main::k#2 main::at#4 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52::print_char_at:75 [ main::i#2 main::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52::print_char_at:75 [ main::i#2 main::at#2 main::j#2 main::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:32 [ main::k#2 main::k#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:31 [ main::i#2 main::i#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:26 [ main::j#2 main::j#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:9 [ print_uchar_at::b#0 ]
|
|
Statement [68] print_uchar_at::$0 = print_uchar_at::b#0 >> 4 [ print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:9 [ print_uchar_at::b#0 ]
|
|
Statement [70] print_char_at::at#2 = print_uchar_at::at#0 [ print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:4 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
Statement [72] print_uchar_at::$2 = print_uchar_at::b#0 & $f [ print_uchar_at::at#0 print_uchar_at::$2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte a
|
|
Statement [73] print_char_at::at#3 = print_uchar_at::at#0 + 1 [ print_char_at::at#3 print_uchar_at::$2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:8 [ print_uchar_at::$2 ]
|
|
Statement [79] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( init_screen:1::print_cls:31::memset:63 [ memset::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [81] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( init_screen:1::print_cls:31::memset:63 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [4] print_schar_at::at#0 = main::at#4 [ main::k#2 main::at#4 print_schar_at::b#1 print_schar_at::at#0 ] ( [ main::k#2 main::at#4 print_schar_at::b#1 print_schar_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } ) always clobbers reg byte a
|
|
Statement [6] main::at#1 = main::at#4 + 4 [ main::k#2 main::at#1 ] ( [ main::k#2 main::at#1 ] { } ) always clobbers reg byte a
|
|
Statement [10] main::at#2 = main::at_line#2 + $28 [ main::i#2 main::at#2 ] ( [ main::i#2 main::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } ) always clobbers reg byte a
|
|
Statement [11] print_schar_at::b#2 = vals[main::i#2] [ main::i#2 main::at#2 print_schar_at::b#2 ] ( [ main::i#2 main::at#2 print_schar_at::b#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } ) always clobbers reg byte y
|
|
Statement [12] print_schar_at::at#1 = main::at#2 [ main::i#2 main::at#2 print_schar_at::b#2 print_schar_at::at#1 ] ( [ main::i#2 main::at#2 print_schar_at::b#2 print_schar_at::at#1 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } ) always clobbers reg byte a
|
|
Statement [14] main::at#12 = main::at#2 [ main::i#2 main::at#2 main::at#12 ] ( [ main::i#2 main::at#2 main::at#12 ] { } ) always clobbers reg byte a
|
|
Statement [16] main::at#3 = main::at#6 + 4 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Statement [17] fmul8::aa = vals[main::i#2] [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a reg byte y
|
|
Statement [18] fmul8::bb = vals[main::j#2] [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a reg byte y
|
|
Statement [23] print_schar_at::at#2 = main::at#3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#3 print_schar_at::at#2 ] ( [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#3 print_schar_at::at#2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [26] if(main::j#1!=9) goto main::@3 [ main::i#2 main::at#2 main::at#3 main::j#1 ] ( [ main::i#2 main::at#2 main::at#3 main::j#1 ] { } ) always clobbers reg byte a
|
|
Statement [28] if(main::i#1!=9) goto main::@2 [ main::at#2 main::i#1 ] ( [ main::at#2 main::i#1 ] { } ) always clobbers reg byte a
|
|
Statement [33] ((char *) 55296)[init_screen::l#2] = init_screen::WHITE [ init_screen::l#2 ] ( init_screen:1 [ init_screen::l#2 ] { } ) always clobbers reg byte a
|
|
Statement [37] *init_screen::COLS#3 = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [38] init_screen::COLS#3[1] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [39] init_screen::COLS#3[2] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [40] init_screen::COLS#3[3] = init_screen::WHITE [ init_screen::COLS#3 init_screen::m#2 ] ( init_screen:1 [ init_screen::COLS#3 init_screen::m#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [41] init_screen::COLS#1 = init_screen::COLS#3 + $28 [ init_screen::m#2 init_screen::COLS#1 ] ( init_screen:1 [ init_screen::m#2 init_screen::COLS#1 ] { } ) always clobbers reg byte a
|
|
Statement [47] print_char_at::at#1 = print_schar_at::at#3 [ print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#1 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [50] print_uchar_at::at#0 = print_schar_at::at#3 + 1 [ print_schar_at::b#6 print_uchar_at::at#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#6 print_uchar_at::at#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [54] print_char_at::at#0 = print_schar_at::at#3 [ print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 print_char_at::at#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [56] print_schar_at::b#0 = - print_schar_at::b#4 [ print_schar_at::at#3 print_schar_at::b#0 ] ( print_schar_at:5 [ main::k#2 main::at#4 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } } print_schar_at:13 [ main::i#2 main::at#2 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } } print_schar_at:24 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::at#3 print_schar_at::b#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } } ) always clobbers reg byte a
|
|
Statement [57] fmul8::cc = 0 [ fmul8::aa fmul8::bb fmul8::cc ] ( fmul8:19 [ main::i#2 main::at#2 main::j#2 main::at#3 fmul8::aa fmul8::bb fmul8::cc ] { { fmul8::return#0 = fmul8::return#2 } } ) always clobbers reg byte a
|
|
Statement asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc } always clobbers reg byte a reg byte x
|
|
Statement [66] *print_char_at::at#4 = print_char_at::ch#4 [ ] ( print_schar_at:5::print_char_at:48 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13::print_char_at:48 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24::print_char_at:48 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#1 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } print_schar_at:5::print_char_at:55 [ main::k#2 main::at#4 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#0 main::at#4 } } print_schar_at:13::print_char_at:55 [ main::i#2 main::at#2 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#1 main::at#2 } } print_schar_at:24::print_char_at:55 [ main::i#2 main::at#2 main::j#2 main::at#3 print_schar_at::b#4 print_schar_at::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_char_at::at#0 = print_char_at::at#4 print_schar_at::at#3 print_schar_at::at#2 main::at#3 } } print_schar_at:5::print_uchar_at:52::print_char_at:71 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52::print_char_at:71 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52::print_char_at:71 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:5::print_uchar_at:52::print_char_at:75 [ main::k#2 main::at#4 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52::print_char_at:75 [ main::i#2 main::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52::print_char_at:75 [ main::i#2 main::at#2 main::j#2 main::at#3 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte a reg byte y
|
|
Statement [68] print_uchar_at::$0 = print_uchar_at::b#0 >> 4 [ print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 print_uchar_at::$0 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } ) always clobbers reg byte a
|
|
Statement [70] print_char_at::at#2 = print_uchar_at::at#0 [ print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::b#0 print_char_at::ch#2 print_char_at::at#2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#2 = print_char_at::ch#4 } { print_char_at::at#2 = print_char_at::at#4 print_uchar_at::at#0 } } ) always clobbers reg byte a
|
|
Statement [72] print_uchar_at::$2 = print_uchar_at::b#0 & $f [ print_uchar_at::at#0 print_uchar_at::$2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_uchar_at::at#0 print_uchar_at::$2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte a
|
|
Statement [73] print_char_at::at#3 = print_uchar_at::at#0 + 1 [ print_char_at::at#3 print_uchar_at::$2 ] ( print_schar_at:5::print_uchar_at:52 [ main::k#2 main::at#4 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#1 = print_schar_at::b#4 } { print_schar_at::at#0 = print_schar_at::at#3 main::at#4 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:13::print_uchar_at:52 [ main::i#2 main::at#2 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#2 = print_schar_at::b#4 } { print_schar_at::at#1 = print_schar_at::at#3 main::at#2 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } print_schar_at:24::print_uchar_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_char_at::at#3 print_uchar_at::$2 ] { { print_schar_at::b#3 = print_schar_at::b#4 main::r#0 } { print_schar_at::at#2 = print_schar_at::at#3 main::at#3 } { print_char_at::ch#3 = print_char_at::ch#4 } { print_char_at::at#3 = print_char_at::at#4 } } ) always clobbers reg byte a
|
|
Statement [79] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( init_screen:1::print_cls:31::memset:63 [ memset::dst#2 ] { } ) always clobbers reg byte a
|
|
Statement [81] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( init_screen:1::print_cls:31::memset:63 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
|
Potential registers zp[1]:32 [ main::k#2 main::k#1 ] : zp[1]:32 , reg byte x ,
|
|
Potential registers zp[2]:33 [ main::at#4 main::at#1 ] : zp[2]:33 ,
|
|
Potential registers zp[2]:29 [ main::at_line#2 main::at#2 ] : zp[2]:29 ,
|
|
Potential registers zp[1]:31 [ main::i#2 main::i#1 ] : zp[1]:31 ,
|
|
Potential registers zp[2]:19 [ main::at#6 main::at#3 main::at#12 ] : zp[2]:19 ,
|
|
Potential registers zp[1]:26 [ main::j#2 main::j#1 ] : zp[1]:26 ,
|
|
Potential registers zp[1]:18 [ init_screen::l#2 init_screen::l#1 ] : zp[1]:18 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:23 [ init_screen::COLS#3 init_screen::COLS#1 ] : zp[2]:23 ,
|
|
Potential registers zp[1]:25 [ init_screen::m#2 init_screen::m#1 ] : zp[1]:25 , reg byte x ,
|
|
Potential registers zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ] : zp[2]:15 ,
|
|
Potential registers zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] : zp[1]:10 , reg byte x ,
|
|
Potential registers zp[1]:4 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] : zp[1]:4 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:2 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] : zp[2]:2 ,
|
|
Potential registers zp[2]:5 [ memset::dst#2 memset::dst#1 ] : zp[2]:5 ,
|
|
Potential registers zp[1]:28 [ fmul8::aa ] : zp[1]:28 ,
|
|
Potential registers zp[1]:27 [ fmul8::bb ] : zp[1]:27 ,
|
|
Potential registers zp[1]:21 [ fmul8::return#0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:22 [ main::r#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:11 [ print_uchar_at::at#0 ] : zp[2]:11 ,
|
|
Potential registers zp[1]:9 [ print_uchar_at::b#0 ] : zp[1]:9 , reg byte x ,
|
|
Potential registers zp[1]:14 [ fmul8::cc ] : zp[1]:14 ,
|
|
Potential registers zp[1]:13 [ fmul8::return#1 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:17 [ fmul8::return#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:7 [ print_uchar_at::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:8 [ print_uchar_at::$2 ] : zp[1]:8 , reg byte x , reg byte y ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [print_char_at] 156,012: zp[2]:2 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] 150,006: zp[1]:4 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
Uplift Scope [print_uchar_at] 20,002: zp[1]:7 [ print_uchar_at::$0 ] 10,001: zp[1]:8 [ print_uchar_at::$2 ] 4,200.6: zp[1]:9 [ print_uchar_at::b#0 ] 3,000.43: zp[2]:11 [ print_uchar_at::at#0 ]
|
|
Uplift Scope [memset] 33,336.67: zp[2]:5 [ memset::dst#2 memset::dst#1 ]
|
|
Uplift Scope [print_schar_at] 3,647: zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] 636.75: zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ]
|
|
Uplift Scope [fmul8] 2,002: zp[1]:13 [ fmul8::return#1 ] 1,001: zp[1]:14 [ fmul8::cc ] 367.33: zp[1]:17 [ fmul8::return#2 ] 202: zp[1]:21 [ fmul8::return#0 ] 50.5: zp[1]:27 [ fmul8::bb ] 33.67: zp[1]:28 [ fmul8::aa ]
|
|
Uplift Scope [main] 262.55: zp[2]:19 [ main::at#6 main::at#3 main::at#12 ] 202: zp[1]:22 [ main::r#0 ] 181.8: zp[1]:26 [ main::j#2 main::j#1 ] 24.32: zp[2]:29 [ main::at_line#2 main::at#2 ] 23.94: zp[1]:31 [ main::i#2 main::i#1 ] 23.1: zp[1]:32 [ main::k#2 main::k#1 ] 15.58: zp[2]:33 [ main::at#4 main::at#1 ]
|
|
Uplift Scope [init_screen] 303: zp[1]:18 [ init_screen::l#2 init_screen::l#1 ] 188.53: zp[2]:23 [ init_screen::COLS#3 init_screen::COLS#1 ] 185.17: zp[1]:25 [ init_screen::m#2 init_screen::m#1 ]
|
|
Uplift Scope [print_cls]
|
|
Uplift Scope [RADIX]
|
|
Uplift Scope []
|
|
|
|
Uplifting [print_char_at] best 14208 combination zp[2]:2 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] reg byte x [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
Uplifting [print_uchar_at] best 14200 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[1]:9 [ print_uchar_at::b#0 ] zp[2]:11 [ print_uchar_at::at#0 ]
|
|
Uplifting [memset] best 14200 combination zp[2]:5 [ memset::dst#2 memset::dst#1 ]
|
|
Uplifting [print_schar_at] best 14200 combination zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ]
|
|
Uplifting [fmul8] best 13291 combination reg byte a [ fmul8::return#1 ] zp[1]:14 [ fmul8::cc ] reg byte a [ fmul8::return#2 ] reg byte a [ fmul8::return#0 ] zp[1]:27 [ fmul8::bb ] zp[1]:28 [ fmul8::aa ]
|
|
Uplifting [main] best 12691 combination zp[2]:19 [ main::at#6 main::at#3 main::at#12 ] reg byte a [ main::r#0 ] zp[1]:26 [ main::j#2 main::j#1 ] zp[2]:29 [ main::at_line#2 main::at#2 ] zp[1]:31 [ main::i#2 main::i#1 ] zp[1]:32 [ main::k#2 main::k#1 ] zp[2]:33 [ main::at#4 main::at#1 ]
|
|
Uplifting [init_screen] best 12481 combination reg byte x [ init_screen::l#2 init_screen::l#1 ] zp[2]:23 [ init_screen::COLS#3 init_screen::COLS#1 ] reg byte x [ init_screen::m#2 init_screen::m#1 ]
|
|
Uplifting [print_cls] best 12481 combination
|
|
Uplifting [RADIX] best 12481 combination
|
|
Uplifting [] best 12481 combination
|
|
Attempting to uplift remaining variables inzp[1]:9 [ print_uchar_at::b#0 ]
|
|
Uplifting [print_uchar_at] best 12481 combination zp[1]:9 [ print_uchar_at::b#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
Uplifting [print_schar_at] best 12481 combination zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ]
|
|
Attempting to uplift remaining variables inzp[1]:14 [ fmul8::cc ]
|
|
Uplifting [fmul8] best 12481 combination zp[1]:14 [ fmul8::cc ]
|
|
Attempting to uplift remaining variables inzp[1]:26 [ main::j#2 main::j#1 ]
|
|
Uplifting [main] best 12481 combination zp[1]:26 [ main::j#2 main::j#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:27 [ fmul8::bb ]
|
|
Uplifting [fmul8] best 12481 combination zp[1]:27 [ fmul8::bb ]
|
|
Attempting to uplift remaining variables inzp[1]:28 [ fmul8::aa ]
|
|
Uplifting [fmul8] best 12481 combination zp[1]:28 [ fmul8::aa ]
|
|
Attempting to uplift remaining variables inzp[1]:31 [ main::i#2 main::i#1 ]
|
|
Uplifting [main] best 12481 combination zp[1]:31 [ main::i#2 main::i#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:32 [ main::k#2 main::k#1 ]
|
|
Uplifting [main] best 12481 combination zp[1]:32 [ main::k#2 main::k#1 ]
|
|
Coalescing zero page register [ zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 ] ] with [ zp[2]:2 [ print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 ] ] with [ zp[2]:11 [ print_uchar_at::at#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[1]:10 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 ] ] with [ zp[1]:9 [ print_uchar_at::b#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:15 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 print_uchar_at::at#0 ] ] with [ zp[2]:23 [ init_screen::COLS#3 init_screen::COLS#1 ] ]
|
|
Allocated (was zp[2]:15) zp[2]:2 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 print_uchar_at::at#0 init_screen::COLS#3 init_screen::COLS#1 ]
|
|
Allocated (was zp[2]:5) zp[2]:4 [ memset::dst#2 memset::dst#1 ]
|
|
Allocated (was zp[1]:10) zp[1]:6 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 print_uchar_at::b#0 ]
|
|
Allocated (was zp[1]:14) zp[1]:7 [ fmul8::cc ]
|
|
Allocated (was zp[2]:19) zp[2]:8 [ main::at#6 main::at#3 main::at#12 ]
|
|
Allocated (was zp[1]:26) zp[1]:10 [ main::j#2 main::j#1 ]
|
|
Allocated (was zp[1]:27) zp[1]:11 [ fmul8::bb ]
|
|
Allocated (was zp[1]:28) zp[1]:12 [ fmul8::aa ]
|
|
Allocated (was zp[2]:29) zp[2]:13 [ main::at_line#2 main::at#2 ]
|
|
Allocated (was zp[1]:31) zp[1]:15 [ main::i#2 main::i#1 ]
|
|
Allocated (was zp[1]:32) zp[1]:16 [ main::k#2 main::k#1 ]
|
|
Allocated (was zp[2]:33) zp[2]:17 [ main::at#4 main::at#1 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
|
|
// Multiplies two signed 8-bit numbers and results in an 8-bit number
|
|
// C=A*B, A in [-64;64], B in [-96;95], C in [-96;95] - 64 acts a 1 (X*64=X)
|
|
// Uses the formula a*b = (a+b)^2/4 - (a-b)^2/4
|
|
// See the following for information about the method
|
|
// - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
|
// - http://codebase64.org/doku.php?id=magazines:chacking16
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="fastmultiply8.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(main)
|
|
// Global Constants & labels
|
|
.label print_screen = $400
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.label at = $11
|
|
.label k = $10
|
|
.label at_1 = $d
|
|
.label at_2 = 8
|
|
.label j = $a
|
|
.label i = $f
|
|
.label at_line = $d
|
|
// [1] call init_screen
|
|
// [30] phi from main to init_screen [phi:main->init_screen]
|
|
init_screen_from_main:
|
|
jsr init_screen
|
|
// [2] phi from main to main::@1 [phi:main->main::@1]
|
|
__b1_from_main:
|
|
// [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<$400+4
|
|
sta.z at
|
|
lda #>$400+4
|
|
sta.z at+1
|
|
// [2] phi main::k#2 = 0 [phi:main->main::@1#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z k
|
|
jmp __b1
|
|
// [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
|
|
__b1_from___b5:
|
|
// [2] phi main::at#4 = main::at#1 [phi:main::@5->main::@1#0] -- register_copy
|
|
// [2] phi main::k#2 = main::k#1 [phi:main::@5->main::@1#1] -- register_copy
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [3] print_schar_at::b#1 = vals[main::k#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z k
|
|
lda vals,y
|
|
sta.z print_schar_at.b
|
|
// [4] print_schar_at::at#0 = main::at#4 -- pbuz1=pbuz2
|
|
lda.z at
|
|
sta.z print_schar_at.at
|
|
lda.z at+1
|
|
sta.z print_schar_at.at+1
|
|
// [5] call print_schar_at
|
|
// [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at]
|
|
print_schar_at_from___b1:
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [6] main::at#1 = main::at#4 + 4 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #4
|
|
clc
|
|
adc.z at
|
|
sta.z at
|
|
bcc !+
|
|
inc.z at+1
|
|
!:
|
|
// [7] main::k#1 = ++ main::k#2 -- vbuz1=_inc_vbuz1
|
|
inc.z k
|
|
// [8] if(main::k#1!=9) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #9
|
|
cmp.z k
|
|
bne __b1_from___b5
|
|
// [9] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
|
|
__b2_from___b5:
|
|
// [9] phi main::i#2 = 0 [phi:main::@5->main::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z i
|
|
// [9] phi main::at_line#2 = (char *) 1024 [phi:main::@5->main::@2#1] -- pbuz1=pbuc1
|
|
lda #<$400
|
|
sta.z at_line
|
|
lda #>$400
|
|
sta.z at_line+1
|
|
jmp __b2
|
|
// [9] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
|
|
__b2_from___b4:
|
|
// [9] phi main::i#2 = main::i#1 [phi:main::@4->main::@2#0] -- register_copy
|
|
// [9] phi main::at_line#2 = main::at#2 [phi:main::@4->main::@2#1] -- register_copy
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [10] main::at#2 = main::at_line#2 + $28 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$28
|
|
clc
|
|
adc.z at_1
|
|
sta.z at_1
|
|
bcc !+
|
|
inc.z at_1+1
|
|
!:
|
|
// [11] print_schar_at::b#2 = vals[main::i#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z i
|
|
lda vals,y
|
|
sta.z print_schar_at.b
|
|
// [12] print_schar_at::at#1 = main::at#2 -- pbuz1=pbuz2
|
|
lda.z at_1
|
|
sta.z print_schar_at.at
|
|
lda.z at_1+1
|
|
sta.z print_schar_at.at+1
|
|
// [13] call print_schar_at
|
|
// [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at]
|
|
print_schar_at_from___b2:
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [14] main::at#12 = main::at#2 -- pbuz1=pbuz2
|
|
lda.z at_1
|
|
sta.z at_2
|
|
lda.z at_1+1
|
|
sta.z at_2+1
|
|
// [15] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
|
|
__b3_from___b6:
|
|
// [15] phi main::j#2 = 0 [phi:main::@6->main::@3#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z j
|
|
// [15] phi main::at#6 = main::at#12 [phi:main::@6->main::@3#1] -- register_copy
|
|
jmp __b3
|
|
// [15] phi from main::@8 to main::@3 [phi:main::@8->main::@3]
|
|
__b3_from___b8:
|
|
// [15] phi main::j#2 = main::j#1 [phi:main::@8->main::@3#0] -- register_copy
|
|
// [15] phi main::at#6 = main::at#3 [phi:main::@8->main::@3#1] -- register_copy
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [16] main::at#3 = main::at#6 + 4 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #4
|
|
clc
|
|
adc.z at_2
|
|
sta.z at_2
|
|
bcc !+
|
|
inc.z at_2+1
|
|
!:
|
|
// [17] fmul8::aa = vals[main::i#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z i
|
|
lda vals,y
|
|
sta.z fmul8.aa
|
|
// [18] fmul8::bb = vals[main::j#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z j
|
|
lda vals,y
|
|
sta.z fmul8.bb
|
|
// [19] call fmul8
|
|
jsr fmul8
|
|
// [20] fmul8::return#0 = fmul8::return#2
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [21] main::r#0 = fmul8::return#0
|
|
// [22] print_schar_at::b#3 = main::r#0 -- vbsz1=vbsaa
|
|
sta.z print_schar_at.b
|
|
// [23] print_schar_at::at#2 = main::at#3 -- pbuz1=pbuz2
|
|
lda.z at_2
|
|
sta.z print_schar_at.at
|
|
lda.z at_2+1
|
|
sta.z print_schar_at.at+1
|
|
// [24] call print_schar_at
|
|
// [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at]
|
|
print_schar_at_from___b7:
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [25] main::j#1 = ++ main::j#2 -- vbuz1=_inc_vbuz1
|
|
inc.z j
|
|
// [26] if(main::j#1!=9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #9
|
|
cmp.z j
|
|
bne __b3_from___b8
|
|
jmp __b4
|
|
// main::@4
|
|
__b4:
|
|
// [27] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z i
|
|
// [28] if(main::i#1!=9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #9
|
|
cmp.z i
|
|
bne __b2_from___b4
|
|
jmp __breturn
|
|
// main::@return
|
|
__breturn:
|
|
// [29] return
|
|
rts
|
|
}
|
|
// init_screen
|
|
init_screen: {
|
|
.const WHITE = 1
|
|
.label COLS = 2
|
|
// [31] call print_cls
|
|
// [62] phi from init_screen to print_cls [phi:init_screen->print_cls]
|
|
print_cls_from_init_screen:
|
|
jsr print_cls
|
|
// [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
|
|
__b1_from_init_screen:
|
|
// [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b1
|
|
// [32] phi from init_screen::@1 to init_screen::@1 [phi:init_screen::@1->init_screen::@1]
|
|
__b1_from___b1:
|
|
// [32] phi init_screen::l#2 = init_screen::l#1 [phi:init_screen::@1->init_screen::@1#0] -- register_copy
|
|
jmp __b1
|
|
// init_screen::@1
|
|
__b1:
|
|
// [33] ((char *) 55296)[init_screen::l#2] = init_screen::WHITE -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #WHITE
|
|
sta $d800,x
|
|
// [34] init_screen::l#1 = ++ init_screen::l#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [35] if(init_screen::l#1!=$28) goto init_screen::@1 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #$28
|
|
bne __b1_from___b1
|
|
// [36] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
|
|
__b2_from___b1:
|
|
// [36] phi init_screen::m#2 = 0 [phi:init_screen::@1->init_screen::@2#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [36] phi init_screen::COLS#3 = (char *) 55296 [phi:init_screen::@1->init_screen::@2#1] -- pbuz1=pbuc1
|
|
lda #<$d800
|
|
sta.z COLS
|
|
lda #>$d800
|
|
sta.z COLS+1
|
|
jmp __b2
|
|
// [36] phi from init_screen::@2 to init_screen::@2 [phi:init_screen::@2->init_screen::@2]
|
|
__b2_from___b2:
|
|
// [36] phi init_screen::m#2 = init_screen::m#1 [phi:init_screen::@2->init_screen::@2#0] -- register_copy
|
|
// [36] phi init_screen::COLS#3 = init_screen::COLS#1 [phi:init_screen::@2->init_screen::@2#1] -- register_copy
|
|
jmp __b2
|
|
// init_screen::@2
|
|
__b2:
|
|
// [37] *init_screen::COLS#3 = init_screen::WHITE -- _deref_pbuz1=vbuc1
|
|
lda #WHITE
|
|
ldy #0
|
|
sta (COLS),y
|
|
// [38] init_screen::COLS#3[1] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
lda #WHITE
|
|
ldy #1
|
|
sta (COLS),y
|
|
// [39] init_screen::COLS#3[2] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
lda #WHITE
|
|
ldy #2
|
|
sta (COLS),y
|
|
// [40] init_screen::COLS#3[3] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
lda #WHITE
|
|
ldy #3
|
|
sta (COLS),y
|
|
// [41] init_screen::COLS#1 = init_screen::COLS#3 + $28 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$28
|
|
clc
|
|
adc.z COLS
|
|
sta.z COLS
|
|
bcc !+
|
|
inc.z COLS+1
|
|
!:
|
|
// [42] init_screen::m#1 = ++ init_screen::m#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [43] if(init_screen::m#1!=$19) goto init_screen::@2 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #$19
|
|
bne __b2_from___b2
|
|
jmp __breturn
|
|
// init_screen::@return
|
|
__breturn:
|
|
// [44] return
|
|
rts
|
|
}
|
|
// print_schar_at
|
|
// Print a signed char as hex at a specific screen position
|
|
// void print_schar_at(__zp(6) signed char b, __zp(2) char *at)
|
|
print_schar_at: {
|
|
.label b = 6
|
|
.label at = 2
|
|
// [46] if(print_schar_at::b#4<0) goto print_schar_at::@1 -- vbsz1_lt_0_then_la1
|
|
lda.z b
|
|
bmi __b1
|
|
jmp __b3
|
|
// print_schar_at::@3
|
|
__b3:
|
|
// [47] print_char_at::at#1 = print_schar_at::at#3
|
|
// [48] call print_char_at
|
|
// [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at]
|
|
print_char_at_from___b3:
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
jsr print_char_at
|
|
// [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2]
|
|
__b2_from___b3:
|
|
__b2_from___b4:
|
|
// [49] phi print_schar_at::b#6 = print_schar_at::b#4 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2#0] -- register_copy
|
|
jmp __b2
|
|
// print_schar_at::@2
|
|
__b2:
|
|
// [50] print_uchar_at::at#0 = print_schar_at::at#3 + 1 -- pbuz1=pbuz1_plus_1
|
|
inc.z print_uchar_at.at
|
|
bne !+
|
|
inc.z print_uchar_at.at+1
|
|
!:
|
|
// [51] print_uchar_at::b#0 = (char)print_schar_at::b#6
|
|
// [52] call print_uchar_at
|
|
jsr print_uchar_at
|
|
jmp __breturn
|
|
// print_schar_at::@return
|
|
__breturn:
|
|
// [53] return
|
|
rts
|
|
// print_schar_at::@1
|
|
__b1:
|
|
// [54] print_char_at::at#0 = print_schar_at::at#3
|
|
// [55] call print_char_at
|
|
// [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at]
|
|
print_char_at_from___b1:
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1
|
|
ldx #'-'
|
|
jsr print_char_at
|
|
jmp __b4
|
|
// print_schar_at::@4
|
|
__b4:
|
|
// [56] print_schar_at::b#0 = - print_schar_at::b#4 -- vbsz1=_neg_vbsz1
|
|
lda.z b
|
|
eor #$ff
|
|
clc
|
|
adc #1
|
|
sta.z b
|
|
jmp __b2_from___b4
|
|
}
|
|
// fmul8
|
|
// __register(A) signed char fmul8(__zp($c) volatile signed char aa, __zp($b) volatile signed char bb)
|
|
fmul8: {
|
|
.label aa = $c
|
|
.label bb = $b
|
|
.label cc = 7
|
|
// [57] fmul8::cc = 0 -- vbsz1=vbsc1
|
|
lda #0
|
|
sta.z cc
|
|
// asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
lda aa
|
|
sta A1+1
|
|
eor #$ff
|
|
sta A2+1
|
|
ldx bb
|
|
sec
|
|
A1:
|
|
lda mulf_sqr1,x
|
|
A2:
|
|
sbc mulf_sqr2,x
|
|
sta cc
|
|
// [59] fmul8::return#1 = fmul8::cc -- vbsaa=vbsz1
|
|
lda.z cc
|
|
jmp __breturn
|
|
// fmul8::@return
|
|
__breturn:
|
|
// [60] fmul8::return#2 = fmul8::return#1
|
|
// [61] return
|
|
rts
|
|
}
|
|
// print_cls
|
|
// Clear the screen. Also resets current line/char cursor.
|
|
print_cls: {
|
|
// [63] call memset
|
|
// [77] phi from print_cls to memset [phi:print_cls->memset]
|
|
memset_from_print_cls:
|
|
jsr memset
|
|
jmp __breturn
|
|
// print_cls::@return
|
|
__breturn:
|
|
// [64] return
|
|
rts
|
|
}
|
|
// print_char_at
|
|
// Print a single char
|
|
// void print_char_at(__register(X) char ch, __zp(2) char *at)
|
|
print_char_at: {
|
|
.label at = 2
|
|
// [66] *print_char_at::at#4 = print_char_at::ch#4 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (at),y
|
|
jmp __breturn
|
|
// print_char_at::@return
|
|
__breturn:
|
|
// [67] return
|
|
rts
|
|
}
|
|
// print_uchar_at
|
|
// Print a char as HEX at a specific position
|
|
// void print_uchar_at(__zp(6) char b, __zp(2) char *at)
|
|
print_uchar_at: {
|
|
.label b = 6
|
|
.label at = 2
|
|
// [68] print_uchar_at::$0 = print_uchar_at::b#0 >> 4 -- vbuaa=vbuz1_ror_4
|
|
lda.z b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// [69] print_char_at::ch#2 = print_hextab[print_uchar_at::$0] -- vbuxx=pbuc1_derefidx_vbuaa
|
|
tay
|
|
ldx print_hextab,y
|
|
// [70] print_char_at::at#2 = print_uchar_at::at#0
|
|
// [71] call print_char_at
|
|
// Table of hexadecimal digits
|
|
// [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at]
|
|
print_char_at_from_print_uchar_at:
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
jmp __b1
|
|
// print_uchar_at::@1
|
|
__b1:
|
|
// [72] print_uchar_at::$2 = print_uchar_at::b#0 & $f -- vbuyy=vbuz1_band_vbuc1
|
|
lda #$f
|
|
and.z b
|
|
tay
|
|
// [73] print_char_at::at#3 = print_uchar_at::at#0 + 1 -- pbuz1=pbuz1_plus_1
|
|
inc.z print_char_at.at
|
|
bne !+
|
|
inc.z print_char_at.at+1
|
|
!:
|
|
// [74] print_char_at::ch#3 = print_hextab[print_uchar_at::$2] -- vbuxx=pbuc1_derefidx_vbuyy
|
|
ldx print_hextab,y
|
|
// [75] call print_char_at
|
|
// [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at]
|
|
print_char_at_from___b1:
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
jmp __breturn
|
|
// print_uchar_at::@return
|
|
__breturn:
|
|
// [76] return
|
|
rts
|
|
}
|
|
// memset
|
|
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
|
// void * memset(void *str, char c, unsigned int num)
|
|
memset: {
|
|
.const c = ' '
|
|
.const num = $3e8
|
|
.label str = print_screen
|
|
.label end = str+num
|
|
.label dst = 4
|
|
// [78] phi from memset to memset::@1 [phi:memset->memset::@1]
|
|
__b1_from_memset:
|
|
// [78] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
|
|
lda #<str
|
|
sta.z dst
|
|
lda #>str
|
|
sta.z dst+1
|
|
jmp __b1
|
|
// memset::@1
|
|
__b1:
|
|
// [79] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z dst+1
|
|
cmp #>end
|
|
bne __b2
|
|
lda.z dst
|
|
cmp #<end
|
|
bne __b2
|
|
jmp __breturn
|
|
// memset::@return
|
|
__breturn:
|
|
// [80] return
|
|
rts
|
|
// memset::@2
|
|
__b2:
|
|
// [81] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
|
|
lda #c
|
|
ldy #0
|
|
sta (dst),y
|
|
// [82] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [78] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
|
|
__b1_from___b2:
|
|
// [78] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
print_hextab: .text "0123456789abcdef"
|
|
vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f
|
|
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
|
// f(x) = >(( x * x ))
|
|
.align $100
|
|
mulf_sqr1:
|
|
.for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((i*i)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
|
|
.if(i>351) { .byte round(((512-i)*(512-i))/256) }
|
|
}
|
|
|
|
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
|
.align $100
|
|
mulf_sqr2:
|
|
.for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
|
|
.if(i>351) { .byte round(((i-511)*(i-511))/256) }
|
|
}
|
|
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #WHITE
|
|
Removing instruction lda #WHITE
|
|
Removing instruction lda #WHITE
|
|
Removing instruction lda.z cc
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label __b1_from___b5 with __b1
|
|
Replacing label __b3_from___b8 with __b3
|
|
Replacing label __b2_from___b4 with __b2
|
|
Replacing label __b1_from___b1 with __b1
|
|
Replacing label __b2_from___b2 with __b2
|
|
Replacing label __b2_from___b4 with __b2
|
|
Removing instruction __b1_from___b5:
|
|
Removing instruction __b2_from___b4:
|
|
Removing instruction __b3_from___b8:
|
|
Removing instruction __b1_from___b1:
|
|
Removing instruction __b2_from___b2:
|
|
Removing instruction print_char_at_from___b3:
|
|
Removing instruction __b2_from___b3:
|
|
Removing instruction __b2_from___b4:
|
|
Removing instruction print_char_at_from___b1:
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
|
Removing instruction init_screen_from_main:
|
|
Removing instruction __b1_from_main:
|
|
Removing instruction print_schar_at_from___b1:
|
|
Removing instruction __b5:
|
|
Removing instruction __b2_from___b5:
|
|
Removing instruction print_schar_at_from___b2:
|
|
Removing instruction __b6:
|
|
Removing instruction __b3_from___b6:
|
|
Removing instruction __b7:
|
|
Removing instruction print_schar_at_from___b7:
|
|
Removing instruction __b8:
|
|
Removing instruction __b4:
|
|
Removing instruction __breturn:
|
|
Removing instruction print_cls_from_init_screen:
|
|
Removing instruction __b1_from_init_screen:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b3:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b4:
|
|
Removing instruction __breturn:
|
|
Removing instruction memset_from_print_cls:
|
|
Removing instruction __breturn:
|
|
Removing instruction __breturn:
|
|
Removing instruction print_char_at_from_print_uchar_at:
|
|
Removing instruction __b1:
|
|
Removing instruction print_char_at_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from_memset:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from___b2:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #9
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
|
|
FINAL SYMBOL TABLE
|
|
__constant char RADIX::BINARY = 2
|
|
__constant char RADIX::DECIMAL = $a
|
|
__constant char RADIX::HEXADECIMAL = $10
|
|
__constant char RADIX::OCTAL = 8
|
|
signed char fmul8(volatile signed char aa , volatile signed char bb)
|
|
__loadstore volatile signed char fmul8::aa // zp[1]:12 33.666666666666664
|
|
__loadstore volatile signed char fmul8::bb // zp[1]:11 50.5
|
|
__loadstore volatile signed char fmul8::cc // zp[1]:7 1001.0
|
|
signed char fmul8::return
|
|
signed char fmul8::return#0 // reg byte a 202.0
|
|
signed char fmul8::return#1 // reg byte a 2002.0
|
|
signed char fmul8::return#2 // reg byte a 367.33333333333337
|
|
void init_screen()
|
|
char *init_screen::COLS
|
|
char *init_screen::COLS#1 // COLS zp[2]:2 67.33333333333333
|
|
char *init_screen::COLS#3 // COLS zp[2]:2 121.2
|
|
__constant char init_screen::WHITE = 1
|
|
char init_screen::l
|
|
char init_screen::l#1 // reg byte x 151.5
|
|
char init_screen::l#2 // reg byte x 151.5
|
|
char init_screen::m
|
|
char init_screen::m#1 // reg byte x 151.5
|
|
char init_screen::m#2 // reg byte x 33.666666666666664
|
|
void main()
|
|
char *main::at
|
|
char *main::at#1 // at zp[2]:17 7.333333333333333
|
|
char *main::at#12 // at_2 zp[2]:8 22.0
|
|
char *main::at#2 // at_1 zp[2]:13 2.3157894736842106
|
|
char *main::at#3 // at_2 zp[2]:8 27.545454545454547
|
|
char *main::at#4 // at zp[2]:17 8.25
|
|
char *main::at#6 // at_2 zp[2]:8 213.0
|
|
char *main::at_line
|
|
char *main::at_line#2 // at_line zp[2]:13 22.0
|
|
char main::i
|
|
char main::i#1 // i zp[1]:15 16.5
|
|
char main::i#2 // i zp[1]:15 7.444444444444445
|
|
char main::j
|
|
char main::j#1 // j zp[1]:10 151.5
|
|
char main::j#2 // j zp[1]:10 30.299999999999997
|
|
char main::k
|
|
char main::k#1 // k zp[1]:16 16.5
|
|
char main::k#2 // k zp[1]:16 6.6000000000000005
|
|
signed char main::r
|
|
signed char main::r#0 // reg byte a 202.0
|
|
void * memset(void *str , char c , unsigned int num)
|
|
char memset::c
|
|
__constant char memset::c#0 = ' ' // c
|
|
char *memset::dst
|
|
char *memset::dst#1 // dst zp[2]:4 20002.0
|
|
char *memset::dst#2 // dst zp[2]:4 13334.666666666666
|
|
char *memset::end
|
|
__constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end
|
|
unsigned int memset::num
|
|
__constant unsigned int memset::num#0 = $3e8 // num
|
|
void *memset::return
|
|
void *memset::str
|
|
__constant void *memset::str#0 = (void *)print_screen#0 // str
|
|
__constant char mulf_sqr1[$200] = kickasm {{ .for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((i*i)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
|
|
.if(i>351) { .byte round(((512-i)*(512-i))/256) }
|
|
}
|
|
}}
|
|
__constant char mulf_sqr2[$200] = kickasm {{ .for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
|
|
.if(i>351) { .byte round(((i-511)*(i-511))/256) }
|
|
}
|
|
}}
|
|
void print_char_at(char ch , char *at)
|
|
char *print_char_at::at
|
|
char *print_char_at::at#0 // at zp[2]:2 2002.0
|
|
char *print_char_at::at#1 // at zp[2]:2 2002.0
|
|
char *print_char_at::at#2 // at zp[2]:2 20002.0
|
|
char *print_char_at::at#3 // at zp[2]:2 10001.0
|
|
char *print_char_at::at#4 // at zp[2]:2 122005.0
|
|
char print_char_at::ch
|
|
char print_char_at::ch#2 // reg byte x 10001.0
|
|
char print_char_at::ch#3 // reg byte x 20002.0
|
|
char print_char_at::ch#4 // reg byte x 120003.0
|
|
void print_cls()
|
|
__constant const char print_hextab[] = "0123456789abcdef"z
|
|
void print_schar_at(signed char b , char *at)
|
|
char *print_schar_at::at
|
|
char *print_schar_at::at#0 // at zp[2]:2 22.0
|
|
char *print_schar_at::at#1 // at zp[2]:2 22.0
|
|
char *print_schar_at::at#2 // at zp[2]:2 202.0
|
|
char *print_schar_at::at#3 // at zp[2]:2 390.75
|
|
signed char print_schar_at::b
|
|
signed char print_schar_at::b#0 // b zp[1]:6 2002.0
|
|
signed char print_schar_at::b#1 // b zp[1]:6 11.0
|
|
signed char print_schar_at::b#2 // b zp[1]:6 11.0
|
|
signed char print_schar_at::b#3 // b zp[1]:6 101.0
|
|
signed char print_schar_at::b#4 // b zp[1]:6 521.0
|
|
signed char print_schar_at::b#6 // b zp[1]:6 1001.0
|
|
char *print_screen
|
|
__constant char *print_screen#0 = (char *) 1024 // print_screen
|
|
void print_uchar_at(char b , char *at)
|
|
char print_uchar_at::$0 // reg byte a 20002.0
|
|
char print_uchar_at::$2 // reg byte y 10001.0
|
|
char *print_uchar_at::at
|
|
char *print_uchar_at::at#0 // at zp[2]:2 3000.4285714285716
|
|
char print_uchar_at::b
|
|
char print_uchar_at::b#0 // b zp[1]:6 4200.6
|
|
__constant signed char vals[] = { -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f }
|
|
|
|
zp[1]:16 [ main::k#2 main::k#1 ]
|
|
zp[2]:17 [ main::at#4 main::at#1 ]
|
|
zp[2]:13 [ main::at_line#2 main::at#2 ]
|
|
zp[1]:15 [ main::i#2 main::i#1 ]
|
|
zp[2]:8 [ main::at#6 main::at#3 main::at#12 ]
|
|
zp[1]:10 [ main::j#2 main::j#1 ]
|
|
reg byte x [ init_screen::l#2 init_screen::l#1 ]
|
|
reg byte x [ init_screen::m#2 init_screen::m#1 ]
|
|
zp[2]:2 [ print_schar_at::at#3 print_schar_at::at#0 print_schar_at::at#1 print_schar_at::at#2 print_char_at::at#4 print_char_at::at#0 print_char_at::at#1 print_char_at::at#2 print_char_at::at#3 print_uchar_at::at#0 init_screen::COLS#3 init_screen::COLS#1 ]
|
|
zp[1]:6 [ print_schar_at::b#6 print_schar_at::b#0 print_schar_at::b#4 print_schar_at::b#1 print_schar_at::b#2 print_schar_at::b#3 print_uchar_at::b#0 ]
|
|
reg byte x [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
|
|
zp[2]:4 [ memset::dst#2 memset::dst#1 ]
|
|
zp[1]:12 [ fmul8::aa ]
|
|
zp[1]:11 [ fmul8::bb ]
|
|
reg byte a [ fmul8::return#0 ]
|
|
reg byte a [ main::r#0 ]
|
|
zp[1]:7 [ fmul8::cc ]
|
|
reg byte a [ fmul8::return#1 ]
|
|
reg byte a [ fmul8::return#2 ]
|
|
reg byte a [ print_uchar_at::$0 ]
|
|
reg byte y [ print_uchar_at::$2 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 10748
|
|
|
|
// File Comments
|
|
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
|
|
// Multiplies two signed 8-bit numbers and results in an 8-bit number
|
|
// C=A*B, A in [-64;64], B in [-96;95], C in [-96;95] - 64 acts a 1 (X*64=X)
|
|
// Uses the formula a*b = (a+b)^2/4 - (a-b)^2/4
|
|
// See the following for information about the method
|
|
// - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
|
// - http://codebase64.org/doku.php?id=magazines:chacking16
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="fastmultiply8.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(main)
|
|
// Global Constants & labels
|
|
.label print_screen = $400
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.label at = $11
|
|
.label k = $10
|
|
.label at_1 = $d
|
|
.label at_2 = 8
|
|
.label j = $a
|
|
.label i = $f
|
|
.label at_line = $d
|
|
// init_screen()
|
|
// [1] call init_screen
|
|
// [30] phi from main to init_screen [phi:main->init_screen]
|
|
jsr init_screen
|
|
// [2] phi from main to main::@1 [phi:main->main::@1]
|
|
// [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<$400+4
|
|
sta.z at
|
|
lda #>$400+4
|
|
sta.z at+1
|
|
// [2] phi main::k#2 = 0 [phi:main->main::@1#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z k
|
|
// [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
|
|
// [2] phi main::at#4 = main::at#1 [phi:main::@5->main::@1#0] -- register_copy
|
|
// [2] phi main::k#2 = main::k#1 [phi:main::@5->main::@1#1] -- register_copy
|
|
// main::@1
|
|
__b1:
|
|
// print_schar_at(vals[k], at)
|
|
// [3] print_schar_at::b#1 = vals[main::k#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z k
|
|
lda vals,y
|
|
sta.z print_schar_at.b
|
|
// [4] print_schar_at::at#0 = main::at#4 -- pbuz1=pbuz2
|
|
lda.z at
|
|
sta.z print_schar_at.at
|
|
lda.z at+1
|
|
sta.z print_schar_at.at+1
|
|
// [5] call print_schar_at
|
|
// [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at]
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
// main::@5
|
|
// at += 4
|
|
// [6] main::at#1 = main::at#4 + 4 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #4
|
|
clc
|
|
adc.z at
|
|
sta.z at
|
|
bcc !+
|
|
inc.z at+1
|
|
!:
|
|
// for(char k: 0..8)
|
|
// [7] main::k#1 = ++ main::k#2 -- vbuz1=_inc_vbuz1
|
|
inc.z k
|
|
// [8] if(main::k#1!=9) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #9
|
|
cmp.z k
|
|
bne __b1
|
|
// [9] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
|
|
// [9] phi main::i#2 = 0 [phi:main::@5->main::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z i
|
|
// [9] phi main::at_line#2 = (char *) 1024 [phi:main::@5->main::@2#1] -- pbuz1=pbuc1
|
|
lda #<$400
|
|
sta.z at_line
|
|
lda #>$400
|
|
sta.z at_line+1
|
|
// [9] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
|
|
// [9] phi main::i#2 = main::i#1 [phi:main::@4->main::@2#0] -- register_copy
|
|
// [9] phi main::at_line#2 = main::at#2 [phi:main::@4->main::@2#1] -- register_copy
|
|
// main::@2
|
|
__b2:
|
|
// at_line +=40
|
|
// [10] main::at#2 = main::at_line#2 + $28 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$28
|
|
clc
|
|
adc.z at_1
|
|
sta.z at_1
|
|
bcc !+
|
|
inc.z at_1+1
|
|
!:
|
|
// print_schar_at(vals[i], at)
|
|
// [11] print_schar_at::b#2 = vals[main::i#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z i
|
|
lda vals,y
|
|
sta.z print_schar_at.b
|
|
// [12] print_schar_at::at#1 = main::at#2 -- pbuz1=pbuz2
|
|
lda.z at_1
|
|
sta.z print_schar_at.at
|
|
lda.z at_1+1
|
|
sta.z print_schar_at.at+1
|
|
// [13] call print_schar_at
|
|
// [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at]
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
// main::@6
|
|
// [14] main::at#12 = main::at#2 -- pbuz1=pbuz2
|
|
lda.z at_1
|
|
sta.z at_2
|
|
lda.z at_1+1
|
|
sta.z at_2+1
|
|
// [15] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
|
|
// [15] phi main::j#2 = 0 [phi:main::@6->main::@3#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z j
|
|
// [15] phi main::at#6 = main::at#12 [phi:main::@6->main::@3#1] -- register_copy
|
|
// [15] phi from main::@8 to main::@3 [phi:main::@8->main::@3]
|
|
// [15] phi main::j#2 = main::j#1 [phi:main::@8->main::@3#0] -- register_copy
|
|
// [15] phi main::at#6 = main::at#3 [phi:main::@8->main::@3#1] -- register_copy
|
|
// main::@3
|
|
__b3:
|
|
// at += 4
|
|
// [16] main::at#3 = main::at#6 + 4 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #4
|
|
clc
|
|
adc.z at_2
|
|
sta.z at_2
|
|
bcc !+
|
|
inc.z at_2+1
|
|
!:
|
|
// signed char r = fmul8(vals[i], vals[j])
|
|
// [17] fmul8::aa = vals[main::i#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z i
|
|
lda vals,y
|
|
sta.z fmul8.aa
|
|
// [18] fmul8::bb = vals[main::j#2] -- vbsz1=pbsc1_derefidx_vbuz2
|
|
ldy.z j
|
|
lda vals,y
|
|
sta.z fmul8.bb
|
|
// [19] call fmul8
|
|
jsr fmul8
|
|
// [20] fmul8::return#0 = fmul8::return#2
|
|
// main::@7
|
|
// [21] main::r#0 = fmul8::return#0
|
|
// print_schar_at(r, at)
|
|
// [22] print_schar_at::b#3 = main::r#0 -- vbsz1=vbsaa
|
|
sta.z print_schar_at.b
|
|
// [23] print_schar_at::at#2 = main::at#3 -- pbuz1=pbuz2
|
|
lda.z at_2
|
|
sta.z print_schar_at.at
|
|
lda.z at_2+1
|
|
sta.z print_schar_at.at+1
|
|
// [24] call print_schar_at
|
|
// [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at]
|
|
// [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy
|
|
// [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy
|
|
jsr print_schar_at
|
|
// main::@8
|
|
// for(char j: 0..8)
|
|
// [25] main::j#1 = ++ main::j#2 -- vbuz1=_inc_vbuz1
|
|
inc.z j
|
|
// [26] if(main::j#1!=9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #9
|
|
cmp.z j
|
|
bne __b3
|
|
// main::@4
|
|
// for(char i: 0..8)
|
|
// [27] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z i
|
|
// [28] if(main::i#1!=9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
|
|
cmp.z i
|
|
bne __b2
|
|
// main::@return
|
|
// }
|
|
// [29] return
|
|
rts
|
|
}
|
|
// init_screen
|
|
init_screen: {
|
|
.const WHITE = 1
|
|
.label COLS = 2
|
|
// print_cls()
|
|
// [31] call print_cls
|
|
// [62] phi from init_screen to print_cls [phi:init_screen->print_cls]
|
|
jsr print_cls
|
|
// [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
|
|
// [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [32] phi from init_screen::@1 to init_screen::@1 [phi:init_screen::@1->init_screen::@1]
|
|
// [32] phi init_screen::l#2 = init_screen::l#1 [phi:init_screen::@1->init_screen::@1#0] -- register_copy
|
|
// init_screen::@1
|
|
__b1:
|
|
// COLS[l] = WHITE
|
|
// [33] ((char *) 55296)[init_screen::l#2] = init_screen::WHITE -- pbuc1_derefidx_vbuxx=vbuc2
|
|
lda #WHITE
|
|
sta $d800,x
|
|
// for(char l: 0..39)
|
|
// [34] init_screen::l#1 = ++ init_screen::l#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [35] if(init_screen::l#1!=$28) goto init_screen::@1 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #$28
|
|
bne __b1
|
|
// [36] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
|
|
// [36] phi init_screen::m#2 = 0 [phi:init_screen::@1->init_screen::@2#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [36] phi init_screen::COLS#3 = (char *) 55296 [phi:init_screen::@1->init_screen::@2#1] -- pbuz1=pbuc1
|
|
lda #<$d800
|
|
sta.z COLS
|
|
lda #>$d800
|
|
sta.z COLS+1
|
|
// [36] phi from init_screen::@2 to init_screen::@2 [phi:init_screen::@2->init_screen::@2]
|
|
// [36] phi init_screen::m#2 = init_screen::m#1 [phi:init_screen::@2->init_screen::@2#0] -- register_copy
|
|
// [36] phi init_screen::COLS#3 = init_screen::COLS#1 [phi:init_screen::@2->init_screen::@2#1] -- register_copy
|
|
// init_screen::@2
|
|
__b2:
|
|
// COLS[0] = WHITE
|
|
// [37] *init_screen::COLS#3 = init_screen::WHITE -- _deref_pbuz1=vbuc1
|
|
lda #WHITE
|
|
ldy #0
|
|
sta (COLS),y
|
|
// COLS[1] = WHITE
|
|
// [38] init_screen::COLS#3[1] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
ldy #1
|
|
sta (COLS),y
|
|
// COLS[2] = WHITE
|
|
// [39] init_screen::COLS#3[2] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
ldy #2
|
|
sta (COLS),y
|
|
// COLS[3] = WHITE
|
|
// [40] init_screen::COLS#3[3] = init_screen::WHITE -- pbuz1_derefidx_vbuc1=vbuc2
|
|
ldy #3
|
|
sta (COLS),y
|
|
// COLS += 40
|
|
// [41] init_screen::COLS#1 = init_screen::COLS#3 + $28 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #$28
|
|
clc
|
|
adc.z COLS
|
|
sta.z COLS
|
|
bcc !+
|
|
inc.z COLS+1
|
|
!:
|
|
// for(char m: 0..24)
|
|
// [42] init_screen::m#1 = ++ init_screen::m#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [43] if(init_screen::m#1!=$19) goto init_screen::@2 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #$19
|
|
bne __b2
|
|
// init_screen::@return
|
|
// }
|
|
// [44] return
|
|
rts
|
|
}
|
|
// print_schar_at
|
|
// Print a signed char as hex at a specific screen position
|
|
// void print_schar_at(__zp(6) signed char b, __zp(2) char *at)
|
|
print_schar_at: {
|
|
.label b = 6
|
|
.label at = 2
|
|
// if(b<0)
|
|
// [46] if(print_schar_at::b#4<0) goto print_schar_at::@1 -- vbsz1_lt_0_then_la1
|
|
lda.z b
|
|
bmi __b1
|
|
// print_schar_at::@3
|
|
// print_char_at(' ', at)
|
|
// [47] print_char_at::at#1 = print_schar_at::at#3
|
|
// [48] call print_char_at
|
|
// [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at]
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1
|
|
ldx #' '
|
|
jsr print_char_at
|
|
// [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2]
|
|
// [49] phi print_schar_at::b#6 = print_schar_at::b#4 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2#0] -- register_copy
|
|
// print_schar_at::@2
|
|
__b2:
|
|
// print_uchar_at((char)b, at+1)
|
|
// [50] print_uchar_at::at#0 = print_schar_at::at#3 + 1 -- pbuz1=pbuz1_plus_1
|
|
inc.z print_uchar_at.at
|
|
bne !+
|
|
inc.z print_uchar_at.at+1
|
|
!:
|
|
// [51] print_uchar_at::b#0 = (char)print_schar_at::b#6
|
|
// [52] call print_uchar_at
|
|
jsr print_uchar_at
|
|
// print_schar_at::@return
|
|
// }
|
|
// [53] return
|
|
rts
|
|
// print_schar_at::@1
|
|
__b1:
|
|
// print_char_at('-', at)
|
|
// [54] print_char_at::at#0 = print_schar_at::at#3
|
|
// [55] call print_char_at
|
|
// [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at]
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1
|
|
ldx #'-'
|
|
jsr print_char_at
|
|
// print_schar_at::@4
|
|
// b = -b
|
|
// [56] print_schar_at::b#0 = - print_schar_at::b#4 -- vbsz1=_neg_vbsz1
|
|
lda.z b
|
|
eor #$ff
|
|
clc
|
|
adc #1
|
|
sta.z b
|
|
jmp __b2
|
|
}
|
|
// fmul8
|
|
// __register(A) signed char fmul8(__zp($c) volatile signed char aa, __zp($b) volatile signed char bb)
|
|
fmul8: {
|
|
.label aa = $c
|
|
.label bb = $b
|
|
.label cc = 7
|
|
// signed char cc
|
|
// [57] fmul8::cc = 0 -- vbsz1=vbsc1
|
|
lda #0
|
|
sta.z cc
|
|
// asm
|
|
// asm { ldaaa staA1+1 eor#$ff staA2+1 ldxbb sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacc }
|
|
lda aa
|
|
sta A1+1
|
|
eor #$ff
|
|
sta A2+1
|
|
ldx bb
|
|
sec
|
|
A1:
|
|
lda mulf_sqr1,x
|
|
A2:
|
|
sbc mulf_sqr2,x
|
|
sta cc
|
|
// return cc;
|
|
// [59] fmul8::return#1 = fmul8::cc -- vbsaa=vbsz1
|
|
// fmul8::@return
|
|
// }
|
|
// [60] fmul8::return#2 = fmul8::return#1
|
|
// [61] return
|
|
rts
|
|
}
|
|
// print_cls
|
|
// Clear the screen. Also resets current line/char cursor.
|
|
print_cls: {
|
|
// memset(print_screen, ' ', 1000)
|
|
// [63] call memset
|
|
// [77] phi from print_cls to memset [phi:print_cls->memset]
|
|
jsr memset
|
|
// print_cls::@return
|
|
// }
|
|
// [64] return
|
|
rts
|
|
}
|
|
// print_char_at
|
|
// Print a single char
|
|
// void print_char_at(__register(X) char ch, __zp(2) char *at)
|
|
print_char_at: {
|
|
.label at = 2
|
|
// *(at) = ch
|
|
// [66] *print_char_at::at#4 = print_char_at::ch#4 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (at),y
|
|
// print_char_at::@return
|
|
// }
|
|
// [67] return
|
|
rts
|
|
}
|
|
// print_uchar_at
|
|
// Print a char as HEX at a specific position
|
|
// void print_uchar_at(__zp(6) char b, __zp(2) char *at)
|
|
print_uchar_at: {
|
|
.label b = 6
|
|
.label at = 2
|
|
// b>>4
|
|
// [68] print_uchar_at::$0 = print_uchar_at::b#0 >> 4 -- vbuaa=vbuz1_ror_4
|
|
lda.z b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// print_char_at(print_hextab[b>>4], at)
|
|
// [69] print_char_at::ch#2 = print_hextab[print_uchar_at::$0] -- vbuxx=pbuc1_derefidx_vbuaa
|
|
tay
|
|
ldx print_hextab,y
|
|
// [70] print_char_at::at#2 = print_uchar_at::at#0
|
|
// [71] call print_char_at
|
|
// Table of hexadecimal digits
|
|
// [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at]
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
// print_uchar_at::@1
|
|
// b&0xf
|
|
// [72] print_uchar_at::$2 = print_uchar_at::b#0 & $f -- vbuyy=vbuz1_band_vbuc1
|
|
lda #$f
|
|
and.z b
|
|
tay
|
|
// print_char_at(print_hextab[b&0xf], at+1)
|
|
// [73] print_char_at::at#3 = print_uchar_at::at#0 + 1 -- pbuz1=pbuz1_plus_1
|
|
inc.z print_char_at.at
|
|
bne !+
|
|
inc.z print_char_at.at+1
|
|
!:
|
|
// [74] print_char_at::ch#3 = print_hextab[print_uchar_at::$2] -- vbuxx=pbuc1_derefidx_vbuyy
|
|
ldx print_hextab,y
|
|
// [75] call print_char_at
|
|
// [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at]
|
|
// [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy
|
|
// [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
// print_uchar_at::@return
|
|
// }
|
|
// [76] return
|
|
rts
|
|
}
|
|
// memset
|
|
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
|
// void * memset(void *str, char c, unsigned int num)
|
|
memset: {
|
|
.const c = ' '
|
|
.const num = $3e8
|
|
.label str = print_screen
|
|
.label end = str+num
|
|
.label dst = 4
|
|
// [78] phi from memset to memset::@1 [phi:memset->memset::@1]
|
|
// [78] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
|
|
lda #<str
|
|
sta.z dst
|
|
lda #>str
|
|
sta.z dst+1
|
|
// memset::@1
|
|
__b1:
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [79] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
|
|
lda.z dst+1
|
|
cmp #>end
|
|
bne __b2
|
|
lda.z dst
|
|
cmp #<end
|
|
bne __b2
|
|
// memset::@return
|
|
// }
|
|
// [80] return
|
|
rts
|
|
// memset::@2
|
|
__b2:
|
|
// *dst = c
|
|
// [81] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
|
|
lda #c
|
|
ldy #0
|
|
sta (dst),y
|
|
// for(char* dst = str; dst!=end; dst++)
|
|
// [82] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
|
inc.z dst
|
|
bne !+
|
|
inc.z dst+1
|
|
!:
|
|
// [78] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
|
|
// [78] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
|
|
jmp __b1
|
|
}
|
|
// File Data
|
|
.segment Data
|
|
print_hextab: .text "0123456789abcdef"
|
|
vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f
|
|
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
|
// f(x) = >(( x * x ))
|
|
.align $100
|
|
mulf_sqr1:
|
|
.for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((i*i)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
|
|
.if(i>351) { .byte round(((512-i)*(512-i))/256) }
|
|
}
|
|
|
|
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
|
.align $100
|
|
mulf_sqr2:
|
|
.for(var i=0;i<$200;i++) {
|
|
.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
|
|
.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
|
|
.if(i>351) { .byte round(((i-511)*(i-511))/256) }
|
|
}
|
|
|
|
|